JP5887811B2 - コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体 - Google Patents

コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体 Download PDF

Info

Publication number
JP5887811B2
JP5887811B2 JP2011220575A JP2011220575A JP5887811B2 JP 5887811 B2 JP5887811 B2 JP 5887811B2 JP 2011220575 A JP2011220575 A JP 2011220575A JP 2011220575 A JP2011220575 A JP 2011220575A JP 5887811 B2 JP5887811 B2 JP 5887811B2
Authority
JP
Japan
Prior art keywords
simd
combination
instruction
instructions
data
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
JP2011220575A
Other languages
English (en)
Other versions
JP2013080407A (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.)
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 JP2011220575A priority Critical patent/JP5887811B2/ja
Publication of JP2013080407A publication Critical patent/JP2013080407A/ja
Application granted granted Critical
Publication of JP5887811B2 publication Critical patent/JP5887811B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体に関する。
SIMD(Single Instruction Multiple Data)命令は、単一命令で複数のデータを同時に処理することができる命令セットである。そこで、ソースプログラムのコンパイル処理において、複数の通常命令を1個のSIMD命令に置き換えれば、プログラムの実行速度の高速化を図ることができる。
このような、ソースプログラムに含まれる通常の命令をSIMD命令に置き換えることによる最適化を「SIMD最適化」と呼ぶ。SIMD最適化により、複数の通常の命令が1個のSIMD命令に置き換えられる。また、ソースプログラムに含まれる命令にSIMD最適化を適用することを「SIMD化」と呼ぶ。
例えば、図26の例では、加算命令A=B+Cと加算命令X=Y+ZとをSIMD化することにより、1つのSIMD命令S1=S2+S3で実行することができる。ここで、A〜C及びX〜Zは、各々、通常のレジスタであり、S1〜S3は、各々、SIMDレジスタである。SIMD命令は、SIMDレジスタを含むSIMD命令実行部により実行される。
加算命令A=B+Cは、通常のレジスタBに存在するデータと通常のレジスタCに存在するデータとを加算して通常のレジスタAに格納する命令である。加算命令X=Y+Zも同様である。SIMD命令S1=S2+S3は、SIMDレジスタS2に存在するデータとSIMDレジスタS3に存在するデータとを加算してSIMDレジスタS1に格納する命令である。SIMDレジスタは、SIMD命令によって利用されるデータを格納するレジスタであり、通常のレジスタに相当するサブレジスタを複数個含む。例えば、SIMDレジスタS1は、通常のレジスタA及びXに相当するサブレジスタを含む。SIMDレジスタS2及びS3も同様である。従って、SIMDレジスタを用いた1個の加算命令の実行により、2個の加算命令の実行と同等の結果が得られる。換言すれば、2個の加算命令をSIMD化することにより、2個の加算命令を並列に実行したことになる。
なお、例えば、管理機構がマップ・セットを含むレジスタ・マッピングを含み、マップ・セットの各マップが複数のマップ・レジスタを有し、実レジスタ・セットは、マップ・セットのマップ・エントリを介してプロセッサによって間接的にアクセスされ、実レジスタ・セット内の実レジスタの数は、マップ・セット内のマップ・エントリの数より多く、マップ・セットのマップ・エントリは、任意の時点で実レジスタ・セットのサブセットのみを参照し、この機構が、単一の更新命令の実行に応答して、マップ・セットのうちの少なくとも1つのマップの複数のマップ・エントリを更新することにより、レジスタ・マッピングのマップ・セットの複数のエントリへの更新を管理する、ことが提案されている。
また、例えば、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部と、SIMD型のコプロセッサに実行させるSIMD命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、ソースプログラム中のSIMD命令への置換対象となるプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を記憶装置から読み出すSIMD命令生成部と、機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をSIMD命令に置換するSIMDコンパイラとを備える、ことが提案されている。
また、例えば、ソースプログラム並び替え処理機構が、ソースプログラム中のループ取出し部、当該ループ内のブロックに対して処理の実行順序について深さ優先の探索処理によって認識して順序付けを行う実行順序認識部、および実行順序認識部によって順序付けの行われたループ内のブロックについて物理的な順序並び換えを順序付けの結果にもとづいて行う物理的な順序並び替え部を少なくともそなえる、ことが提案されている。
また、例えば、制御構造解析処理が多重ループを検出し、多重ループの最内側ループから順次外側へ向かって、ループ内のアクセス算出処理が当該ループnより内側ループでアクセスする配列要素の数を計算し、この値がバッファやローカルメモリの大きさより大きい場合は、配列添字可変不変判定処理が当該ループnより外側のループmで、ループ不変添字でアクセスされる配列を探し、該当する配列があれば、ループ交換可否判定処理が当該ループnと外側ループmとの交換可否を調べ、可能であれば、ループ構造変換処理が当該ループnを2重ループに分解し、その一方を外側ループmと交換し、外へ追い出すことにより、配列の各要素のアクセスを局所化する、ことが提案されている。
特開2007−234011号公報 特開2006−243839号公報 特公平06−40309号公報 特開平01−261728号公報
図26の例においては、SIMD化により2つの加算命令を並行で実行したことになるので、SIMDの並列度が「2」であるという。並列度は、実行形式のプログラムを実行するコンピュータのアーキテクチャ及びSIMD命令セットに依存して定まる。並列度に合わせて、SIMDレジスタは、並列度の数の分のデータが保持できるように、並列度の数の分のサブレジスタを含む。
図27(A)は、SIMDレジスタにおいて、1つの大きなレジスタを分割してサブレジスタとして用いる場合を示す。この場合、1個のSIMDレジスタは、物理的な1個のレジスタを指すことになる。図27(A)の例は、例えば分割方式と呼ばれる。
図27(B)は、SIMDレジスタにおいて、異なる複数のレジスタをグルーピングする場合を示す。この場合、1個のSIMDレジスタは、複数の物理的なサブレジスタを相互に関連付けた仮想的な集合を指すことになる。図27(A)の例は、例えば結合方式と呼ばれる。
図27(A)及び図27(B)に示すように、並列度に応じて、SIMDレジスタに含まれるサブレジスタの数が変化する。例えば、並列度が2の場合にはサブレジスタsub1〜sub2が含まれ、並列度が4の場合にはサブレジスタsub1〜sub4が含まれる。同一の並列度の場合には、複数のサブレジスタのサイズは相互に等しくされる。
実際には、複数のSIMDレジスタが設けられる。各々のSIMDレジスタは、同一の個数のサブレジスタを含み、相互に等しいサイズとされる。この明細書において、同一の並列度の場合に、各々のSIMDレジスタの中の同一の位置、換言すれば、対応する位置にあるサブレジスタの集合を「スロット」と呼ぶこととする。対応する位置とは、各々のSIMDレジスタにおいて、同一のビット位置にあることを言う。例えば、3個のSIMDレジスタS1〜S3が存在し並列度が2である場合には、3個のサブレジスタsub1の集合が1個のスロットであり、3個のサブレジスタsub2の集合が1個のスロットである。
SIMD命令においては、同じスロットに属するサブレジスタ同士が処理の対象とされる。例えば、SIMDレジスタS1、S2、S3が存在し、SIMD命令S1=S2+S3を実行する場合における、スロットとサブレジスタとの関係を、図28に示す。
この場合、図28(A)に示すように、一方の命令が「スロット1」、換言すれば、SIMDレジスタのサブレジスタsub1側に割り当てられ、他方の命令が「スロット2」、換言すれば、SIMDレジスタのサブレジスタsub2側に割り当てられる。従って、図28(B)に示すように、SIMDレジスタS2において、サブレジスタsub1へデータB(I)が割り当てられ、サブレジスタsub2へデータB(I+1)が割り当てられる。SIMDレジスタS3において、サブレジスタsub1へデータC(I)が割り当てられ、サブレジスタsub2へデータC(I+1)が割り当てられる。SIMDレジスタS1において、サブレジスタsub1へデータA(I)が割り当てられ、サブレジスタsub2へデータA(I+1)が割り当てられる。
SIMD命令S1=S2+S3が実行されると、前述したように、同じスロットに属するサブレジスタ同士が演算処理の対象となる。従って、図28(C)に示すように、スロット1において演算A(I)=B(I)+C(I)が実行され、スロット2において演算A(I+1)=B(I+1)+C(I+1)が実行される。
ところで、SIMD化は、一般に、例えばDo文のようなループ構造の処理の並列化による高速化に有効である。そこで、図28に示すSIMD化を適用するために、図29に示すように、ソースプログラムに含まれるDoループを、一旦SIMD化の並列度の数分に展開、換言すれば、アンローリング最適化する。そして、Doループをアンローリング展開した命令列を、サブレジスタに割り当てる。これにより、展開した後のDoループに対して、SIMD最適化を適用することができる。
なお、図29の例の場合、SIMD化の並列度の数は「2」である。従って、SIMDレジスタSnは、「Sn{sub1|sub2}」で示すように、各々、2個のサブレジスタsub1及びサブレジスタsub2を含む。
ここで、コンパイラがソースプログラムに含まれるループ構造を認識することができれば、図29に示すように、コンパイラが、ループを並列度の数の分にアンローリング展開し、SIMD最適化を適用することができる。しかし、コンパイラがソースプログラムに含まれるループ構造を認識することができなければ、ループをアンローリング展開することができず、SIMD最適化を適用することができない。
本発明の一側面として、ソースプログラムに含まれるループ構造に応じたSIMD化処理の処理量がループ構造の解析処理により増大することを抑制することを目的とする。
開示されるコンパイル装置は、一側面によれば、算出部と、SIMD化部とを含む。算出部は、複数の命令を1個のSIMD(Single Instruction Multiple Data)命令に置き換えるSIMD化処理の候補となる、処理対象の命令列から依存関係の無い複数の命令の組み合わせである第1の組み合わせと第2の組み合わせを抽出し、抽出した第1の組み合わせと第2の組み合わせの各々についてSIMD化した場合の予測実行時間を算出し、第1の組み合わせと、第2の組み合わせと、第1の組み合わせと第2の組み合わせに含まれる複数の命令の並び替えが可能か否かを表す情報とに基づいて、SIMD化する命令の組み合わせを生成し、生成したSIMD化する命令の組み合わせの各々について、SIMD化した場合の効果を解析し、解析されたSIMD化した場合の効果に基づいて、第1の組み合わせと第2の組み合わせのうち、予測実行時間が短い組み合わせを、SIMD化を行なう対象として選択する。SIMD化部は、第1の組み合わせと第2の組み合わせのうち、算出部で選択された予測実行時間が短い組み合わせについてSIMD化を行なう。
一態様によれば、ソースプログラムに含まれるループ構造に応じたSIMD化処理の処理量がループ構造の解析処理により増大することを抑制することができる。
コンパイルシステムの一例を示す図である。 SIMD化によるコンパイル処理の説明図である。 コンパイル装置のハードウェアの構成の一例を示す図である。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 依存解析処理フローである。 依存解析処理フローである。 依存解析処理フローである。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 候補抽出処理フローである。 候補抽出処理フローである。 候補抽出処理フローである。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 SIMD化の説明図である。 効果解析処理フローである。 効果解析処理フローである。 効果解析処理フローである。 SIMDレジスタとサブレジスタの関係の説明図である。 SIMDレジスタとサブレジスタの関係の説明図である。 SIMDレジスタとサブレジスタの関係の説明図である。 SIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。 本発明者が検討したSIMD化の説明図である。
前述したように、コンパイラがソースプログラムに含まれるループ構造を認識できない場合には、ループをアンローリング展開することができず、SIMD最適化を適用することができない。
しかし、本発明者の検討によれば、ループ構造でなくても、同じ種類の演算を行う複数の命令に対しては、SIMD命令を適用することができる場合があると考えられる。換言すれば、図29の例のようにループ構造でない命令についても、SIMD最適化を適用することはできる場合があると考えられる。
まず、並列度の数が「2」である場合について考える。この場合、隣接した2個の命令であれば、SIMD化することができる。
例えば、図28(A)に示す2個の命令が、図29のようにアンローリング展開の結果としてではなく、最初からソースプログラムに隣接して存在しているとする。この場合、隣接した2個の命令が、同じ種類の演算であるので、ループ構造でなくても、前述したように、SIMD化することができる。
次に、並列度の数が「4」である場合について考える。一例として、図28の例における並列度を「4」にした場合を、図30に示す。なお、前述したように、SIMDレジスタS1、S2、S3が存在し、SIMD命令S1=S2+S3を実行するものとする。
並列度が「4」であるので、図28(A)の2個の命令に代えて、図30(A)に示す隣接する4個の命令を想定する。図30(A)において、隣接する4個の命令は、各々、「スロット1」〜「スロット4」に割り当てられる。SIMD命令S1=S2+S3が実行されると、図30(B)に示すように、「スロット1」において演算A(I)=B(I)+C(I)が実行され、「スロット2」において演算A(I+1)=B(I+1)+C(I+1)が実行され、「スロット3」において演算A(I+2)=B(I+2)+C(I+2)が実行され、「スロット4」において演算A(I+3)=B(I+3)+C(I+3)が実行される。
次に、多数の命令が隣接している場合について考える。なお、説明の簡単化のために、並列度の数は「2」であるとする。
例えば、図31に示すように、8個の隣接する命令列があるとする。この場合、1行目の命令と2行目の命令とを、図28の例と同様に、SIMDレジスタS1〜S3を用いてSIMD化することができる。更に、同様に、3行目の命令と4行目の命令とをSIMDレジスタS4〜S6を用いてSIMD化し、5行目の命令と6行目の命令とをSIMDレジスタS7〜S9を用いてSIMD化し、7行目の命令と8行目の命令とをSIMDレジスタS10〜S12を用いてSIMD化することができる。
ところが、複数の命令が隣接する命令列であっても、図32に示す場合には、SIMD化することができない。なお、並列度の数は「2」であるとする。
この場合、1行目の演算結果A(I)を2行目の命令が参照し、2行目の演算結果D(I)を3行目の命令が参照し、3行目の演算結果F(I)を4行目の命令が参照している。このため、1行目の命令と2〜4行目の命令とは、SIMD化することができない。同様に、2行目の命令と3〜4行目の命令とは、SIMD化することができず、また、3行目の命令と4行目の命令とは、SIMD化することができない。この結果、1行目の命令〜4行目の命令の組み合わせでは、SIMD化することはできない。同様に、5行目の命令〜8行目の命令の組み合わせでは、SIMD化することはできない。換言すれば、複数の命令の間において依存関係がある場合には、当該複数の命令をSIMD化することはできない。
一方、図32の例において、SIMD化の対象を隣接する命令に限らない場合について考える。具体的には、コンパイルの処理対象の命令に隣接しない位置、換言すれば、処理対象の命令から離れた位置の命令を、SIMD化する対象と考えることになる。
この場合、図33に示すように、1行目の命令と5行目の命令とは、依存関係がないので、SIMD化することができる。同様に、2行目の命令と6行目の命令とはSIMD化することができ、3行目の命令と7行目の命令とはSIMD化することができ、4行目の命令と8行目の命令とはSIMD化することができる。
ところが、本発明者の検討によれば、処理対象の命令から離れた位置の命令をSIMD化する場合には、SIMD化した結果を評価して、SIMD化により本当に最適化されているかを検証する必要があることが判った。換言すれば、SIMD化の対象を処理対象の命令から離れた位置からも選択可能とする場合には、SIMD化が高速化に直結しない場合があることが判った。
具体的には、SIMDレジスタでは、異なるスロット間のデータを演算対象とすることができない。このため、あるスロットのサブレジスタに割り当てられたデータを、他のスロットのサブレジスタで使用する場合、サブレジスタ間でデータを転送する命令、換言すれば、サブレジスタ間の転送命令を実行する必要がある。
例えば、図34(A)に示す命令列について、図34(B)に示すSIMD化を考えるとする。この場合、SIMDレジスタとサブレジスタとデータとの関係は、図35(A)に示すような割り当てになる。なお、並列度の数は「2」であるとする。また、図35(A)においては、図35(B)に示すように、「S1」等のSIMDレジスタと共に、そのSIMDレジスタ内の2個のサブレジスタ「sub1」及び「sub2」に割り当てられたデータを示している。
図34(B)及び図35(A)に示すように、1行目の命令と2行目の命令は、SIMDレジスタS1〜S3を用いてSIMD化される。この結果、図35(A)に示すように、データB(I+1)は、SIMDレジスタS2において、サブレジスタsub2側(スロット2)に割り当てられる。一方、図34(B)及び図35(A)に示すように、4行目の命令と5行目の命令は、SIMDレジスタS4〜S6を用いてSIMD化される。この結果、図35(A)に示すように、データB(I+1)は、SIMDレジスタS5において、サブレジスタsub1側(スロット1)に割り当てられる。従って、図35(A)の3行目に示すように、データB(I+1)を、SIMDレジスタS2のサブレジスタsub2から、SIMDレジスタS5のサブレジスタsub1へ転送する必要がある。
なお、サブレジスタ間の転送命令は高いオーバーヘッドになる場合が多く、レジスタ間の転送が無い方が望ましい。また、サブレジスタ間の転送命令のコストが少ないアーキテクチャにおいても、レジスタ転送命令の削減は、SIMD化の効果をより増加させる。
ところが、図36に示すように、1行目の命令と2行目の命令についてのSIMD化において、データB(I+1)が、SIMDレジスタS2のサブレジスタsub1側(スロット1)に割り当てられたとする。換言すれば、SIMDレジスタS1〜S3において、データA(I+1)及びデータA(I)、データB(I+1)及びデータB(I)、データC(I+1)及びデータC(I)が、各々、図35の例とは逆のサブレジスタに割り当てられたとする。この場合、図36に示すように、サブレジスタ間の転送命令の実行は不要となる。
このように、SIMDレジスタへのデータの割り当てに依存して、サブレジスタ間の転送命令が必要となるかが変化する。従って、処理対象の命令から離れた位置の命令をSIMD化する場合には、SIMD化した結果を評価して、SIMD化により本当に最適化されているかを検証する必要がある。
また、同じ種類の演算が複数存在する場合、SIMD化が可能な組み合わせは命令数に比例して大きくなる。このため、膨大な組み合わせの中から例えば図36の例のような有効な候補を抽出することは難しい。従って、処理対象の命令から離れた位置の命令をSIMD化する場合には、有効な候補の抽出のために多大なコンパイル時間が必要となることが判った。
更に、同じ種類の演算として、図37(A)のように加算命令が8つ存在する場合には、SIMD化処理の候補(以下、SIMD化の候補と言う)として、図37(B)及び図37(C)に示すように、40320通りの組み合わせが存在する。コンパイラは、これらの中から例えば図36のような有効な候補を抽出する。この時、40320通りのSIMD化の候補を、メモリに一旦格納する必要がある。なお、32ビットマシンのアドレス空間の最大値は4294967295であるが、この範囲で納まる命令数の数は12個であり、479001600通りの組み合わせまでとなる。従って、処理対象の命令から離れた位置の命令をSIMD化する場合には、大容量のメモリが必要となることが判った。
開示されるコンパイル装置、コンパイル方法、コンパイルプログラム及び記録媒体は、ループに属さない命令についてもSIMD化を可能とする。
図1は、コンパイルシステムの一例を示す図である。図2は、SIMD化によるコンパイル処理の説明図である。
コンパイルシステムは、入力装置1と、コンパイル装置2とを含む。コンパイル装置2は、コンパイラ3と、記憶部4と、リンカ5とを含む。コンパイラ3は、ソースプログラム入力部31と、入出力制御部32と、中間言語生成部33と、最適化部34と、中間言語記憶部37と、コード生成部38と、オブジェクトファイル出力部39とを含む。最適化部34は、ソース解析部35と、最適化実行部36とを含む。ソース解析部35は、依存解析部351と、候補抽出部352と、効果解析部353とを含む。記憶部4は、ソースプログラム41と、オブジェクトファイル42と、実行ファイル43とを含む。
入力装置1は、ソースプログラム41をコンパイル装置2に入力する。ソースプログラム41は、ユーザにより高級言語で記述されたプログラムである。入力されたソースプログラム41は、コンパイル装置2の記憶部4に格納される。
コンパイル装置2において、コンパイラ3のソースプログラム入力部31は、ソースプログラム41を記憶部4から読み出して、入出力制御部32へ送る。入出力制御部32は、コンパイル処理時のオプションやソースプログラム41のファイルの種別等に応じて必要な処理をした後、ソースプログラム41を中間言語生成部33に送る。
中間言語生成部33は、ソースプログラム41を受け取ると、受け取ったソースプログラム41を中間プログラムに変換して、中間言語記憶部37に格納する。中間プログラムは、コンパイラ3の内部で使用される中間コード又は中間言語で記述されたプログラムである。中間言語記憶部37は、中間プログラムを格納する。中間言語生成部33は、中間プログラムを生成したことを最適化部34に通知する。
最適化部34は、中間プログラムの生成を通知されると、中間言語記憶部37に格納された中間プログラムを最適化する。具体的には、最適化部34は、中間言語記憶部37に格納された中間プログラムを読み出して、読み出した中間プログラムを解析する。又は、最適化部34は、ソースプログラム41を参照して、ソースプログラム41を解析する。そして、最適化部34は、解析結果に基づいて中間プログラムを最適化して、最適化した中間プログラムを中間言語記憶部37に格納する。最適化部34は、最適化の終了をコード生成部38に通知する。
この時、最適化部34は、ソース解析部35及び最適化実行部36によるSIMD最適化を実行する。具体的には、ソース解析部35は、複数の命令を1個のSIMD命令に置き換えるSIMD化処理の候補として、処理対象の命令列から依存関係の無い複数の命令の組合せである第1の組合わせと第2の組み合わせを抽出し、抽出した第1の組み合わせと第2の組み合わせの各々についてSIMD化した場合の予測実行時間を算出する。ソース解析部35は、予測実行時間を算出する算出部である。最適化実行部36は、第1の組み合わせと第2の組み合わせのうち、算出部で算出された予測実行時間が短い組み合わせについてSIMD化を行なう。ソース解析部35は、SIMD化を行なうSIMD化部である。最適化部34におけるSIMD最適化処理については後述する。
なお、最適化部34は、ループ内の命令、換言すれば、ループに属する命令についてもSIMD化することにより、最適化した中間プログラムを生成する。これにより、ループに属する命令及びループに属さない命令の双方、換言すれば、全ての命令に対して、最も有効なSIMD化を適用することができ、プログラムの実行性能を向上させることができる。
コード生成部38は、最適化の終了を通知されると、中間言語記憶部37に格納された中間プログラムを読み出して、読み出した中間プログラムに基づいて、アセンブリ言語で記述されたオブジェクトプログラムを生成する。コード生成部38は、生成したオブジェクトプログラムを、入出力制御部32を介して、オブジェクトファイル出力部39に送る。
オブジェクトファイル出力部39は、コード生成部38からオブジェクトプログラムを受け取ると、受け取ったオブジェクトプログラムからオブジェクトプログラムを格納するオブジェクトファイル42を生成して、記憶部4に格納する。オブジェクトファイル出力部39は、オブジェクトファイル42の生成をリンカ5に通知する。
リンカ5は、オブジェクトファイル42の生成を通知されると、記憶部4に格納されたオブジェクトファイル42を読み出して、オブジェクトファイル42において指定されたライブラリとオブジェクトプログラムとを結合して、実行形式のプログラムを含む実行ファイル43を生成して、記憶部4に格納する。
前述したように、最適化部34による最適化処理において、ソース解析部35及び最適化実行部36によるSIMD最適化を実行する。
ソース解析部35は、中間言語記憶部37から読み出された中間プログラム、又は、ソースプログラム41を解析し、解析結果に基づいて有効なSIMD最適化の候補を選択し、選択したSIMD最適化の候補を最適化実行部36に通知する。
具体的には、ソース解析部35において、依存解析部351は、中間プログラム又はソースプログラム41の命令列に含まれる各々の命令の間における依存関係を解析し、依存関係を解析した結果を候補抽出部352に通知する。候補抽出部352は、依存関係を解析した結果に基づいて、複数の命令を1個のSIMD命令に置き換えるSIMD化の候補として、依存関係の無い複数の命令の組合せを複数抽出し、抽出した複数のSIMD化の候補を効果解析部353に通知する。効果解析部353は、抽出した複数のSIMD化の候補の各々についてSIMD化した場合の効果を解析し、ソース解析部35に通知する。例えば、依存解析部351、候補抽出部352及び効果解析部353は、各々、サブルーチンであり、ソース解析部35から呼び出されて処理を実行する。
例えば、図2に示すような入力コード、換言すれば、中間言語記憶部37から読み出された中間プログラムが、コンパイラ3の最適化部34へ読み込まれる。そして、中間プログラムの解析結果に基づいて、例えば、1行目の命令に対するSIMD化の候補として、2行目の命令が選択される。また、3行目の命令SIMD化の候補として、4行目の命令が選択される。
なお、以下の説明においては、説明のために、例えば図2に示すように、各々の命令列を、中間コードではなく、ソースコードで表すこととする。
最適化実行部36は、ソース解析部35から選択したSIMD最適化の候補を通知されると、通知されたSIMD最適化の候補を中間言語記憶部37に格納された中間プログラムに対して適用する。換言すれば、最適化実行部36は、解析部における効果の解析の結果に基づいて、効果の解析の結果が最も優れているSIMD化の候補についてSIMD化することにより、ソースプログラムから生成された中間プログラムを最適化する。
具体的には、最適化実行部36は、中間言語記憶部37から中間プログラムを読み出し、読み出した中間プログラムにおいて、通知されたSIMD最適化の候補をSIMD命令に変換して、変換後の中間プログラムを中間言語記憶部37に格納する。これにより、SIMD最適化により中間プログラムが最適化される。なお、最適化実行部36は、ソース解析部35によるSIMD化のための解析以外の最適化部34による他の最適化のための解析結果に従って、SIMD化以外の最適化も実行する。
例えば、図2に示すように、1行目の命令と、これに対するSIMD化の候補である2行目の命令とが、SIMD化により最適化される。また、3行目の命令と、これに対するSIMD化の候補である4行目の命令とが、SIMD化により最適化される。
この時、図2に示すように、最適化部34は、サブレジスタを管理するためにレジスタマップ354を作成する。また、最適化部34は、有効なSIMD最適化の候補を選択するためにスコアリング部355を含む。
図3は、コンパイル装置のハードウェアの構成の一例を示す図である。
CPU101は、ROM102に格納された制御プログラムに従って、コンパイル装置2を制御する。CPU101は、例えば主メモリであるRAM103上のコンパイルプログラム及びリンカプログラムを実行する。これにより、コンパイラ3及びリンカ5が実現される。コンパイルプログラム及びリンカプログラムは、例えば、CD−ROMやDVD等の記録媒体109に格納され、記録媒体109からハードディスク106に入力され、ハードディスク106からCD−ROMドライブやDVDドライブ等を介してRAM103にロードされる。
記憶部4は、例えばハードディスク106に設けられ、ソースプログラム41、オブジェクトファイル42、実行ファイル43を格納する。中間言語記憶部37は、例えばRAM103に設けられる。
入力装置104は、入力装置1以外の入力装置であり、例えばキーボード、マウス等を含む。出力装置105は、例えばディスプレイであり、プリンタ等の出力装置を含んでも良い。CPU101、ROM102、RAM103、入力装置104、出力装置105、及び、ハードディスク106、ネットワーク接続部107は、バス108を介して、相互に接続される。
ネットワーク接続部107は、例えば、送受信装置であり、ネットワークに接続され、ネットワークを介して他のコンピュータ、例えばソースプログラム41を生成する生成装置及び実行ファイルを実行する実行装置に接続される。
以下、最適化部34のソース解析部35が、依存解析部351と候補抽出部352と効果解析部353とにより実行する、SIMD化による最適化処理について説明する。
最初に、依存解析部351が実行する依存解析処理について説明する。
依存解析部351は、ソースプログラム41又は中間プログラムを、予め定められた数の命令を含む命令列に区分し、区分した命令列を部分的に抽出する。換言すれば、依存解析部351は、命令列として、ソースプログラム41又は中間プログラムにおいて連続する位置に存在する予め定められた数の命令を、ソースプログラム41又は中間プログラムから抽出して、依存関係の解析の対象とする。
抽出される命令列は依存関係の解析の対象であるので、抽出される命令列に含まれる命令の数を「解析幅」という。以下の説明において、予め定められた数、換言すれば、解析幅は、例えば「12」とされる。解析幅は、予め定められ、「12」以外の値であっても良い。
依存解析部351は、抽出した解析幅の分の命令列に含まれる各々の命令の属性を表す命令データを生成し、生成した各々の命令についての命令データに基づいて、各々の命令の間における依存関係を表す依存データを生成する。これにより、命令列に含まれる命令の間における依存関係を構築する。ここで、依存関係とは、レジスタへ格納される複数の命令データの定義における参照の関係である。依存関係を構築するとは、前記参照の関係を結ぶこと、換言すれば、複数の命令データの定義に基づいて依存データを生成することである。
例えば、ソースプログラム41又は中間プログラムが、図4(A)に示すような命令列であるとする。図4(A)の命令列において、各々の命令の命令形式は、図4(B)に示すように、「LOAD」のような命令と、「mem01」のような参照オペランドと、「R01」のような定義オペランドとを含む形式とされる。図4(C)に示すように、命令LOADはメモリに格納されたデータをレジスタにロードする命令であり、命令MULTはレジスタのデータを積算する命令であり、命令ADDはレジスタのデータを加算する命令である。オペランドは、図4(D)に示すように、「mem01」〜「mem08」のようなメモリ名や、「R01」〜「R14」のようなレジスタ名とされる。
依存解析部351は、図4(A)の命令列を、解析幅「12」で区切り、1個の解析幅の範囲で命令の依存関係を解析し、また、解析幅の範囲で複数の命令を組み合わせてSIMD化を行う。換言すれば、1個の解析幅の範囲に存在する複数の命令の組み合わせを、1個のSIMD命令に置き換える。
解析幅が「12」である場合、図5(A)に示すように、先頭から12個の命令を依存解析の対象とされる。図5(A)に示す依存解析の対象は、例えば当該依存解析の対象についてのスコアの算出の終了まで、依存解析部351に保持される。例えば、先頭から12行目の命令と13行目の命令とがSIMD化できる関係にあるとしても、異なる命令列に属するので、SIMD化の対象とされない。このように、解析幅を制限することにより、コンパイラ3の処理の負担が大きくなることを回避して、事実上、全ての命令をSIMD化の対象とすることができる。
依存解析部351は、図5(A)の解析幅に属する命令列に含まれる各々の命令について、図5(A)に示すように、各々の命令の属性を表す命令データを生成する。
例えば、図5(A)の解析幅における最初の命令について見ると、当該命令から、図4(B)に示す命令形式に基づいて、命令名として「LOAD」、定義オペランドとして「R01」、参照オペランドとして「mem01」が得られる。命令番号は、図5(A)の解析幅における当該命令の行番号、換言すれば、当該命令が図5(A)の解析幅の何行目であるかに基づいて定められる。解析済フラグは、解析されていないことを表す「FALSE」とされる。解析済フラグは、解析の後に、換言すれば、依存データの生成の後に、解析されたことを表す「TRUE」とされる。
依存解析部351は、図5(A)の解析幅における各々の命令について、同様にして命令データを生成する。これにより、図5(A)の解析幅における各々の命令についての命令データが生成される。
依存解析部351は、解析幅に属する各々の命令についての図5(A)に示す命令データに基づいて、図5(A)に示すように、各々の命令の間における依存関係を表す依存データを生成する。
例えば、依存解析部351は、命令番号#1の命令データの定義オペランド「R01」を取り出して、命令番号#2〜#12の命令データを検索する。これにより、命令番号#1の命令データの定義オペランド「R01」が、命令番号#3の命令データの参照オペランドと同一であることを検出する。そこで、依存解析部351は、依存データとして「E1→#3」を生成する。依存データの形式は、図5(B)に示すように、定義オペランドを持つ命令データの命令番号から、参照オペランドを持つ命令データの命令番号を指すようにされる。これにより、2個の命令間の依存関係が、命令番号を用いて表された依存データとして管理される。
依存解析部351は、解析幅に属する各々の命令についての図5(A)に示す命令データについて、同様にして依存データを生成する。これにより、図5(A)の解析幅における各々の命令についての依存データが生成される。
例えば、図5(A)に示す依存データをグラフ化すると、図6に示すようになる。依存データにより、解析幅に属する各々の命令の間に、図6のような依存関係があることを抽出することができる。
図6において、直線上にある複数の命令の間には、定義と参照の依存関係が成立する。直線上にある複数の命令とは、直線で結ばれた2個の命令、又は、直線で結ばれた1又は複数の他の命令を介して結ばれる2個の命令である。従って、直線上にある複数の命令は、依存関係があるので同時に処理することができず、SIMD化の対象とすることができない。換言すれば、依存関係のある複数の命令は、後述するように、SIMD化の候補として抽出されない。
次に、依存解析部351が実行する依存解析処理を、図7〜図9を参照して詳細に説明する。
図7は、依存解析部351が実行する依存解析処理フローであり、特に、命令データの生成処理について示す。
依存解析部351は、命令データの命令番号に「1」を設定し(ステップS11)、依存関係の解析の対象とされた、換言すれば、解析幅の命令列において、未解析の命令の中から先頭の1個の命令を、処理対象として選択する(ステップS12)。そして、依存解析部351は、選択した命令から、属性情報「命令名」「定義オペランド」「参照オペランド」を抽出し、その時点での命令番号に付加することにより、選択した命令についての命令データを生成する(ステップS13)。この時、解析済フラグは「FALSE」とされる。この後、依存解析部351は、先に選択した命令の次の命令に処理対象を移動して(ステップS14)、命令データの命令番号をインクリメントすることにより「1」を加算する(ステップS15)。この後、依存解析部351は、解析幅の数だけステップS13を繰り返す。例えば、前述したように、解析幅が「12」であるとする。この場合、ステップS15において求めた命令番号が「12」であれば、解析幅の数だけ処理を繰り返したことになる。従って、ステップS15において求めた命令番号が「12」以下である場合にはステップS13を繰り返し、「12」より大きい場合には処理を終了する。これにより、解析幅の数の命令を含む命令列について、命令データが生成される。
図8は、依存解析部351が実行する依存解析処理フローであり、特に、依存データの生成処理について示す。
依存解析部351は、依存関係の解析の対象とされた、換言すれば、解析幅の命令列において、最後の命令についての命令データをMとする(ステップS21)。例えば解析幅が「12」である場合、命令番号12の命令についての命令データがMとされる。
この後、依存解析部351が、解析サブルーチン、換言すれば、解析サブルーチン実行部を呼び出して、命令データMを渡して解析を依頼すると、解析サブルーチンが命令データMを解析して、解析の結果を依存解析部351に返す(ステップS22)。この後、依存解析部351は、処理した命令の1個前の命令についての命令データをMとして(ステップS23)、解析幅の数だけステップS22を繰り返す。例えば、前述したように、解析幅が「12」であるとする。この場合、最後の命令についての命令データ、換言すれば、命令番号が「12」から処理を開始しているので、ステップS23で求めた命令の命令番号が「1」であれば、解析幅の数だけ処理を繰り返したことになる。従って、ステップS23において求めた命令番号が「1」でない場合にはステップS13を繰り返し、「1」である場合には処理を終了する。
図9は、依存解析部351が実行する依存解析処理フローであり、特に、依存データの生成処理における解析処理、換言すれば、解析サブルーチンによる処理について示す。
解析サブルーチンは、命令データMが解析幅内のものか否かを判断する(ステップS31)。例えば、前述したように、解析幅が「12」であるとする。この場合、命令データMの命令番号が「12」以下であれば、解析幅の数の範囲内である。従って、命令データMの命令番号が「12」以下である場合には命令データMが解析幅内のものと判断し、「12」より大きい場合には命令データMが解析幅内のものでないと判断する。命令データMが解析幅内のものでない場合(ステップS31 NO)、解析サブルーチンは、命令データMが解析幅内のものでない旨を、依存解析部351へ返す。
命令データMが解析幅内のものである場合(ステップS31 YES)、解析サブルーチンは、命令データMの解析済フラグがFALSEかTRUEかを判定する(ステップS32)。命令データMの解析済フラグがTRUEである場合、解析サブルーチンは、命令データMが解析済みである旨を、依存解析部351へ返す。
命令データMの解析済フラグがFALSEである場合、解析サブルーチンは、命令データMの参照オペランドと同じデータを定義オペランドとして持つ命令データを検索し、該当する命令データが存在する場合には、該当する命令データを定義データDに代入する(ステップS33)。
この後、解析サブルーチンは、定義データDが解析幅内のものか否かを判断する(ステップS34)。例えば、依存解析部351に保持されている図5(A)に示す処理対象の命令列を定義データDを用いて検索することにより、定義データDと同一の命令が図5(A)に示す処理対象の命令列に存在するか否かが調べられる。命令データMが解析幅内のものでない場合(ステップS34 NO)、解析サブルーチンは、命令データMが解析幅内のものでない旨を、依存解析部351へ返す。
命令データMが解析幅内のものである場合(ステップS34 YES)、解析サブルーチンは、定義データDの命令番号を定義して、換言すれば、定義データDの命令番号を求めて、定義データDが命令データMの命令番号を参照する依存データを作成する(ステップS35)。この後、解析サブルーチンは、命令データMの参照オペランドの数だけステップS33を繰り返す。これにより、命令データMの参照オペランドの各々についての依存データが作成される。
次に、候補抽出部352が実行する候補抽出処理について説明する。
候補抽出部352は、各々の命令についての命令データと、依存データとに基づいて、SIMD化の候補を抽出する。換言すれば、候補抽出部352は、命令データ及び依存データに基づいて、SIMD化の候補となる命令の組合せを抽出する。命令の組合せは、命令データの命令番号を関連付けることにより管理される。
具体的には、候補抽出部352は、図5(A)の解析幅に属する命令の中から、図6において直線上にある複数の命令、換言すれば、依存関係のある命令を除く、2個の命令の組合せを抽出する。
例えば、図4(A)の命令列から抽出された図5(A)の解析幅に属する命令からは、図10に示すように、SIMD化の候補となる命令の組合せが抽出される。抽出される命令の組合せに含まれる命令の数は、前述したように、並列度の数が「2」であるので、2個である。抽出される命令の組合せに含まれる2個の命令は、同一の命令である。例えば、組合せ「#1−#2」は、共に、命令LOADである。なお、例えば、組合せ「#3−#8」と同時に、組合せ「#3−#10」のように、相互に一部が重なる組合せが存在しても良い。
候補抽出部352は、図10に示す複数のSIMD化の候補の各々について、図11に示すように、エッジデータを生成する。エッジデータは、SIMD化の候補に含まれる複数の命令の並び替えが可能か否かを表す情報、換言すれば、反転フラグを含む。
エッジデータの格納領域は、図11(A)に示すように、エッジ番号の格納領域、反転フラグの格納領域、命令番号[N]の格納領域を含む。エッジ番号は、エッジデータを一意に識別する識別情報であり、エッジデータの管理に用いられる。反転フラグは、組合せの並び替えが可能か否かを表す情報である。命令番号[N]は、SIMD化の候補となる組合せに属する命令を表し、当該命令についての命令データに含まれる命令番号である。
反転フラグFALSEは、複数の命令の並び替えが可能であることを示す。反転フラグTRUEは、複数の命令の並び替えが可能でないことを示す。候補抽出部352は、命令の種類に応じて、エッジデータにおける反転フラグFALSE又はTRUEを設定する。例えば、命令LOADの場合及び命令ADDの場合には、反転フラグFALSEが設定される。命令MULTの場合には、反転フラグTRUEが設定される。
図11(A)に示すエッジデータの格納領域において、エッジ番号は、「1」から順に付与される。例えば、図10に示すSIMD化の候補の各々について、上段左側から順にエッジ番号「1」〜「5」が付与され、次に、下段上段左側から順にエッジ番号「6」〜「8」が付与される。Nは並列度の数である。従って、命令番号[N]の格納領域に含まれる命令番号の数、換言すれば、命令の数は、N個である。
候補抽出部352は、最初に、図11(A)に示すエッジデータの格納領域を生成する。この後、候補抽出部352は、生成したエッジデータの格納領域をコピーして、コピーしたエッジデータの格納領域にN個の命令番号を格納することを繰り返す。この例では、前述したように、並列度の数は「2」であるので、命令番号[1]の格納領域と命令番号[2]の格納領域とに、各々、命令番号が格納される。この時、格納される命令番号は、先頭から順に、1ずつシフトされる。例えば、エッジ番号が「1」のエッジデータにおいては#1及び#2の命令番号が格納され、エッジ番号が「2」のエッジデータにおいては#2及び#3の命令番号が格納され、最後のエッジデータにおいては#11及び#12の命令番号が格納される。これにより、図11(B)に示すように、エッジデータの集合が得られる。
図11(B)において、命令番号[1]に#1が格納されている状態は、スロット1に命令番号#1の命令が設定されている状態である。従って、命令番号[1]はスロット1に相当し、命令番号[2]はスロット2に相当する。SIMD化した場合において、命令番号[1]には各々のSIMDレジスタにおける対応する位置のサブレジスタsub1が割り当てられ、命令番号[2]には各々のSIMDレジスタにおける対応する位置のサブレジスタsub2が割り当てられる。換言すれば、命令番号[1]の命令にはサブレジスタsub1が割り当てられ、命令番号[2]にはサブレジスタsub2が割り当てられる。
なお、命令番号[N]の格納領域に含まれる命令番号の数は、並列度の数が「4」である場合には4個となり、並列度の数が「8」である場合には8個となる。例えば、図30のように並列度が4の場合における、エッジデータと、スロット及びサブレジスタの関係は、図12のようになる。図12において、エッジデータには4個の命令番号が含まれる。従って、4個のスロットが存在する。例えば、命令番号[1]はスロット1に相当し、命令番号[1]には各々のSIMDレジスタにおける対応する位置のサブレジスタsub1が割り当てられる。
次に、依存解析部351が実行する依存解析処理を、図13〜図15を参照して詳細に説明する。
図13は、候補抽出部352が実行する候補抽出処理フローであり、特に、命令データからのエッジデータの生成処理について示す。
候補抽出部352は、依存関係の解析の対象とされた、換言すれば、解析幅の命令列において、最初の命令についての命令データをMとする(ステップS41)。また、候補抽出部352は、図11(A)に示すエッジデータEを生成する(ステップS42)。この時、生成されたエッジデータEにおいて、エッジ番号は「0」とされ、反転フラグはFALSEとされる。更に、候補抽出部352は、スロットSを初期値「0」に設定する(ステップS43)。
この後、候補抽出部352が、エッジデータ設定サブルーチン、換言すれば、エッジデータ設定サブルーチン実行部を呼び出して、命令データM、エッジデータE及び変数Sを渡してエッジデータの設定を依頼すると、エッジデータ設定サブルーチンがエッジデータEを設定して、設定したエッジデータEを候補抽出部352に返す(ステップS44)。この後、候補抽出部352は、処理した命令の次の命令についての命令データをMとして(ステップS45)、命令データの数だけステップS42を繰り返す。例えば、前述したように、解析幅が「12」であるとする。この場合、最初の命令についての命令データ、換言すれば、命令番号が「1」から処理を開始しているので、ステップS45で求めた命令の命令番号が「12」であれば、命令データの数だけ処理を繰り返したことになる。従って、ステップS45において求めた命令番号が「12」以下である場合にはステップS42を繰り返し、「12」より大きい場合には処理を終了する。
図14は、候補抽出部352が実行する候補抽出処理フローであり、特に、エッジデータの設定処理、換言すれば、エッジデータ設定サブルーチンによる処理について示す。
エッジデータ設定サブルーチンは、スロットSをインクリメントすることにより「1」を加算した後(ステップS51)、設定された値に対応するスロットが存在するか否かを判断する(ステップS52)。例えば、並列度がNである場合、スロットSの値はNが最大値とされる。換言すれば、並列度がNである場合、スロットSの値がN以下である場合に、スロットSは存在する。
スロットが存在しない場合(ステップS52 NO)、エッジデータ設定サブルーチンは、エッジデータ確定サブルーチン、換言すれば、エッジデータ確定サブルーチン実行部を呼び出して、それまでに生成されたエッジデータEを渡してエッジデータの確定を依頼すると、エッジデータ確定サブルーチンが、エッジデータEをチェックした上で確定して、確定したエッジデータEをエッジデータ設定サブルーチンに返す(ステップS58)。エッジデータ設定サブルーチンは、確定したエッジデータEを受け取ると、それまでに生成されたエッジデータEを候補抽出部352に返す。
スロットが存在する場合(ステップS52 YES)、エッジデータ設定サブルーチンは、命令データMが別のスロットに存在するか否かを判断する(ステップS53)。命令データMが別のスロットに存在する場合(ステップS53 YES)、エッジデータ設定サブルーチンは、以下のステップS54〜S56の実行を省略して、ステップS57を実行する。
命令データMが別のスロットに存在しない場合(ステップS53 NO)、エッジデータ設定サブルーチンは、エッジデータEをコピーすることによりエッジデータE’を生成する(ステップS54)。この時、エッジデータE’のエッジ番号は、コピー元のエッジデータEのエッジ番号に「1」を加えた値とされる。この後、エッジデータ設定サブルーチンは、エッジデータE’の命令番号[S]に命令データMの命令番号を設定する(ステップS55)。
この後、エッジデータ設定サブルーチンは、再度、エッジデータ設定サブルーチンを呼び出して、命令データM、エッジデータE’及び変数Sを渡してエッジデータの設定を依頼すると、再帰呼び出されたエッジデータ設定サブルーチンがエッジデータE’を設定して、設定したエッジデータE’を再帰呼び出したエッジデータ設定サブルーチンに返す(ステップS56)。
この後、エッジデータ設定サブルーチンは、処理した命令の次の命令についての命令データをMとして(ステップS57)、命令データの数だけステップS53を繰り返す。例えば、前述したように、解析幅が「12」であるとする。この場合、ステップS57で求めた命令の命令番号が「12」であれば、命令データの数だけ処理を繰り返したことになる。従って、ステップS57において求めた命令番号が「12」以下である場合にはステップS53を繰り返し、「12」より大きい場合には処理を終了する。
図15は、候補抽出部352が実行する候補抽出処理フローであり、特に、エッジデータの確定処理、換言すれば、エッジデータ確定サブルーチンによる処理について示す。
エッジデータ確定サブルーチンは、エッジデータEに含まれる命令が全て同じ命令であるか否かを判断する(ステップS61)。エッジデータEに含まれる命令が全て同じ命令でない場合(ステップS61 NO)、SIMD化することができないので、エッジデータ確定サブルーチンは、それまでに生成されたエッジデータEを破棄して(ステップS65)、エッジデータEを破棄した旨をエッジデータ設定サブルーチンに返す。
エッジデータEに含まれる命令が同じ命令である場合(ステップS61 YES)、換言すれば、エッジデータEに同じ命令が含まれる場合、エッジデータ確定サブルーチンは、更に、エッジデータEに含まれる命令に依存関係がないか否かを判断する(ステップS62)。エッジデータEに含まれる命令に依存関係がある場合(ステップS62 NO)、SIMD化することができないので、エッジデータ確定サブルーチンは、ステップS65を実行して、エッジデータEを破棄した旨をエッジデータ設定サブルーチンに返す。
エッジデータEに含まれる命令に依存関係がない場合(ステップS62 YES)、エッジデータ確定サブルーチンは、更に、エッジデータEに含まれる命令をSIMD化した場合に、SIMD命令のアーキテクチャの禁止事項に違反しないか否かを判断する(ステップS63)。例えば、SIMD命令のアーキテクチャによっては、平方根の演算をSIMD化しないことが規定されている。これは、平方根の演算のための命令が別に用意されているためである。禁止事項に違反する場合(ステップS63 NO)、SIMD化することができないので、エッジデータ確定サブルーチンは、ステップS65を実行して、エッジデータEを破棄した旨をエッジデータ設定サブルーチンに返す。
禁止事項に違反しない場合(ステップS63 YES)、エッジデータ確定サブルーチンは、それまでに生成されたエッジデータEを保存して(ステップS64)、エッジデータEを保存した旨をエッジデータ設定サブルーチンに返す。
次に、効果解析部353が実行する効果解析処理について説明する。
効果解析部353は、複数のSIMD化の候補と、SIMD化の候補に含まれる複数の命令の並び替えが可能か否かを表す情報とに基づいて、SIMD化する命令の組合せを生成する。複数のSIMD化の候補は、例えば、図10に示される8組の候補である。SIMD化の候補に含まれる複数の命令の並び替えが可能か否かを表す情報は、図11(B)に示すエッジデータにおける反転フラグの値FALSE又はTRUEである。そして、効果解析部353は、生成したSIMD化する命令の組合せの各々について、SIMD化した場合の効果を解析する。SIMD化する命令の組合せを「SIMD化パターン」と言うこととする。効果解析部353は、SIMD化パターンの各々について、SIMD化した場合の効果を評価する。
例えば、効果解析部353は、図16に示すように、図10のSIMD化の候補から、SIMD化する命令の組合せ、換言すれば、SIMD化パターンを選択する。例えば、図10において、「#1−#2」の組合せを選択すると、命令番号#2が重なることを回避しなければならないので、「#2−#4」の組合せを選択することはできない。命令番号#2が重なることを回避するのは、命令が冗長実行になることを回避するためである。また、例えば、「#6−#7」の組合せを選択すると、命令番号#6が重なることを回避しなければならないので、「#4−#6」及び「#7−#9」の組合せを選択することはできない。
このようにして、例えば、図16に示す複数の「SIMD化パターン1」〜「SIMD化パターン3」が選択される。1個のSIMD化パターンに含まれる命令の組合せの数は、1以上であれば良く、「SIMD化パターン1」のように3個でも良く、「SIMD化パターン2」のように4個でも良い。なお、図16は、選択されたSIMD化パターンの一部を示す。SIMD化パターンが生成された時点において、SIMD化パターンのスコアは不明であるが、図16においては、後述するようにして算出されるスコアを参考として示している。スコアについては後述する。
図16において、「SIMD化パターン2」には「#3−#8」の組合せが含まれ、「SIMD化パターン3」には「#8−#3」の組合せが含まれる。このように、エッジデータにおいて、命令番号の順番が入れ替わったものが、SIMD化パターンに含まれる。
例えば、図17に示すように、エッジ番号が「7」のエッジデータにおいて、反転フラグがTRUEであるとする。この場合、当該エッジデータにおいて、命令番号[1]に格納される命令番号#3と、命令番号[2]に格納される命令番号#8とが入れ替えられ、新たなエッジデータとされる。これにより、エッジ番号が「7」のエッジデータのサブレジスタを入れ替えたデータが表される。図16に示すように、新たなエッジデータも、SIMD化パターンの生成において用いられる。
効果解析部353は、図16に示すSIMD化パターンに基づいて図18に示すパックデータを生成し、生成したパックデータにより、図16に示すSIMD化パターンを管理する。パックデータは、SIMD化パターン毎に生成される。
図18は、パックデータの一例を示し、図16の「SIMD化パターン2」についてのパックデータである。SIMD化パターンに含まれる命令の組合せの各々が、パックデータにおける1個のパックとされる。従って、「SIMD化パターン2」についてのパックデータは、4個のパックを含む。パックデータにおいて、各々のパックに対応してエッジ番号が格納される。例えば、図16の「SIMD化パターン2」の先頭の命令の組合せがパック[1]とされる。具体的には、先頭の命令の組合せ「#1−#2」は、図11(B)に示すエッジ番号「1」を持つので、パック[1]は、「#1−#2」であるエッジ番号「1」を持つエッジデータである。従って、パックデータにおいて、パック[1]に対応してエッジ番号「1」が格納される。これにより、エッジ番号「1」を持つエッジデータを参照することができる。
効果解析部353のスコアリング部355は、パックデータに基づいて、図19に示すように、レジスタマップ354を生成する。レジスタマップ354は、複数のSIMDレジスタにおいて対応する位置に存在するサブレジスタの集合であるスロット毎に生成され、スロットに属するサブレジスタを管理する。従って、レジスタマップ354は、並列度の数の分だけ生成される。そして、効果解析部353は、生成したレジスタマップ354に基づいて、SIMD化した場合に必要となるサブレジスタの間における転送命令を抽出する。
更に、スコアリング部355は、図19に示すように、複数のSIMD化の候補の各々について、スコアを算出し、算出したスコアに基づいて、SIMD化した場合の効果を解析する。スコアリング部355は、転送命令を抽出した後、複数のSIMD化の候補の各々について、SIMD化しない場合の命令実行時間と、SIMD化した場合の命令実行時間及び転送命令の実行時間の和との差分をスコアとして算出する。スコアリング部355は、図21を参照して後述するスコア計算式を保持し、スコア計算式を用いてスコアを算出する。
図20は、レジスタマップ354の生成の一例を示し、図16の「SIMD化パターン3」についてのレジスタマップ354を示す。スコアリング部355は、図20に示すように、SIMD化パターンから、同一のスロットに割当てられる命令を抽出し、各々の命令が保持するデータを抽出する。
前述したように、同一のスロットの命令が、対応する位置のサブレジスタに割り当てられる。このため、例えば、スロット1には、命令#1、命令#6、命令#8、命令#5が割当てられる。命令#1は命令番号「1」を持つ命令である。各命令において使用されるデータ又はレジスタは、当該命令の参照オペランド及び定義オペランドに基づいて求めることができる。例えば、命令#1には、サブレジスタR01が含まれる。従って、スロット1に対応するレジスタマップ[1]には、R01が格納される。R01は、実際には、サブレジスタのレジスタ名である。同様にして、命令#6、命令#8、命令#5からサブレジスタのレジスタ名を抽出することにより、レジスタマップ[1]が生成される。
また、スロット2には、命令#2、命令#7、命令#3、命令#10が割当てられる。命令#2には、サブレジスタR02が含まれる。従って、スロット2に対応するレジスタマップ[2]には、R02が格納される。同様にして、命令#7、命令#3、命令#10からサブレジスタのレジスタ名を抽出することにより、レジスタマップ[2]が生成される。このように、レジスタマップ354は、各スロットに属するサブレジスタをグループとして管理する。
レジスタマップ[1]とレジスタマップ[2]との間において、同じレジスタ名が格納されている場合、相互に異なるスロットのデータを処理することになる。従って、サブレジスタ間におけるデータの転送命令が必要であることを抽出することができる。このように、レジスタマップ354によりサブレジスタ間のデータの転送の必要性を抽出することができるので、SIMD化のコストを計算することができ、最も有効なSIMD化パターンを抽出することができる。
図20においては、レジスタ名R07とレジスタ名R03とが、各々、レジスタマップ[1]とレジスタマップ[2]の双方に出現する。これにより、2つのデータが異なるスロットで要求されるので、サブレジスタ間の転送命令が実行されることになる。図20においては、図16の「SIMD化パターン3」に従ってSIMD化した場合には、2個の転送命令を実行する必要があることが判る。
図21は、スコアリング部355が保持するスコアの計算式の一例を示す。
図21に示すように、SIMD化前の実行時間である「SIMD化前の時間」は、(元の命令の実行時間)×(並列度の数)×(命令の数)により求まる。実行時間とは、命令を実行するために必要な想定時間である。実行時間及び並列度の数は、予め定められる。命令の数は、SIMD化の候補が定まれば、求めることができる。SIMD化により必要となる転送時間である「転送命令の時間」は、(サブレジスタ間の転送命令の数)×(転送命令の実行時間)により求まる。転送命令の数は、前述したように、レジスタマップ354から求めることができる。SIMD化後の実行時間である「SIMD化後の時間」は、(元の命令の実行時間)×(命令の数)+(SIMD化により必要となる転送命令の時間)により求まる。この場合において、SIMD化の効果を表す「スコア」は、(SIMD化前の時間)−(SIMD化後の時間)により求まる。
ここで、「SIMD化後の時間」が、SIMD化した場合の予測実行時間である。以下に述べるように、複数のSIMD化処理の候補の中で、「スコア」が最も良い「SIMD化パターン」により、実際のSIMD化が行われる。比較の対象である複数のSIMD化処理の候補について「SIMD化前の時間」は同じであるから、予測実行時間が最も短い「SIMD化パターン」により、実際のSIMD化が行われる。
図22は、スコアリング部355が、図16の「SIMD化パターン3」について、図21のスコアの計算式によりスコアを計算した例を示す。図22において、命令「LOAD」及び四則演算の実行時間が「6」であるものとし、転送命令の実行時間が「6」であるものとする。この場合、図22に示すように、「SIMD化パターン3」についてのスコアは「12」となる。
なお、図16に示すように、「SIMD化パターン1」についてのスコアは「18」となり、「SIMD化パターン2」についてのスコアは「24」となる。従って、SIMD化前後の差分が最大である「SIMD化パターン2」が、効果の解析の結果が最も優れている、換言すれば、最もSIMD化の効果が大きいことが判る。
以上のスコアリング部355による効果の解析の結果に基づいて、効果解析部353は、図16の「SIMD化パターン2」によるSIMD化を選択する。これにより、最適化実行部36は、中間プログラムの該当する命令を「SIMD化パターン2」によりSIMD化する。この結果、効果の解析の結果が最も優れているSIMD化を実現することができる。また、スコアを算出することにより、SIMD化パターンを容易かつ正確に評価することができる。この結果、コンパイル時間を削減することができ、また、有効なSIMD化パターンのみを保持すれば良いので、メモリ使用量を削減することができる。
次に、効果解析部353が実行する効果解析処理を、図23〜図25を参照して詳細に説明する。
図23は、効果解析部353が実行する効果解析処理フローであり、特に、パックデータの生成に基づくSIMD化の依頼処理について示す。
効果解析部353は、エッジ番号eを「0」に設定することによりエッジ番号を初期値に設定し、ベストなスコアを保存する領域Zをグローバルな領域に確保して「−1」に設定する(ステップS71)。そして、効果解析部353は、Bをベストパックデータに設定し、Pをパックデータに設定する(ステップS72)。ベストパックデータB、パックデータPを格納する領域は、グローバルな領域に確保される。
この後、効果解析部353は、パックデータ設定サブルーチン、換言すれば、パックデータ設定サブルーチン実行部を呼び出して、エッジ番号e、パックデータPを渡してパックデータの設定を依頼すると、パックデータ設定サブルーチンがパックデータPを設定して、設定したパックデータPを効果解析部353に返す(ステップS73)。
この後、効果解析部353は、Z!=−1であるか否かを判断する(ステップS74)。Z!=−1である場合(ステップS74 YES)、効果解析部353は、ベストパックデータBを利用して、SIMD化の適用依頼を生成して、生成したSIMD化の適用依頼を最適化部35に返す(ステップS75)。Z!=−1でない場合(ステップS74 NO)、効果解析部353は、SIMD化の中止依頼を生成して、生成したSIMD化の中止依頼を最適化部35に返す(ステップS76)。
図24は、効果解析部353が実行する効果解析処理フローであり、特に、パックデータの設定処理、換言すれば、パックデータ設定サブルーチンによる処理について示す。
パックデータ設定サブルーチンは、スコア判定サブルーチン、換言すれば、スコア判定サブルーチン実行部を呼び出して、パックデータPを渡してスコアTの判定を依頼すると、スコア判定サブルーチンがパックデータPのスコアTを判定して、判定したパックデータPのスコアTをパックデータ設定サブルーチンに返す(ステップS81)。スコアTは、現在のパックデータPのスコアであり、スコア判定サブルーチンの復帰値である。
この後、パックデータ設定サブルーチンは、エッジデータeをインクリメントすることにより「1」を加算する(ステップS82)。これにより、処理対象が次のエッジデータに移動する。そして、パックデータ設定サブルーチンは、エッジデータeが最大エッジ番号よりも大きいか否かを判断する(ステップS83)。最大エッジ番号は、図10に示すエッジデータの数に等しい。
エッジデータeが最大エッジ番号よりも大きい場合(ステップS83 YES)、パックデータ設定サブルーチンは、パックデータPのスコアTを効果解析部353に返す。
エッジデータeが最大エッジ番号よりも小さい場合(ステップS83 NO)、パックデータ設定サブルーチンは、更に、判定条件Aのいずれかに合致するか否かを判断する(ステップS84)。ここで、判定条件Aは以下の3つとされる。第1の判定条件は、エッジ番号eに含まれる命令番号は登録済みであることである。例えば、図10に示すエッジデータの中で、先頭の2個のエッジデータが、第1の判定条件に該当する。第2の判定条件は、既存のパックデータPに依存関係があることである。依存関係がある場合には、SIMD化することができない。第3の判定条件は、スコアTが既存のいずれかのスコアTよりも悪いことである。スコアTが悪いので、現在のパックデータPの処理を進める意味が無い。
判定条件Aのいずれかに合致する場合(ステップS84 YES)、パックデータ設定サブルーチンは、以下のステップS85〜S87の実行を省略して、ステップS88を実行する。
判定条件Aのいずれにも合致しない場合(ステップS84 NO)、パックデータ設定サブルーチンは、エッジ番号eをパックデータPに追加して(ステップS85)、再度、パックデータ設定サブルーチンを呼び出して、エッジ番号e及びパックデータPを渡してパックデータの設定を依頼すると、再帰呼び出されたパックデータ設定サブルーチンがパックデータPを設定して、設定したパックデータPを再帰呼び出したパックデータ設定サブルーチンに返す(ステップS86)。この後、パックデータ設定サブルーチンは、ステップS85において追加したエッジ番号eを、パックデータPから削除する(ステップS87)。
そして、パックデータ設定サブルーチンは、再度、パックデータ設定サブルーチンを呼び出して、エッジ番号e及びパックデータPを渡してパックデータの設定を依頼すると、再帰呼び出されたパックデータ設定サブルーチンがパックデータPを設定して、設定したパックデータPを再帰呼び出したパックデータ設定サブルーチンに返す(ステップS88)。この後、パックデータ設定サブルーチンは、パックデータPのスコアTを効果解析部353に返す。
図25は、効果解析部353が実行する効果解析処理フローであり、特に、パックデータの設定処理におけるスコア判定処理、換言すれば、スコア判定サブルーチンによる処理について示す。
スコア判定サブルーチンは、パックデータPから先頭のエッジデータEを取り出し(ステップS91)、スロット番号Sを「1」に設定し(ステップS92)、取り出したエッジデータEの命令番号[S]の命令データを取り出す(ステップS93)。
次に、スコア判定サブルーチンは、取り出した命令データにおいて、定義オペランド及び参照オペランドに含まれるサブレジスタをレジスタマップ[S]に登録する(ステップS94)。換言すれば、スロットSについてのレジスタマップ354が生成される。そして、スコア判定サブルーチンは、スロットSをインクリメントすることにより「1」を加算し、換言すれば、スロットSの番号を更新し(ステップS95)、並列度の数だけステップS93を繰り返す。
次に、スコア判定サブルーチンは、パックデータPから先頭のエッジデータEを取り出し(ステップS96)、エッジデータの数だけステップS92を繰り返す。これにより、図20に示すように、スロットSの各々について、レジスタマップ354が生成される。
次に、スコア判定サブルーチンは、値Zにレジスタマップ354間で重なっているサブレジスタの数を求めて代入し(ステップS97)、スコアTにスコアの計算式による計算結果を代入して(ステップS98)、算出したスコアTが値Zよりも大きいか否かを判断する(ステップS99)。
スコアTが値Zよりも大きい場合(ステップS99 YES)、スコア判定サブルーチンは、値ZにスコアTを代入し、パックデータPをベストパックデータBに代入する(ステップS910)。この後、スコア判定サブルーチンは、求めたスコアT及びベストパックデータBをパックデータ設定サブルーチンに返す。これにより、図19に示すように、最も優れたスコアTと、そのスコアTを持つパックデータPが得られる。
スコアTが値Zよりも大きくない場合(ステップS99 NO)、スコア判定サブルーチンは、スコアTが値Zよりも大きくない旨をパックデータ設定サブルーチンに返す。
1 入力装置
2 コンパイル装置
3 コンパイラ
4 記憶部
5 リンカ
31 ソースプログラム入力部
32 入出力制御部
33 中間言語生成部
34 最適化部
35 ソース解析部
36 最適化実行部
37 中間言語記憶部
38 コード生成部
39 オブジェクトファイル出力部
41 ソースプログラム
42 オブジェクトファイル
43 実行ファイル
351 依存解析部
352 候補抽出部
353 効果解析部
354 レジスタマップ
355 スコアリング部

Claims (9)

  1. 複数の命令を1個のSIMD(Single Instruction Multiple Data)命令に置き換えるSIMD化処理の候補となる、処理対象の命令列から依存関係の無い複数の命令の組み合わせである第1の組み合わせと第2の組み合わせを抽出し、抽出した前記第1の組み合わせと前記第2の組み合わせの各々についてSIMD化した場合の予測実行時間を算出し、前記第1の組み合わせと、前記第2の組み合わせと、前記第1の組み合わせと前記第2の組み合わせに含まれる複数の命令の並び替えが可能か否かを表す情報とに基づいて、SIMD化する命令の組み合わせを生成し、生成した前記SIMD化する命令の組み合わせの各々について、SIMD化した場合の効果を解析し、解析された前記SIMD化した場合の効果に基づいて、前記第1の組み合わせと前記第2の組み合わせのうち、前記予測実行時間が短い組み合わせを、SIMD化を行なう対象として選択する算出部と、
    前記第1の組み合わせと前記第2の組み合わせのうち、前記算出部で選択された予測実行時間が短い組み合わせについてSIMD化を行なうSIMD化部とを含む
    ことを特徴とするコンパイル装置。
  2. 前記算出部は、前記命令列に含まれる各々の命令の属性を表す命令データを生成し、生成した前記各々の命令についての命令データに基づいて、前記各々の命令の間における依存関係を表す依存データを生成する依存解析部を含む
    ことを特徴とする請求項1に記載のコンパイル装置。
  3. 前記依存解析部は、前記命令列として、連続する位置に存在する予め定められた数の命令を抽出して、前記依存関係の解析の対象とする
    ことを特徴とする請求項2に記載のコンパイル装置。
  4. 前記算出部は、前記各々の命令についての命令データと、前記依存データとに基づいて、前記SIMD化処理の候補を抽出する候補抽出部を含む
    ことを特徴とする請求項2に記載のコンパイル装置。
  5. 前記算出部は、複数のSIMDレジスタにおいて対応する位置に存在するサブレジスタの集合であるスロット毎に、前記スロットに属するサブレジスタを管理するレジスタマップを生成し、生成した前記レジスタマップに基づいて、SIMD化した場合に必要となる転送命令を抽出する
    ことを特徴とする請求項に記載のコンパイル装置。
  6. 前記算出部は、前記第1の組み合わせと前記第2の組み合わせの各々について、SIMD化しない場合の命令実行時間と、SIMD化した場合の命令実行時間及び転送命令の実行時間の和との差分をスコアとして算出し、算出した前記スコアに基づいて、SIMD化した場合の効果を解析する
    ことを特徴とする請求項に記載のコンパイル装置。
  7. 算出部が、複数の命令を1個のSIMD命令に置き換えるSIMD化処理の候補となる、処理対象の命令列から依存関係の無い複数の命令の組み合わせである第1の組み合わせと第2の組み合わせを抽出し、抽出した前記第1の組み合わせと前記第2の組み合わせの各々についてSIMD化した場合の予測実行時間を算出し、
    効果解析部が、前記第1の組み合わせと、前記第2の組み合わせと、前記第1の組み合わせと前記第2の組み合わせに含まれる複数の命令の並び替えが可能か否かを表す情報とに基づいて、SIMD化する命令の組み合わせを生成し、生成した前記SIMD化する命令の組み合わせの各々について、SIMD化した場合の効果を解析し、
    前記算出部が、前記効果解析部で解析されたSIMD化した場合の効果に基づいて、前記第1の組み合わせと前記第2の組み合わせのうち、前記予測実行時間が短い組み合わせを、SIMD化を行なう対象として選択し、
    SIMD化部が、前記第1の組み合わせと前記第2の組み合わせのうち、前記算出部で選択された予測実行時間が短い組み合わせについてSIMD化を行なう
    ことを特徴とするコンパイル方法。
  8. ソースプログラムをコンパイル処理することにより中間プログラムを生成するコンパイルプログラムであって、
    前記コンパイルプログラムは、コンピュータに、
    複数の命令を1個のSIMD命令に置き換えるSIMD化処理の候補となる、処理対象の命令列から依存関係の無い複数の命令の組み合わせである第1の組み合わせと第2の組み合わせを抽出し、抽出した前記第1の組み合わせと前記第2の組み合わせの各々についてSIMD化した場合の予測実行時間を算出する処理と、
    前記第1の組み合わせと、前記第2の組み合わせと、前記第1の組み合わせと前記第2の組み合わせに含まれる複数の命令の並び替えが可能か否かを表す情報とに基づいて、SIMD化する命令の組み合わせを生成し、生成した前記SIMD化する命令の組み合わせの各々について、SIMD化した場合の効果を解析する処理と、
    解析された前記SIMD化した場合の効果に基づいて、前記第1の組み合わせと前記第2の組み合わせのうち、前記予測実行時間が短い組み合わせを、SIMD化を行なう対象として選択する処理と、
    前記第1の組み合わせと前記第2の組み合わせのうち、前記選択する処理で選択された予測実行時間が短い組み合わせについてSIMD化を行なう処理とを実行させる
    ことを特徴とするコンパイルプログラム。
  9. ソースプログラムをコンパイル処理することにより中間プログラムを生成するコンパイルプログラムを記録する記録媒体であって、
    前記コンパイルプログラムは、コンピュータに、
    複数の命令を1個のSIMD命令に置き換えるSIMD化処理の候補となる、処理対象の命令列から依存関係の無い複数の命令の組み合わせである第1の組み合わせと第2の組み合わせを抽出し、抽出した前記第1の組み合わせと前記第2の組み合わせの各々についてSIMD化した場合の予測実行時間を算出する処理と、
    前記第1の組み合わせと、前記第2の組み合わせと、前記第1の組み合わせと前記第2の組み合わせに含まれる複数の命令の並び替えが可能か否かを表す情報とに基づいて、SIMD化する命令の組み合わせを生成し、生成した前記SIMD化する命令の組み合わせの各々について、SIMD化した場合の効果を解析する処理と、
    解析された前記SIMD化した場合の効果に基づいて、前記第1の組み合わせと前記第2の組み合わせのうち、前記予測実行時間が短い組み合わせを、SIMD化を行なう対象として選択する処理と、
    前記第1の組み合わせと前記第2の組み合わせのうち、前記選択する処理で選択された予測実行時間が短い組み合わせについてSIMD化を行なう処理とを実行させる
    ことを特徴とする記録媒体。
JP2011220575A 2011-10-05 2011-10-05 コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体 Active JP5887811B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011220575A JP5887811B2 (ja) 2011-10-05 2011-10-05 コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011220575A JP5887811B2 (ja) 2011-10-05 2011-10-05 コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体

Publications (2)

Publication Number Publication Date
JP2013080407A JP2013080407A (ja) 2013-05-02
JP5887811B2 true JP5887811B2 (ja) 2016-03-16

Family

ID=48526722

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011220575A Active JP5887811B2 (ja) 2011-10-05 2011-10-05 コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体

Country Status (1)

Country Link
JP (1) JP5887811B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10606602B2 (en) 2016-09-26 2020-03-31 Samsung Electronics Co., Ltd Electronic apparatus, processor and control method including a compiler scheduling instructions to reduce unused input ports

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6245031B2 (ja) 2014-03-27 2017-12-13 富士通株式会社 コンパイルプログラム、コンパイル方法およびコンパイル装置
JP2018124605A (ja) * 2017-01-30 2018-08-09 オムロン株式会社 画像処理システム、情報処理装置、情報処理方法、および、情報処理プログラム

Family Cites Families (3)

* Cited by examiner, † Cited by third party
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
US7856627B2 (en) * 2006-08-08 2010-12-21 International Business Machines Corporation Method of SIMD-ization through data reshaping, padding, and alignment

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10606602B2 (en) 2016-09-26 2020-03-31 Samsung Electronics Co., Ltd Electronic apparatus, processor and control method including a compiler scheduling instructions to reduce unused input ports

Also Published As

Publication number Publication date
JP2013080407A (ja) 2013-05-02

Similar Documents

Publication Publication Date Title
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
US10268454B2 (en) Methods and apparatus to eliminate partial-redundant vector loads
JP4629768B2 (ja) 並列化処理方法、システム、及びプログラム
JP5419325B2 (ja) プログラム・コードを変換するための共用コード・キャッシングの方法および装置
CN109426614A (zh) 缺陷检测方法、设备、系统和计算机可读存储介质
US20090249307A1 (en) Program analysis apparatus, program analysis method, and program storage medium
US9152389B2 (en) Trace generating unit, system, and program of the same
JPH0695311B2 (ja) コード最適化方法
JP5583514B2 (ja) バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
CN103164334A (zh) 检测web应用自动测试用例中的断裂点的系统和方法
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
JP5966509B2 (ja) プログラム、コード生成方法および情報処理装置
JPH02217926A (ja) コード生成方法
CN115017516A (zh) 一种基于符号执行的模糊测试方法
JP5887811B2 (ja) コンパイル装置、コンパイル方法、コンパイルプログラム、記録媒体
JP2013025403A (ja) プログラム生成装置
JP6730587B2 (ja) キャッシュミス推定プログラム、キャッシュミス推定方法及び情報処理装置
US20210042099A1 (en) Automatic generation of efficient vector code with low overhead in a time-efficient manner independent of vector width
WO2017204139A1 (ja) データ処理装置、データ処理方法、およびプログラム記録媒体
Arabnejad et al. An OpenMP based parallelization compiler for C applications
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
JP7163697B2 (ja) 生成プログラム,情報処理装置及び生成方法
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
JP6748357B2 (ja) 解析装置、解析プログラムおよび解析方法
JP6330490B2 (ja) テストケース生成プログラム、テストケース生成装置、及びテストケース生成方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140603

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150317

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150518

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20151104

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151216

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20160104

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160201

R150 Certificate of patent or registration of utility model

Ref document number: 5887811

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150