JP5846005B2 - プログラム、コード生成方法および情報処理装置 - Google Patents
プログラム、コード生成方法および情報処理装置 Download PDFInfo
- Publication number
- JP5846005B2 JP5846005B2 JP2012076510A JP2012076510A JP5846005B2 JP 5846005 B2 JP5846005 B2 JP 5846005B2 JP 2012076510 A JP2012076510 A JP 2012076510A JP 2012076510 A JP2012076510 A JP 2012076510A JP 5846005 B2 JP5846005 B2 JP 5846005B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instructions
- tree
- code
- simd
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Devices For Executing Special Programs (AREA)
Description
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。情報処理装置10は、第1のコード11aから、SIMD命令を含む第2のコード11bを生成する。第1のコード11aは、例えば、高級言語で記述されたソースコードや、ソースコードから変換された中間コードである。第2のコード11bは、例えば、情報処理装置10または他のコンピュータのプロセッサが解釈可能なオブジェクトコードや実行コードである。情報処理装置10は、ユーザが操作する端末装置としてのクライアントコンピュータでもよいし、端末装置からアクセスされるサーバコンピュータであってもよい。なお、SIMD命令は、異なるデータに対して同じ種類の演算を並列実行するよう指示する特定命令の一例である。
図2は、端末装置が備えるハードウェア例を示すブロック図である。第2の実施の形態の端末装置100は、高級言語で記述されたソースコードをコンパイルして、機械可読なオブジェクトコードを生成し、複数のオブジェクトコードをリンクして、端末装置100または他のコンピュータに実行させる実行コードを生成する。ただし、第2の実施の形態で説明するコンパイルおよびリンクは、サーバコンピュータで実行することもできる。
図4は、SIMD命令とSIMDレジスタの関係例を示す図である。SIMD命令を解釈できるプロセッサは、並列に処理されるデータを組み合わせて格納するSIMDレジスタを備える。各SIMDレジスタは、プロセッサのアーキテクチャによって決まる並列度に相当する数のサブレジスタを含む。図4は、並列度が2の場合を示している。
分割方式では、1つの大きな物理レジスタを論理的に均等な大きさに分割して、複数のサブレジスタを形成する。並列度=2の場合は物理レジスタの記憶領域を2等分し、並列度=4の場合は物理レジスタの記憶領域を4等分する。物理レジスタの大きさを一定とすると、並列度が高いほど、各サブレジスタのビット数は小さくなる。分割方式では、SIMDレジスタは物理的なレジスタを指し、サブレジスタは論理的なレジスタを指す。
図6は、命令間の依存関係の例を示す図である。命令依存グラフ30は、中間コードに含まれる命令間の依存関係を示す。ここでは、コンパイラ120が1度に処理するコード範囲(翻訳単位)に、8個の命令が含まれている場合を考える。図6に示すように、命令1,2,3,8では乗算(×)が行われ、命令4,5,7では減算(−)が行われ、命令6では除算(÷)が行われる。命令4は命令1の演算結果を参照し、命令5は命令1,2の演算結果を参照し、命令6は命令4,5の演算結果を参照し、命令7は命令3の演算結果を参照し、命令8は命令6,7の演算結果を参照している。なお、図6では、理解を容易にするため、各命令を高級言語の形式で記載している。
図8は、ソースコードの例を示す図である。ソースファイル111のある翻訳単位に、図8に示すような10個の命令が含まれているとする。命令1,2,3,5,6,8,9,10では加算(+)が行われ、命令4,7で乗算(×)が行われる。命令4は命令1,2の演算結果を参照し、命令5は命令3,4の演算結果を参照する。命令9は命令6,7の演算結果を参照し、命令10は命令8,9の演算結果を参照する。すなわち、命令1〜5の集合と命令6〜10の集合とは、依存関係がなく並列に実行可能である。
(2)演算列1の1,2,4,5番目と演算列2の1,2,3,4番目とを選択する。これは、命令3,8、命令1,6、命令4,7、命令5,9の組み合わせを意味する。
(4)演算列1の2,3,4,5番目と演算列2の1,2,3,4番目とを選択する。これは、命令1,8、命令2,6、命令4,7、命令5,9の組み合わせを意味する。
(6)演算列1の1,3,4,5番目と演算列2の1,2,3,4番目とを選択する。これは、命令3,8、命令2,6、命令4,7、命令5,9の組み合わせを意味する。
図11は、LCSの算出方法の例を示す図である。最適化部125は、例えば、動的計画法に基づいて、図11に示すようなマトリクスMを作成してLCSを算出する。まず、演算列1を第1行〜第5行に対応付け、演算列2を第1列〜第5列に対応付ける。また、第0行の各欄(M[0,0]〜M[0,5])と第0列の各欄(M[0,0]〜M[5,0])の値を全て0に設定する。そして、次のルールに従って、マトリクスMの左上(M[1,1])から右下(M[5,5])に向かって各欄の値を計算していく。
図17は、SIMD化処理の手順例を示すフローチャートである。
(ステップS1)解析部126は、中間コード記憶部124から、1つの翻訳単位の中間コードを読み出し、読み出した中間コードに含まれる命令の間の依存関係を解析する。そして、解析部126は、命令間の依存関係に従って、複数の演算木を生成する。
(ステップS3b)解析部126は、ステップS3aで選択した組に属する演算木それぞれを演算列に変換し、複数の演算列の間のLCSを全て算出する。
図18は、中間コードの例を示す図である。中間コード142は、中間コード記憶部124に記憶される。中間コード142のある1つの翻訳単位には、命令1〜12が含まれている。命令1,2,4,6,7,9は、RAMからデータを読み出すためのLOAD命令であり、命令12は、RAMにデータを書き込むためのSTORE命令である。命令3,8はMULT(乗算)命令であり、命令5,10,11はADD(加算)命令である。
ノードデータは、ノード番号、命令番号、親ノード番号および子ノード番号の項目を含む。ノード番号は、演算木の各ノードを識別するための番号である。命令番号は、命令データ151に含まれるものと同じである。命令番号によって、命令データ151と演算木データ152とが関連付けられる。親ノード番号は、自ノードの命令の定義オペランドを参照している他の命令に対応するノード番号である。子ノード番号は、自ノードの命令の参照オペランドを定義した他の命令に対応するノード番号である。親ノード番号と子ノード番号によって、複数のノードに対応するノードデータが相互に関連付けられる。
(ステップS111)解析部126は、翻訳単位内の命令列の後方から優先的に、命令を1つ選択する。(ステップS112)解析部126は、選択した命令が既に何れかの演算木に属しているか判断する。命令が何れかの演算木に属する場合、処理をステップS111に進め、それ以外の場合は処理をステップS113に進める。(ステップS113)解析部126は、選択した命令で行う演算が、SIMD化の対象となる演算であるか判断する。SIMD化対象とならない演算には、例えば、分岐命令やバリア命令などの制御命令が含まれる。SIMD化対象となる演算である場合、処理をステップS114に進め、SIMD化対象とならない演算である場合、処理をステップS124に進める。
図22は、演算木の間の依存関係の例を示す図である。演算木間の依存関係は、一方の演算木に属する命令と他方の演算木に属する命令との間に実行順序の制約がある関係であり、一方の演算木に属する命令で定義されるレジスタが、他の演算木に属する命令で参照される関係を含む。ここでは、演算木A,B,C,Dが生成された場合を考える。
(ステップS131)解析部126は、複数の演算木のうち、演算木番号の小さいものを優先的に、演算木#1として1つ選択する。(ステップS132)解析部126は、複数の演算木のうち、演算木#1より演算木番号の大きいものを、演算木#2として1つ選択する。(ステップS133)解析部126は、演算木#1,#2のルートノードの定義オペランドが同一であるか判断する。同一である場合は処理をステップS135に進め、同一でない場合は処理をステップS134に進める。(ステップS134)解析部126は、演算木#2のリーフの参照オペランドの中に、演算木#1のルートノードの定義オペランドが含まれているか判断する。条件を満たす場合は処理をステップS135に進め、条件を満たさない場合は処理をステップS136に進める。
図24は、演算木組データと命令組データの例を示す図である。解析部126は、SIMD化する命令組を決定すると、演算木組データ154および命令組データ155を生成する。また、解析部126は、SIMD化する命令組を探索している間、一時保存データ156を生成してRAM102上に保存しておく。
(ステップS141)解析部126は、生成された演算木が、全ての組み合わせを探索できる程度の量であるか、すなわち、演算木の数が閾値以下であるか判断する。閾値は、端末装置100の計算能力に応じて変更してもよい。演算木の数が閾値以下の場合は処理をステップS144に進め、閾値を超える場合は処理をステップS142に進める。(ステップS142)解析部126は、後述する方法により、ノード数の多い演算木から優先的に他の演算木との間のLCSを算出し、演算木の組を1つ決定する。(ステップS143)解析部126は、全ての演算木を処理したか判断する。全ての演算木を処理した場合は処理を終了し、未処理の演算木がある場合は処理をステップS142に進める。
(ステップS171)解析部126は、LCSに基づいて、演算木#1に属する命令と演算木#2に属する命令との組を1つ選択する。(ステップS172)解析部126は、ステップS171で選択した命令組を仮にSIMD命令に変換する。(ステップS173)解析部126は、ステップS172の変換を行った後の中間コードについて、プロセッサのリソースの使用状況を評価し、変換前のリソースの使用状況と比較する。前述のように、リソースの使用状況として、例えば、SIMDレジスタの数、命令の総数、転送命令の数などを評価する。リソースの使用状況を評価するため、解析部126は、例えば、SIMDレジスタの割り当てをシミュレーションする。
(ステップS181)解析部126は、LCSに基づいて、演算木#1に属する命令と演算木#2に属する命令との組を1つ選択する。(ステップS182)解析部126は、命令組の一方の命令に含まれるオペランドと他方の命令に含まれるオペランドの組を1つ選択する。ここで選択するオペランドには、参照オペランドと定義オペランドの両方が含まれる。(ステップS183)解析部126は、ステップS182で選択した2つのオペランドの少なくとも一方が、採用することが既に決定された命令組に出現するオペランドであるか判断する。出現済のオペランドである場合は処理をステップS184に進め、未出現のオペランドである場合は処理をステップS189に進める。
11 記憶部
11a 第1のコード
11b 第2のコード
12 演算部
13a,13b 演算木
14a,14b 演算列
15a,15b 最長サブ演算列
Claims (6)
- 第1のコードから、前記第1のコードに含まれる2以上の命令を組み合わせて、異なるデータに対して同じ種類の演算を並列実行するよう指示する特定命令を生成することで、当該特定命令を含む第2のコードを生成するためのプログラムであって、コンピュータに、
前記第1のコードに含まれる命令の間の依存関係を示す第1および第2の演算木を生成し、前記第1の演算木の各命令で指定された演算を前記第1の演算木の構造に応じた順序で並べた第1の演算列と、前記第2の演算木の各命令で指定された演算を前記第2の演算木の構造に応じた順序で並べた第2の演算列とを算出し、
前記第1および第2の演算列の少なくとも一方から1またはそれ以上の演算を削除することで現れる、前記第1および第2の演算列に共通のサブ演算列のうち、長さが最大である1またはそれ以上の最長サブ演算列を算出し、
2以上の最長サブ演算列が算出されたとき、各最長サブ演算列について、当該最長サブ演算列に含まれる各演算に該当する前記第1の演算木の命令と前記第2の演算木の命令とを組み合わせた場合の、実行時の計算リソースの使用状況を評価し、評価結果に基づいて、何れかの最長サブ演算列が示す命令の組み合わせのパターンを選択する、
処理を実行させるプログラム。 - 前記計算リソースの使用状況の評価では、前記第2のコードに、異なるデータに対して同じ種類の演算を並列実行するよう指示する特定命令を挿入することに伴って生成される、当該特定命令で参照されるデータをレジスタ間で転送するための転送命令の数を評価する、請求項1記載のプログラム。
- 前記計算リソースの使用状況の評価では、前記第1のコードに含まれる命令を、異なるデータに対して同じ種類の演算を並列実行するよう指示する特定命令に変換することによる命令の減少量と、前記転送命令が生成されることによる命令の増加量とに応じた指標値を算出する、請求項2記載のプログラム。
- 前記計算リソースの使用状況の評価では、前記第2のコードを実行するプロセッサが、前記転送命令が入力されなくても仮想的にレジスタ間でデータが転送されたと扱って当該データに対して演算を行うクロス演算命令をサポートしているか判定し、判定結果に応じて、生成される前記転送命令の数を評価する、請求項2または3記載のプログラム。
- 第1のコードから、前記第1のコードに含まれる2以上の命令を組み合わせて、異なるデータに対して同じ種類の演算を並列実行するよう指示する特定命令を生成することで、当該特定命令を含む第2のコードを生成する、コンピュータが実行するコード生成方法であって、
前記第1のコードに含まれる命令の間の依存関係を示す第1および第2の演算木を生成し、前記第1の演算木の各命令で指定された演算を前記第1の演算木の構造に応じた順序で並べた第1の演算列と、前記第2の演算木の各命令で指定された演算を前記第2の演算木の構造に応じた順序で並べた第2の演算列とを算出し、
前記第1および第2の演算列の少なくとも一方から1またはそれ以上の演算を削除することで現れる、前記第1および第2の演算列に共通のサブ演算列のうち、長さが最大である1またはそれ以上の最長サブ演算列を算出し、
2以上の最長サブ演算列が算出されたとき、各最長サブ演算列について、当該最長サブ演算列に含まれる各演算に該当する前記第1の演算木の命令と前記第2の演算木の命令とを組み合わせた場合の、実行時の計算リソースの使用状況を評価し、評価結果に基づいて、何れかの最長サブ演算列が示す命令の組み合わせのパターンを選択する、
コード生成方法。 - 第1のコードと、異なるデータに対して同じ種類の演算を並列実行するよう指示する特定命令を含む第2のコードとを記憶する記憶部と、
前記第1のコードに含まれる2以上の命令を組み合わせて前記特定命令を生成することで、前記第1のコードから前記第2のコードを生成する演算部と、
を有し、前記演算部は、
前記第1のコードに含まれる命令の間の依存関係を示す第1および第2の演算木を生成し、前記第1の演算木の各命令で指定された演算を前記第1の演算木の構造に応じた順序で並べた第1の演算列と、前記第2の演算木の各命令で指定された演算を前記第2の演算木の構造に応じた順序で並べた第2の演算列とを算出し、
前記第1および第2の演算列の少なくとも一方から1またはそれ以上の演算を削除することで現れる、前記第1および第2の演算列に共通のサブ演算列のうち、長さが最大である1またはそれ以上の最長サブ演算列を算出し、
2以上の最長サブ演算列が算出されたとき、各最長サブ演算列について、当該最長サブ演算列に含まれる各演算に該当する前記第1の演算木の命令と前記第2の演算木の命令とを組み合わせた場合の、実行時の計算リソースの使用状況を評価し、評価結果に基づいて、何れかの最長サブ演算列が示す命令の組み合わせのパターンを選択する、
情報処理装置。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2012076510A JP5846005B2 (ja) | 2012-03-29 | 2012-03-29 | プログラム、コード生成方法および情報処理装置 |
| US13/794,938 US8943484B2 (en) | 2012-03-29 | 2013-03-12 | Code generation method and information processing apparatus |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2012076510A JP5846005B2 (ja) | 2012-03-29 | 2012-03-29 | プログラム、コード生成方法および情報処理装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2013206289A JP2013206289A (ja) | 2013-10-07 |
| JP5846005B2 true JP5846005B2 (ja) | 2016-01-20 |
Family
ID=49236679
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2012076510A Active JP5846005B2 (ja) | 2012-03-29 | 2012-03-29 | プログラム、コード生成方法および情報処理装置 |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US8943484B2 (ja) |
| JP (1) | JP5846005B2 (ja) |
Families Citing this family (12)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9195436B2 (en) * | 2013-10-14 | 2015-11-24 | Microsoft Technology Licensing, Llc | Parallel dynamic programming through rank convergence |
| US10372492B2 (en) * | 2013-12-11 | 2019-08-06 | Dropbox, Inc. | Job-processing systems and methods with inferred dependencies between jobs |
| US9465653B2 (en) | 2013-12-11 | 2016-10-11 | Dropbox, Inc. | Automated invalidation of job output data in a job-processing system |
| US9501268B2 (en) * | 2013-12-23 | 2016-11-22 | International Business Machines Corporation | Generating SIMD code from code statements that include non-isomorphic code statements |
| JP6237278B2 (ja) * | 2014-01-31 | 2017-11-29 | 富士通株式会社 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
| JP6245031B2 (ja) * | 2014-03-27 | 2017-12-13 | 富士通株式会社 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
| US20180121202A1 (en) * | 2016-11-02 | 2018-05-03 | Intel Corporation | Simd channel utilization under divergent control flow |
| JP6897213B2 (ja) * | 2017-03-24 | 2021-06-30 | 日本電気株式会社 | コード生成装置、コード生成方法及びコード生成プログラム |
| US10133573B1 (en) * | 2017-12-12 | 2018-11-20 | Google Llc | Multivalue reductions using serial initial reductions in multiple register spaces and parallel subsequent reductions in a single register space |
| US10997083B2 (en) * | 2018-09-04 | 2021-05-04 | Arm Limited | Parallel page table entry access when performing address translations |
| JP7263994B2 (ja) * | 2019-09-17 | 2023-04-25 | 富士通株式会社 | 情報処理方法及び最適化プログラム |
| AU2021470708A1 (en) * | 2020-11-04 | 2024-04-04 | Mynatix Ag | System for auto-parallelization of processing codes for multi-processor systems with optimized latency, and method thereof |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP4045802B2 (ja) * | 2002-01-08 | 2008-02-13 | ソニー株式会社 | プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム |
| US7802076B2 (en) | 2004-06-24 | 2010-09-21 | Intel Corporation | Method and apparatus to vectorize multiple input instructions |
| US8225285B2 (en) * | 2006-04-03 | 2012-07-17 | International Business Machines Corporation | Generating a test suite to test support for routines |
| JP2008097249A (ja) * | 2006-10-11 | 2008-04-24 | Internatl Business Mach Corp <Ibm> | プログラム中の命令列をより高速な命令に置換する技術 |
-
2012
- 2012-03-29 JP JP2012076510A patent/JP5846005B2/ja active Active
-
2013
- 2013-03-12 US US13/794,938 patent/US8943484B2/en active Active
Also Published As
| Publication number | Publication date |
|---|---|
| US8943484B2 (en) | 2015-01-27 |
| JP2013206289A (ja) | 2013-10-07 |
| US20130262835A1 (en) | 2013-10-03 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP5846005B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
| JP5966509B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
| Eigenmann et al. | On the automatic parallelization of the Perfect Benchmarks (R) | |
| US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
| JP3711206B2 (ja) | コンパイル方法 | |
| Fedyukovich et al. | Gradual synthesis for static parallelization of single-pass array-processing programs | |
| EP2951682B1 (en) | Hardware and software solutions to divergent branches in a parallel pipeline | |
| JP6245031B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
| JP6432450B2 (ja) | 並列計算装置、コンパイル装置、並列処理方法、コンパイル方法、並列処理プログラムおよびコンパイルプログラム | |
| Phothilimthana et al. | Tpugraphs: A performance prediction dataset on large tensor computational graphs | |
| JP2015201119A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
| Rul et al. | A profile-based tool for finding pipeline parallelism in sequential programs | |
| Kannan | Efficient sparse matrix multiple-vector multiplication using a bitmapped format | |
| US9213548B2 (en) | Code generation method and information processing apparatus | |
| Zhang et al. | AccelOpt: A Self-Improving LLM Agentic System for AI Accelerator Kernel Optimization | |
| US10108405B2 (en) | Compiling apparatus and compiling method | |
| Deo et al. | Performance and metrics analysis between python3 via mojo | |
| Preissl et al. | Transforming MPI source code based on communication patterns | |
| US20220405110A1 (en) | Non-transitory computer-readable recording medium and compilation method | |
| JP2021093012A (ja) | コンパイルプログラム、および情報処理装置 | |
| Zhao et al. | Performance evaluation of NPB and SPEC CPU2006 on various SIMD extensions | |
| JP6897213B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
| CN100559344C (zh) | 一种支持用规则记录变量访问专用寄存器组的处理方法 | |
| Zhang et al. | Slackq: Approaching the qubit mapping problem with a slack-aware swap insertion scheme | |
| Vohra et al. | Mind the Abstraction Gap: Bringing Equality Saturation to Real-World ML Compilers |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150106 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150915 |
|
| 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: 20151027 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20151109 |
|
| R150 | Certificate of patent or registration of utility model |
Ref document number: 5846005 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |