JP2015143939A - コンパイルプログラム、コンパイル方法およびコンパイル装置 - Google Patents
コンパイルプログラム、コンパイル方法およびコンパイル装置 Download PDFInfo
- Publication number
- JP2015143939A JP2015143939A JP2014017204A JP2014017204A JP2015143939A JP 2015143939 A JP2015143939 A JP 2015143939A JP 2014017204 A JP2014017204 A JP 2014017204A JP 2014017204 A JP2014017204 A JP 2014017204A JP 2015143939 A JP2015143939 A JP 2015143939A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instructions
- dependency
- tree
- fma
- 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
- 238000000034 method Methods 0.000 title claims description 158
- 150000001875 compounds Chemical class 0.000 claims abstract description 38
- 238000012545 processing Methods 0.000 claims abstract description 35
- 238000006243 chemical reaction Methods 0.000 claims description 61
- 238000007493 shaping process Methods 0.000 claims description 2
- 238000001514 detection method Methods 0.000 claims 1
- 238000005457 optimization Methods 0.000 abstract description 37
- 238000004364 calculation method Methods 0.000 abstract description 32
- 238000004458 analytical method Methods 0.000 description 182
- 230000008569 process Effects 0.000 description 106
- 238000007792 addition Methods 0.000 description 73
- 238000010586 diagram Methods 0.000 description 31
- 238000010606 normalization Methods 0.000 description 16
- 238000013519 translation Methods 0.000 description 14
- 238000012986 modification Methods 0.000 description 10
- 230000004048 modification Effects 0.000 description 10
- 230000015654 memory Effects 0.000 description 9
- 230000001419 dependent effect Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 239000002131 composite material Substances 0.000 description 2
- 230000010365 information processing Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000012854 evaluation process Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000001131 transforming effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/453—Data distribution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/30145—Instruction analysis, e.g. decoding, instruction word fields
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
Description
また、1つの態様では、記憶部と演算部とを有するコンパイル装置が提供される。記憶部は、第1のコードと第1のコードから変換される第2のコードとを記憶する。演算部は、第1のコードに含まれる複数の命令の間の依存関係を示す依存ツリーを生成する。演算部は、依存ツリーから、第1の命令と第2の命令と第1および第2の命令の演算結果に依存する第3の命令とを含む部分ツリーを検出し、1命令によって複数の演算を含む複合演算をプロセッサに実行させる複合命令を用いて部分ツリーを書き換える。演算部は、複合命令を含む依存ツリーに基づいて第2のコードを生成する。
[第1の実施の形態]
図1は、第1の実施の形態のコンパイル装置の例を示す図である。
図2は、端末装置が備えるハードウェア例を示すブロック図である。
第2の実施の形態の端末装置100は、高級言語で記述されたソースコードをコンパイルして、機械可読なオブジェクトコードを生成する。また、端末装置100は、複数のオブジェクトコードをリンクして、端末装置100または他のコンピュータに実行させる実行コードを生成する。ただし、第2の実施の形態で説明するコンパイルおよびリンクは、端末装置100からアクセスされるサーバコンピュータで実行することもできる。
端末装置100は、ファイル記憶部110、コンパイラ120およびリンカ130を有する。ファイル記憶部110は、例えば、RAM102またはHDD103に確保した記憶領域として実現することができる。コンパイラ120およびリンカ130は、例えば、CPU101が実行するプログラムのモジュールとして実現することができる。
図4は、SIMD命令とSIMDレジスタの関係例を示す図である。
SIMD命令を解釈できるプロセッサは、並列に処理するデータを組み合わせて格納するSIMDレジスタを備える。各SIMDレジスタは、プロセッサのアーキテクチャによって決まる並列度(並列に実行できる同じ種類の演算の数)に相当する数のサブレジスタを含む。図4の例は、並列度が2の場合を示している。
プロセッサ内にSIMDレジスタを実装する方式としては、例えば、図5に示すような(A)分割方式または(B)結合方式を用いることができる。
FMA命令を解釈できるプロセッサは、1つのFMA命令に基づいて積和演算、すなわち、乗算とその乗算結果を用いた加算とを実行する。例えば、X=B×C,A=X+Dという2つの命令を1つのFMA命令に変換すると、プロセッサは1命令としてA=B×C+Dを算出する。また、Y=F×G,E=Y+Hという2つの命令を1つのFMA命令に変換すると、プロセッサは1命令としてE=F×G+Hを算出する。
図7は、加算と乗算を含む命令列の例を示す図である。
コンパイラ120は、図7に示した命令1〜14から、命令1〜14の間の依存関係を示す依存ツリー31,32を生成する。依存ツリー31は、命令1,3,5,7,9,11,13を含む。上記のように、命令1,3,5,7,13は乗算(MULT)の命令であり、命令9,11は加算(ADD)の命令である。命令9は命令1,5に依存し、命令11は命令3,7に依存し、命令13は命令9,11に依存する。
コンパイラ120は、依存ツリー31,32を直接探索して命令1〜14を最適化する場合、例えば、次のような手順でSIMD−FMA命令を生成することが考えられる。
2つの依存ツリーの同じ深さに同じ種類の演算の命令がn個ずつ存在するとき、その深さにおける命令の組み合わせパターンはnPn通りになる。依存ツリー全体の組み合わせパターン数は、各深さの組み合わせパターン数の合計となる。図8に示した依存ツリー31,32の場合、深さ3に4個の乗算命令があり、深さ2に2個の加算命令があり、深さ1に1個の乗算命令があるため、4P4+2P2+1P1=24+2+1=27通りの組み合わせパターンが存在する。この探索方法は、依存ツリーの規模が大きくなると計算量や使用するメモリ領域が急激に増大し、長時間を要する可能性がある。
図10は、FMA正規化した依存ツリーの例を示す図である。
コンパイラ120は、前述の依存ツリー31を変形して依存ツリー33を生成し、前述の依存ツリー32を変形して依存ツリー34を生成する。依存ツリー31,32に含まれていた命令は、全て1種類の命令(FMA命令)に変換されている。
依存ツリー31,32から依存ツリー33,34に変換することは、コード141から図11に示すようなコード144に変換することを実質的に意味する。コード144は、依存ツリー33,34に表したように10個のFMA命令を含む。コンパイラ120は、依存ツリー33と依存ツリー34とを比較して、SIMD化可能な依存ツリー33の命令と依存ツリー34の命令との組み合わせのパターンを探索する。SIMD化可能な命令の組は、演算の種類および深さが同じ命令の組である。ただし、依存ツリー33,34の命令では、演算の種類が積和演算(FMADD)に統一されている。
図12は、SIMD最適化の手順例を示すフローチャートである。
(S1)解析部126は、中間コード記憶部124から1つの翻訳単位の中間コードを読み出し、読み出した中間コードに含まれる命令の間の依存関係を解析する。そして、解析部126は、命令間の依存関係を示す複数の依存ツリーを生成する。
図13は、加算と乗算を含む中間コードの例を示す図である。
依存ツリー41は、図13に示した命令1〜12から生成される。命令1〜12と依存関係がない命令13は、依存ツリー41に属さない。依存ツリー41では、一方の命令が他方の命令に依存しているとき、一方の命令が親ノードに対応付けられ、他方の命令が子ノードに対応付けられる。依存ツリー41のリーフノードからルートノードに向かって演算が進行することになる。図14に示すように、命令3は命令1,2に依存し、命令5は命令3,4に依存し、命令8は命令6,7に依存し、命令10は命令8,9に依存し、命令11は命令5,10に依存し、命令12は命令11に依存している。
依存関係の解析を通じて、命令データ151および依存データ152が生成される。
命令データ151は、命令毎に、命令番号、解析済フラグ、命令名、定義オペランドおよび参照オペランドの項目を含む。命令番号は、各命令を識別するための番号である。解析済フラグは、依存関係の解析などの処理の際に、その命令が解析済か否かを識別するために利用されるフラグである。解析済フラグの初期値はOFFに設定される。命令名は、演算の種類を示す名称(ADD,SUB,MULT,DIV,LOAD,STORE、FMADDなど)である。定義オペランドの項目には、中間コード146で使用されている論理的なレジスタまたはRAMの記憶領域を示す識別子であって、データの格納先を示す識別子が設定される。参照オペランドの項目には、参照するデータが格納されている1または2以上の論理的なレジスタまたはRAMの記憶領域を示す識別子が設定される。
このフローチャートが示す処理は、前述のステップS1において実行される。
(S111)解析部126は、翻訳単位に含まれる命令を、先頭から優先的に1つ選択する。(S112)解析部126は、選択した命令から命令名、定義オペランドおよび参照オペランドを抽出し、命令番号を付与して命令データ151にその命令を登録する。(S113)解析部126は、ステップS111で翻訳単位の末尾まで全ての命令を選択したか判断する。全て選択した場合は処理をステップS114に進め、未選択の命令がある場合は処理をステップS111に進める。
図17は、依存ツリーに対するFMA正規化の前調整の例を示す図である。
解析部126は、三角の部分ツリーが多く検出されるように前調整を行う。
このフローチャートが示す処理は、前述のステップS2aにおいて実行される。
(S131)解析部126は、依存ツリーのルートノードに近い命令から優先的に、乗算命令または加算命令である命令M(第1の命令)を1つ選択する。(S132)解析部126は、第1の命令から見て子ノードに相当する2つの子命令のうち、一方(第2の命令)のみが乗算命令や加算命令などの演算命令であり、他方がロード命令などの非演算命令であるか判断する。一方の子命令のみ演算命令である場合は処理をステップS133に進め、それ以外の場合は処理をステップS136に進める。
図19は、変形前の依存ツリーの例を示す図である。
依存ツリー44,45は、中間コードに含まれる命令間の依存関係を示す。ここでは、コンパイラ120が1度に処理するコード範囲(翻訳単位)に、命令1〜16が含まれているとする。命令1,2,4,5,8,10,11,13,14はロード命令であり、命令3,7,15は乗算命令であり、命令6,9,12,16は加算命令である。命令1はデータA(I)、命令2はデータC(I)、命令4はデータB(I)、命令5はデータD(I)をロードする。命令10はデータD(I+1)、命令11はデータB(I+1)、命令13はデータC(I+1)、命令14はデータA(I+1)をロードする。データA(I)とA(I+1)、データB(I)とB(I+1)、データC(I)とC(I+1)、データD(I)とD(I+1)は、RAM上に隣接して配置される可能性が高い。
依存ツリー44の高さ(ルートノードから最も深いリーフノードまでに並んだノードの数)は4である一方、依存ツリー45の高さは3である。そこで、解析部126は、高さの小さい依存ツリー45を、疑似命令を挿入することで依存ツリー46に変形する。
解析部126は、依存ツリー44,46の対応する位置に、同じ種類の演算を行う命令が存在する確率を高くするため、順序を入れ替え可能な命令を演算の種類に応じてソートする。演算順序の入れ替えは、依存ツリー44,46それぞれに対して行う。図21は、依存ツリー46を、演算順序を入れ替えて依存ツリー47に変形する例を示している。
解析部126は、ロード命令の組をSIMD化するとき、複数のロード命令ができる限りRAMの近い記憶領域にアクセスするよう、変数名に応じてロード命令をソートする。変数名の入れ替えは、依存ツリー44,47それぞれに対して行う。図22は、依存ツリー47を、変数名を入れ替えて依存ツリー48に変形する例を示している。
このフローチャートが示す処理は、前述のステップS2bにおいて実行される。この処理は、複数の依存ツリーのうち最も高いもの以外の各依存ツリーに対して行われる。
このフローチャートが示す処理は、前述のステップS2c,S2dにおいて実行される。この処理は、図23の処理の後に各依存ツリーに対して行われる。
図25は、変換規則テーブルの例を示す図である。
変換規則テーブル153は、RAM102またはHDD103に格納されている。解析部126は、依存ツリーに含まれる三角の部分ツリーをFMA命令を用いて書き換える(FMA正規化を行う)とき、変換規則テーブル153を参照する。変換規則テーブル153は、ルール番号、変換前の式および変換後の式の項目を含む。ルール番号の項目には、各変換規則に付与された番号が登録される。変換前の式の項目には、部分ツリーに含まれる3つの命令の演算の種類を示す式が登録される。変換後の式の項目には、変換前の部分ツリーを2以上のFMA命令の組み合わせとして表現した式が登録される。変換前の式は変換規則の適用条件に相当し、変換後の式は適用される変換規則に相当する。
変換規則を定義するにあたり、同じ部分ツリーに対して複数の変換パターンが考えられる場合もある。例えば、頂点と左側依存点が乗算命令であり右側依存点が加算命令である部分ツリー(変換規則7)に対しては、図26のようにパターン1,2が考えられる。
このフローチャートが示す処理は、前述のステップS3において実行される。
(S161)解析部126は、依存ツリーから積和形式の部分ツリー、すなわち、乗算命令とその乗算結果を参照する加算命令との組を抽出する。そして、解析部126は、抽出した部分ツリーを1つのFMA命令に書き換える。(S162)解析部126は、依存ツリーから三角の部分ツリー、すなわち、変換規則テーブル153に登録された変換規則1〜8の何れかの適用条件に該当する部分ツリーを抽出する。この部分ツリーは、乗算命令または加算命令である1つの頂点Pと、それぞれが乗算命令または加算命令である2つの依存点C1,C2とを含むものである。(S163)解析部126は、ステップS162で抽出した三角の部分ツリーのうちの1つを選択する。
図28は、依存ツリーの分割例を示す図である。
ここでは、図28に示す命令1〜14を含む依存ツリー53が生成された場合を考える。命令3,9は乗算命令であり、命令5,11,13は加算命令である。命令1,2,4,7,8,10はロード命令であり、命令6,12,14はストア命令である。命令3は命令1,2に依存し、命令5は命令3,4に依存し、命令6は命令5に依存している。命令9は命令7,8に依存し、命令11は命令9,10に依存し、命令12は命令11に依存している。命令13は命令6,12に依存し、命令14は命令13に依存している。
解析部126は、基点命令を選択して依存ツリー53を分割すると、基点データ154を生成する。基点データ154は、分割後の依存ツリー毎に、ツリーID(Identifier)、基点番号、レベルおよび命令番号の項目を含む。ツリーIDは、分割後の各依存ツリーを識別するための識別子である。基点番号は、基点命令の命令番号である。レベルは、上記のように算出された基点命令のレベルである。命令番号の項目には、分割後の依存ツリーに含まれる命令の命令番号が列挙される。
このフローチャートが示す処理は、前述のステップS4において実行される。
(S181)解析部126は、ルートノードに近い命令から優先的に、依存ツリーに含まれる命令を1つ選択する。(S182)解析部126は、選択した命令がストア命令(STORE)であるか判断する。選択した命令がストア命令である場合、その命令を基点命令に採用し、処理をステップS183に進める。選択した命令がストア命令でない場合は、その命令を基点命令に採用せず、処理をステップS186に進める。
このサブルーチンは、パラメータとしてカウンタCとレベルLを受け取る。このサブルーチンは、上記のステップS184において呼び出される。
図32は、符号テーブルの例を示す図である。
符号テーブル155は、演算の種類と符号との対応関係を示す。符号テーブル155は、RAM102またはHDD103に格納されている。解析部126は、依存ツリーを符号化するとき(ステップS5)、符号テーブル155を参照する。
このフローチャートが示す処理は、前述のステップS5において実行される。
(S211)解析部126は、基点データ154を参照して、ステップS4で分割された依存ツリーを1つ選択する。(S212)解析部126は、選択した依存ツリーに含まれる命令の数に相当する大きさの配列を、符号データとして生成する。
図34は、エッジデータとパックデータの例を示す図である。
解析部126は、依存ツリーの組の候補を算出してエッジデータ156を生成する。また、解析部126は、依存ツリーの組を決定してパックデータ157を生成する。
このフローチャートが示す処理は、前述のステップS6において実行される。
(S221)解析部126は、1つのエッジ分のデータを格納するための空のフレームE0を生成する。フレームE0に含まれる基点番号の項目の数は、SIMDの並列度に一致させる。(S222)解析部126は、変数として基点K,スロットSを定義し、基点K=1,スロットS=1に初期化する。
このサブルーチンは、パラメータとしてフレームE,基点K,スロットSを受け取る。このサブルーチンは、上記のステップS223において呼び出される。
図36のサブルーチンを再帰的に実行していくことで、基点番号[1],基点番号[2],…の順に、基点命令の命令番号がフレームEに1つずつ設定されていく。そして、全ての基点番号の項目が埋まると、フレームEが示す複数の依存ツリーを組み合わせ可能か判定され、組み合わせ不可な複数の依存ツリーを示すデータは破棄される。例えば、基点番号[1]=6,基点番号[2]=6というデータは破棄される。また、複数の基点命令のレベルが全て同じか判定され、レベルが異なる基点命令の組を示すデータは破棄される。例えば、基点番号=6の基点命令のレベルと基点番号=14の基点命令のレベルとが異なるとき、基点番号[1]=6,基点番号[2]=14というデータは破棄される。
解析部126は、複数のエッジのべき集合をパックの集合として算出し、各パックをSIMD化できる命令の数の観点から評価することで、パックを1つ選択する。例えば、互いに独立なエッジ1,2が存在するとき、エッジ1のみを採用したパック1と、エッジ2のみを採用したパック2と、エッジ1,2の両方を採用したパック3とが評価される。
パックを評価するために、解析部126は、各パックのスコアを算出する。スコアの高いパックほど、SIMD化できる命令が多いパックであることを示している。解析部126は、エッジ毎に、複数の依存ツリーの間で符号データを比較して、対応する位置にある命令の組であって演算の種類が同じ命令の組の数を、エッジのスコアとして算出する。そして、解析部126は、エッジ毎のスコアを合算してパックのスコアとする。
このフローチャートが示す処理は、前述のステップS7において実行される。
(S251)解析部126は、変数としてエッジeとパックPを定義し、エッジe=0,パックP=Φ(空集合)に初期化する。(S252)解析部126は、変数として最大スコアZを定義し、最大スコアZ=−1に初期化する。(S253)解析部126は、後述するサブルーチンを用いて、スコアが最大となるパックを探索する。
このサブルーチンは、パラメータとしてエッジe,パックPを受け取る。このサブルーチンは、上記のステップS253において呼び出される。
このフローチャートが示す処理は、上記のステップS261において実行される。
(S271)解析部126は、パックに含まれるエッジを1つ選択する。(S272)解析部126は、配列に含まれる符号を特定するためのインデックスpの値を1つ選択する。インデックスpの値は、1から、エッジに属する複数の依存ツリーに対応する複数の配列の中で最も長い配列の配列長まで変化する。(S273)解析部126は、変数としてスロットSを定義し、スロットS=1に初期化する。
図41のサブルーチンが再帰的に呼び出されることで、スコア評価の処理が、e番目のエッジをパックPに含めるときの処理と含めないときの処理とに分岐する。まず、1番目のエッジをパックPに含めるか否かによって、処理が2つに分岐する。次に、2番目のエッジをパックPに含めるか否かによって、処理が更に2つずつに分岐し、合計で処理が4つに分岐することになる。以下、エッジの数に応じて処理の分岐が発生する。
11 記憶部
12 演算部
13,14 コード
15,15a 依存ツリー
Claims (6)
- 第1のコードを第2のコードに変換するコンパイルプログラムであって、
コンピュータに、
前記第1のコードに含まれる複数の命令の間の依存関係を示す依存ツリーを生成し、
前記依存ツリーから、第1の命令と第2の命令と前記第1および第2の命令の演算結果に依存する第3の命令とを含む部分ツリーを検出し、1命令によって複数の演算を含む複合演算をプロセッサに実行させる複合命令を用いて前記部分ツリーを書き換え、
前記複合命令を含む依存ツリーに基づいて前記第2のコードを生成する、
処理を実行させるコンパイルプログラム。 - 前記第2のコードの生成では、前記複合命令を含む依存ツリーと前記複合命令を含む他の依存ツリーとの間の比較に応じて、前記複数の命令の少なくとも一部を、1命令によって2以上の複合演算をプロセッサに並列実行させる並列化命令に変換する、
請求項1記載のコンパイルプログラム。 - 前記部分ツリーの書き換えでは、前記第1、第2および第3の命令の演算の種類に応じた変換規則を用いて、前記部分ツリーを2以上の複合命令の組み合わせに変換する、
請求項1または2記載のコンパイルプログラム。 - 前記部分ツリーの検出の前に、前記依存ツリーから、前記第1の命令と前記第1の命令の演算結果に依存する第4の命令と前記第4の命令の演算結果に依存する第5の命令とを含み所定条件を満たす命令集合を検出し、前記命令集合を前記部分ツリーに整形する、
請求項1乃至3の何れか一項に記載のコンパイルプログラム。 - 第1のコードを第2のコードに変換するコンパイル方法であって、
コンピュータが、
前記第1のコードに含まれる複数の命令の間の依存関係を示す依存ツリーを生成し、
前記依存ツリーから、第1の命令と第2の命令と前記第1および第2の命令の演算結果に依存する第3の命令とを含む部分ツリーを検出し、1命令によって複数の演算を含む複合演算をプロセッサに実行させる複合命令を用いて前記部分ツリーを書き換え、
前記複合命令を含む依存ツリーに基づいて前記第2のコードを生成する、
コンパイル方法。 - 第1のコードと前記第1のコードから変換される第2のコードとを記憶する記憶部と、
前記第1のコードに含まれる複数の命令の間の依存関係を示す依存ツリーを生成し、
前記依存ツリーから、第1の命令と第2の命令と前記第1および第2の命令の演算結果に依存する第3の命令とを含む部分ツリーを検出し、1命令によって複数の演算を含む複合演算をプロセッサに実行させる複合命令を用いて前記部分ツリーを書き換え、
前記複合命令を含む依存ツリーに基づいて前記第2のコードを生成する、演算部と、
を有するコンパイル装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014017204A JP6237278B2 (ja) | 2014-01-31 | 2014-01-31 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
US14/590,164 US9823911B2 (en) | 2014-01-31 | 2015-01-06 | Method and apparatus for compiling code based on a dependency tree |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014017204A JP6237278B2 (ja) | 2014-01-31 | 2014-01-31 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2015143939A true JP2015143939A (ja) | 2015-08-06 |
JP6237278B2 JP6237278B2 (ja) | 2017-11-29 |
Family
ID=53754876
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014017204A Expired - Fee Related JP6237278B2 (ja) | 2014-01-31 | 2014-01-31 | コンパイルプログラム、コンパイル方法およびコンパイル装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9823911B2 (ja) |
JP (1) | JP6237278B2 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020021422A (ja) * | 2018-08-03 | 2020-02-06 | 荏原実業株式会社 | 生体情報・業務管理システム、方法およびプログラム |
CN110764776A (zh) * | 2019-09-24 | 2020-02-07 | 中信百信银行股份有限公司 | 依赖组件管控方法和装置 |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9529622B1 (en) * | 2014-12-09 | 2016-12-27 | Parallel Machines Ltd. | Systems and methods for automatic generation of task-splitting code |
US10157164B2 (en) * | 2016-09-20 | 2018-12-18 | Qualcomm Incorporated | Hierarchical synthesis of computer machine instructions |
US11048488B2 (en) * | 2018-08-14 | 2021-06-29 | Pegasystems, Inc. | Software code optimizer and method |
US11960609B2 (en) | 2019-10-21 | 2024-04-16 | Snyk Limited | Package dependencies representation |
US11030168B2 (en) * | 2018-12-11 | 2021-06-08 | Sap Se | Parallelization of order dependent procedures during software change processes |
US11294685B2 (en) * | 2019-06-04 | 2022-04-05 | International Business Machines Corporation | Instruction fusion using dependence analysis |
US11733981B2 (en) * | 2019-11-25 | 2023-08-22 | Intel Corporation | Methods, systems, articles of manufacture and apparatus to automatically optimize software programs |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6466734A (en) * | 1987-09-08 | 1989-03-13 | Oki Electric Ind Co Ltd | Program translating method |
JPH09319617A (ja) * | 1996-05-30 | 1997-12-12 | Mitsubishi Electric Corp | ソフトウエア開発システム、プログラム実行方法、プログラム作成方法、トレース装置および方法、計算機装置、ならびにプログラムの評価方法 |
JP2013206289A (ja) * | 2012-03-29 | 2013-10-07 | Fujitsu Ltd | プログラム、コード生成方法および情報処理装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7802076B2 (en) | 2004-06-24 | 2010-09-21 | Intel Corporation | Method and apparatus to vectorize multiple input instructions |
JP2006243839A (ja) | 2005-02-28 | 2006-09-14 | Toshiba Corp | 命令生成装置及び命令生成方法 |
-
2014
- 2014-01-31 JP JP2014017204A patent/JP6237278B2/ja not_active Expired - Fee Related
-
2015
- 2015-01-06 US US14/590,164 patent/US9823911B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS6466734A (en) * | 1987-09-08 | 1989-03-13 | Oki Electric Ind Co Ltd | Program translating method |
JPH09319617A (ja) * | 1996-05-30 | 1997-12-12 | Mitsubishi Electric Corp | ソフトウエア開発システム、プログラム実行方法、プログラム作成方法、トレース装置および方法、計算機装置、ならびにプログラムの評価方法 |
JP2013206289A (ja) * | 2012-03-29 | 2013-10-07 | Fujitsu Ltd | プログラム、コード生成方法および情報処理装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2020021422A (ja) * | 2018-08-03 | 2020-02-06 | 荏原実業株式会社 | 生体情報・業務管理システム、方法およびプログラム |
CN110764776A (zh) * | 2019-09-24 | 2020-02-07 | 中信百信银行股份有限公司 | 依赖组件管控方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
JP6237278B2 (ja) | 2017-11-29 |
US20150220315A1 (en) | 2015-08-06 |
US9823911B2 (en) | 2017-11-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6237278B2 (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
Zheng et al. | Flextensor: An automatic schedule exploration and optimization framework for tensor computation on heterogeneous system | |
CN110764744B (zh) | 用于神经网络计算的中间表示生成方法和装置 | |
JP5846006B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
CN103858099B (zh) | 用于执行应用的方法和***、具有机器指令的电路 | |
CN111338635A (zh) | 计算图的图编译方法、装置、设备及存储介质 | |
JP5846005B2 (ja) | プログラム、コード生成方法および情報処理装置 | |
EP2984585B1 (en) | Binding of data source to compound control | |
JP2016522476A (ja) | 再計算ユーザインタフェースにおける変換の編さん | |
US9256437B2 (en) | Code generation method, and information processing apparatus | |
Harrop | F# for Scientists | |
Subbarayan et al. | Comparing two implementations of a complete and backtrack-free interactive configurator | |
US10169008B2 (en) | Information processing device and compilation method | |
US10203936B1 (en) | Scaling high-level statistical languages to large, distributed datasets | |
Zheng et al. | {EINNET}: Optimizing tensor programs with {Derivation-Based} transformations | |
JP2017033342A (ja) | コンパイル装置、コンパイル方法およびコンパイルプログラム | |
Komendantskaya et al. | Proof mining with dependent types | |
JP6489985B2 (ja) | プログラム開発支援装置およびプログラム開発支援ソフトウェア | |
CN114611714A (zh) | 模型处理方法、装置、***、电子设备及存储介质 | |
JP4131871B2 (ja) | 論理回路遅延最適化システム、論理回路遅延最適化方法、及びプログラム | |
JP6409639B2 (ja) | コンパイラプログラム、システム、方法、及び装置 | |
Takizawa et al. | Xevolver for performance tuning of C programs | |
JP5342508B2 (ja) | 情報処理装置及び情報処理方法及びプログラム | |
US11809981B1 (en) | Performing hardware operator fusion | |
de Oliveira et al. | BDDBlast—A Memory Efficient Architecture for Pairwise Alignments |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20161004 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20170721 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20170801 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20170906 |
|
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: 20171003 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20171016 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6237278 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |