JP6547466B2 - コンパイラ装置、コンパイル方法およびコンパイラプログラム - Google Patents
コンパイラ装置、コンパイル方法およびコンパイラプログラム Download PDFInfo
- Publication number
- JP6547466B2 JP6547466B2 JP2015135456A JP2015135456A JP6547466B2 JP 6547466 B2 JP6547466 B2 JP 6547466B2 JP 2015135456 A JP2015135456 A JP 2015135456A JP 2015135456 A JP2015135456 A JP 2015135456A JP 6547466 B2 JP6547466 B2 JP 6547466B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instruction sequence
- integer
- loop
- unit
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
Description
図1は、情報処理装置100のハードウェア構成を例示する図である。情報処理装置100は、プロセッサ101、主記憶部102、補助記憶部103、通信部104および接続バスB1を含む。プロセッサ101、主記憶部102、補助記憶部103および通信部104は、接続バスB1によって相互に接続されている。情報処理装置100は、例えば、第1実施形態に係るコンパイラ装置10として使用できる。コンパイラ装置10は、入力されたプログラムのソースファイルをコンパイルすることでプロセッサによって実行可能なオブジェクトを生成する。
ムを主記憶部102の作業領域に展開し、プログラムの実行を通じて周辺装置の制御を行う。これにより、情報処理装置100は、所定の目的に合致した処理を実行することができる。主記憶部102および補助記憶部103は、情報処理装置100が読み取り可能な記録媒体である。
ステートドライブ(Solid State Drive、SSD)、ハードディスクドライブ(Hard Disk
Drive、HDD)等である。また、補助記憶部103は、例えば、Compact Disc(CD)ドライブ装置、Digital Versatile Disc(DVD)ドライブ装置、Blu-ray(登録商標) Disc(BD)ドライブ装置等である。また、補助記憶部103は、Network Attached Storage(NAS)あるいはStorage Area Network(SAN)によって提供されてもよい。
ネルあるいはプリンタといった出力デバイスを例示できる。
101は、複数の演算器を有することで、複数の命令を並列に実行可能である。なお、図中では、整数演算器101aは「IU」と記載され、浮動小数点演算器101bは「FU」と記載されている。
る。オペランドは、例えば、カンマ(,)で区切ることで複数指定できる。オペランドに
は、仮想レジスタ、メモリオペランドおよび定数等が指定される。整数命令には、整数型のオペランドが指定される。浮動小数点命令には、浮動小数点型のオペランドが指定される。
」、「$g2」および「$g3」が仮想レジスタの例示である。仮想レジスタは、ソースファイルがコンパイラ装置10によってコンパイルされる際に割り付けられるコンパイラ内部での仮想的なレジスタである。仮想レジスタは、整数を扱う整数型の仮想レジスタと浮動小数点数を扱う浮動小数点型の仮想レジスタとがある。本明細書では、整数型をint型、浮
動小数点型をfloat型とも称する。int型の仮想レジスタは、仮想レジスタ名「$g」と仮想レジスタ番号である数字との組み合わせで特定される。float型の仮想レジスタは、仮想
レジスタ名「$f」と仮想レジスタ番号である数字との組み合わせで特定される。int型お
よびfloat型のいずれの仮想レジスタも、仮想レジスタ番号は1から始まり、新しい仮想
レジスタが作成されるたびに仮想レジスタ番号が1ずつ増加する。
3に例示される「[b+$g1]」は、アドレス定数「b」によって示されるアドレスと仮想レジスタ「$g1」の値が加算されたアドレスのメモリを特定している。
令を含む。分岐命令またはジャンプ命令では、ラベルが指定されることで、ブロックの先頭に処理が進められる。基本ブロックとは、ブロック内に分岐を含まないブロックである。基本ブロックは分岐を含まないため、基本ブロック内の最初の命令が実行されると途中で分岐することなく最後の命令まで実行される。
ドレス定数「a」が指し示す値と仮想レジスタ「$g1」に格納された値との和によって示されるアドレスで特定されるメモリの値が、仮想レジスタ「$g2」に読み込まれる。次の「mult」命令では、仮想レジスタ「$g2」に読み込まれた値と数字の「5」との乗算の結果が
、仮想レジスタ「$g3」に格納される。最後の「st」命令では、仮想レジスタ「$g3」に格納された値が、アドレス定数「b」と仮想レジスタ「$g1」との和によって示されるアドレスで特定されるメモリ上に格納される。
初期化を行っている。ラベル「Label」は、ループ演算命令列の先頭位置を特定する。ル
ープ演算命令列は、ループによって繰り返し実行される命令を含む。ループ命令列は、加算命令または減算命令と比較分岐命令とを含む。ループ命令列における加算命令または減算命令は、加算または減算によってループカウンタの数値を変更する。図5では、加算命令「add」によって、ループカウンタ「$g1」に「4」を加算している。比較分岐命令は、指定された条件にしたがって、処理を分岐させる。図7では、ループカウンタ「$g1」の
値が「90×4」未満の場合、ラベル「Label」によって特定されるループ演算命令列の
先頭位置に処理が進められる。すなわち、ループは、初期化命令列およびループ命令列によって指定された条件にしたがって、ループ演算命令列の命令を繰り返し実行する。また、ループ演算命令列が基本ブロックである場合、当該ループを最内ループと称する。
開後の命令列では、例えば、Bの命令列(展開番号2)のメモリオペランドでは、「(2−1)×4=4」のオフセット値が加算されている。また、ループ展開に伴い、ループ命令列におけるループカウンタの1回転当たりの増分が補正されている。図6に例示されるループでは展開数が「3」であるため、ループ命令列における加算命令ではループカウンタ「$g1」に「4×3」が加算されている。ループ展開を行う事で、A、B、Cによって
例示される各命令列の間の分岐命令を排除できる。分岐命令が排除された結果、A、B、Cによって例示される各命令列を複数の演算器で並列して実行可能となる。したがって、ループ展開により、命令の並列実行の効率を高めることが可能である。
例示されている。図7の命令列に含まれる命令「fadd」は、浮動小数点命令の一例である。浮動小数点命令である「fadd」は、浮動小数点演算器101bであるFU0またはFU1によって実行される。その結果、第1サイクルでは、命令列の1行目に記載の「fadd $f0,$f1,$f2」がFU0で実行され、命令列の2行目に記載の「fadd $f3,$f4,$f5」はFU1で実行される。第2サイクルでは、命令列の3行目に記載の「fadd $f6,$f7,$f8」がFU0で実行され、命令列の4行目に記載の「fadd $f9,$f10,$f11」はFU1で実行される。第3サイクルでは、命令列の5行目に記載の「fadd $f12,$f13,$f14」がFU0で実行
される。なお、この命令列には、整数命令は含まれていない。そのため、整数命令を実行する整数演算器101bであるIU0は、図7の命令列をプロセッサ101で実行している間、処理を行っていない。
1で実行される。
命令を検出し、アウトオブオーダーおよびスーパースカラによって検出された命令を並列に実行する。
図12は、第1実施形態に係るコンパイラ装置10の処理ブロックの一例を示す図である。図12では、最適化部200、中間コード部260、マシンモデル201、NFU数格納部202およびNIU数格納部203の各処理ブロックが例示されている。例えば、図1のプロセッサ101が図12の各処理ブロックとして主記憶部102に展開されたコンピュータプログラムを実行する。ただし、図12のいずれかの処理ブロックの少なくとも一部はハードウェア回路、専用のプロセッサまたはデジタルシグナルプロセッサ(Digital Signal Processor、DSP)を含んでもよい。
算される数値を補正する。ループ命令補正部240は、「決定部」の一例である。
に例示されるソースファイルでは、ループの回転間に依存関係がある。そのため、図14の左側に例示される命令「a[i+1]=b[i]*c[i]+a[i];」と「a[i+2]=[b[i+1]*c[i+1]+a[i+1];」とは、並行して実行する事が出来ない。そのため、ループの回転間に依存関係がある
場合、第1実施形態のコンパイラ装置10は、ループ展開の対象外とすることができる。
る。以降の説明では、図17に例示した命令列を対象に処理がなされる。
型の仮想レジスタに格納されたビット列を整数として扱って演算する。
レジスタが指定される。すなわち、「iufadd」および「iufmult」は、int型の仮想レジスタに格納されたビット列を浮動小数点数として扱って演算する。
命令列の展開処理について説明する。
に仮想レジスタ「$f2」に格納される。すなわち、J2の処理では、書き換え前の仮想レ
ジスタに格納されていた値の符号、仮数、基数および指数等の区別がされない。J2の処理では、書き換え前の仮想レジスタに格納されていたビット列をそのまま書き換え後の仮想レジスタに格納する。
ける1回転当たりの増分値のことである。すなわち、ループ命令列の加算命令によってループカウンタ「$g1」に加算される値であるともいえる。図27は、各展開番号における
メモリオペランドの変換を例示する図である。展開番号1では、メモリオペランド「a+$g1」が変換されると、「a+$g1+(1−1)×4」より、「a+$g1」となる。展開番号2では
、メモリオペランド「a+$g1」が変換されると、「a+$g1+(2−1)×4」より、「a+$g1+4」となる。展開番号3では、メモリオペランド「a+$g1」が変換されると、「a+$g1+(3−1)×4」より、「a+$g1+8」となる。この際、メモリオペランド「a+$g1」によって指
定される領域に格納されていた値は、そのビット列を変更せずにメモリオペランド「a+$g
1+8」によって指定される領域に格納される。すなわち、図26および図27の処理では
、書き換え前のメモリオペランドによって指定される領域に格納されていた値の符号、仮数、基数および指数等の区別がされない。図26および図27の処理では、書き換え前のメモリオペランドによって指定される領域に格納されていたビット列をそのまま書き換え後のメモリオペランドによって指定される領域に格納する。
する。int型である場合(K1でYES)、処理はK2に進められる。int型でない場合(K1でNO)、処理はK3に進められる。K2では、命令展開部230は、int型の仮想
レジスタを新規に作成する。K3では、命令展開部230は、float型の仮想レジスタを
新規に作成する。K4では、命令変換部230は、変換前のオペランドと、K3またはK4で作成した仮想レジスタとの対応を仮想レジスタマップに追加する。K5では、命令展開部230は、オペランドをK3またはK4によって作成した仮想レジスタに変換する。この際、変換前の仮想レジスタに格納されていた値は、そのビット列を変更せずに変換後の仮想レジスタに格納される。すなわち、K5の処理では、書き換え前の仮想レジスタに格納されていた値の符号、仮数、基数および指数等の区別がされない。K5の処理では、書き換え前の仮想レジスタに格納されていたビット列をそのまま書き換え後の仮想レジスタに格納する。
浮動小数点命令による命令列が2つ、整数命令による命令列が1つ格納されている。すなわち、出力ループ命令列格納部266に格納される浮動小数点命令による命令列の数および整数命令による命令列の数は、それぞれ、プロセッサ101の有する浮動小数点演算器101bおよび整数演算器101aの数と一致している。
展開後では、ループカウンタ「$g1」の値は「(展開数)3×(ループ展開前のループカ
ウンタの増分値)4」によって「12」と算出される。図30は、回転数が補正されたループ命令列の一例を示す図である。図30を参照すると、ループ命令列の加算命令において、ループカウンタ「$g1」の増分が「12」になっていることがわかる。
第1比較例では、入力されたループの命令列を所定の展開数だけループ展開し、命令の型の変換を行わないコンパイラ装置について説明する。図34は、第1比較例に係るコンパイラ装置500のループ展開を行う処理ブロックの一例である。情報処理装置100は、コンパイラ装置500としても利用可能である。図34では、展開数決定部501、命令展開部502、ループ命令補正部503、入力ループ命令列格納部504、展開命令列格納部505および出力ループ命令列格納部506の各処理ブロックが例示されている。例えば、図1のプロセッサ101が図34の各処理ブロックとして主記憶部102に展開されたコンピュータプログラムを実行する。ただし、図34のいずれかの処理ブロックの少なくとも一部はハードウェア回路、専用のプロセッサまたはデジタルシグナルプロセッサ(Digital Signal Processor、DSP)を含んでもよい。
展開の展開数を決定する。展開数は、プロセッサ101の有するレジスタ数、入力ループ命令列格納部504に格納されたループ演算命令列に含まれる命令数等に基づいて決定される。コンパイラ装置500のプロセッサ101は、命令展開部502として、ループ演算命令列に含まれる命令列を展開する。展開された命令列は、展開命令列格納部505に記憶される。コンパイラ装置500のプロセッサ101は、ループ命令補正部503として、展開後のループ命令におけるループカウンタの増加量、ループの終了条件の補正を行う。以上の処理によって展開されたループの命令列は、出力ループ命令列格納部506に格納される。
第2比較例では、ループ展開において、整数命令を浮動小数点命令に、浮動小数点命令を整数命令に変換する処理が追加される。図37は、第2比較例によるループ展開を模式的に例示する図である。図38は、図37を疑似コードによって例示する図である。第2比較例では、ループ展開によって、整数命令によるIU命令列と浮動小数点命令によるFU命令列とが生成される。すなわち、第2比較例では、ループ展開前の元の命令列を、整数命令に変換したIU命令列と、浮動小数点命令に変換したFU命令列とを生成する。生成された命令列は、第2比較例に係るコンパイラ装置によって生成されたオブジェクトに含まれる。オブジェクトが実行されると、プロセッサ101の演算器の使用状況に応じて、IU命令列またはFU命令列が実行される。すなわち、プロセッサ101の有する演算器の使用状況に応じて、IU命令列またはFU命令列が実行される。それぞれの演算器で実行される命令列は、互いに異なるスレッドである。すなわち、第2比較例では、マルチスレッドによって、IU命令列とFU命令列とを実行する。プロセッサ101の有する演算器の使用状況は、OSのシステムコールによって取得可能である。このシステムコールは、オブジェクトが実行されている時点における、整数演算および浮動小数点演算のどちらが頻繁に実行されており、整数演算器101aと浮動小数点演算器101b、101bのいずれが空いているかを返す。
図39は、第1比較例によるループ展開と第1実施形態によるループ展開とを比較する図の一例である。図39では、展開前の命令列を「元の命令列」と記載している。第1比較例に係るループ展開では、「元の命令列」を2回転分展開している。第1実施形態に係るループ展開では、プロセッサ101aの有する演算器の数に合わせて、浮動小数点命令による命令列(図中では、FU命令化した命令列と記載)が2回転分、整数命令による命令列(図中では、IU命令化した命令列と記載)が1回転分展開されている。例えば、「
元の命令列」が浮動小数点命令による命令列であった場合、第1比較例によるループ展開でも2つの浮動小数点演算器101b、101bによって並列して命令の実行が可能である。しかしながら、整数演算器101aは、この間処理を行っていない。第1実施形態によるループ展開では、前述のとおり、プロセッサ101aの有する演算器の数に合わせてループ展開が行われている。そのため、第1実施形態によるループ展開後の命令列では、浮動小数点による命令列を2つの浮動小数点演算器101b、101bによって実行し、整数命令による命令列を整数演算器101aによって実行する。すなわち、第1比較例よりも第1実施形態によるループ展開を行った方が、プロセッサ101の有する演算器を効率的に使用できることがわかる。
第1実施形態では、コンパイラ装置10は、ループ展開の対象としてループ演算命令列が分岐命令を含まない最内ループを選択した。その結果、コンパイラ装置10は、ループ展開において、分岐先の命令等を含めて展開しなくともよい。
のみの命令列を生成できる。
第1実施形態では、ループの各回転間の依存関係のないループがループ展開の対象とされた。第1変形例では、ループの各回転間に回帰演算の依存関係があるループもループ展開の対象とされる。第1実施形態と共通の構成要素については同一の符号を付し、その説明は省略される。以下、図面を参照して、第1変形例について説明する。
」および「op2」を有し、定義オペランドとして「op3」を有する。第1変形例のコンパイラ装置10は、参照オペランドである「op1」または「op2」と定義オペランドである「op3」とが等しく、「op1」と「op2」とが異なる命令をループ展開の対象となる回帰演算と
判定する。
存があるため、そのままループ展開する事は難しい。
算となっている。以下、図46に例示される中間コードをループ展開する処理について説明する。
」を有し、定義オペランドとして「op3」を有する。図51に例示される加算命令「add」は、参照オペランド「op1」と定義オペランド「op3」とが同一の変数であり、「op1」と
「op2」とは異なる変数であるものとする。
」が整数型(int型)であるか否かを判定する。「op1」が整数型である場合、処理はE2に進められる。「op1」が整数型でない場合、処理はE5に進められる。
。図53では、作成された仮想レジスタは、「new」と記載されている。E32では、命
令展開部230は、図48のU1で作成された初期化命令列結果リストに、E31で作成した仮想レジスタを初期化する命令を追加する。ここでは、命令「mov 0, new」が追加される。すなわち、E32で初期化命令列結果リストに追加された命令は、E31で作成した仮想レジスタ「new」を「0」で初期化している。
令展開部230は、収束命令列結果リストにループ終了後に実行する加算命令を追加する。ここでは、「add new, op3, op3」が収束命令列結果リストに追加される。
作成する。図54のE51では、作成された仮想レジスタは、「new1」と記載されている。E52では、命令展開部230は、図48のU1で作成された初期化命令列結果リストに、E51で作成した仮想レジスタを初期化する命令を追加する。ここでは、命令「mov 0, new1」が追加される。すなわち、E52で初期化命令列結果リストに追加された命令
は、E51で作成した仮想レジスタ「new1」を「0」で初期化している。
4では、作成された仮想レジスタは、「new2」と記載されている。E55では、命令展開部230は、変数の型変換を行う命令を収束命令列結果リストに追加する。ここでは、「movftoi new1, new2」が追加される。この命令は、浮動小数点型の仮想レジスタ「new1」の値を整数型に型変換せずに、ビット列はそのままで、整数型の仮想レジスタである「new2」に代入する。
出す。E58では、命令展開部230は、回帰演算を「fadd new2, newOP2, new2」と書
き換える。
仮想レジスタを新規に作成する。図55のE61では、作成された仮想レジスタは、「new2」と記載されている。E62では、命令展開部230は、変数の型変換を行う命令を収
束命令列結果リストに追加する。ここでは、「movftoi new2, new」が追加される。この
命令は、浮動小数点型の仮想レジスタ「new2」の値を整数型に型変換せずに、ビット列はそのままで、整数型の仮想レジスタである「new」に代入する。
される。E35からE36の処理は、図53のE35からE36の処理と同様である。そのため、その説明を省略する。
用可能である。
以上の第1変形例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
入力されたソースファイルにおいて命令列の繰り返しを指示する繰り返し命令を検出すると、前記繰り返し命令によって繰り返される前記命令列を抽出する抽出部(220)と、
抽出された前記命令列に含まれる命令を整数演算を行う整数命令に変換して整数命令列を生成する第1の生成部と、
抽出された前記命令列に含まれる命令を浮動小数点演算を行う浮動小数点命令に変換して浮動小数点命令列を生成する第2の生成部と、
前記ソースファイルをコンパイルしたオブジェクトの実行環境となるプロセッサの有する整数演算器の数および浮動小数点演算器の数に基づいて、前記整数命令列と前記浮動小数点命令列とを含む出力命令列を生成する第3の生成部と、を備える、
コンパイラ装置。
(付記2)
前記繰り返し命令による前記命令列の繰り返し回数、前記整数演算器の数および前記浮動小数点演算器の数に基づいて、前記繰り返し命令による前記出力命令列の繰り返し回数を決定する決定部をさらに備える、
付記1に記載のコンパイラ装置。
(付記3)
前記決定部は、前記繰り返し命令による前記命令列の繰り返し回数を前記整数演算器の数および前記浮動小数点演算器の数の和で除算した値を前記繰り返し命令による前記出力命令列の繰り返し回数とする、
付記2に記載のコンパイラ装置。
(付記4)
整数演算器と浮動小数点演算器の数をプロセッサ種別毎に記憶するプロセッサ情報記憶部と、
前記オブジェクトの実行環境となるプロセッサの有する整数演算器と浮動小数点演算器の数を前記プロセッサ情報記憶部から取得する演算器数取得部と、をさらに備える、
付記1から3のいずれか一項に記載のコンパイラ装置。
(付記5)
前記抽出部によって抽出される前記命令列は分岐を含まない命令列である、
付記1から4のいずれか一項に記載のコンパイラ装置。
(付記6)
コンピュータが、
入力されたソースファイルにおいて命令列の繰り返しを指示する繰り返し命令を検出すると、前記繰り返し命令によって繰り返される前記命令列を抽出し、
抽出された前記命令列に含まれる命令を整数演算を行う整数命令に変換して整数命令列を生成し、
抽出された前記命令列に含まれる命令を浮動小数点演算を行う浮動小数点命令に変換して浮動小数点命令列を生成し、
前記ソースファイルをコンパイルしたオブジェクトの実行環境となるプロセッサの有する整数演算器の数および浮動小数点演算器の数に基づいて、前記整数命令列と前記浮動小数点命令列とを含む出力命令列を生成する、
コンパイル方法。
(付記7)
前記繰り返し命令による前記命令列の繰り返し回数、前記整数演算器の数および前記浮動小数点演算器の数に基づいて、前記繰り返し命令による前記出力命令列の繰り返し回数を決定する処理をさらに実行する、
付記6に記載のコンパイル方法。
(付記8)
前記決定する処理は、前記繰り返し命令による前記命令列の繰り返し回数を前記整数演算器の数および前記浮動小数点演算器の数の和で除算した値を前記繰り返し命令による前記出力命令列の繰り返し回数とする処理を含む、
付記7に記載のコンパイル方法。
(付記9)
前記コンピュータは、整数演算器と浮動小数点演算器の数をプロセッサ種別毎に記憶するプロセッサ情報記憶部を備え、
前記オブジェクトの実行環境となるプロセッサの有する整数演算器と浮動小数点演算器の数を前記プロセッサ情報記憶部から取得する処理をさらに実行する、
付記6から8のいずれか一項に記載のコンパイル方法。
(付記10)
前記抽出される前記命令列は分岐を含まない命令列である、
付記6から9のいずれか一項に記載のコンパイル方法。
(付記11)
コンピュータに、
入力されたソースファイルにおいて命令列の繰り返しを指示する繰り返し命令を検出すると、前記繰り返し命令によって繰り返される前記命令列を抽出させ、
抽出された前記命令列に含まれる命令を整数演算を行う整数命令に変換して整数命令列を生成させ、
抽出された前記命令列に含まれる命令を浮動小数点演算を行う浮動小数点命令に変換して浮動小数点命令列を生成させ、
前記ソースファイルをコンパイルしたオブジェクトの実行環境となるプロセッサの有する整数演算器の数および浮動小数点演算器の数に基づいて、前記整数命令列と前記浮動小数点命令列とを含む出力命令列を生成させる、
コンパイラプログラム。
(付記12)
前記繰り返し命令による前記命令列の繰り返し回数、前記整数演算器の数および前記浮動小数点演算器の数に基づいて、前記繰り返し命令による前記出力命令列の繰り返し回数を決定させる処理をさらに実行させる、
付記11に記載のコンパイラプログラム。
(付記13)
前記決定させる処理は、前記繰り返し命令による前記命令列の繰り返し回数を前記整数演算器の数および前記浮動小数点演算器の数の和で除算した値を前記繰り返し命令による前記出力命令列の繰り返し回数とする処理を含む、
付記12に記載のコンパイラプログラム。
(付記14)
前記コンピュータは、整数演算器と浮動小数点演算器の数をプロセッサ種別毎に記憶するプロセッサ情報記憶部を備え、
前記オブジェクトの実行環境となるプロセッサの有する整数演算器と浮動小数点演算器の数を前記プロセッサ情報記憶部から取得する処理ををさらに実行させる、
付記11から13のいずれか一項に記載のコンパイラプログラム。
(付記15)
前記抽出される前記命令列は分岐を含まない命令列である、
付記11から14のいずれか一項に記載のコンパイラプログラム。
101・・・プロセッサ
101a・・・整数演算器
101b・・・浮動小数点演算器
102・・・主記憶部
103・・・補助記憶部
104・・・通信部
10、500・・・コンパイラ装置
201・・・マシンモデル
202・・・NFU数格納部
203・・・NIU数格納部
211・・・NIU取得部
212・・・NFU取得部
220・・・命令変換部
221・・・IU命令変換部
222・・・FU命令変換部
230・・・命令展開部
231・・・IU命令展開部
232・・・FU命令展開部
240・・・ループ命令補正部
261・・・ループ演算命令列格納部
262・・・FU変換命令列格納部
263・・・IU変換命令列格納部
264・・・FU出力命令列格納部
265・・・IU出力命令列格納部
266・・・出力ループ命令列格納部
301・・・FU変換テーブル
302・・・IU変換テーブル
Claims (7)
- 入力されたソースファイルにおいて命令列の繰り返しを指示する繰り返し命令を検出すると、前記繰り返し命令によって繰り返される前記命令列を抽出する抽出部と、
抽出された前記命令列に含まれる整数命令を浮動小数点型の仮想レジスタに格納されたビット列を整数として扱うことで浮動小数点演算器に整数演算を実行させる命令に変換して整数命令列を生成する第1の生成部と、
抽出された前記命令列に含まれる浮動小数点命令を整数型の仮想レジスタに格納されたビット列を浮動小数点数として扱うことで整数演算器に浮動小数点演算を実行させる命令に変換して浮動小数点命令列を生成する第2の生成部と、
前記ソースファイルをコンパイルしたオブジェクトの実行環境となるプロセッサの有する整数演算器の数および浮動小数点演算器の数に基づいて、前記整数命令列と前記浮動小数点命令列とを含む出力命令列を生成する第3の生成部と、を備える、
コンパイラ装置。 - 前記繰り返し命令による前記命令列の繰り返し回数、前記整数演算器の数および前記浮動小数点演算器の数に基づいて、前記繰り返し命令による前記出力命令列の繰り返し回数を決定する決定部をさらに備える、
請求項1に記載のコンパイラ装置。 - 前記決定部は、前記繰り返し命令による前記命令列の繰り返し回数を前記整数演算器の数および前記浮動小数点演算器の数の和で除算した値を前記繰り返し命令による前記出力命令列の繰り返し回数とする、
請求項2に記載のコンパイラ装置。 - 整数演算器と浮動小数点演算器の数をプロセッサ種別毎に記憶するプロセッサ情報記憶部と、
前記オブジェクトの実行環境となるプロセッサの有する整数演算器と浮動小数点演算器の数を前記プロセッサ情報記憶部から取得する演算器数取得部と、をさらに備える、
請求項1から3のいずれか一項に記載のコンパイラ装置。 - 前記抽出部によって抽出される前記命令列は分岐を含まない命令列である、
請求項1から4のいずれか一項に記載のコンパイラ装置。 - プロセッサを備えるコンピュータが、
入力されたソースファイルにおいて命令列の繰り返しを指示する繰り返し命令を検出すると、前記繰り返し命令によって繰り返される前記命令列を抽出し、
抽出された前記命令列に含まれる整数命令を浮動小数点型の仮想レジスタに格納されたビット列を整数として扱うことで浮動小数点演算器に整数演算を実行させる命令に変換して整数命令列を生成し、
抽出された前記命令列に含まれる浮動小数点命令を整数型の仮想レジスタに格納されたビット列を浮動小数点数として扱うことで整数演算器に浮動小数点演算を実行させる命令に変換して浮動小数点命令列を生成し、
前記プロセッサの有する整数演算器の数および浮動小数点演算器の数に基づいて、前記整数命令列と前記浮動小数点命令列とを含む出力命令列を生成する、
コンパイル方法。 - プロセッサを備えるコンピュータに、
入力されたソースファイルにおいて命令列の繰り返しを指示する繰り返し命令を検出すると、前記繰り返し命令によって繰り返される前記命令列を抽出させ、
抽出された前記命令列に含まれる整数命令を浮動小数点型の仮想レジスタに格納されたビット列を整数として扱うことで浮動小数点演算器に整数演算を実行させる命令に変換して整数命令列を生成させ、
抽出された前記命令列に含まれる浮動小数点命令を整数型の仮想レジスタに格納されたビット列を浮動小数点数として扱うことで整数演算器に浮動小数点演算を実行させる命令に変換して浮動小数点命令列を生成させ、
前記プロセッサの有する整数演算器の数および浮動小数点演算器の数に基づいて、前記整数命令列と前記浮動小数点命令列とを含む出力命令列を生成させる、
コンパイラプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015135456A JP6547466B2 (ja) | 2015-07-06 | 2015-07-06 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2015135456A JP6547466B2 (ja) | 2015-07-06 | 2015-07-06 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2017016570A JP2017016570A (ja) | 2017-01-19 |
JP6547466B2 true JP6547466B2 (ja) | 2019-07-24 |
Family
ID=57830798
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015135456A Active JP6547466B2 (ja) | 2015-07-06 | 2015-07-06 | コンパイラ装置、コンパイル方法およびコンパイラプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6547466B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021137669A1 (ko) * | 2019-12-30 | 2021-07-08 | 매니코어소프트주식회사 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11307835B2 (en) | 2017-07-07 | 2022-04-19 | nChain Holdings Limited | Method for controlling the flow execution of a generated script of a blockchain transaction |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3032031B2 (ja) * | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
JP3627905B2 (ja) * | 1999-03-08 | 2005-03-09 | 株式会社日立製作所 | プログラムコンパイル方法および該方法を記録した記録媒体 |
-
2015
- 2015-07-06 JP JP2015135456A patent/JP6547466B2/ja active Active
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021137669A1 (ko) * | 2019-12-30 | 2021-07-08 | 매니코어소프트주식회사 | 딥러닝을 위한 가속기용 프로그램 생성 방법 |
US12106076B2 (en) | 2019-12-30 | 2024-10-01 | Moreh Corp. | Method for generating program for use in accelerator for deep learning |
Also Published As
Publication number | Publication date |
---|---|
JP2017016570A (ja) | 2017-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10503634B1 (en) | Semantic comparison of computer compiler traces | |
US9250875B1 (en) | Table of contents pointer value save and restore placeholder positioning | |
US10678540B2 (en) | Arithmetic operation with shift | |
US9218170B1 (en) | Managing table of contents pointer value saves | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
Yadavalli et al. | Raising binaries to llvm ir with mctoll (wip paper) | |
JP2014510971A (ja) | データ処理装置内におけるアドレス生成 | |
JP2015201119A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
JP6547466B2 (ja) | コンパイラ装置、コンパイル方法およびコンパイラプログラム | |
JP2011253253A (ja) | コンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラム | |
JP2008276735A (ja) | プログラムコード変換装置及びプログラムコード変換方法 | |
CN104239055A (zh) | 检测软件代码复杂度的方法 | |
You et al. | Translating AArch64 floating-point instruction set to the x86-64 platform | |
JP6481515B2 (ja) | 情報処理装置、コンパイル方法、及びコンパイラプログラム | |
US8176361B2 (en) | Data processing with protection against soft errors | |
US20140013312A1 (en) | Source level debugging apparatus and method for a reconfigurable processor | |
JP2007080049A (ja) | 組み込み用プログラム生成方法、組み込み用プログラム開発システム、及び情報テーブル部 | |
JP7006097B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
Mohr et al. | Hardware acceleration for programs in SSA form | |
US10922061B2 (en) | Information processing apparatus, information processing method and storage medium storing program related to instruction selection of a compiler | |
See et al. | Development of LLVM compilation toolchain for IoT processor targeting wireless measurement applications | |
JP2018163381A (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
US9639357B2 (en) | Processor, apparatus and method for generating instructions | |
US20190146797A1 (en) | Supplying constant values | |
EP4165500A1 (en) | A method of programming a software module associated with a firmware unit of a device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20180413 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20190130 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20190312 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20190510 |
|
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: 20190528 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20190610 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6547466 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |