Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP6810380B2 - ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム - Google Patents
[go: Go Back, main page]

JP6810380B2 - ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム - Google Patents

ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム Download PDF

Info

Publication number
JP6810380B2
JP6810380B2 JP2016198686A JP2016198686A JP6810380B2 JP 6810380 B2 JP6810380 B2 JP 6810380B2 JP 2016198686 A JP2016198686 A JP 2016198686A JP 2016198686 A JP2016198686 A JP 2016198686A JP 6810380 B2 JP6810380 B2 JP 6810380B2
Authority
JP
Japan
Prior art keywords
loop
expansion
program
source program
expanded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016198686A
Other languages
English (en)
Other versions
JP2018060432A (ja
Inventor
善之 大野
善之 大野
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2016198686A priority Critical patent/JP6810380B2/ja
Publication of JP2018060432A publication Critical patent/JP2018060432A/ja
Application granted granted Critical
Publication of JP6810380B2 publication Critical patent/JP6810380B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、ソースプログラムを入力として、計算機向けに最適化された、別のソースプログラムを作成する装置、方法およびプログラムに関する。
高級言語により作成されたプログラムに含まれるループを、ループアンローリングすることによって、計算機上での実行性能の向上を目的とした プログラムの最適化技術が知られている。高級言語プログラムに含まれるループは、言語毎に定まっており、例えばC言語やC++言語ではforループ、FORTRAN言語ではDOループである。
ループアンローリングは、同じ計算処理を何回も繰り返し実行する場合に、もともと ループ1回で処理していた計算のN倍の演算処理を、ループ1回で処理するようにループを展開する技術である。ループアンローリングには、ループ1回での処理量を増やすことにより、ループ内の命令のスケジューリングの幅が広がる効果があったり、また、ループの回数が減るため、ループを制御するオーバーヘッドが減る効果があったりする。
例えば、元のソースプログラムが以下のようであったとする。
______________________
for ( i = 0 ; i < n ; i++ ) {
a[i] = b[i] * c[i] ;
}
______________________
ここで、アスタリスク記号“ * ”は乗算を表わす。
このプログラムについて、ループアンローリングをした結果は、次のようになる。
______________________
for ( i = 0 ; i < n ; i+=2 ) {
a[i] = b[i] * c[i] ;
a[i+1] = b[i+1] * c[i+1] ;
}
______________________
このループアンローリングでは、配列bと配列c の乗算結果を配列aに代入する処理を、ループ内で2要素分処理することによって、ループ回数を半減させている。
ある種のプログラムをループアンローリングした場合、却って実行速度が低下することがある。例えば、ベクトルプロセッサで実行させるソースプログラムをループアンローリングしたプログラムを ベクトルプロセッサ用のコンパイラでコンパイルした場合、メモリアクセスが1要素とびのメモリアクセス、いわゆるストライドアクセスになる可能性がある。
このベクトル計算機に対する一つの対策が特許文献1に記載されている。特許文献1には、高級言語で書かれたソースプログラムについてベクトル化を行い、条件が満たされた場合に、ベクトル演算命令を含む命令列について多重に展開するような、データ処理装置が記載されている。このデータ処理装置は、所定の条件により、ベクトル化されたベクトル演算命令を含む命令列に関する分割処理を行うか否かを判定し、条件が満たされた場合に、ベクトル演算命令を含む命令列について多重に展開する。
また、特許文献2から4にも関連する技術が開示されている。特許文献2から4には、ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係などを解析して、各ループを展開するか判定する手法が開示されている。
特開平2−41562号公報 特開昭63−314675号公報 特開平4−307624号公報 特開平4−344535号公報
特許文献1のデータ処理装置では、ベクトル化により命令列を作成した後に、展開処理を行うため、メモリアクセスがストライドアクセスになるということがなくなる。このため、特許文献1のデータ処理装置は、ベクトル計算機において効率的なメモリアクセスをするベクトル命令列を作成できる。
しかしながら、特許文献1のデータ処理装置では、ベクトル化により命令列を作成した後に展開処理を行う。このため、高級言語で記述されたソースコードレベルのループアンロールを実現できない問題が残る。特許文献2にも同様の問題がある。したがって、ソースコードレベルにてアンロールできないため、アンロールに伴って出現する重複計算除去や、ソースコードコンパイル時の命令スケジューリングの効果を得難いという欠点を指摘できる。
特許文献3及び特許文献4に関しては、制約や目的、展開手法の違いから下で説明する発明ほどのベクトル計算機に適したループアンロール効果を得られない。
本発明は、上記課題に鑑みて成されたものであり、ベクトル計算機に最適なループ展開を施したプログラムを作成できるソースプログラム変換システムの提供を目的とする。
本発明の一実施形態に係るソースプログラム変換システムは、変換対象とするソースプログラムを受け付けるプログラム入力部と、前記プログラム入力部に入力された前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定する展開可否判定部と、前記展開可否判定部が展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数、および、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理する展開パラメタ決定部と、前記展開パラメタ決定部が決定した、ループ展開段数とループ展開幅を受けて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する展開プログラム作成部と、を含み成る。
本発明の一実施形態に係る情報処理システムによるソースプログラム変換方法は、変換対象とするソースプログラムを受け付け、前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定し、展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数を導出処理すると共に、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理し、導出したループ展開段数とループ展開幅に基づいて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する。
本発明の一実施形態に係るソースプログラム変換プログラムは、情報処理リソースを、変換対象とするソースプログラムを受け付けるプログラム入力手段と、前記プログラム入力手段に入力された前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定する展開可否判定手段と、前記展開可否判定手段が展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数、および、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理する展開パラメタ決定手段と、前記展開パラメタ決定手段が決定した、ループ展開段数とループ展開幅を受けて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する展開プログラム作成手段、として動作させる。
本発明の一実施形態に係る記録媒体は、上記ソースプログラム変換プログラムをコンピュータ読取可能に非一時的に保持する。
本発明によれば、ベクトル計算機に最適なループ展開を施したプログラムを作成できるソースプログラム変換システムを提供できる。
本発明の一実施形態のソースプログラム変換システムの構成を示すブロック図である。 動作説明に用いるソースプログラムのプログラムリスト例を示した説明図である。 展開パラメタ決定部の動作を示すフローチャートである。 展開プログラム作成部の動作を示すフローチャートである。 一実施形態のソースプログラム変換システムにおいて作成された展開済みプログラムを示した図である。 一実施形態のソースプログラム変換システムにおいて作成された別の展開済みプログラムを示した図である。 展開パラメタ決定部の別の動作を示すフローチャートである。 図7に示したフローチャートを用いて作成された展開済みプログラムを示した図である。 図7に示したフローチャートを用いて作成された別の展開済みプログラムを示した図である。 本発明の一実施形態のソースプログラム変換システムの構成例を示すブロック図である。
本発明の実施形態を図面に基づいて説明する。
[第1の実施形態]
[構成の説明]
図1は、第1の実施形態に係るソースプログラム変換システムを示すブロック図である。ループ展開装置10は、記憶装置20に格納されたソースプログラム21に含まれたループ内のループアンロール可能なループに関してループアンロールを実施し、ループアンロールしたプログラムを展開済みプログラム22として記憶装置20に格納する装置である。記憶装置20は、ループ展開装置10に内蔵される場合もある。
本実施形態に係るループ展開装置10は、以下の構成を備えている。
・プログラム入力部11
・展開可否判定部12
・展開パラメタ決定部13
・展開プログラム作成部14
プログラム入力部11、展開可否判定部12、展開パラメタ決定部13、展開プログラム作成部14は、コンピュータプログラムとそのコンピュータプログラムに従って動作するプロセッサーによって実現してもよいし、一部或いは全部の構成要素を電子回路で形成してもよい。
図2は、本実施形態においてループアンロールの対象となるソースプログラム21の例である。
プログラム入力部11は、記憶装置20に格納されたソースプログラム21の入力を受け付け、該プログラムに構文解析、字句解析、意味解析を実施して、その結果を展開可否判定部12に受け渡す。これらの構文解析、字句解析、意味解析は、既存技術を用いて実施すればよい。
展開可否判定部12は、渡されたソースプログラム中のループについて、展開可否かどうかの判定を行う。展開可否かどうかの判定には、ループ内のデータの依存関係の有無、および、ループのカウンタ変数が線形に変化するかどうかの判定を行えばよい。ループ内のデータの依存関係が無く 且つ ループのカウンタ変数が線形に変化する場合、展開可否判定部12は、ループ展開可能と判定する。このループ内のデータの依存解析は、既存の技術を用いる実施すればよい。また、ループのカウンタ変数の増加値(以降、Lと表記)は、後述の展開パラメタ決定部13と展開プログラム作成部14にて利用される。
図2で示すようなソースプログラムの例の場合、配列A、B、Cは異なる配列であるため、データの依存関係はない。また、ループのカウンタ変数iは、ループ1回転ごとに1ずつ増加するため、線形の増加である。したがって、図2で示すようなソースプログラムは、ループ展開可と判定される。また、ループカウンタ変数の増加値Lは1である。
展開パラメタ決定部13は、ループ展開可と判定されたループに関して、ループ中の配列カウンタ変数 や ループ中の計算式の計算量 に基づく所定の条件を用いて、ループ展開のための2種類のパラメタ、すなわちループ展開幅とループ展開段数を導出する。
このループ展開幅(以降Mとも表記)は、展開前のループの何回転離れた計算処理を、同じループに展開するか否かを表す。また、ループ展開段数(以降、Nとも表記)は、展開前のループの何回転分の計算処理を、展開後のループ1回転で計算するかを表す。例えば、ループ展開前の1回転目の計算は、M+1回転目、2M+1回転目、・・・(N−1)×M+1回転目の計算と、同じループで計算されるように展開される。
展開プログラム作成部14は、展開パラメタ決定部13が決定した ループ展開幅、ループ展開段数に従って、対象のループを展開したプログラム(展開済みプログラム22)を生成し、生成した展開済みプログラム22を記憶装置20に出力する。なお、展開済みプログラム22の出力先は、必ずしもソースプログラム21が記憶されていた記憶装置20に限定される必要は無く、例えばネットワークを介して接続されたストレージに記録するように構成しても良い。また、展開済みプログラム22の出力先は、ディスプレイに一時的に表示することや、プリンタへの印字することであっても構わない。
[動作の説明]
次に、展開パラメタ決定部13及び展開プログラム作成部14の動作を説明する。
まず、図3を用い、展開パラメタ決定部13の動作を説明する。図3は、展開パラメタ決定部13の動作を表すフローチャートである。
展開パラメタ決定部13(ループ展開装置10)は、ソースプログラム21のループの回転数(Z)、および、カウンタ変数の初期値(K)を導出する(S301)。
図2で示したソースプログラム21のループの場合、カウンタ変数 i は、100から10000まで1ずつ増える。したがって、展開パラメタ決定部13は、回転数Zを“9901”、カウンタ変数の初期値Kを“100”と導出する。
次に、展開パラメタ決定部13は、ソースプログラム21のループ1回転のコスト(C)を導出する(S302)。本実施形態では、ループ1回転のコストを、ループ内の演算の回数であるとする。図2で示されるソースプログラム21のループの場合、加算が1回であるので、展開パラメタ決定部13は、コストC=1と導出する。
なお、本実施形態では、ループ1回転のコストを演算の回数としたが、ループ内の配列データへのメモリアクセス回数(ロード回数やストア回数)など、他の要因を用いてコストを決定してもよい。ループ1回転のコストの決定方法は、特に限定するものではない。例えば、ループ内の演算の回数とメモリアクセス回数を組み合わせてもよい。
次に、展開パラメタ決定部13は、最小コスト閾値(Cmin)を参照し、Cmin ≦ C × N となる最小の整数Nを導出する(S303)。最小コスト閾値(Cmin)は、ループ展開装置10ごと もしくは ソースプログラム21をコンパイルした命令列を実行するベクトル計算機ごと にあらかじめ定めておく定数値である。なお、設定方法に関しては特に制限するものではない。本実施形態では、Cmin=32と定まっているものとする。Cmin=32であり、C=1である場合、Cmin ≦ C ×Nを満たす最小の整数N=32となる。
次に、展開パラメタ決定部13は、ループ展開段数の最大値(Nmax)を参照し、先に計算したNとループ展開段数の最大値(Nmax)との小さい方を、ループ展開段数Nと決定する(S304)。このループ展開段数の最大値(Nmax)は、ループ展開装置10ごと、もしくは、ソースプログラム21をコンパイルした命令列を実行するベクトル計算機ごとにあらかじめ定めておく定数値である。なお、設定方法に関しては特に制限するものではない。本実施形態では、Nmax=4と定まっているものとする。N=32とNmax=4の小さい方の値である“4”がループ展開段数Nに決定される。
次に、展開パラメタ決定部13は、先に計算したループの回転数Zとループ展開段数Nとを参照し、M×N<Zとなる最大の整数Mを、ループ展開幅Mとして決定する(S305)。本例では、Z=9901、N=4であるので、M=2475と決定される。
次に、図4を用い、展開プログラム作成部14の動作を説明する。図4は、展開プログラム作成部14の動作を表すフローチャートである。
まず、展開プログラム作成部14(ループ展開装置10)は、二重ループ構造を作成する(S401)。外側ループのカウンタ変数は、入力のソースプログラム21のループのカウンタ変数と同じ変数に設定する。図2で示されるソースプログラム21の場合、外側ループのカウンタ変数はカウンタ変数 i が展開プログラム作成部14によって設定される。このカウンタ変数の初期値は“0”と設定する。また、ループ1回転ごとのカウンタ変数の増加値は、上記展開パラメタ決定部13で決定したループ展開幅M、ループ展開段数Nを用い、N×Mとする。また、ループの終了条件は、ソースプログラムのループ回転数Zを用い、i<Z−M×N+1とする。内側ループのカウンタ変数は、ソースプログラム21に現れない任意の変数を用いる。ここでは内側ループのカウンタ変数を j と表す。この内側ループのカウンタ変数の初期値は0に設定する。また、内側ループのループ1回転ごとのカウンタ変数の増加値は、ソースプログラム21のループのカウンタ変数の増加値Lに設定する。内側ループのループ終了条件は、j<M に設定する。
次に、展開プログラム作成部14は、作成した2重ループ構造のループ内での計算式を作成する(S402)。まず、展開プログラム作成部14は、ソースプログラム21のループ内の計算式を、ループ展開段数分(すなわちN個分)に並べる。次に、展開プログラム作成部14は、ループ内ループ変数iを、(i+K+j+0×L×M)、(i+K+j+1×L×M)、(i+K+j+2×L×M)、…、(i+K+j+(N−1)×L×M)のN種類の項に置換する。Kは、先述の通り、元のソースコード21のループのカウンタ変数の初期値である。
次に、展開プログラム作成部14は、余りループを作成する(S403)。余りループは、ループ展開した際に展開段数に満たない回転数分のループを処理するループである。余りループのカウンタ変数は、上記二重ループのカウンタ変数を引き継ぐ。展開プログラム作成部14は、余りループのカウンタ変数の初期値を、上記二重ループのカウンタ変数のループ終了時の値iを用い、L×i+Kに設定する。また、展開プログラム作成部14は、余りループのカウンタ変数の増加値を L 、終了条件をi<L×Z+Kに設定する。そして、展開プログラム作成部14は、余りループのループ内計算式に、ソースプログラムのループ内の計算式をそのまま1個分配置する。
ここで、展開プログラム作成部14の動作を、図2のソースプログラム21を入力とした場合を実例として説明する。図5は、展開プログラム作成部14が図2のソースプログラム21の入力を受けて出力するプログラム(展開済みプログラム22)である。
まず、展開プログラム作成部14は、二重ループ構造を作成する(二重ループ構造作成工程;S401)。外側ループのカウンタ変数は、ソースプログラムと同じ i に設定する。また、カウンタ変数初期値は“0”、カウンタ変数の増加値は、ループ展開幅Mが“2745”、ループ展開段数が“4”であるので、“2745×4”に設定する。ループの終了条件は、ソースプログラムのループの回転数Zが“9901”であるので、“i<9901−2475×4+1”となる。展開プログラム作成部14は、これらを統合して、図5の1行目の for文を作成する。次に、展開プログラム作成部14は、内側ループについて、カウンタ変数をソースプログラム上に出現しないjに設定する。jの初期値は“0”、増加値は、ソースプログラム21のカウンタ変数の増加値Lである“1”を設定する。また、ループの終了条件は、ループ展開幅Mの“2745”に設定する。このように、展開プログラム作成部14は、図5の2行目の for文 を作成する。
次に、展開プログラム作成部14は、内側ループ計算式を作成する(内側ループ計算式作成工程;S402)。ソースプログラムの計算式は、図2の2行目の1式だけである。展開プログラム作成部14は、この式を、ループ展開段数Nである4個分配置する。このとき、展開プログラム作成部14は、計算式内に現れるカウンタ変数iを、それぞれ(i+100+j+0×1×2475),(i+100+j+1×1×2475),(i+100+j+2×1×2475),(i+100+j+0×1×2475)の4種類の項に置換する。その結果が、図5の3行目から6行目の式である。そして、内側ループの終了を示す括弧(図5、7行目)と外側ループの終了を示す括弧(図5、8行目)が続く。
次に、展開プログラム作成部14は、余りループを作成する(余りループ作成工程;S403)。余りループのカウンタ変数は、先の二重ループのカウンタ変数である i を用いる。そして、カウンタ変数の初期値は、ソースプログラムのカウンタ変数の増加値Lである“1”、ソースプログラムのカウンタ変数の初期値Kである“100”を用い、“1×i+100”となる。また、カウンタ変数の増加値はLである“1”、ループの終了条件は、ソースプログラムのループの回転数Zである“9901”を用い、“i<1×9901+100”となる。図5の9行目が、余りループのループ構造を示す for文 である。そして次に、ソースプログラム21のループの計算式をそのまま配置し(図5、10行目)、ループの終了を示す括弧が続く(図5、11行目)。
このようにして、展開プログラム作成部14は、展開ループを作成する。
また、展開ループ中の定数を用いた項は、図6のように、計算後の値としてもよい。
図5および図6を参照してわかるように、上記一連のループ展開処理によって、元のソースプログラムではループ中の計算式数が1個であったが、4個の計算式を持つループ構造のプログラム(展開済みプログラム22)が作成されている。すなわち、展開済みプログラム22は、ソースプログラムレベルで、ソースプログラム21をループアンロールできていることがわかる。
また、この展開後プログラム22をベクトル計算機で実行できるようにコンパイルして実行した場合、それぞれのベクトル演算のメモリアクセスは、連続アクセスとなり効率のよいメモリアクセスを行うベクトル演算となる。
すなわち、本発明によれば、ベクトル計算機に最適なループ展開を施したプログラムを作成できるソースプログラム変換システムを提供できる。
ここで、ループ展開装置10(展開パラメタ決定部13)の追加及び置換機能を説明する。上記展開パラメタ決定部13は、ループ展開幅を、(ループ回転数÷ループ展開段数)以下となる整数としている。これに対して、本追加及び置換機能を具備する展開パラメタ決定部13は、ループ展開幅に、展開済みプログラム22を実行するベクトル計算機(ソースプログラム21を実行する計算機)のベクトル長(以降VLと表記)を設定する。
以下の説明では、ソースプログラムを実行するベクトル計算機が決まっており、その計算機のベクトル長がループ展開装置10内またはソースプログラム内のどちらかで保持されているものとする。また、操作者(プログラマ)がループ転回装置10にベクトル長を手入力するようにしてもよい。
また、ループ転回装置10(展開パラメタ決定部13)がソースプログラムを実行させるベクトル計算機のベクトル長 又は 機種 がソースコード中に記載されているか前処理で判別する構成としてもよい。機種を特定できた際には、あらかじめ準備されている機種−ベクトル長データベースを参照してその機種のベクトル長の値を取得すればよい。
図7は、本動作例にかかる展開パラメタ決定部13の動作を示すフローチャートである。ループ展開段数Nを決定するまでの工程(S301からS304)は、先に説明した図3のフローチャートと同じであるため、説明を省略する。展開パラメタ決定部13は、ループ展開段数Nの決定後(S304の実行後)、ループ展開幅Mを決める。このループ展開幅Mは、ソースプログラムを実行する計算機のベクトル長VLを、ループ展開幅Mとして決定する(S705)。
本変形例にかかるソースプログラム21の例として、先述の図2で示したループを用いて動作を説明する。また、ソースプログラムを実行する計算機のベクトル長VLが“256”であるとする。ループ展開段数Nを決定するまでの工程は、先に説明した図3のフローチャートと同じであるため、展開パラメタ決定部13によって、ソースプログラムのループの回転数Zは“9901”、カウンタ変数初期値Kは“100”、ループ展開段数Nは“4”と決定される。最後に、ループ展開幅Mは、ソースプログラムを実行する計算機のベクトル長VLである“256”と決定される。
図8は、上記展開パラメタ決定部で決定したパラメタを用い、展開プログラムで作成したプログラム(展開済みプログラム22)を示したものである。図9は、さらに定数値が複数含まれる項を計算して、項を単純化した場合の展開済みプログラム22である。
図8および図9を参照してわかるように、上記一連のループ展開処理によって、元のソースプログラムではループ中の計算式数が1個であったが、4個の計算式を持つループ構造のプログラム(展開済みプログラム22)が作成されている。すなわち、展開済みプログラム22は、ソースプログラムレベルで、ソースプログラム21をループアンロールできていることがわかる。
また、本実施形態の第1の変形例のループ展開装置10でループ展開した展開プログラムをベクトル化した場合、ループ内の複数のベクトル演算でアクセスするメモリー領域は連続になる。例えば、図8および図9の3行目計算式と4行目の計算式を考えた場合、3行目の計算式中の“B[i+j+100] ”という項は、ベクトル化すると、“B[i+j+100]”から“B[i+j+355]”とメモリー上に連続な256要素である。4行目の“B[i+j+356] ”という項は、ベクトル化すると、“B[i+j+356] ”から“B[i+j+611]”と メモリー上に連続な256要素である。これら512要素は全てメモリー上に連続である(5行目、6行目の項も同様で全てメモリー上に連続である)。
また、この展開後プログラム22を該当ベクトル計算機で実行できるようにコンパイルして実行した場合、該当ベクトル計算機での それぞれのベクトル演算のメモリアクセスは、連続アクセスとなり より効率のよいメモリアクセスを行うベクトル演算となる。
他方、先に示した展開方法は、汎用的なベクトル計算機向けのループアンローリングを実施できる利点を有る。
以上説明したように、本発明を適用したソースプログラム変換システムは、ベクトル計算機に最適なループ展開を施したプログラムを作成できる。
尚、ソースプログラム変換システムの各部は、図10に例示するようなコンピュータシステムのハードウェアとソフトウェアの組み合わせを用いて実現すればよい。このコンピュータシステムは、所望形態に合わせた、1ないし複数のプロセッサーとメモリーを含む。また、このコンピュータシステムの形態では、各部は、上記メモリーにソースプログラム変換プログラムが展開され、このプログラムに基づいて1ないし複数のプロセッサー等のハードウェアを実行命令群やコード群で動作させることによって、実現すればよい。この際、必要に応じて、このプログラムは、オペーレティングシステムや、マイクロプログラム、ドライバなどのソフトウェアが提供する機能と協働して、各部を実現することとしてもよい。
メモリーに展開されるプログラムデータは、プロセッサーを1ないし複数の上述した各部として動作させる実行命令群やコード群、テーブルファイル、コンテンツデータなどを適宜含む。
また、このコンピュータシステムは、必ずしも一つの装置として構築される必要はなく、複数のサーバやコンピュータ或いは仮想マシンなどが組み合わさって、所謂、シンクライアントや、分散コンピューティング、クラウドコンピューティングで構築されてもよい。また、コンピュータシステムの一部或いは全ての各部をハードウェアやファームウェア(例えば、一ないし複数のLSI:Large-Scale Integration,FPGA:Field Programmable Gate Array,電子素子の組み合わせ)で置換することとしてもよい。同様に、各部の一部のみをハードウェアやファームウェアで置換することとしてもよい。
また、このプログラムは、記録媒体に非一時的に記録されて頒布されても良い。当該記録媒体に記録されたプログラムは、有線、無線、又は記録媒体そのものを介してメモリーに読込まれ、プロセッサー等を動作させる。
尚、本明細書では、記録媒体には、類似するタームの記憶媒体やメモリー装置、ストレージ装置なども含むこととする。この記録媒体を例示すれば、オプティカルディスクや磁気ディスク、半導体メモリー装置、ハードディスク装置、テープメディアなどが挙げられる。また、記録媒体は、不揮発性であることが望ましい。また、記録媒体は、揮発性モジュール(例えばRAM:Random Access Memory)と不揮発性モジュール(例えばROM:Read Only Memory)の組み合わせを用いることとしてもよい。
上記形態を別の表現で説明すれば、プロセッサーを、ループ展開装置として動作させる情報処理リソースを、メモリーに展開されたソースプログラム変換プログラムに基づき、図1に示した、プログラム入力部、展開可否判定部、展開パラメタ決定部、展開プログラム作成部として動作させることで、その結果ソースプログラム変換システムを実現できる。各構成要素は、ソフトウェアプログラムの機能単位(ソフトウェアモジュール)と捉えることも可能である。ただし、これらの図面に示した各部の区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。
同様に、上記形態を更に別の表現で説明すれば、記録媒体は、メモリーに展開されて情報処理リソースで動作するソースプログラム変換プログラムを含み、情報処理リソースに、プログラム入力工程、展開可否判定工程、展開パラメタ決定工程、展開プログラム作成工程を適時実行させることで、ソースプログラム変換システム(ループ展開装置)を構築できる。
なお、実施形態を例示して本発明を説明した。しかし、本発明の具体的な構成は前述の実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の変更があってもこの発明に含まれる。例えば、上述した実施形態のブロック構成の分離併合、手順の入れ替えなどの変更は本発明の趣旨および説明される機能を満たせば自由であり、上記説明が本発明を限定するものではない。
また、上記の実施形態の一部又は全部は、以下のようにも記載されうる。尚、以下の付記は本発明をなんら限定するものではない。
[付記1]
変換対象とするソースプログラムを受け付けるプログラム入力部と、
前記プログラム入力部に入力された前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定する展開可否判定部と、
前記展開可否判定部が展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数、および、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理する展開パラメタ決定部と、
前記展開パラメタ決定部が決定した、ループ展開段数とループ展開幅を受けて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する展開プログラム作成部と、
を含み成るソースプログラム変換システム。
[付記2]
上記付記1に記載のソースプログラム変換システムにおいて、
前記プログラム入力部は、ベクトル計算機で用いるソースプログラムを受け付け、
前記展開プログラム作成部は、前記展開パラメタ決定部によって決定された、ループ展開段数とループ展開幅に基づいて、前記ベクトル計算機向けに展開したループを有するプログラムを生成処理して、前記展開済みプログラムを出力する
請求項1記載のソースプログラム変換システム。
[付記3]
上記付記1又は2に記載のソースプログラム変換システムにおいて、
前記展開パラメタ決定部は、受け付けた前記ソースプログラムの中の展開するループの中の、計算回数 および メモリアクセス回数 の少なくとも一方に基づいて、ループ処理コスト(C)を算出し、所定の閾値(Cmin)を用いて、Cmin ≦ C×N を満たす最小の整数Nを、ループ展開段数に決定するソースプログラム変換システム。
[付記4]
上記付記1から3の何れか一項に記載のソースプログラム変換システムにおいて、
前記展開パラメタ決定部は、受け付けた前記ソースプログラムの展開するループのループ回転数を計算し、決定したループ展開段数を参照して、ループ展開幅に、(ソースプログラムのループ回転数÷ループ展開段数)以下となる正整数を設定するソースプログラム変換システム。
[付記5]
上記付記1から3の何れか一項に記載のソースプログラム変換システムにおいて、
前記展開パラメタ決定部は、ループ展開幅に、展開済みプログラムを実行するベクトル計算機のベクトル長を設定するソースプログラム変換システム。
[付記6]
上記付記1から3の何れか一項に記載のソースプログラム変換システムにおいて、
前記展開パラメタ決定部は、前記ソースプログラムを実行させるベクトル計算機のベクトル長 又は 機種 が前記ソースコード中に記載されているか判別し、ベクトル長 又は 機種 が記載されていた場合、該記載されていたベクトル長 又は 機種から定まるベクトル長 を識別して、ループ展開幅に識別したベクトル長を設定するソースプログラム変換システム。
[付記7]
上記付記1から6の何れか一項に記載のソースプログラム変換システムにおいて、
前記展開プログラム作成部は、外側ループが、カウンタ変数が、初期値0から、ループ1回転ごとに、前記ループ展開幅と前記ループ展開段数の積ずつ増加し、ソースプログラムのループの回転数と前記積の値の差以下であるまでループし、内側ループが、カウンタ変数が、初期値0から、ループ1回転ごとに、ソースプログラムのループのカウンタ変数のループ1回転ごとの増加値ずつ増加し、前記ループ展開幅より小さい間ループするような、2重ループを作成し、
当該2重ループの中に、ソースプログラムのループ中の計算式を、前記ループ展開段数分展開する
ソースプログラム変換システム。
[付記8]
変換対象とするソースプログラムを受け付け、
前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定し、
展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数を導出処理すると共に、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理し、
導出したループ展開段数とループ展開幅に基づいて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する
情報処理システムによるソースプログラム変換方法。
[付記9]
情報処理リソースを、
変換対象とするソースプログラムを受け付けるプログラム入力手段と、
前記プログラム入力手段に入力された前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定する展開可否判定手段と、
前記展開可否判定手段が展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数、および、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理する展開パラメタ決定手段と、
前記展開パラメタ決定手段が決定した、ループ展開段数とループ展開幅を受けて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する展開プログラム作成手段、
として動作させるソースプログラム変換プログラム。
[付記10]
上記付記9に記載のソースプログラム変換プログラムであって、前記情報処理リソースは、プロセッサーとメモリーとバスの組み合わせを用いるソースプログラム変換プログラム。
[付記11]
上記付記9又は10に記載のソースプログラム変換プログラムをコンピュータ読取可能に非一時的に保持する記録媒体。
本発明によれば、ソフトウェアプログラムを入力として、対象のベクトル計算機向けに最適化されたソフトウェアプログラムを作成するソフトウェア最適化装置といった用途に適用できる。
10 ループ展開装置(情報処理装置、情報処理リソース)
11 プログラム入力部
12 展開可否判定部
13 展開パラメタ決定部
14 展開プログラム作成部
20 記憶装置
21 ソースプログラム
22 展開済みプログラム(最適化ソースプログラム)

Claims (9)

  1. 変換対象とするソースプログラムを受け付けるプログラム入力部と、
    前記プログラム入力部に入力された前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定する展開可否判定部と、
    前記展開可否判定部が展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数、および、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理する展開パラメタ決定部と、
    前記展開パラメタ決定部が決定した、ループ展開段数とループ展開幅を受けて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する展開プログラム作成部と、
    を含み成るソースプログラム変換システム。
  2. 前記請求項1に記載のソースプログラム変換システムにおいて、
    前記プログラム入力部は、ベクトル計算機で用いるソースプログラムを受け付け、
    前記展開プログラム作成部は、前記展開パラメタ決定部によって決定された、ループ展開段数とループ展開幅に基づいて、前記ベクトル計算機向けに展開したループを有するプログラムを生成処理して、前記展開済みプログラムを出力する
    請求項1記載のソースプログラム変換システム。
  3. 前記請求項1又は2に記載のソースプログラム変換システムにおいて、
    前記展開パラメタ決定部は、受け付けた前記ソースプログラムの中の展開するループの中の、計算回数 および メモリアクセス回数 の少なくとも一方に基づいて、ループ処理コスト(C)を算出し、所定の閾値(Cmin)を用いて、Cmin ≦ C×N を満たす最小の整数Nを、ループ展開段数に決定するソースプログラム変換システム。
  4. 前記請求項1から3の何れか一項に記載のソースプログラム変換システムにおいて、
    前記展開パラメタ決定部は、受け付けた前記ソースプログラムの展開するループのループ回転数を計算し、決定したループ展開段数を参照して、ループ展開幅に、(ソースプログラムのループ回転数÷ループ展開段数)以下となる正整数を設定するソースプログラム変換システム。
  5. 前記請求項1から3の何れか一項に記載のソースプログラム変換システムにおいて、
    前記展開パラメタ決定部は、ループ展開幅に、展開済みプログラムを実行するベクトル計算機のベクトル長を設定するソースプログラム変換システム。
  6. 前記請求項1から3の何れか一項に記載のソースプログラム変換システムにおいて、
    前記展開パラメタ決定部は、前記ソースプログラムを実行させるベクトル計算機のベクトル長 又は 機種 が前記ソースコード中に記載されているか判別し、ベクトル長 又は 機種 が記載されていた場合、該記載されていたベクトル長 又は 機種から定まるベクトル長 を識別して、ループ展開幅に識別したベクトル長を設定するソースプログラム変換システム。
  7. 前記請求項1から6の何れか一項に記載のソースプログラム変換システムにおいて、
    前記展開プログラム作成部は、外側ループが、カウンタ変数が、初期値0から、ループ1回転ごとに、前記ループ展開幅と前記ループ展開段数の積ずつ増加し、ソースプログラムのループの回転数と前記積の値の差以下であるまでループし、内側ループが、カウンタ変数が、初期値0から、ループ1回転ごとに、ソースプログラムのループのカウンタ変数のループ1回転ごとの増加値ずつ増加し、前記ループ展開幅より小さい間ループするような、2重ループを作成し、
    当該2重ループの中に、ソースプログラムのループ中の計算式を、前記ループ展開段数分展開する
    ソースプログラム変換システム。
  8. 変換対象とするソースプログラムを受け付け、
    前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定し、
    展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数を導出処理すると共に、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理し、
    導出したループ展開段数とループ展開幅に基づいて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する
    情報処理システムによるソースプログラム変換方法。
  9. 情報処理リソースを、
    変換対象とするソースプログラムを受け付けるプログラム入力手段と、
    前記プログラム入力手段に入力された前記ソースプログラムに含まれる各ループを識別し、各ループに対して展開に関連するデータ依存関係を解析して、各ループの展開の可否を判定する展開可否判定手段と、
    前記展開可否判定手段が展開可と判定したループについて、展開後のループにて、展開前のループの何回転分の計算処理をするかを示す正整数であるループ展開段数、および、展開前のループの何回転とびのループの計算処理を、展開後のループ一回転において計算するかを示す正整数であるループ展開幅を導出処理する展開パラメタ決定手段と、
    前記展開パラメタ決定手段が決定した、ループ展開段数とループ展開幅を受けて、展開したループを有するプログラムを生成処理して、展開済みプログラムとして出力する展開プログラム作成手段、
    として動作させるソースプログラム変換プログラム。
JP2016198686A 2016-10-07 2016-10-07 ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム Active JP6810380B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016198686A JP6810380B2 (ja) 2016-10-07 2016-10-07 ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016198686A JP6810380B2 (ja) 2016-10-07 2016-10-07 ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム

Publications (2)

Publication Number Publication Date
JP2018060432A JP2018060432A (ja) 2018-04-12
JP6810380B2 true JP6810380B2 (ja) 2021-01-06

Family

ID=61909986

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016198686A Active JP6810380B2 (ja) 2016-10-07 2016-10-07 ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム

Country Status (1)

Country Link
JP (1) JP6810380B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN121350313B (zh) * 2025-12-18 2026-04-17 杭州悦数科技有限公司 一种图数据库列表展开操作的优化方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04344535A (ja) * 1991-05-22 1992-12-01 Nec Software Ltd ループの展開装置
JPH04358264A (ja) * 1991-06-04 1992-12-11 Nec Corp ベクトル化処理方式
JP4077252B2 (ja) * 2002-06-28 2008-04-16 富士通株式会社 コンパイラプログラムおよびコンパイル処理方法
US9710245B2 (en) * 2014-04-04 2017-07-18 Qualcomm Incorporated Memory reference metadata for compiler optimization

Also Published As

Publication number Publication date
JP2018060432A (ja) 2018-04-12

Similar Documents

Publication Publication Date Title
US20140306964A1 (en) Incremental compiling of a declarative program
US20200183681A1 (en) Method for a software development system
JP2010134614A (ja) 並列化処理方法、システム、及びプログラム
JP2007323573A (ja) 機能テスト・スクリプト生成装置
US9430203B2 (en) Information processing apparatus and compilation method
Wahler et al. FASA: A software architecture and runtime framework for flexible distributed automation systems
KR20240167036A (ko) 머신 러닝 파이프라인 생성 및 관리
US9218317B2 (en) Parallelization method, system, and program
Serbinowska et al. Behaverify: Verifying temporal logic specifications for behavior trees
CN107608672B (zh) 一种ui模块管理器、ui模块管理方法和系统
JP6810380B2 (ja) ソースプログラム変換システム、ソースプログラム変換方法、及びソースプログラム変換プログラム
JP2011186991A (ja) 常微分方程式を解くための方法、プログラム及びシステム
Abdulla Regular model checking: Evolution and perspectives
Vinkhuijzen et al. Symbolic model checking with sentential decision diagrams
JP5277825B2 (ja) プログラム難読化装置及び難読化プログラム
Wang et al. Gridfor: A domain specific language for parallel grid-based applications
US10289447B1 (en) Parallel process scheduling for efficient data access
Pham et al. Unfolding-based dynamic partial order reduction of asynchronous distributed programs
JP2015035174A (ja) 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体
Oleynik et al. Recent advances in Periscope for performance analysis and tuning
Guller Interactive Data Analysis with Spark Shell
US10572233B2 (en) Vectorization device, vectorization method, and recording medium on which vectorization program is stored
Sun et al. Model-based testing of web service with EFSM
WO2018150588A1 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
Toda et al. Parallel, distributed, and differential processing system for human activity sensing flows

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190905

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200625

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201111

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201124

R150 Certificate of patent or registration of utility model

Ref document number: 6810380

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150