(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-25
(45)【発行日】2024-04-02
(54)【発明の名称】情報処理装置、情報処理方法及び情報処理プログラム
(51)【国際特許分類】
G06F 8/41 20180101AFI20240326BHJP
【FI】
G06F8/41 130
(21)【出願番号】P 2022551161
(86)(22)【出願日】2021-07-20
(86)【国際出願番号】 JP2021027109
(87)【国際公開番号】W WO2022064828
(87)【国際公開日】2022-03-31
【審査請求日】2023-02-13
(31)【優先権主張番号】P 2020162333
(32)【優先日】2020-09-28
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100109313
【氏名又は名称】机 昌彦
(74)【代理人】
【識別番号】100149618
【氏名又は名称】北嶋 啓至
(72)【発明者】
【氏名】北川 丈晴
【審査官】武田 広太郎
(56)【参考文献】
【文献】特開2020-061168(JP,A)
【文献】野村 達雄 ほか,ステンシル計算を対象とした大規模GPUクラスタ向け自動並列化フレームワーク,情報処理学会研究報告 平成22年度(5) [CD-ROM] ,日本,一般社団法人情報処理学会,2011年,pp. 1-9
【文献】池井 満 ほか,効率的なデータ並列ステンシル計算のためのマルチノード・メニーコアプロセッサ向けPGAS言語実行時システムの設計,電子情報通信学会論文誌D VolumeJ99-D No.2,日本,電子情報通信学会,2016年,pp. 138-151
【文献】KRISHNAMOORTHY, Sriram et al.,Effective Automatic Parallelization of Stencil Computations,ACM SIGPLAN Notices [online],2007年,Volume 42, issue 6,pp. 235-244,[検索日 2023.12.08], インターネット: <URL: https://doi.org/10.1145/1273442.1250761>
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/41
G06F 17/16
(57)【特許請求の範囲】
【請求項1】
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出手段と、
前記ステンシル候補に含まれる多次元データの複数の要素を、当該多次元データを多次元空間にマッピングした場合の、前記複数の要素の位置の並びの形状であるステンシル形状を含む、前記ステンシル候補のステンシルパターンを生成する生成手段と、
検出した前記ステンシル候補に適用できるモジュール
を、前記ステンシルパターンに基づいて抽出し、前記モジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定手段と、
を備える情報処理装置。
【請求項2】
前記ステンシル箇所に適用できる前記モジュールが特定された場合、前記プログラムの前記ステンシル箇所を、前記モジュールを使用するように変更する変更手段
をさらに備える請求項1に記載の情報処理装置。
【請求項3】
前記生成手段は、前記ステンシル候補に含まれる、前記複数の要素の式の形状を更に含む前記ステンシルパターンを生成する
請求項
1又は2に記載の情報処理装置。
【請求項4】
前記ステンシル形状の情報を出力するパターン情報手段
をさらに備える請求項
1乃至3のいずれか1項に記載の情報処理装置。
【請求項5】
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出手段と、
検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定手段と、
前記プログラムにおいて検出された前記ステンシル箇所の情報を出力するステンシル情報出力手段
と、
を備え
る情報処理装置。
【請求項6】
前記ステンシル情報出力手段は、前記ステンシル箇所の情報として、特定された前記モジュールの情報を出力する
請求項
5に記載の情報処理装置。
【請求項7】
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出し、
前記ステンシル候補に含まれる多次元データの複数の要素を、当該多次元データを多次元空間にマッピングした場合の、前記複数の要素の位置の並びの形状であるステンシル形状を含む、前記ステンシル候補のステンシルパターンを生成し、
検出した前記ステンシル候補に適用できるモジュール
を、前記ステンシルパターンに基づいて抽出し、前記モジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する、
情報処理方法。
【請求項8】
前記ステンシル箇所に適用できる前記モジュールが特定された場合、前記プログラムの前記ステンシル箇所を、前記モジュールを使用するように変更する
請求項
7に記載の情報処理方法。
【請求項9】
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出処理と、
前記ステンシル候補に含まれる多次元データの複数の要素を、当該多次元データを多次元空間にマッピングした場合の、前記複数の要素の位置の並びの形状であるステンシル形状を含む、前記ステンシル候補のステンシルパターンを生成する生成処理と、
検出した前記ステンシル候補に適用できるモジュール
を、前記ステンシルパターンに基づいて抽出し、前記モジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定処理と、
をコンピュータに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報を処理する技術に関する。
【背景技術】
【0002】
一次元当たりの要素数が多い多次元データから、同様の多次元データの結果を算出する処理において、各要素の値の算出に、多次元データを表す多次元空間において、値が算出される要素の周囲の要素の値が使用されることが少なくない。以下、値の算出を行う要素を、対象要素と表記する。対象要素の値の算出に値が使用される周囲の要素は、上述の多次元空間において、対象要素を中心とする所定の形状で分布することがある。その形状は、多次元データが表す対象の種類、処理の内容、及び、算出される値の種類等に応じた、様々な形状になりうる。
【0003】
以下の説明では、対象要素の値の算出に使用される、多次元空間内の要素の分布の形状を、ステンシル形状と表記する。プログラムのソースコードにおいて、そのようなステンシル形状の要素の値を使用する部分を、ステンシル箇所と表記する。
【0004】
特許文献1には、プログラムコードを、プログラマブルな画像処理ハードウェアプラットフォームにマッピングするコンパイラ技術が記載されている。特許文献1には、プログラマブルステンシルプロセッサが、そのような画像処理ハードウェアプラットフォームのプロセッサとして記載されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
プラットフォームによっては、ステンシル箇所の処理を高速化できるライブラリが用意されている場合がある。そのようなプラットフォームにおいて、ソースコードに上述のステンシル箇所を含む可能性がある、過去に作成された膨大なプログラム群を動作させる場合、処理の高速化のためには、ソースコードにおいてステンシル箇所を見つける必要がある。そして、見つけ出したステンシル箇所を、適切なモジュールを使用するように書き換える必要がある。そのような処理は、例えば手作業で行われる。
【0007】
その場合、例えば、そのプログラムが使用される分野の知識、及び、その分野においてプログラムを過去に最適化した際の経験などに基づいて、最適化の効果が高そうなプログラムが選択される。そして、選択されたプログラムの中で、ステンシル箇所の探索が、例えば手作業によって行われる。そのような知識や経験が無い場合は、例えば全てのプログラムが試しに実行される。そして、計算負荷の高いプログラムを選択される。選択されたたプログラム中で、ステンシル箇所の探索が、ファイル1つ1つに対して、例えば手作業によって行われる。手作業によりステンシル箇所が発見され、そのステンシル箇所に対して適切なステンシルライブラリが存在すれば、ソースコードが手作業で書き換えられる。
【0008】
このように、ソースコードがステンシルライブラリの利用を前提に記述されていないプログラムに、ステンシルライブラリを利用するためには、膨大な手作業が必要であった。
【0009】
特許文献1の技術では、ステンシルプロセッサによる高速化は可能であるが、プログラムのステンシル箇所の検出を高速化することはできない。
【0010】
本開示の目的の1つは、プログラムのステンシル箇所の検出を高速化する情報処理装置を提供することである。
【課題を解決するための手段】
【0011】
本開示の一態様に係る情報処理装置は、プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出手段と、検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定手段と、を備える。
【0012】
本開示の一態様に係る情報処理方法は、プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出し、検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する。
【0013】
本開示の一態様に係る情報処理プログラムは、プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出処理と、検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定処理と、をコンピュータに実行させる。本開示の一態様は、上述の情報処理プログラムを記憶する記憶媒体によっても実現される。
【発明の効果】
【0014】
本開示には、プログラムのステンシル箇所の検出を高速化できるという効果がある。
【図面の簡単な説明】
【0015】
【
図1】
図1は、本開示の第1の実施形態に係る情報処理装置の構成の例を表すブロック図である。
【
図2】
図2は、本開示の第1の実施形態に係る情報処理装置の動作の例を表すフローチャートである。
【
図3】
図3は、本開示の第2の実施形態に情報処理装置の構成の例を表すブロック図である。
【
図4】
図4は、本開示の第2の実施形態に係る情報処理装置の動作の例を表すフローチャートである。
【
図5】
図5は、本開示の第2の実施形態に係る情報処理装置の、ステンシル特定処理の動作の例を表すフローチャートである。
【
図6】
図6は、本開示の第2の実施形態の変形例に係る情報処理装置の構成の例を表すブロック図である。
【
図7】
図7は、プログラムにおけるステンシル箇所の例を表す図である。
【
図8】
図8は、パターン情報の第1の例を表す図である。
【
図9】
図9は、パターン情報の第2の例を表す図である。
【
図10】
図10は、本開示の実施形態に係る情報処理装置を実現することができる、コンピュータのハードウェア構成の一例を表す図である。
【発明を実施するための形態】
【0016】
以下では、本開示の実施形態について、図面を使用して詳細に説明する。
【0017】
<第1の実施形態>
まず、本開示の第1の実施形態について、図面を使用して詳細に説明する。本実施形態は、本開示の基本的な実施形態である。
【0018】
<構成>
図1は、本開示の第1の実施形態に係る情報処理装置の構成の例を表すブロック図である。
【0019】
図1に示す例では、本実施形態に係る情報処理装置100は、検出部120と、特定部140と、を備える。検出部120は、プログラムの記述の特性に基づいて、プログラムのステンシル候補を検出する。特定部140は、検出した前記ステンシル箇所に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する。
【0020】
本開示の実施形態のプログラムは、一次元当たり複数の要素を含む複数の次元のデータである多次元データから、同様の多次元データの結果を算出する処理を含み得る。そして、そのような処理の記述において、各要素の値の算出に、多次元データを表す多次元空間において、値が算出される要素の位置の周囲の要素の値が使用され得る。そして、対象要素を変更しながら同様の処理が繰り返され得る。本開示の実施形態の説明でも、値の算出が行われる要素を、対象要素と表記する。また、対象要素の値の算出に使用される要素を、使用要素と表記する。なお、値が算出される要素の位置の周囲の要素は、対象要素の位置の要素と、対象要素とは異なる位置の要素とを含む。
【0021】
上述のプログラムの記述の特性は、例えば、多次元空間における位置の異なる複数の要素を用いる式によって表される演算を、対象要素を変更しながら繰り返す記述を含んでいることである。このような特性は、以下の第1の特性と第2の特性の組み合わせとして言い換えることができる。
【0022】
プログラミング言語では、プログラムは、一般に、演算の対象の要素を変更しながら繰り返す演算を記述する、繰り返しの記述の範囲(起点と終点)が特定できるように記述される。繰り返しの記述の方法は、プログラミング言語毎に定められている。上述の第1の特性は、繰り返しの記述(具体的には、繰り返しの記述の起点の記述と、その起点に対応する終点の記述)を含むことである。
【0023】
上述の第2の特性は、例えば、繰り返される演算を表す式(具体的には、繰り返しの起点の記述と繰り返しの終点の記述との間に記述される式)が、多次元空間における位置の異なる複数の要素を用いていることである。多次元空間における位置の異なる複数の要素を用いている記述とは、例えば、ベクトル、行列、又は、テンソルなどを表す配列の、異なる複数の要素を使用した演算の記述である。配列が変数によって記述され、その配列の要素がその変数と添え字(言い換えると、インデックス)とによって記述される場合、配列の、異なる複数の要素は、同じ変数と異なる添え字とによって記述される。上述の要素の位置は、添え字によって表される。対象要素と同じ位置の要素は、対象要素の添え字と、添え字が同一である要素を表す。異なる位置の要素は、対象要素の添え字と、少なくとも1つの添え字が異なる要素を表す。なお、上述の対象要素が含まれる配列と、上述の使用要素が含まれる配列は、同じであってもよい。対象要素が含まれる配列と、使用要素が含まれる配列は、異なっていてもよい。
【0024】
検出部120は、プログラムにおいて、繰り返しの処理が記述されている箇所を検出する。繰り返しの処理が記述されている箇所とは、繰り返しの起点を示す記述と、繰り返される演算を示す記述と、繰り返しの終点を示す記述とを含む。そして、検出部120は、繰り返しの処理が記述されている箇所が、例えばベクトル、行列、テンソルなどの配列の異なる複数の要素をそれぞれ表す変数の記述を含む場合に、その繰り返しの処理が記述されている箇所を、ステンシル箇所として特定する。
【0025】
上述のように、対象要素の値の算出に値が使用される周囲の要素は、上述の多次元空間において、対象要素の位置を中心とする所定の形状で分布することがある。その形状は、多次元データが表す対象の種類、処理の内容、及び、算出される値の種類等に応じた、様々な形状になりうる。
【0026】
本開示の実施形態の説明でも、対象要素の値の算出に使用される、多次元空間内の要素の分布の形状を、ステンシル形状と表記する。プログラムのソースコードにおいて、そのようなステンシル形状の要素の値を使用する部分を、ステンシル候補と表記する。なお、本開示の実施形態の説明において、「プログラム」との記述は、プログラムのソースコードを指す。また、プログラムを記述するプログラミング言語は、特定の言語に限定されない。
【0027】
ステンシル候補の特徴を、ステンシルパターンと表記する。ステンシルパターンは、例えば、ステンシル候補の記述が表す演算に使用される変数が指し示す多次元データの要素の、多次元空間における位置の分布の形状であるステンシル形状を含む。ステンシルパターンは、例えば、ステンシル候補の記述に含まれる、多次元データの要素を表す変数を用いる式の情報を含んでいてもよい。式の情報については後で詳細に説明する。
【0028】
ステンシルライブラリは、上述のステンシル形状の部分の処理と同様の処理を、モジュールとして含むライブラリである。モジュールは、特定の処理を行うプログラムの部品であり、例えば、関数又はサブルーチンなどの形で実装される。モジュールは、これらの例に限られず、プログラミング言語に応じた、様々な形で実装され得る。
【0029】
本開示の実施形態の説明では、ステンシルライブラリに同じ処理を行うモジュールが含まれているステンシル候補を、ステンシル箇所と表記する。言い換えると、ステンシル候補のうち、ステンシルライブラリのモジュールを使用するように書き換え可能な個所を、ステンシル箇所と表記する。モジュールをステンシル箇所に適用できるとは、ステンシル箇所の処理を、ステンシルライブラリのモジュールを使用するように書き換え可能であることを意味する。
【0030】
<動作>
次に、本実施形態の情報処理装置100の動作について、図面を使用して詳細に説明する。
【0031】
図2は、本開示の第1の実施形態に係る情報処理装置100の動作の例を表すフローチャートである。
図2に示す例では、まず、検出部120が、プログラムのステンシル箇所を検出する(ステップS11)。言い換えると、検出部120は、プログラムにおいて、ステンシル箇所の可能性があるパターンの記述が存在する部分を特定する。
【0032】
次に、特定部140が、検出したステンシル箇所に適用できるモジュールを、ステンシルライブラリにおいて特定する(ステップS12)。
【0033】
<効果>
本実施形態には、プログラムのステンシル箇所の検出を高速化できるという効果がある。その理由は、検出部120が、プログラムの記述の特性に基づいて、プログラムからステンシル候補を検出するからである。そして、特定部140が、検出したステンシル箇所に適用できるモジュールを、ステンシルライブラリにおいて特定する。これにより、プログラムのステンシル箇所の検出を高速化できる。
【0034】
<第2の実施形態>
次に、本開示の第2の実施形態について、図面を使用して詳細に説明する。
【0035】
<構成>
まず、本実施形態に係る情報処理装置の構成について説明する。
【0036】
図3は、本開示の第2の実施形態に情報処理装置の構成の例を表すブロック図である。
【0037】
図3に示す例では、本実施形態の情報処理装置101は、プログラム受付部110と、検出部120と、生成部130と、特定部140と、ライブラリ情報記憶部150と、変更部160と、プログラム出力部170とを含む。情報処理装置101は、さらに、ステンシル情報出力部171と、パターン情報出力部172と、指示受付部111と、修正部180とを含む。
【0038】
<プログラム受付部110>
プログラム受付部110は、プログラムを受け付ける。上述のように、本実施形態の説明では、「プログラム」との記述は、プログラムのソースコードを指す。プログラム受付部110は、受け取ったプログラムを検出部120に送出する。
【0039】
<検出部120>
検出部120は、プログラム受付部110からプログラムを受け取る。検出部120は、プログラム受付部110から受け取ったプログラムにおいて、第1の実施形態の検出部120と同様に、上述のプログラムの記述の特徴に基づいて、ステンシル候補を検出する。検出部120は、プログラムと、そのプログラムにおけるステンシル候補の範囲を表す情報とを、生成部130に送出する。
【0040】
検出部120は、例えば、ソースプログラムを機械語のコードに変換するコンパイラの技術のうち、構文解析の技術を使用して実現できる。
【0041】
<生成部130>
生成部130は、検出部120から、プログラムと、そのプログラムにおけるステンシル候補の範囲を表す情報とを受け取る。生成部130は、第1の実施形態の生成部130と同様に、ステンシル候補の、上述のステンシルパターンを生成する。ステンシルパターンは、ステンシル形状を含む。ステンシルパターンは、式の情報を含んでいてもよい。
【0042】
生成部130は、プログラムと、そのプログラムにおけるステンシル候補の範囲を表す情報と、ステンシルパターンを表す情報とを、特定部140に送出する。生成部130は、更に、ステンシルパターンの情報を、パターン情報出力部172に送出する。
【0043】
生成部130は、例えば、ソースプログラムを機械語のコードに変換するコンパイラの技術のうち、構文解析の技術を応用して実現できる。
【0044】
<ライブラリ情報記憶部150>
ライブラリ情報記憶部150は、ステンシルライブラリに含まれ、ステンシル箇所に適用できるモジュールの情報を記憶する。モジュールの情報は、そのモジュールを使用するためにプログラムに記述される記述を含む。モジュールの情報は、例えば、そのモジュールを適用できるステンシル箇所における、ステンシル形状の情報を含む。モジュールの情報は、例えば、モジュールを適用できるステンシル箇所に記載されている式の情報を含んでいてよい。
【0045】
式の情報は、例えば、式の形式の情報である。式の構造の情報は、例えば、式に含まれる変数と演算子との関係を表す式の構造と、式に含まれる変数が表す多次元データの要素の、対象要素を中心とする相対位置の情報と、を含んでいてよい。式の情報はこの例に限られない。また、モジュールの情報は、他の情報を含んでいてもよい。
【0046】
<特定部140>
特定部140は、生成部130から、プログラムと、そのプログラムにおけるステンシル候補の範囲を表す情報と、ステンシルパターンを表す情報とを受け取る。特定部140は、ステンシル候補のステンシルパターンと、モジュールのモジュール情報とに基づいて、ステンシル候補に適用できるモジュールを特定する。特定部140は、適用できるモジュールが特定されたステンシル候補を、ステンシル箇所として特定する。
【0047】
具体的には、特定部140は、例えば、ステンシル箇所のステンシルパターンに含まれるステンシル形状と、モジュール情報に含まれるステンシル形状とを比較する。特定部140は、ステンシル箇所のステンシル形状と同じステンシル形状をモジュール情報に含むモジュールを抽出する。特定部140は、抽出したモジュールの中で、ステンシル箇所のステンシルパターンに含まれる式の情報と、同じ式の情報をモジュール情報に含むモジュールを、そのステンシル箇所に適用できるモジュールとして抽出してもよい。
【0048】
特定部140は、プログラムと、そのプログラムにおけるステンシル箇所の範囲を表す情報と、そのステンシル箇所に適用できるモジュールの情報と、を、変更部160と、ステンシル情報出力部171と、に送出する。
【0049】
後で詳しく説明されるように、特定部140は、修正されたステンシル箇所を通知する修正内容通知を変更部160から受け取る。特定部140は、受け取ったステンシル箇所に適用できるモジュールを特定する。そして、特定部140は、プログラムと、そのプログラムにおける修正されたステンシル箇所の範囲を表す情報と、そのステンシル箇所に適用できるモジュールの情報と、を、変更部160と、ステンシル情報出力部171と、に送出する。
【0050】
<変更部160>
変更部160は、プログラムと、そのプログラムにおけるステンシル箇所の範囲を表す情報と、そのステンシル箇所に適用できるモジュールの情報と、を、特定部140から受け取る。変更部160は、プログラムのステンシル箇所を、そのステンシル箇所に適用できるモジュールを使用する記述に変更する。言い換えると、変更部160は、プログラムのステンシル箇所を、ライブラリを使用するように変更する。そのライブラリは、ステンシル箇所に適用できるモジュールを含むライブラリである。
【0051】
変更部160は、変更されたプログラムを、プログラム出力部170に送出する。変更部160は、さらに、変更前のプログラムを、プログラム出力部170に送出してもよい。
【0052】
変更部160は、後で詳しく説明する修正部180から、修正内容通知を受け取った場合、受け取った修正内容通知に従って修正されたプログラムを、プログラム出力部170に送出する。修正部180に関連する説明については、後で詳細に述べる。
【0053】
<プログラム出力部170>
プログラム出力部170は、変更部160から、変更されたプログラムを受け取る。プログラム出力部170は、変更部160から、更に、変更前のプログラムを受け取ってもよい。プログラム出力部170は、変更されたプログラムを、出力プログラムとして出力する。プログラム出力部170は、さらに、変更前のプログラムと、変更されたプログラムに基づいて、プログラムがどのように変更されたかを表す情報を出力してもよい。
【0054】
<ステンシル情報出力部171>
ステンシル情報出力部171は、プログラムと、そのプログラムにおけるステンシル箇所の範囲を表す情報と、そのステンシル箇所に適用できるモジュールの情報と、を、特定部140から受け取る。ステンシル情報出力部171は、プログラムのステンシル箇所を含む部分を、ステンシル箇所を特定する表示と、そのステンシル箇所に適用できるモジュールの情報と共に出力する。
【0055】
<パターン情報出力部172>
パターン情報出力部172は、生成部130から、ステンシルパターンの情報を受け取る。パターン情報出力部172は、ステンシルパターンの情報を出力する。ステンシルパターンの情報は、上述のように、ステンシル形状を含む。パターン情報出力部172は、ステンシルパターンの情報として、ステンシル形状を表す図を出力してもよい。
【0056】
ステンシル形状を表す図は、例えば、座標軸と、ステンシル箇所に変数として記述される要素の、その座標軸によって定義される空間内の位置を示す図形とによって表されていてよい。具体的には、ステンシル形状を表す図は、例えば、座標軸と、その座標軸によって定義される空間における格子点とに、ステンシル箇所に変数として記述される要素の位置を表す点に、要素が存在することを表す黒丸などの図形をプロットした図であってよい。
【0057】
ステンシル形状を表す図は、例えば、ステンシル箇所に変数として記述される要素の相対値をそれぞれ表す立方体の組み合わせによって表されていてよい。具体的には、ステンシル形状を表す図は、対象要素を表す立方体(中心立方体と表記)と、その立方体に対する、他の要素の相対位置を表す立方体(周辺立方体と表記)と、が描かれた図であってよい。中心立方体の形式(例えば、色、線の太さ、及び、模様の少なくともいずれか)は、周辺立方体の形式と異なっていてよい。
【0058】
上述のステンシル情報出力部171によって出力されたステンシル情報、及び、パターン情報出力部172によって出力されたパターン情報は、例えば、情報処理装置101のディスプレイに出力される。その場合、そのディスプレイが、上述のステンシル情報出力部171によって出力されたステンシル情報、及び、パターン情報出力部172によって出力されたパターン情報を表示する。上述のステンシル情報出力部171によって出力されたステンシル情報、及び、パターン情報出力部172によって出力されたパターン情報は、例えば、情報処理装置101に接続された端末装置に出力されてもよい。その場合、その端末装置が、上述のステンシル情報出力部171によって出力されたステンシル情報、及び、パターン情報出力部172によって出力されたパターン情報を表示する。
【0059】
<指示受付部111>
指示受付部111は、例えば表示されたステンシル情報及びパターン情報を見たユーザによって入力された、修正指示を受け付ける。修正指示は、例えば、ステンシル箇所を変更する指示である。修正指示は、例えば、ステンシル箇所に適用できるモジュールを変更する指示である。ステンシル箇所に適用できるモジュールを変更する指示は、ステンシル箇所に適用できるモジュールを使用する記述を変更する指示であってもよい。
【0060】
指示受付部111は、受け付けた修正指示を、修正部180に送出する。
【0061】
<修正部180>
修正部180は、指示受付部111から、修正指示を受け取る。修正部180は、修正指示に従って、変更部160によって、又は、特定部140及び変更部160によって、ステンシル箇所を修正する。
【0062】
具体的には、修正部180は、受け取った修正指示が表す修正の内容を、変更部160に通知する。
【0063】
例えば、修正指示が、ステンシル箇所に適用できるモジュールを変更する指示である場合、修正部180は、変更部160が変更したプログラムに対する、指示に従った修正の内容を通知する、修正内容通知を、変更部160に送出する。
【0064】
その場合、変更部160は、修正内容通知を修正部180から受け取る。変更部160は、変更内容通知の内容に従って、変更後のプログラムの、ステンシル箇所を置き換えた部分の記述を変更する。変更部160は、変更したプログラムをプログラム出力部170に送出する。プログラム出力部170は、変更されたプログラムを変更部160から受け取り、受け取ったプログラムを出力プログラムとして出力する。
【0065】
例えば、修正指示が、ステンシル箇所を変更する指示である場合、修正部180は、変更部160を介して、特定部140に、修正されたステンシル箇所を通知する修正内容通知を、特定部140に送出する。詳しくは、修正部180が、そのような修正内容通知を変更部160に送出し、変更部160は、修正内容通知を受け取る。変更部160は、受け取った修正内容通知が、修正されたステンシル箇所を通知する場合、その修正内容通知を、特定部140に送出する。特定部140は、変更部160から、修正されたステンシル箇所を通知する修正内容通知を受け取る。
【0066】
特定部140は、修正されたステンシル箇所を通知する修正内容通知を受け取り、受け取った修正内容通知によって通知された、修正されたステンシル箇所に適用できるモジュールを特定する。そして、上述のように、特定部140は、プログラムと、そのプログラムにおける修正されたステンシル箇所の範囲を表す情報と、そのステンシル箇所に適用できるモジュールの情報と、を、変更部160と、ステンシル情報出力部171と、に送出する。
【0067】
修正されたステンシル箇所に適用できるモジュールを特定できなかった場合、特定部140は、修正されたステンシル箇所の範囲を表す情報と、そのステンシル箇所に適用できるモジュールが存在しないことを表す、モジュールの情報とを、ステンシル情報出力部171に送出する。そして、特定部140は、修正されたステンシル箇所を、ステンシル箇所から除外してもよい。
【0068】
<動作>
次に、本実施形態に係る情報処理装置の動作について、図面を使用して詳細に説明する。
【0069】
図4は、本実施形態に係る情報処理装置101の動作の例を表すフローチャートである。
【0070】
図4に示す例では、まず、プログラム受付部110が、プログラムを受け付ける(ステップS101)。言い換えると、プログラム受付部110が、プログラムを受け取る。
【0071】
次に、情報処理装置101は、ステンシル特定処理を行う(ステップS102)。ステンシル特定処理については、後で詳細に説明する。
【0072】
次に、パターン情報出力部172と、ステンシル情報出力部171とが、ステンシル箇所の情報を出力する(ステップS103)。具体的には、パターン情報出力部172が、ステンシル箇所の情報のうち、上述のパターン情報を出力する。また、ステンシル情報出力部171が、ステンシル箇所の情報のうち、ステンシル情報を出力する。
【0073】
ステンシル箇所の情報を確認したユーザは、修正が必要な場合、修正指示を入力する。指示受付部111は、修正指示を受け付ける(ステップS104)。
【0074】
修正指示が存在する場合(ステップS105においてYES)、修正部180は、ステンシル箇所を修正する(ステップS106)。具体的には、上述のように、修正部180は、修正内容通知を変更部160に通知することによって、変更部160に、ステンシル箇所に適用できるモジュールを変更する。または、変更部160は、修正内容通知を、変更部160を介して特定部140に通知することによって、特定部140によって、ステンシル箇所の範囲を変更し、特定部140及び変更部160によって、ステンシル箇所に適用できるモジュールを変更する。
【0075】
そして、変更部160が、プログラムのステンシル箇所を、ライブラリを使用するように変更する(ステップS107)。言い換えると、変更部160が、プログラムのステンシル箇所の記述を、そのステンシル箇所に適用できるモジュールを使用する記述に変更する。
【0076】
プログラム出力部170は、変更されたプログラムを出力する(ステップS108)。
【0077】
修正指示が存在しない場合(ステップS105においてNO)、情報処理装置101は、ステップS107及びステップS108の動作を行う。
【0078】
次に、本実施形態に係る情報処理装置101の、ステンシル特定処理の動作について、図面を使用して詳細に説明する。
【0079】
図5は、本実施形態に係る情報処理装置101の、ステンシル特定処理の動作の例を表すフローチャートである。
【0080】
図5に示す例では、まず、検出部120が、プログラムのステンシル候補を検出する(ステップS111)。次に、生成部130が、検出されたステンシル候補のステンシルパターンを生成する(ステップS112)。複数のステンシル候補が検出された場合、生成部130は、複数のステンシル候補の各々のステンシルパターンを生成する。
【0081】
特定部140は、以下のように、ステンシル候補毎に、適用できるモジュールを特定し、適用できるモジュールが特定されたステンシル候補を、ステンシル箇所として特定する。
【0082】
具体的には、特定部140は、1つのステンシル候補を選択する(ステップS113)。そして、特定部140は、ステンシル候補のステンシルパターンに基づいて、ステンシル候補に適用できるモジュールを特定する(ステップS114)。
【0083】
ステンシル候補に適用できるモジュールが特定されなかった場合(ステップS115においてNO)、情報処理装置101の動作は、ステップS117に進む。
【0084】
ステンシル候補に適用できるモジュールが特定された場合(ステップS115においてYES)、特定部140は、そのステンシル候補を、ステンシル箇所として特定する(ステップS116)。
【0085】
選択されていないステンシル候補が存在する場合(ステップS117においてYES)、情報処理装置101の動作は、ステップS113に戻る。選択されていないステンシル候補が存在しない場合(ステップS117においてNO)、情報処理装置101は、
図5に示す動作を終了する。
【0086】
<効果>
以上で説明した本実施形態には、第1の実施形態と同じ効果がある。その理由は、第1の実施形態の効果が生じる理由と同じである。
【0087】
<第2の実施形態の変形例>
次に、第2の実施形態の変形例について、図面を使用しながら詳細に説明する。
【0088】
図6は、本変形例に係る情報処理装置102の構成の例を表すブロック図である。
【0089】
図6に示す例では、情報処理装置102は、
図3に示す、第2の実施形態の情報処理装置101の構成要素の各々を含む。情報処理装置102は、更に、実行プログラム生成部190と、実行プログラム出力部173と、を含む。
【0090】
情報処理装置102の、
図3に示す、第2の実施形態の情報処理装置101の構成要素と同じ構成要素は、以下で説明する相違点を除いて、第2の実施形態の情報処理装置101の構成要素と同様に機能し、沿うように動作する。
【0091】
<変更部160>
本実施形態の変更部160は、第2の実施形態の変更部160と同様に動作する。本実施形態の変更部160は、更に、変更されたプログラムを、実行プログラム生成部190に送出する。
【0092】
<ライブラリ情報記憶部150>
本実施形態のライブラリ情報記憶部150は、第2の実施形態のライブラリ情報記憶部150が記憶する情報を記憶する。実施形態のライブラリ情報記憶部150は、さらに、実行プログラムを生成するために必要な情報を記憶する。
【0093】
<実行プログラム生成部190>
実行プログラム生成部190は、変更部160からプログラムを受け取り、受け取ったプログラムから、ライブラリ情報記憶部150が記憶する情報を使用して、実行可能な形式のプログラムである、実行プログラムを生成する。実行プログラム生成部190は、広義のコンパイラ(リンカを含む)の記述によって実現できる。実行プログラム生成部190は、生成した実行プログラムを、実行プログラム出力部173に送出する。
【0094】
<実行プログラム出力部173>
実行プログラム出力部173は、実行プログラム生成部190から実行プログラムを受け取り、受け取った実行プログラムを出力する。
【0095】
<ステンシル箇所の例>
図7は、プログラムにおけるステンシル箇所の例を表す図である。
図7に示す例では、破線によって囲まれている部分が、ステンシル箇所を表す。
図7に示す例では、b[i][j]が対象要素であり、a[i][j-1]、a[i-1][j]、a[i+1][j]、a[i][j+1]が、使用要素である。この場合、対象要素の位置は、座標(i,j)によって表され、使用要素の位置は、座標(i,j-1)、座標(i-1,j)、座標(i+1,j)、座標(i,j+1)によって表される。
【0096】
<パターン情報の第1の例>
図8は、パターン情報の第1の例を表す図である。
図8は、
図7に示すステンシル箇所のパターン情報の例を表す。
図8の中心の×印が、対象要素の位置を表す。
図8の小円が、使用要素の位置を表す。
【0097】
<パターン情報の第2の例>
図9は、パターン情報の第2の例を表す図である。
図9は、
図7に示すステンシル箇所のパターン情報の例を表す。
図9の太線によって描かれている立方体が、対象要素の位置を表す。
図9の細線によって描かれている立方体が、使用要素の位置を表す。
図9の左下の3本の線分によって描かれている図形が、座標軸を表す。
図9に示す例では、i軸、j軸に加えて、k軸も描かれているが、
図7の各要素の位置は、(i,j)平面上において表されるので、
図9の立方体は平面状に並べて描かれている。
【0098】
<他の実施形態>
本開示の実施形態に係る情報処理装置(情報処理装置100、情報処理装置101、情報処理装置102)は、記憶媒体から読み出されたプログラムがロードされたメモリと、そのプログラムを実行するプロセッサとを含むコンピュータによって実現することができる。コンピュータは、互いに通信可能に接続されている複数のコンピュータの組み合わせとして実現されていてもよい。本開示の実施形態に係る情報処理装置は、専用のハードウェアによって実現することもできる。専用のハードウェアは、例えば、1つの回路、又は、互いに通信可能に接続されている複数の回路の組み合わせであってもよい。本開示の実施形態に係る情報処理装置は、前述のコンピュータと専用のハードウェアとの組み合わせによって実現することもできる。
【0099】
図10は、本開示の実施形態に係る情報処理装置を実現することができる、コンピュータ1000のハードウェア構成の一例を表す図である。
図10を参照すると、コンピュータ1000は、プロセッサ1001と、メモリ1002と、記憶装置1003と、I/O(Input/Output)インタフェース1004とを含む。また、コンピュータ1000は、記憶媒体1005にアクセスすることができる。メモリ1002と記憶装置1003は、例えば、RAM(Random Access Memory)、ハードディスクなどの記憶装置である。記憶媒体1005は、例えば、RAM、ハードディスクなどの記憶装置、ROM(Read Only Memory)、可搬記憶媒体である。記憶装置1003が記憶媒体1005であってもよい。プロセッサ1001は、メモリ1002と、記憶装置1003に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ1001は、I/Oインタフェース1004を介して、例えば、プログラムを出力する装置や、ユーザの端末装置などにアクセスすることができる。プロセッサ1001は、記憶媒体1005にアクセスすることができる。記憶媒体1005には、コンピュータ1000を、本開示の実施形態に係る情報処理装置として動作させるプログラムが格納されている。
【0100】
プロセッサ1001は、記憶媒体1005に格納されている、コンピュータ1000を、本開示の実施形態に係る情報処理装置として動作させるプログラムを、メモリ1002にロードする。そして、プロセッサ1001が、メモリ1002にロードされたプログラムを実行することにより、コンピュータ1000は、本開示の実施形態に係る情報処理装置として動作する。
【0101】
プログラム受付部110、指示受付部111、検出部120、生成部130、特定部140、変更部160、修正部180は、例えば、メモリ1002に格納されているプログラムを実行するプロセッサ1001により実現することができる。プログラム出力部170、ステンシル情報出力部171、パターン情報出力部172、実行プログラム出力部173、修正部180、実行プログラム生成部190も、例えば、メモリ1002に格納されているプログラムを実行するプロセッサ1001により実現することができる。
【0102】
また、ライブラリ情報記憶部150は、コンピュータ1000が含むメモリ1002やハードディスク装置等の記憶装置1003により実現することができる。
【0103】
プログラム受付部110、指示受付部111、検出部120、生成部130、特定部140、ライブラリ情報記憶部150、変更部160、修正部180の一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。プログラム出力部170、ステンシル情報出力部171、パターン情報出力部172、実行プログラム出力部173、修正部180、実行プログラム生成部190の一部又は全部も、各部の機能を実現する専用の回路によって実現することもできる。
【0104】
また、上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0105】
(付記1)
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出手段と、
検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定手段と、
を備える情報処理装置。
【0106】
(付記2)
前記ステンシル箇所に適用できる前記モジュールが特定された場合、前記プログラムの前記ステンシル箇所を、前記モジュールを使用するように変更する変更手段
をさらに備える付記1に記載の情報処理装置。
【0107】
(付記3)
前記ステンシル候補に含まれる多次元データの複数の要素を、当該多次元データを多次元空間にマッピングした場合の、前記複数の要素の位置の並びの形状であるステンシル形状を含む、前記ステンシル候補のステンシルパターンを生成する生成手段を備え、
前記特定手段は、前記ステンシルパターンに基づいて、前記モジュールを抽出する、
付記1又は2に記載の情報処理装置。
【0108】
(付記4)
前記生成手段は、前記ステンシル候補に含まれる、前記複数の要素の式の形状を更に含む前記ステンシルパターンを生成する
付記3に記載の情報処理装置。
【0109】
(付記5)
前記ステンシル形状の情報を出力するパターン情報手段
をさらに備える付記3又は4に記載の情報処理装置。
【0110】
(付記6)
前記プログラムにおいて検出された前記ステンシル箇所の情報を出力するステンシル情報出力手段
をさらに備える付記1乃至5のいずれか1項に記載の情報処理装置。
【0111】
(付記7)
前記ステンシル情報出力手段は、前記ステンシル箇所の情報として、特定された前記モジュールの情報を出力する
付記6に記載の情報処理装置。
【0112】
(付記8)
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出し、
検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する、
情報処理方法。
【0113】
(付記9)
前記ステンシル箇所に適用できる前記モジュールが特定された場合、前記プログラムの前記ステンシル箇所を、前記モジュールを使用するように変更する
付記8に記載の情報処理方法。
【0114】
(付記10)
前記ステンシル候補に含まれる多次元データの複数の要素を、当該多次元データを多次元空間にマッピングした場合の、前記複数の要素の位置の並びの形状であるステンシル形状を含む、前記ステンシル候補のステンシルパターンを生成し、
前記ステンシルパターンに基づいて、前記モジュールを抽出する、
付記8又は9に記載の情報処理方法。
【0115】
(付記11)
前記ステンシル候補に含まれる、前記複数の要素の式の形状を更に含む前記ステンシルパターンを生成する
付記10に記載の情報処理方法。
【0116】
(付記12)
前記ステンシル形状の情報を出力する
付記10又は11に記載の情報処理方法。
【0117】
(付記13)
前記プログラムにおいて検出された前記ステンシル箇所の情報を出力する
付記8乃至12のいずれか1項に記載の情報処理方法。
【0118】
(付記14)
前記ステンシル箇所の情報として、特定された前記モジュールの情報を出力する
付記13に記載の情報処理方法。
【0119】
(付記15)
プログラムの記述の特性に基づいて、前記プログラムのステンシル候補を検出する検出処理と、
検出した前記ステンシル候補に適用できるモジュールがステンシルライブラリに存在する場合、前記ステンシル候補をステンシル箇所として特定する特定処理と、
をコンピュータに実行させる情報処理プログラム。
【0120】
(付記16)
前記ステンシル箇所に適用できる前記モジュールが特定された場合、前記プログラムの前記ステンシル箇所を、前記モジュールを使用するように変更する変更処理
をさらにコンピュータに実行させる付記15に記載の情報処理プログラム。
【0121】
(付記17)
前記ステンシル候補に含まれる多次元データの複数の要素を、当該多次元データを多次元空間にマッピングした場合の、前記複数の要素の位置の並びの形状であるステンシル形状を含む、前記ステンシル候補のステンシルパターンを生成する生成処理をさらにコンピュータに実行させ、
前記特定処理は、前記ステンシルパターンに基づいて、前記モジュールを抽出する、
付記15又は16に記載の情報処理プログラム。
【0122】
(付記18)
前記生成処理は、前記ステンシル候補に含まれる、前記複数の要素の式の形状を更に含む前記ステンシルパターンを生成する
付記17に記載の情報処理プログラム。
【0123】
(付記19)
前記ステンシル形状の情報を出力するパターン情報処理
をさらにコンピュータに実行させる付記17又は18に記載の情報処理プログラム。
【0124】
(付記20)
前記プログラムにおいて検出された前記ステンシル箇所の情報を出力するステンシル情報出力処理
をさらにコンピュータに実行させる付記15乃至19のいずれか1項に記載の情報処理プログラム。
【0125】
(付記21)
前記ステンシル情報出力処理は、前記ステンシル箇所の情報として、特定された前記モジュールの情報を出力する
付記20に記載の情報処理プログラム。
【0126】
以上、実施形態を参照して本開示を説明したが、本開示は上記実施形態に限定されるものではない。本開示の構成や詳細には、本開示のスコープ内で当業者が理解し得る様々な変更をすることができる。
【0127】
この出願は、2020年9月28日に出願された日本出願特願2020-162333を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【0128】
100 情報処理装置
101 情報処理装置
102 情報処理装置
110 プログラム受付部
111 指示受付部
120 検出部
130 生成部
140 特定部
150 ライブラリ情報記憶部
160 変更部
170 プログラム出力部
171 ステンシル情報出力部
172 パターン情報出力部
173 実行プログラム出力部
180 修正部
190 実行プログラム生成部
1000 コンピュータ
1001 プロセッサ
1002 メモリ
1003 記憶装置
1004 I/Oインタフェース
1005 記憶媒体