JP2010191506A - コンパイル装置およびコンパイルプログラム - Google Patents

コンパイル装置およびコンパイルプログラム Download PDF

Info

Publication number
JP2010191506A
JP2010191506A JP2009032442A JP2009032442A JP2010191506A JP 2010191506 A JP2010191506 A JP 2010191506A JP 2009032442 A JP2009032442 A JP 2009032442A JP 2009032442 A JP2009032442 A JP 2009032442A JP 2010191506 A JP2010191506 A JP 2010191506A
Authority
JP
Japan
Prior art keywords
loop
intermediate language
array
optimization
thread
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.)
Granted
Application number
JP2009032442A
Other languages
English (en)
Other versions
JP5218129B2 (ja
Inventor
Yasunobu Tanimura
恭伸 谷村
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2009032442A priority Critical patent/JP5218129B2/ja
Publication of JP2010191506A publication Critical patent/JP2010191506A/ja
Application granted granted Critical
Publication of JP5218129B2 publication Critical patent/JP5218129B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】参照先行のデータ依存があるループを並列化する。
【解決手段】参照先行のデータ依存がある配列をワーク変数に設定し、ループを生成し、該ループの後に、データ依存のある配列を前記ワーク変数に置換したループの実行文を計算する。
【選択図】図5

Description

本発明は、ソースプログラムをコンピュータが実行可能なオブジェクトファイルに変換するコンパイル装置およびコンパイルプログラムに関する。
並列処理は、複数のCPU(Central Processing Unit)を持つ計算機(マルチコアプロセッサやSymmetric Multiprocessing)において、CPUを有効活用し、実行性能を向上させる上での重要な機能である。
コンパイラにおける最適化機能の一つに自動並列化がある。
自動並列化は、複数のCPUを持つ計算機において、並列に実行するために、逐次コードを並列実行可能なコードに変換するものである。
図1は、データ依存のないループを表すソースプログラムの例である。
図1では、変数Iを1からNまで1ずつ増加させ、各ループでA(I)=A(I)+B(I)を計算することで、A(1)からA(N)までを算出している。
図2は、図1のプログラムの逐次実行および並列実行の順序を示す図である。
尚、以下の説明では、スレッドはCPUと1対1で割り当てられたスレッドとする。
ここで、変数Nは10とし、A(1)からA(10)までを計算する場合を述べる。
図2の左側に示すように、逐次実行では、A(1)からA(10)まで順に計算されていく。
並列実行では、スライス位置で分割され、各スレッドで実行される。
図2の右側で示すように、2並列実行では、A(1)からA(5)がスレッド0で計算され、A(6)からA(10)がスレッド1で計算される。
図2の右側で示すように、2並列実行では、各配列要素の定義/参照がスレッドを跨ぐことは無いので、並列化しても問題はない。
次に、ループの回転を跨いだデータ依存があるために並列化が出来ない例を示す。
図3は、データ依存のあるループを表すソースプログラムである。
図3では、変数Iを1からN-2まで1ずつ増加させ、各ループでA(I)=A(I+2)+B(I)を計算することで、A(1)からA(N-2)までを算出している。
図4は、図3のプログラムの逐次実行および並列実行の順序を示す図である。ここで、変数Nは12とする。
図4の左側に示すように、逐次実行では、A(1)からA(10)まで順に計算されていく。
並列実行では、上記と同様に、スライス位置で分割して、各スレッドで計算を実行する。
図4の右側で示すように、2並列実行では、A(1)からA(5)がスレッド0で計算され、A(6)からA(10)がスレッド1で計算される。
逐次実行では、A(4)の計算時にA(6)、A(5)の計算時にA(7)がそれぞれ参照され、A(4)およびA(5)の計算の後にA(6)およびA(7)が計算(定義)される。すなわち、A(6)およびA(7)が参照された後に、新たなA(6)およびA(7)が定義されている。
これに対し並列実行では、スレッド1でA(6)およびA(7)が計算(定義)された後に、スレッド0でA(6)を参照するA(4)およびA(7)を参照するA(5)が計算される。すなわち、A(6)およびA(7)が定義された後に、A(6)およびA(7)が参照されている。
したがって、並列実行では、逐次実行の結果とは異なる誤った結果が算出される。
このように、参照先行のデータ依存を持つループを従来の技術を用いて並列化を行うと、実行結果誤りとなってしまうため、自動並列化できないという問題があった。
インデックスセットが分配可能という条件は満たすが、代入文右辺のデータ依存が1つに決められるという条件は待たさないような特性を持つループを並列化する技術も知られている。
特開平8−185325号公報
本発明の課題は、参照先行しているデータ依存を持つループを並列化可能な装置を提供することである。
開示の装置は、ソースプログラムを解析して中間言語列を生成するソース解析手段と、前記中間言語列を最適化する最適化手段と前記最適化手段から出力された中間言語列からオブジェクトファイルを生成するコード生成手段と、を備える。
前記最適化手段は、参照された後に定義される依存関係である参照先行のデータ依存がある配列をワーク変数に、該配列が参照されてから定義されるまで実行されるループの回数だけ設定する中間言語を生成し、ループを生成し、該ループ内に前記ソースプログラムのループ内の実行文に対応する中間言語をコピーし、前記配列が参照されてから定義されるまで実行されるループの回数だけ、前記ソーププログラムのループ内の実行文に対応する中間言語をコピーし、該コピーした中間言語でデータ依存のある配列を前記ワーク変数に置換した中間言語を生成することを特徴とする。
開示の装置により、参照先行しているデータ依存を持つループを並列化することで、オブジェクトファイルの実行性能を向上させることが出来る。
データ依存のないループを表すソースプログラムの例である。 逐次実行および並列実行の順序を示す図である。 データ依存のあるループを表すソースプログラムの例である。 逐次実行および並列実行の順序を示す図である。 実施の形態に係るコンパイル装置の構成図である。 実施の形態に係るコンパイル装置の処理のフローチャートである。 自動並列化の詳細なフローチャート(その1)である。 自動並列化の詳細なフローチャート(その2)である。 ループの例を示す図である。 ループの例を示す図である。 中間言語列のデータ構造を示す図である。 逐次実行および並列実行の順序を示す図である。 情報処理装置の構成図である。
以下、図面を参照しながら本発明の実施の形態を説明する。
本実施の形態において、コンパイルされたプログラムは、通常、複数のCPUを持つ計算機で実行される。複数のCPUを持つ計算機は、複数のスレッドで並列処理を行うことにより、効率よく処理を行うことができる。スレッドとは、CPU利用の単位であり、本実施形態において、スレッドはCPUと1対1で割り当てられているものとする。
図5は、実施の形態に係るコンパイル装置の構成図である。
コンパイル装置501は、コンパイル手段502を備える。
コンパイル手段502は、ソースプログラム511をコンパイルして、オブジェクトファイル512を生成する。
コンパイル手段502は、ソース解析手段503、最適化手段504、およびコード生成手段505を備える。
ソース解析手段503は、入力されたソースプログラム511を解析して、ソースプログラム511に対応する中間言語列(中間コード)に変換する。
ソースプログラム511は、FORTRAN等の高級言語で記述され、コンパイル装置501の記憶手段(不図示)に格納されている。
最適化手段は、ソース解析手段503から出力された中間言語列を最適化して、最適化した中間言語列を出力する。
コード生成手段505は、最適化手段で最適化された中間言語列をコンピュータが実行可能な機械語に変換し、オブジェクトファイル512を生成する。
図6は、本発明の実施の形態に係るコンパイル装置の処理のフローチャートである。
ステップS601において、ソース解析手段503はソースプログラム511を読み出し、コンパイルを開始する。
ステップS602において、ソース解析手段503はソースプログラム511を解析して中間言語列を生成し、最適化手段に出力する。
ステップS603において、最適化手段504は、入力された中間言語列を最適化して、最適化した中間言語列をコード生成手段505に出力する。尚、ステップS604の最適化に含まれる自動並列化の詳細については後述する。
ステップS604において、コード生成手段505は、入力された中間言語列をオブジェクトファイル512に変換する。
ステップS605において、コード生成手段505は、オブジェクトファイル512を出力して、コンパイルを終了する。
図7A及び図7Bは、自動並列化の詳細なフローチャートである。
自動並列化はステップS604で行われる最適化の一部である。
ステップS701において、並列化解析処理を開始する。
ステップS702において、最適化手段504は、ループがあるか判定する。ループがある場合はステップS703に制御は進み、ループがない場合は処理を終了する。
ステップS703において、最適化手段504は、ループを跨いだデータ依存があるかどうかを判定する。ループを跨いだデータ依存としては、例えば参照先行、定義先行、手続呼び出し等がある。すなわち、ステップS703では従来の並列化生成処理が適応できるかを判断している。ループを跨いだデータ依存がある場合は、ステップS705に制御は進み、ループを跨いだデータ依存がない場合はステップS704に制御は進む。
ステップS704において、最適化手段504は、ループを跨いだデータ依存がない場合の並列化生成処理を実施する。
ステップS705において、最適化手段504は、参照先行のデータ依存があるかどうかを判定する。参照先行のデータ依存がある場合はステップS706に制御は進み、参照先行のデータ依存がない場合はステップS716に制御は進む。また、ステップS705において、データ依存のある配列の添え字の幅と回転数の幅を認識する。尚、添え字の幅と回転数の幅については後述する。
ステップS706において、最適化手段504は、参照先行のデータ依存以外の並列化阻害要因があるかどうか判定する。阻害要因がある場合はステップS716に制御は進み、阻害要因がない場合は、ステップS707に制御は進む。参照先行のデータ依存以外の並列化阻害要因としては、例えば定義先行、手続き呼び出し等がある。
ステップS707において、最適化手段504は、解析処理を終了し、参照先行のデータ依存を持つループの並列化が可能であると判定する。
ステップS708において、最適化手段504は、中間言語の生成処理を開始する。
ステップS709において、最適化手段504は、データ依存ある配列の添え字の幅WIDTHおよび回転数の幅Mをワーク変数に設定する中間言語を生成する。
尚、添え字の幅とは、データ依存のある配列において、参照する配列の添え字と定義する配列の添え字との差分である。図3においては、参照する配列はA(I+2)、定義する配列はA(I)であり、データ依存のある添え字の幅は(I+2)-(I)=2となる。
回転数の幅とは、ある配列要素が参照されてから、該配列要素が定義されるまで実行されるループの回数である。
例えば、図8に示すようなループを考える。図8に示すループは、変数Iを1からNまで1ずつ増分させる(ループ増分値が1である)ループである。このループを実行すると、各ループで行われる計算は
1回転目は、A(1)=A(3)+B(1)
2回転目は、A(2)=A(4)+B(2)
3回転目は、A(3)=A(5)+B(3)
4回転目は、A(4)=A(6)+B(4)

以上のようになる。
図8に示すループでは、例えば、データ依存のあるA(3)は1回転目で参照され、3回転目で定義されるので、データ依存のある回転数の幅は2となる。
次に、図9に示すようなループを考える。図9に示すループは、変数Iを1からNまで2ずつ増分させる(ループ増分値が2である)ループである。このループを実行すると、各ループで行われる計算は
1回転目は、A(1)=A(3)+B(1)
2回転目は、A(3)=A(5)+B(3)
3回転目は、A(5)=A(7)+B(5)
4回転目は、A(7)=A(9)+B(7)

以上のようになる。
図9に示すループでは、例えば、データ依存のあるA(3)は1回転目で参照され、2回転目で定義されるので、データ依存のある回転数の幅は1となる。
例えば、図3のループの場合、図4に示すようにデータ依存のあるA(6)はA(4)の計算とA(6)の計算で出てくる。A(4)とA(6)との間は2であるので、データ依存のある回転数の幅は2となる。
ステップS710において、最適化手段504は、各スレッドのループ回転数LL、配列の添え字の初期値IS、および配列の添え字の終値IEを設定する中間言語を生成する。
各スレッドのループ回転数LLは、逐次ループの回転数((終値−初期値+増分値)/増分値)をA、通常のスライス計算の回転数(A/スレッド数)をB、データ依存のある添え字の幅をWIDTHとすると、下式で求められる。
LL=B-WIDTH
また、各スレッドの配列の添え字の初期値ISは、従来と同様に通常の並列化の各スレッドの初期値の計算から求める。
また、各スレッドの配列の添え字の終値IEは、IS+LL-1で求められる。
ステップS711において、回転数の幅の分だけ、ループ内のデータ依存のある配列をワーク変数に退避する中間言語を生成する。
すなわち、データ依存のある配列をループの前でワーク変数TMPn,(n=1〜M)として設定する。
ここで、退避する配列の添え字は、IE+K*ループ増分値+WIDTH,(K=1〜M)である。
ステップS712において、最適化手段504は、バリアライブラリを呼び出す中間言語を生成する。バリアライブラリは、全てのスレッドにおける処理がバリアライブラリのある地点に達するまで、全スレッドが次の命令の実行を待つための命令列、ライブラリ、またはハード機構である。バリアライブラリは、命令やデータアクセスの順序を保証するために用いられる。
ステップS713において、最適化手段504は、ループを生成し、ソースプログラムのループ内の実行文に対応する中間言語をコピーする。
ステップS714において、最適化手段504は、回転数の幅の分だけ、ソースプログラムのループ内の中間言語をコピーし、コピーしたループ内の中間言語で右辺のデータ依存のある配列要素をステップS711で退避したワーク変数に置換する。
ここで算出する配列の添え字は、IE+K*ループ増分値,(K=1〜M)である。
ステップS715において、最適化手段504は、中間言語の生成処理を終了する。
ステップS716において、最適化手段504は、次のループを取り出し、ステップS702に制御は戻る。次のループがない場合は、処理を終了する。
次に、具体例として、図3に示すループに対して最適化を行った場合に生成される中間言語列ついて述べる。
図10は、図3に示すループに対して最適化を行った場合に生成される中間言語列の構造を示す図である。
以下の例においては、変数Nは12とする。
先ず、解析処理として、ループがあるか(ステップS702)、ループを跨いだデータ依存があるか(ステップS703)のチェックを行う。
参照先行のデータ依存があるかどうか判断し、ループを跨いだ参照先行のデータ依存のある配列、データ依存のある配列の添え字の幅、データ依存のある配列の回転数の幅を認識する(ステップS705)。
図3に示すループでは、ループを跨いだ参照先行のデータ依存のある配列はA(I)、その配列要素のデータ依存のある添え字の幅は2、その配列要素のデータ依存のある回転数の幅は2である。
参照先行のデータ依存以外の並列化阻害要因があるかチェックし(ステップS706)、解析処理を終了する。(ステップS707)。
そして、中間言語の生成処理を開始する(ステップS708)。
データ依存のある回転数の幅Mを2、データ依存のある添え字の幅WIDTHを2と設定する中間言語(図10の中間言語1および2に対応)を生成する(ステップS709)。
各スレッドのループ回転数LL、初期値IS、終値IEを設定する中間言語(図10の中間言語3、4、および5に対応)を生成する(ステップS710)。
データ依存のある配列を回転数の幅の分(本実施の形態では2つ)、ワーク変数TMP1、TMP2に退避する中間言語(図10の中間言語6および7に対応)を生成する(ステップS711)。
ワーク変数に退避する前に、退避する配列要素が他のスレッドで定義されないようにするため、バリアライブラリを呼び出す中間言語(図10の中間言語8に対応)を生成する(ステップS712)。
ISからIEまでループさせる中間言語(図10の中間言語9、11に対応)を生成する。そして、生成したループ内にソースプログラムのループ内の実行文に対応する中間言語(図10の中間言語10に対応)A(I)=A(I+2)+B(I)をコピーする(ステップS713)。
次に回転数の幅の分(本実施の形態では2)、ソースプログラムのループ内の実行分の中間言語(実施の形態ではA(I)=A(I+2)+B(I)に対応)をコピーする(ステップS714)。そして、コピーした中間言語で右辺のデータ依存関係にある配列要素(実施の形態ではA(I+2)に対応)をワーク変数TMP1、TMP2に置換した中間言語(図10の中間言語12および13に対応)を生成する。
ここで計算する配列の添え字は、IE+K*ループ増分値,(K=1〜M)である。
上記のように最適化された中間言語列は、コード生成手段505に入力され、オブジェクトファイル512が生成される。
図11は、図10の中間言語列に基づいた逐次実行および並列実行の順序を示す図である。
尚、変数Nは12とし、ループ回転数は10回転となる。
図11の左側に示すように、逐次実行では、A(1)からA(10)まで順に計算されていく。
次に並列実行した場合を説明する。
本実施の形態では、2つのスレッドが実行可能なコンピュータで実行した場合を考える。2つのスレッドをそれぞれスレッド0、スレッド1とする。
図11の右側の左列はスレッド0で行われる計算、右列はスレッド1で行われる計算を示す。
プログラムの実行時にスレッド数が与えられ、コンピュータはライブラリを利用して処理を各スレッドに分散させる。
尚、以下の説明において、スレッド毎の変数を区別して理解を容易にするために、スレッドXの通常のスレッドの初期値ISはISX、終値IEはIEX、ワーク変数TMP1、TMP2は、TMPX1、TMPX2と記載することもある。
図10の各中間言語に対応する命令を実行していく。
(1)中間言語1および2
データ依存のある回転数の幅Mは2、データ依存のある添え字の幅WIDTHは2である。
(2)中間言語3〜5
各スレッドのループ回転数LLとして、3が得られる。
そして、通常の各スレッドの初期値ISとして、IS0=1、IS1=6が得られる。
各スレッドの終値IEとして、IE0=3、IE1=8が得られる。
(3)中間言語6および7
スレッド0において、データ依存のある配列をワーク変数に退避する。すなわち、スレッド0のワーク変数TMP01およびTMP02を、TMP01=A(IE0+1*1+WIDTH)=A(6)、TMP12=A(IE0+2*1+WIDTH)=A(7)とする(図11のa0参照)。
スレッド1において、データ依存のある配列をワーク変数に退避する。すなわち、スレッド1のワーク変数TMP11およびTMP12を、TMP01=A(IE1+1*1+WIDTH)=A(11)、TMP12= A(IE1+2*1+WIDTH)=A(12)とする(図11のa1参照)。
(4)中間言語8
スレッド0および1において、バリアライブラリを呼び出す(図11のb参照)。
(5)中間言語9〜11
スレッド0において、IS0=1からIE0=3まで、ループを計算する。すなわち、A(1)〜A(3)を算出する(図11のc0参照)。
スレッド1において、IS1=6からIE1=8まで、ループを計算する。すなわち、A(6)〜A(8)を算出する(図11のc1参照)。
(6)中間言語12、13
スレッド0において、A(IE0+1*1)=TMP01+B(IE0+1*1)、A(IE0+2*1)=TMP02+B(IE0+2*1)を計算する。すなわち、A(4)=A(6)+B(4)、A(5)=A(7)+B(5)を計算する(図11のd0参照)。
スレッド1において、A(IE1+1*1)=TMP11+B(IE1+1*1)、A(IE1+2*1)=TMP12+B(IE1+2*1)を計算する。すなわち、A(9)=A(11)+B(9)、A(10)=A(12)+B(10)を計算する(図11のd1参照)。
以上のように、各スレッドにおいてループが計算される。
図11の右側で示すように、2並列実行では、A(1)からA(5)がスレッド0で計算され、A(6)からA(10)がスレッド1で計算される。
この時、スレッド0において、ループ計算の前に、データ依存のあるA(6)およびA(7)は、TMP1およびTMP2に退避している。
そして、A(4)およびA(5)の計算において、A(6)およびA(7)の代わりにTMP1およびTMP2をそれぞれ利用している。
したがって、A(6)およびA(7)の参照/定義の順番は変わらない。
これにより、スレッド0におけるA(4)およびA(5)の計算の前に、スレッド1でA(6)およびA(7)が定義されても、スレッド0におけるA(4)およびA(5)の計算に影響を及ぼすことは無く、正しい結果が得られる。
このように、実施の形態のコンパイル装置で最適化を行うことにより、参照先行のデータ依存のあるループを並列化して実行することができる。
また、上述のコンパイル装置501は、例えば、図12に示すような情報処理装置(コンピュータ)を用いて構成される。
情報処理装置10は、CPU(Central Processing Unit)11、メモリ12、入力部13、出力部14、記憶部15、記録媒体駆動部16、およびネットワーク接続部17を備え、それらはバス18により互いに接続されている。
CPU11は、情報処理装置10全体を制御する中央処理装置である。
メモリ12は、プログラム実行の際に、記憶部15(あるいは可搬記録媒体19)に記憶されているプログラムあるいはデータを一時的に格納するROM(read only memory)やRAM(random access memory)等のメモリである。CPU11は、メモリ12を利用してプログラムを実行することにより、上述した各種処理を実行する。
この場合、可搬記録媒体等から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記録した記録媒体等は本発明を構成することになる。
入力部13は、例えば、キーボード、マウス、タッチパネル等である。
出力部14は、例えば、ディスプレイ、プリンタ等である。
記憶部15は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置10は、記憶部15に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ12に読み出して使用する。
記録媒体駆動部16は、可搬記録媒体19を駆動し、その記録内容にアクセスする。可搬記録媒体19としては、メモリカード、フレキシブルディスク、CD−ROM(compact disk read only memory)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体19に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ12に読み出して使用する。
ネットワーク接続部17は、LAN(local area network)等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う。
本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または形状を取ることができる。
10 情報処理装置
11 CPU
12 メモリ
13 入力部
14 出力部
15 記憶部
16 記録媒体駆動部
17 ネットワーク接続部
18 バス
19 可搬記録媒体
501 コンパイル装置
502 コンパイル手段
502 ソース解析手段
503 最適化手段
504 コード生成手段
511 ソースプログラム
512 オブジェクトファイル

Claims (8)

  1. ソースプログラムを解析して中間言語列を生成するソース解析手段と、
    前記中間言語列を最適化する最適化手段と
    前記最適化手段から出力された中間言語列からオブジェクトファイルを生成するコード生成手段と、
    を備え、
    前記最適化手段は、
    参照された後に定義される依存関係である参照先行のデータ依存がある配列をワーク変数に、該配列が参照されてから定義されるまで実行されるループの回数だけ設定する中間言語を生成し、
    ループを生成し、該ループ内に前記ソースプログラムのループ内の実行文に対応する中間言語をコピーし、
    前記配列が参照されてから定義されるまで実行されるループの回数だけ、前記ソースプログラムのループ内の実行文に対応する中間言語をコピーし、該コピーした中間言語でデータ依存のある配列を前記ワーク変数に置換した中間言語を生成することを特徴とするコンパイル装置。
  2. 前記最適化手段は、前記中間言語列に参照先行のデータ依存を持つループがあるかを判定することを特徴とする請求項1記載のコンパイル装置。
  3. 前記最適化手段は、
    各スレッドの初期値および各スレッドの終値を設定する中間言語を生成し、
    前記生成したループは、前記初期値から前記終値までのループであることを特徴とする請求項1記載のコンパイル装置。
  4. 前記最適化手段は、同期処理のためのバリアライブラリを呼び出す中間言語を生成することを特徴とする請求項1記載のコンパイル装置。
  5. コンピュータに
    ソースプログラムを解析して中間言語列を生成するステップと、
    前記中間言語列を最適化する最適化ステップと
    前記最適化手段から出力された中間言語列からオブジェクトファイルを生成するコード生成ステップと、
    を実行させるコンパイルプログラムにおいて、
    前記最適化ステップは、
    参照された後に定義される依存関係である参照先行のデータ依存がある配列をワーク変数に、該配列が参照されてから定義されるまで実行されるループの回数だけ設定する中間言語を生成するステップ、
    ループを生成し、該ループ内に前記ソースプログラムのループ内の実行文に対応する中間言語をコピーするステップ、
    前記配列が参照されてから定義されるまで実行されるループの回数だけ、前記中間言語列のループ内の実行文に対応する中間言語をコピーし、該コピーした中間言語でデータ依存のある配列を前記ワーク変数に置換した中間言語を生成するステップ、
    を備えることを特徴とするコンパイルプログラム。
  6. 前記最適化ステップは、前記中間言語列に参照先行のデータ依存をもつループがあるかを判定する判定ステップを備えることを特徴とする請求項5記載のコンパイルプログラム。
  7. 前記最適化ステップは、各スレッドの初期値および各スレッドの終値を設定する中間言語を生成するステップを備え、
    前記生成したループは、前記初期値から前記終値までのループであることを特徴とする請求項5記載のコンパイルプログラム。
  8. 前記最適化ステップは、同期処理のためのバリアライブラリを呼び出す中間言語を生成するステップを備えることを特徴とする請求項5記載のコンパイルプログラム。
JP2009032442A 2009-02-16 2009-02-16 コンパイル装置およびコンパイルプログラム Active JP5218129B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009032442A JP5218129B2 (ja) 2009-02-16 2009-02-16 コンパイル装置およびコンパイルプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009032442A JP5218129B2 (ja) 2009-02-16 2009-02-16 コンパイル装置およびコンパイルプログラム

Publications (2)

Publication Number Publication Date
JP2010191506A true JP2010191506A (ja) 2010-09-02
JP5218129B2 JP5218129B2 (ja) 2013-06-26

Family

ID=42817521

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009032442A Active JP5218129B2 (ja) 2009-02-16 2009-02-16 コンパイル装置およびコンパイルプログラム

Country Status (1)

Country Link
JP (1) JP5218129B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8881124B2 (en) 2010-12-21 2014-11-04 Panasonic Corporation Compiler device, compiler program, and loop parallelization method
US9891655B2 (en) 2014-12-05 2018-02-13 Fujitsu Limited Parallel operation system, apparatus and medium

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0830561A (ja) * 1994-07-06 1996-02-02 Internatl Business Mach Corp <Ibm> プログラムの並列化実行方法及び並列化実行コンパイラ
JPH08185325A (ja) * 1994-12-15 1996-07-16 Internatl Business Mach Corp <Ibm> コンパイラにおけるコード生成方法及びコンパイラ
JP2006268070A (ja) * 2005-03-22 2006-10-05 Hitachi Ltd 並列化コンパイル処理方法及び並列化されたオブジェクトコードを実行する並列計算機

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0830561A (ja) * 1994-07-06 1996-02-02 Internatl Business Mach Corp <Ibm> プログラムの並列化実行方法及び並列化実行コンパイラ
JPH08185325A (ja) * 1994-12-15 1996-07-16 Internatl Business Mach Corp <Ibm> コンパイラにおけるコード生成方法及びコンパイラ
JP2006268070A (ja) * 2005-03-22 2006-10-05 Hitachi Ltd 並列化コンパイル処理方法及び並列化されたオブジェクトコードを実行する並列計算機

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNG199901404013; 笠原博徳: '最適化並列コンパイラ技術の現状' 電子情報通信学会誌 第73巻,第3号(通巻790号), 19900325, p.261, 社団法人電子情報通信学会 *
JPN6013003829; 笠原博徳: '最適化並列コンパイラ技術の現状' 電子情報通信学会誌 第73巻,第3号(通巻790号), 19900325, p.261, 社団法人電子情報通信学会 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8881124B2 (en) 2010-12-21 2014-11-04 Panasonic Corporation Compiler device, compiler program, and loop parallelization method
JP5810316B2 (ja) * 2010-12-21 2015-11-11 パナソニックIpマネジメント株式会社 コンパイル装置、コンパイルプログラム及びループ並列化方法
US9891655B2 (en) 2014-12-05 2018-02-13 Fujitsu Limited Parallel operation system, apparatus and medium

Also Published As

Publication number Publication date
JP5218129B2 (ja) 2013-06-26

Similar Documents

Publication Publication Date Title
Du et al. A cost-driven compilation framework for speculative parallelization of sequential programs
US6718541B2 (en) Register economy heuristic for a cycle driven multiple issue instruction scheduler
Johnson et al. Min-cut program decomposition for thread-level speculation
JP2921190B2 (ja) 並列実行方式
US9195444B2 (en) Compiler method and compiler apparatus for optimizing a code by transforming a code to another code including a parallel processing instruction
US9395986B2 (en) Compiling method and compiling apparatus
Apostolakis et al. Perspective: A sensible approach to speculative automatic parallelization
WO2014142704A1 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture
WO2016105840A1 (en) Technologies for low-level composable high performance computing libraries
JP2017107448A (ja) 並列化方法、並列化ツール、車載装置
JP2017228029A (ja) 並列化方法、並列化ツール、車載装置
JP5218129B2 (ja) コンパイル装置およびコンパイルプログラム
Li et al. A hybrid sample generation approach in speculative multithreading
JP5576605B2 (ja) プログラム変換装置およびプログラム変換方法
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
US20170206068A1 (en) Program optimization based on directives for intermediate code
Zhai et al. Compiler and hardware support for reducing the synchronization of speculative threads
US9141357B2 (en) Computer-readable recording medium, compiling method, and information processing apparatus
JP4719415B2 (ja) 情報処理システム及びコード生成方法
RU2206119C2 (ru) Способ получения объектного кода
El-Shobaky et al. Automatic vectorization using dynamic compilation and tree pattern matching technique in Jikes RVM
Kumar et al. An approach for compiler optimization to exploit instruction level parallelism
JP2004038279A (ja) コンパイラ、演算処理システム及び演算処理方法
KR101783312B1 (ko) 클러스터 간의 통신으로 인한 오버헤드를 최소화하는 장치 및 방법
Křoustek et al. Exploitation of scattered context grammars to model VLIW instruction constraints

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111006

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130108

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: 20130205

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130218

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160315

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5218129

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150