JP2010191506A - コンパイル装置およびコンパイルプログラム - Google Patents
コンパイル装置およびコンパイルプログラム Download PDFInfo
- 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
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【解決手段】参照先行のデータ依存がある配列をワーク変数に設定し、ループを生成し、該ループの後に、データ依存のある配列を前記ワーク変数に置換したループの実行文を計算する。
【選択図】図5
Description
自動並列化は、複数のCPUを持つ計算機において、並列に実行するために、逐次コードを並列実行可能なコードに変換するものである。
図1では、変数Iを1からNまで1ずつ増加させ、各ループでA(I)=A(I)+B(I)を計算することで、A(1)からA(N)までを算出している。
尚、以下の説明では、スレッドはCPUと1対1で割り当てられたスレッドとする。
ここで、変数Nは10とし、A(1)からA(10)までを計算する場合を述べる。
並列実行では、スライス位置で分割され、各スレッドで実行される。
図2の右側で示すように、2並列実行では、A(1)からA(5)がスレッド0で計算され、A(6)からA(10)がスレッド1で計算される。
図3は、データ依存のあるループを表すソースプログラムである。
図3では、変数Iを1からN-2まで1ずつ増加させ、各ループでA(I)=A(I+2)+B(I)を計算することで、A(1)からA(N-2)までを算出している。
図4の左側に示すように、逐次実行では、A(1)からA(10)まで順に計算されていく。
図4の右側で示すように、2並列実行では、A(1)からA(5)がスレッド0で計算され、A(6)からA(10)がスレッド1で計算される。
このように、参照先行のデータ依存を持つループを従来の技術を用いて並列化を行うと、実行結果誤りとなってしまうため、自動並列化できないという問題があった。
本実施の形態において、コンパイルされたプログラムは、通常、複数のCPUを持つ計算機で実行される。複数のCPUを持つ計算機は、複数のスレッドで並列処理を行うことにより、効率よく処理を行うことができる。スレッドとは、CPU利用の単位であり、本実施形態において、スレッドはCPUと1対1で割り当てられているものとする。
コンパイル装置501は、コンパイル手段502を備える。
コンパイル手段502は、ソースプログラム511をコンパイルして、オブジェクトファイル512を生成する。
ソース解析手段503は、入力されたソースプログラム511を解析して、ソースプログラム511に対応する中間言語列(中間コード)に変換する。
最適化手段は、ソース解析手段503から出力された中間言語列を最適化して、最適化した中間言語列を出力する。
ステップS601において、ソース解析手段503はソースプログラム511を読み出し、コンパイルを開始する。
ステップS602において、ソース解析手段503はソースプログラム511を解析して中間言語列を生成し、最適化手段に出力する。
ステップS605において、コード生成手段505は、オブジェクトファイル512を出力して、コンパイルを終了する。
自動並列化はステップS604で行われる最適化の一部である。
ステップS701において、並列化解析処理を開始する。
ステップS703において、最適化手段504は、ループを跨いだデータ依存があるかどうかを判定する。ループを跨いだデータ依存としては、例えば参照先行、定義先行、手続呼び出し等がある。すなわち、ステップS703では従来の並列化生成処理が適応できるかを判断している。ループを跨いだデータ依存がある場合は、ステップS705に制御は進み、ループを跨いだデータ依存がない場合はステップS704に制御は進む。
ステップS705において、最適化手段504は、参照先行のデータ依存があるかどうかを判定する。参照先行のデータ依存がある場合はステップS706に制御は進み、参照先行のデータ依存がない場合はステップS716に制御は進む。また、ステップS705において、データ依存のある配列の添え字の幅と回転数の幅を認識する。尚、添え字の幅と回転数の幅については後述する。
ステップS708において、最適化手段504は、中間言語の生成処理を開始する。
尚、添え字の幅とは、データ依存のある配列において、参照する配列の添え字と定義する配列の添え字との差分である。図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)
:
以上のようになる。
次に、図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)
:
以上のようになる。
例えば、図3のループの場合、図4に示すようにデータ依存のあるA(6)はA(4)の計算とA(6)の計算で出てくる。A(4)とA(6)との間は2であるので、データ依存のある回転数の幅は2となる。
各スレッドのループ回転数LLは、逐次ループの回転数((終値−初期値+増分値)/増分値)をA、通常のスライス計算の回転数(A/スレッド数)をB、データ依存のある添え字の幅をWIDTHとすると、下式で求められる。
LL=B-WIDTH
また、各スレッドの配列の添え字の終値IEは、IS+LL-1で求められる。
すなわち、データ依存のある配列をループの前でワーク変数TMPn,(n=1〜M)として設定する。
ここで、退避する配列の添え字は、IE+K*ループ増分値+WIDTH,(K=1〜M)である。
ステップS714において、最適化手段504は、回転数の幅の分だけ、ソースプログラムのループ内の中間言語をコピーし、コピーしたループ内の中間言語で右辺のデータ依存のある配列要素をステップS711で退避したワーク変数に置換する。
ここで算出する配列の添え字は、IE+K*ループ増分値,(K=1〜M)である。
ステップS716において、最適化手段504は、次のループを取り出し、ステップS702に制御は戻る。次のループがない場合は、処理を終了する。
図10は、図3に示すループに対して最適化を行った場合に生成される中間言語列の構造を示す図である。
先ず、解析処理として、ループがあるか(ステップS702)、ループを跨いだデータ依存があるか(ステップS703)のチェックを行う。
そして、中間言語の生成処理を開始する(ステップS708)。
各スレッドのループ回転数LL、初期値IS、終値IEを設定する中間言語(図10の中間言語3、4、および5に対応)を生成する(ステップS710)。
上記のように最適化された中間言語列は、コード生成手段505に入力され、オブジェクトファイル512が生成される。
尚、変数Nは12とし、ループ回転数は10回転となる。
次に並列実行した場合を説明する。
本実施の形態では、2つのスレッドが実行可能なコンピュータで実行した場合を考える。2つのスレッドをそれぞれスレッド0、スレッド1とする。
プログラムの実行時にスレッド数が与えられ、コンピュータはライブラリを利用して処理を各スレッドに分散させる。
(1)中間言語1および2
データ依存のある回転数の幅Mは2、データ依存のある添え字の幅WIDTHは2である。
各スレッドのループ回転数LLとして、3が得られる。
そして、通常の各スレッドの初期値ISとして、IS0=1、IS1=6が得られる。
各スレッドの終値IEとして、IE0=3、IE1=8が得られる。
スレッド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参照)。
スレッド0および1において、バリアライブラリを呼び出す(図11のb参照)。
スレッド0において、IS0=1からIE0=3まで、ループを計算する。すなわち、A(1)〜A(3)を算出する(図11のc0参照)。
スレッド1において、IS1=6からIE1=8まで、ループを計算する。すなわち、A(6)〜A(8)を算出する(図11のc1参照)。
スレッド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参照)。
以上のように、各スレッドにおいてループが計算される。
この時、スレッド0において、ループ計算の前に、データ依存のあるA(6)およびA(7)は、TMP1およびTMP2に退避している。
そして、A(4)およびA(5)の計算において、A(6)およびA(7)の代わりにTMP1およびTMP2をそれぞれ利用している。
これにより、スレッド0におけるA(4)およびA(5)の計算の前に、スレッド1でA(6)およびA(7)が定義されても、スレッド0におけるA(4)およびA(5)の計算に影響を及ぼすことは無く、正しい結果が得られる。
また、上述のコンパイル装置501は、例えば、図12に示すような情報処理装置(コンピュータ)を用いて構成される。
メモリ12は、プログラム実行の際に、記憶部15(あるいは可搬記録媒体19)に記憶されているプログラムあるいはデータを一時的に格納するROM(read only memory)やRAM(random access memory)等のメモリである。CPU11は、メモリ12を利用してプログラムを実行することにより、上述した各種処理を実行する。
出力部14は、例えば、ディスプレイ、プリンタ等である。
記憶部15は、例えば、磁気ディスク装置、光ディスク装置、テープ装置等である。情報処理装置10は、記憶部15に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ12に読み出して使用する。
本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または形状を取ることができる。
11 CPU
12 メモリ
13 入力部
14 出力部
15 記憶部
16 記録媒体駆動部
17 ネットワーク接続部
18 バス
19 可搬記録媒体
501 コンパイル装置
502 コンパイル手段
502 ソース解析手段
503 最適化手段
504 コード生成手段
511 ソースプログラム
512 オブジェクトファイル
Claims (8)
- ソースプログラムを解析して中間言語列を生成するソース解析手段と、
前記中間言語列を最適化する最適化手段と
前記最適化手段から出力された中間言語列からオブジェクトファイルを生成するコード生成手段と、
を備え、
前記最適化手段は、
参照された後に定義される依存関係である参照先行のデータ依存がある配列をワーク変数に、該配列が参照されてから定義されるまで実行されるループの回数だけ設定する中間言語を生成し、
ループを生成し、該ループ内に前記ソースプログラムのループ内の実行文に対応する中間言語をコピーし、
前記配列が参照されてから定義されるまで実行されるループの回数だけ、前記ソースプログラムのループ内の実行文に対応する中間言語をコピーし、該コピーした中間言語でデータ依存のある配列を前記ワーク変数に置換した中間言語を生成することを特徴とするコンパイル装置。 - 前記最適化手段は、前記中間言語列に参照先行のデータ依存を持つループがあるかを判定することを特徴とする請求項1記載のコンパイル装置。
- 前記最適化手段は、
各スレッドの初期値および各スレッドの終値を設定する中間言語を生成し、
前記生成したループは、前記初期値から前記終値までのループであることを特徴とする請求項1記載のコンパイル装置。 - 前記最適化手段は、同期処理のためのバリアライブラリを呼び出す中間言語を生成することを特徴とする請求項1記載のコンパイル装置。
- コンピュータに
ソースプログラムを解析して中間言語列を生成するステップと、
前記中間言語列を最適化する最適化ステップと
前記最適化手段から出力された中間言語列からオブジェクトファイルを生成するコード生成ステップと、
を実行させるコンパイルプログラムにおいて、
前記最適化ステップは、
参照された後に定義される依存関係である参照先行のデータ依存がある配列をワーク変数に、該配列が参照されてから定義されるまで実行されるループの回数だけ設定する中間言語を生成するステップ、
ループを生成し、該ループ内に前記ソースプログラムのループ内の実行文に対応する中間言語をコピーするステップ、
前記配列が参照されてから定義されるまで実行されるループの回数だけ、前記中間言語列のループ内の実行文に対応する中間言語をコピーし、該コピーした中間言語でデータ依存のある配列を前記ワーク変数に置換した中間言語を生成するステップ、
を備えることを特徴とするコンパイルプログラム。 - 前記最適化ステップは、前記中間言語列に参照先行のデータ依存をもつループがあるかを判定する判定ステップを備えることを特徴とする請求項5記載のコンパイルプログラム。
- 前記最適化ステップは、各スレッドの初期値および各スレッドの終値を設定する中間言語を生成するステップを備え、
前記生成したループは、前記初期値から前記終値までのループであることを特徴とする請求項5記載のコンパイルプログラム。 - 前記最適化ステップは、同期処理のためのバリアライブラリを呼び出す中間言語を生成するステップを備えることを特徴とする請求項5記載のコンパイルプログラム。
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)
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)
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 | 並列化コンパイル処理方法及び並列化されたオブジェクトコードを実行する並列計算機 |
-
2009
- 2009-02-16 JP JP2009032442A patent/JP5218129B2/ja active Active
Patent Citations (3)
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)
Title |
---|
CSNG199901404013; 笠原博徳: '最適化並列コンパイラ技術の現状' 電子情報通信学会誌 第73巻,第3号(通巻790号), 19900325, p.261, 社団法人電子情報通信学会 * |
JPN6013003829; 笠原博徳: '最適化並列コンパイラ技術の現状' 電子情報通信学会誌 第73巻,第3号(通巻790号), 19900325, p.261, 社団法人電子情報通信学会 * |
Cited By (3)
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 |