JP2006243839A - 命令生成装置及び命令生成方法 - Google Patents
命令生成装置及び命令生成方法 Download PDFInfo
- Publication number
- JP2006243839A JP2006243839A JP2005055023A JP2005055023A JP2006243839A JP 2006243839 A JP2006243839 A JP 2006243839A JP 2005055023 A JP2005055023 A JP 2005055023A JP 2005055023 A JP2005055023 A JP 2005055023A JP 2006243839 A JP2006243839 A JP 2006243839A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- simd
- instruction generation
- source program
- parallel
- 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.)
- Abandoned
Links
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/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
- G06F8/456—Parallelism detection
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
Abstract
【課題】 SIMD型のコプロセッサに対して適切なSIMD命令を生成可能な命令生成装置及び命令生成方法を提供する。
【解決手段】 ソースプログラムを記憶装置から取得し、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部11aと、SIMD型のコプロセッサに実行させるSIMD命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、ソースプログラム中のSIMD命令への置換対象となるプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を記憶装置から読み出すSIMD命令生成部12と、機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をSIMD命令に置換するSIMDコンパイラ13とを備える。
【選択図】 図1
【解決手段】 ソースプログラムを記憶装置から取得し、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部11aと、SIMD型のコプロセッサに実行させるSIMD命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、ソースプログラム中のSIMD命令への置換対象となるプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を記憶装置から読み出すSIMD命令生成部12と、機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をSIMD命令に置換するSIMDコンパイラ13とを備える。
【選択図】 図1
Description
本発明は、単一命令複合データ型(SIMD)命令を生成する命令生成装置及び命令生成方法に関する。
画像・音声処理等のマルチメディアアプリケーションでは、大量のデータに対して同一の演算を行うものが多い。よって、処理の効率化を目的として、1命令で複数の演算を実行するSIMD型のマルチメディア拡張命令を実装したプロセッサが用いられている。プログラムの開発期間を短縮し、プログラムの移植性を向上するには、高級言語で記述されたソースプログラムから自動的にSIMD命令を生成できることが望ましい。
また、SIMD型のマルチメディア拡張命令には、以下の(1)〜(5)に示すような特殊な演算処理が要求される場合がある。(1)飽和演算、差の絶対値、及び乗算の上位ワード等の特殊な演算子を伴う。(2)データサイズが混合する。(3)レジスタ間転送命令(MOV命令)及び論理演算等では、同一の命令が複数のサイズを扱うことができる。例えば、64ビット演算は、8ビットオペランド8個とも16ビットオペランド4個とも解釈可能である。(4)入力と出力のサイズが異なる。(5)一部のオペランドだけ変更する命令がある。
更に、プロセッサが内蔵するSIMD演算器に対するSIMD命令生成手法として、C言語プログラム中の並列実行可能な命令を解析して、加減算及び乗除算等のSIMD命令を生成するコンパイラが知られている。また、C言語プログラム記述に含まれる多重forループ文内の処理をNウェイの長命令語(VLIW)命令に割り付け、各ネストの演算をプロセッサアレーに割り付ける技術も知られている。複数の命令演算リソースのシェアリングを考慮したVLIW演算器の生成技術が報告されている(例えば、非特許文献1参照。)。
しかしながら、高速化を目的としてSIMD演算器をコプロセッサとして、プロセッサコアと個別に実装する場合に、適切なSIMD命令を生成する命令生成手法は存在しない。したがって、SIMD型のコプロセッサに対して適切なSIMD命令を生成可能な手法の実現が望まれている。
P.brisk, A.Kaplan, M.Sarrafzdeh,「再構成可能なシステム・オン・チップ設計のための効率的な命令セット合成」(Area-Efficient Instruction Set Synthesis for Reconfigurable System-on-Chip Designs),(米国),設計自動化会議(DAC)2004,p.395−400
P.brisk, A.Kaplan, M.Sarrafzdeh,「再構成可能なシステム・オン・チップ設計のための効率的な命令セット合成」(Area-Efficient Instruction Set Synthesis for Reconfigurable System-on-Chip Designs),(米国),設計自動化会議(DAC)2004,p.395−400
本発明は、SIMD型のコプロセッサに対して適切なSIMD命令を生成可能な命令生成装置及び命令生成方法を提供する。
本発明の一態様は、プロセッサコア及びプロセッサコアと協調動作するSIMD型のコプロセッサに対し、オブジェクトコードを生成する命令生成装置であって、(イ)SIMD命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を記憶する機械命令関数記憶領域と、(ロ)ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部と、(ハ)SIMD命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて機械命令関数を機械命令関数記憶領域から読み出すSIMD命令生成部と、(ニ)機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をSIMD命令に置換してオブジェクトコードを生成するSIMDコンパイラとを備える命令生成装置であることを要旨とする。
本発明の一態様は、プロセッサコア及びプロセッサコアと協調動作するSIMD型のコプロセッサに対し、オブジェクトコードを生成する命令生成方法であって、(イ)命令生成装置内の並列性解析部が、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成するステップと、(ロ)命令生成装置内のSIMD命令生成部が、SIMD命令の命令生成規則と並列化情報との一致判定を行い、一致判定の結果に応じて、SIMD命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を機械命令関数記憶領域から読み出すステップと、(ハ)命令生成装置内のSIMDコンパイラが、機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をSIMD命令に置換してオブジェクトコードを生成するステップとを含む命令生成方法であることを要旨とする。
本発明によれば、SIMD型のコプロセッサに対して適切なSIMD命令を生成可能な命令生成装置及び命令生成方法を提供できる。
次に、図面を参照して、本発明の第1及び第2実施形態を説明する。以下の第1及び第2実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
(第1実施形態)
本発明の第1実施形態に係る命令生成装置は、図1に示すように、中央演算処理装置(CPU)1a、記憶装置2、入力装置3、出力装置4、主記憶装置5、及び補助記憶装置6等を備える。図1に示すCPU1aは、並列性解析部11a、SIMD命令生成部12、及びSIMDコンパイラ13のそれぞれの機能を実行する。並列性解析部11aは、ソースプログラムを記憶装置2から取得し、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成して記憶装置2に格納する。ここで、「ソースプログラム」としては、例えばC言語で記述されたプログラムが利用できる。以下の第1実施形態の説明においては、C言語で記述されたソースプログラムを利用する場合について説明する。SIMD命令生成部12は、SIMD型のコプロセッサに実行させるSIMD命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、SIMD命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を記憶装置2から読み出す。ここで、「機械命令関数」とは、コプロセッサ固有のSIMD命令を高級言語から直接指定するために、SIMD命令を高級言語の関数として記述したものを意味する。SIMDコンパイラ13は、機械命令関数に組み込まれたSIMD命令に基づいてソースプログラムにおける動作定義に一致するプログラム記述をSIMD命令に置換し、SIMD命令を含むオブジェクトコード(機械語)を生成して記憶装置2に格納する。
本発明の第1実施形態に係る命令生成装置は、図1に示すように、中央演算処理装置(CPU)1a、記憶装置2、入力装置3、出力装置4、主記憶装置5、及び補助記憶装置6等を備える。図1に示すCPU1aは、並列性解析部11a、SIMD命令生成部12、及びSIMDコンパイラ13のそれぞれの機能を実行する。並列性解析部11aは、ソースプログラムを記憶装置2から取得し、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成して記憶装置2に格納する。ここで、「ソースプログラム」としては、例えばC言語で記述されたプログラムが利用できる。以下の第1実施形態の説明においては、C言語で記述されたソースプログラムを利用する場合について説明する。SIMD命令生成部12は、SIMD型のコプロセッサに実行させるSIMD命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、SIMD命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とSIMD命令とが組み込まれた機械命令関数を記憶装置2から読み出す。ここで、「機械命令関数」とは、コプロセッサ固有のSIMD命令を高級言語から直接指定するために、SIMD命令を高級言語の関数として記述したものを意味する。SIMDコンパイラ13は、機械命令関数に組み込まれたSIMD命令に基づいてソースプログラムにおける動作定義に一致するプログラム記述をSIMD命令に置換し、SIMD命令を含むオブジェクトコード(機械語)を生成して記憶装置2に格納する。
図1に示す命令生成装置は、図2に示すように、プロセッサコア71と協調して動作するSIMD型のコプロセッサ72に実行させるSIMD命令を生成可能である。例えば、図2に示すプロセッサ70においては、プロセッサ70の外部から供給されたSIMD命令が、プロセッサコア71の命令RAM711に一旦格納されてコプロセッサ72に転送される。コプロセッサ72に転送されたSIMD命令は、コプロセッサ72の命令デコーダ721によりデコードされる。デコードされたSIMD命令は、SIMD演算器723により実行される。尚、プロセッサコア71は、命令RAM711に加えて、例えば、命令デコーダ712、算術演算ユニット(ALU)713、及びデータRAM714等を備える。プロセッサコア71及びコプロセッサ72間は、例えば制御バス73及びデータバス74等により接続される。
記憶装置2に格納されるソースプログラムが、図3に示すような繰り返し処理を含む場合、図2に示すプロセッサコア71のみでは、繰り返し処理の処理時間が仕様(要求性能)を満足できないことが多い。したがって、コプロセッサ72が繰り返し処理中の並列実行可能な演算を実行することで、プロセッサ70全体の処理速度が向上する。
更に、図1に示す並列性解析部11aは、非循環有向グラフ(DAG)作成部111、依存関係解析部112、及び並列化情報生成部113等を備える。DAG作成部111は、ソースプログラムを字句解析したあと定数伝播、定数の畳み込み、及び不要コードの除去等を行ってDAGを作成する。図3に示すソースプログラム例においては、図4に示すように図3の繰り返し処理がDAG作成部111により展開される。図4に示すプログラムから作成されるDAGの一部を図5に示す。但し、説明の簡略化のためDAGの一部のみを示している。
また、依存関係解析部112は、DAGをトレースして、DAG上の各演算に対してオペランド(被演算子)のデータ依存関係を調べる。DAGでは演算子と変数はノードで表現される。ノード間の有向エッジはオペランド(入力)を示す。
具体的には、依存関係解析部112は、ある演算の入力が並列化対象の演算の出力になっていないか、更に、演算の出力がポインタ変数で示される場合、同変数が並列化対象の演算の入力になっていないかどうかを調べる。この結果、並列化候補の演算の入力と出力の依存関係の有無が解析される。任意の演算を2つ以上選びその演算のオペランドに依存関係があると、それらの演算は並列には処理できず、演算の順番が定められる。
また、依存関係解析部112は、図5に示すDAGの祖先演算ノード(下から3段目のノード群C2)から解析を開始する。乗算(*で示される)ml1のオペランド(ノード群C2の下方のノード群C3)はオペランドar0(short型)と定数100であり、また乗算ml2のオペランドは、オペランドbr0(short型)と定数200である。定数はターミナル(終点)であるためそれ以上トレースしない。乗算ml1と乗算ml2はそれぞれのオペランドar0及びbr0のデータ型から、16ビットの符号付き乗算(以下「mul16s」と記す。)とみなせる。
オペランドar0及びbr0について更にグラフをトレースする。図5では点線で示しているが、それぞれターミナル・ノードp1及びp2(異なる変数)に到達する。またターミナル・ノードp1及びp2は、それぞれ乗算ml2、乗算ml1の出力ノード(+:xr0)と接続していない。したがって、乗算ml1と乗算ml2のオペランドにはデータ依存関係が無いことが分かる。
次に乗算ml1と乗算ml3のデータ依存関係を調べる。即ちオペランドar0とオペランドar1の依存関係をトレースして調べる。オペランドar0とオペランドar1の祖先ノードがそれぞれ乗算ml3、乗算ml1の親ノード(+:xr1、+:xr0)でない場合は並列化可能であるが、図5ではオペランドar0の祖先ノードp1と子ノード+:xr1が接続するため乗算ml1と乗算ml3はデータ依存関係があり並列化できない。
同様に乗算ml1及び乗算ml4、乗算ml1及び乗算ml5とすべての乗算についてデータ依存関係を調べる。乗算ml1と乗算ml5のオペランドのデータに依存関係が無いとすると2つは並列化可能であり、また上記のとおり乗算ml1と乗算ml2は並列化可能なため、乗算ml1と乗算ml2と乗算ml5は並列化可能とみなせる。
乗算についてのデータ依存関係解析が終わったあとは、乗算の子ノードである加算ノード(ノード群C1)の並列性解析を行う。加算ad1のオペランドは乗算ml1、乗算ml2で上記の解析により並列化可能であるため、乗算ml、乗算ml2と加算ad1は複合可能と判断する。また代入先の変数xr0のデータ型intから符号付き32ビット加算(以下「add32s」と記す。)とみなす。ここでは、intの変数に加算結果を代入しているが、変数xr0がlong宣言されていれば符号付き64ビット加算とみなす。
それから加算ad1と加算ad2のオペランドのトレースを行う。加算ad2の出力ノードは加算ad1のターミナル・ノードp1に接続されるため、2つの加算は並列化できないと判断される。同様にすべての加算についてオペランドをトレースして出力が並列候補演算のオペランドとデータ依存関係に無いか解析される。
更に、並列化情報生成部113は、依存関係解析部112の解析結果に応じて、図6に示すような並列化情報を生成する。並列化情報は、複数のparallel{命令タイプ:IDリスト}記述から構成される。命令タイプは[命令名][ビット数][符号有無]を結合した名前である。“parallel{}”の{}内の記号“|”は複合可能な命令があることを示す。記号“|”をはさんでその前を「前段命令」、記号“|”の後ろを「後段命令」と呼ぶ。ここでは記号“|”が1つだけの場合を示すが、複数記述することにより、2段の命令複合だけでなく、多段命令の複合化に対応できる。
図5に示す例においては、乗算ml1と乗算ml2が並列化可能で、更に子ノードの加算ad1と複合化可能である。更に、乗算ml1、乗算ml2、及び乗算ml5は並列化可能なため、並列化情報は図6の第3行に示す様な記述になる。図6において記号“mul”は乗算命令を、記号“add”は加算命令をそれぞれ示し、16はビット数、記号“s”は符号あり演算命令を示す。記号“s”が付かない場合は符号無し命令である。
更に、図1に示すSIMD命令生成部12は、演算器規模取得部121及び命令生成規則判定部122等を備える。演算器規模取得部121は、並列化情報の“parallel{}”リストを取り込み、これらの命令演算だけを実行する上で必要な回路規模を演算器規模情報から求める。回路規模は、例えば演算毎に対応したゲート数から構成される。演算器規模情報は、図7に示すようなリストとして記述される。図7において、“2p”は2並列を、記号“;”は複数の演算器の候補を、“x,y”は命令xとyの複合命令を実行する演算器を、記号“:”の後ろの数字はゲート数を示す。
一例として、符号付き16ビット乗算mul16sを2並列で実行する符号付き32ビット乗算器のサイズは800ゲート、符号付き32ビット加算add32sを実現する加算器は500ゲート、符号付き32ビット積和演算器は1200ゲート、符号付き48ビット乗算器のサイズは1100ゲートとして格納されている。
更に、演算器規模取得部121は、図8に示すように、図6に示す並列化情報の命令タイプに基づいて、図7に示す演算器規模情報から演算器の回路規模を取り出すことができる。並列化情報の第1行目の“parallel{}”に含まれる演算mul16sを2並列で実行する演算器は、演算器規模情報から2p(mul16s)が選択され、ゲート数は800であることが分かる。同様に“parallel{}”に含まれる命令を演算器で実装した場合のゲート数を加算により求めて付加する。
命令生成規則判定部122は、並列化情報の各“parallel{}”記述に対して、命令生成規則に基づき機械命令関数を生成する。命令生成規則は、図9及び図10に示すように、命令名、ビット幅、符号、命令個数の条件パラメータに対して機械命令関数が対応するように記述される。図9に示す命令生成規則は2並列乗算命令をmul32s演算に割り当てる規則(以下において、「規則mul32s」という。)であり、図10に示す命令生成規則は2段の命令をmad32s複合演算に割り当てる規則(以下において、「規則mad32s」という。)である。
図10に示す規則mad32sは、図8の第2行目の“parallel{}”記述にマッチングし、機械命令関数cpmad32が選択される。この結果、演算器規模マクロは、“#define mad32s 1200”のように定義される。また、命令生成規則判定部122は、並列化情報に命令生成規則がマッチングした場合、命令生成規則に対応する機械命令関数の定義群と上記演算器規模マクロの定義をSIMD命令情報として記憶装置2に格納する。
図1に示すSIMDコンパイラ13は、解析部131及びコード生成部132等を備える。解析部131は、ソースプログラムとSIMD命令情報を取得して、ソースプログラムを構文木に変換しSIMD機械命令関数の機械命令関数の動作定義の構文木とのマッチングをとる。
コード生成部132は、コプロセッサ規模制約(面積制約)を満足する範囲でソースプログラムをSIMD命令に置き換えてSIMD命令生成を行いアセンブラ記述に変換する。ソースプログラムから生成された構文木には、機械命令関数内の動作定義から生成された構文木と同じものが複数存在する場合がある。マッチしたソースプログラムの構文木のそれぞれには、機械命令関数内のインライン節中のSIMD命令が割り付くが、SIMD演算器と同演算器の入力と出力のレジスタが機械命令関数毎に用意されると、ハードウェアの規模が大きくなる。このため、1つのSIMD演算器は複数のSIMD命令で共有化される。
例えば機械命令関数cmmad32が3つある場合、図11に示すように、1つのMad32s演算器92に対して、3つの32ビット入力を1つに切り替えるマルチプレクサ(MUX)32_3が2つと、1つの32ビット出力を3つの32ビット出力に振り分けるデマルチプレクサ(DMUX)32_3が用いられる。MUX_32_3とDMUX_32_3のゲート数は、図12に示すように演算器規模情報に定義される。この結果、MUX_32_3とDMUX_32_3のゲート数は、上述した演算器規模マクロと一緒に定義される。MUX_32_3とDMUX_32_3のゲート数の情報は、SIMD命令生成部12が、機械命令関数の演算器規模マクロ定義として、図13に示すように定義する。
ここで、割り付け対象の機械命令関数cpmad32sが3つ以上存在し、SIMD演算器が共有されMUXとDMUXが割り付けられることを想定する。SIMDコンパイラ13のコード生成部132は、上述した演算器規模マクロ定義を取り込む。コプロセッサ規模制約が1350ゲートの場合、コード生成部132は、機械命令関数cpmad32を3つ割り付ける。このとき符号付32ビット積和演算器とMUX_32_3とDMUX_32_3のゲート数は、1200+(50×2)+45=1345ゲートで1350ゲートを満足する。また機械命令関数cpmul32sが3つ以上存在し、コプロセッサ規模制約が1000ゲートの場合は、機械命令関数cpmul32を3つ割り付ける。このときのゲート数は800+(50×2)+45=945ゲートであり、コプロセッサ規模制約を満足する。コード生成部132の処理の詳細については後述する。
更に、図1に示す記憶装置2には、ソースプログラム記憶領域21、演算器規模情報記憶領域22、機械命令関数記憶領域23、コプロセッサ規模制約記憶領域24、並列化情報記憶領域25、SIMD命令情報記憶領域26、及びオブジェクトコード記憶領域27等が備えられる。ソースプログラム記憶領域21には、ソースプログラムが予め格納される。演算器規模情報記憶領域22には、演算器規模情報が予め格納される。機械命令関数記憶領域23には、命令生成規則及び機械命令関数の組が予め複数組格納される。コプロセッサ規模制約記憶領域24には、コプロセッサ規模制約が予め格納される。並列化情報記憶領域25には、並列化情報生成部113が生成した並列化情報が格納される。SIMD命令情報記憶領域26には、命令生成規則判定部122からの機械命令関数等が格納される。オブジェクトコード記憶領域27には、コード生成部132が生成したSIMD命令を含むオブジェクトコードが格納される。
尚、命令生成装置は、図示を省略するデータベース制御装置及び入出力制御装置を備える。データベース制御装置は、記憶装置2に対するファイルの格納場所の検索、及びデータの読み出し・書き込みを行う。これに対して入出力制御装置は、入力装置3からのデータを受け取り、CPU1aに伝達する。即ち入出力制御装置は、入力装置3、出力装置4、或いはCD−ROM、及びフレキシブルディスク等の補助記憶装置6の読取装置等をCPU1aに接続するインターフェイスである。データの流れから見ると、入出力制御装置は、入力装置3、出力装置4、補助記憶装置6、及び外部記憶装置の読取装置と主記憶装置5とのインターフェイスとなる。また入出力制御装置は、CPU1aからのデータを受け取り、出力装置4及び補助記憶装置6等へ伝達する。
更に、図に示す入力装置3としては、例えば、キーボード、マウス、光学式文字読取装置(OCR)等の認識装置、イメージスキャナ等の図形入力装置、及び音声認識装置等の特殊入力装置が使用できる。出力装置4としては、例えば、液晶ディスプレイ、CRTディスプレイ等の表示装置、インクジェットプリンタ、レーザープリンタ等の印刷装置が使用できる。主記憶装置5には、ROM及びRAMが組み込まれている。ROMは、CPU1aにおいて実行されるプログラムを格納するプログラム記憶装置等として機能する。これに対してRAMは、CPU1aにおけるプログラム実行処理中に利用されるデータ等を一時的に格納したり、作業領域として利用される一時的なデータメモリ等として機能する。
次に、図14に示すフローチャートを参照して、第1実施形態に係る命令生成方法の処理手順例を説明する。
(A)ステップS01において、図1に示すDAG作成部111は、ソースプログラム記憶領域21からソースプログラムを読み出す。DAG作成部111は、ソースプログラムを字句解析し、定数伝播、定数の畳み込み、及び不要コードの除去等を行ってDAGを作成する。
(B)ステップS02において、依存関係解析部112は、DAG上の各演算に対してオペランドのデータ依存関係を解析する。即ち、並列化候補の演算の入力と出力に依存関係が無いことを調べる。
(C)ステップS03において、並列化情報生成部113は、依存関係に無い演算子について、上述した並列化情報を生成し、並列化情報を並列化情報記憶領域25に格納する。
(D)ステップS04において、演算器規模取得部121は、並列化情報のそれぞれを実行するために必要な演算器の回路規模を演算器規模情報記憶領域22から読み出す。
(E)ステップS05において、命令生成規則判定部122は、並列化情報に対して機械命令関数記憶領域23に格納された命令生成規則との適合性を判定し、判定結果に応じて機械命令関数記憶領域23から機械命令関数を読み出す。機械命令関数には、演算器規模マクロ定義が付加されてSIMD命令情報記憶領域26に格納される。
(F)ステップS06において、解析部131は、ソースプログラム記憶領域からソースプラグラムを取得し、ソースプラグラムに対して字句解析及び構文解析を行う。この結果、ソースプログラムが構文木に変換される。
(G)ステップS07において、コード生成部132は、ステップS06で生成された構文木と各機械命令関数の動作定義とを比較して、一致した場合にインライン節中のSIMD命令に置き換える。また、コード生成部132は、オブジェクトコードを生成してオブジェクトコード記憶領域27に格納する。
次に、図15に示すフローチャートを参照して、図14に示す命令生成規則判定処理の詳細な処理手順例を説明する。
(a1)ステップS51において、図1に示す命令生成規則判定部122は、並列化情報記憶領域25に格納された並列化情報の“parallel{}”記述を読み出す。
(a2)ステップS52において、命令生成規則判定部122は、“parallel{}”記述について命令生成規則との適合性を判定する。“parallel{}”記述が命令生成規則に一致する場合、ステップS54に進む。“parallel{}”記述が命令生成規則に一致しない場合、ステップS53に進み、次の命令生成規則が選択される。
(a3)ステップS54において、命令生成規則判定部122は、命令生成規則に対応する機械命令関数を決定して、演算器規模マクロ定義を機械命令関数に付加する。
(a4)ステップS55において、命令生成規則判定部122は、すべての“parallel{}”記述について、命令生成規則との一致判定が終了したか否か判定する。すべての“parallel{}”記述について、命令生成規則との一致判定が終了していないと判定された場合、ステップS51で次の“parallel{}”記述が取得される。
次に、図16に示すフローチャートを参照して、オブジェクトコード生成処理の詳細な処理手順例を説明する。
(b1)ステップS71において、コード生成部132は、ソースプログラムの構文木からオブジェクトコード(機械語)を生成する。更に、コード生成部132は、SIMD命令情報記憶領域26に格納された機械命令関数内の動作定義の記述を機械語に変換する。
(b2)ステップS72において、コード生成部132は、ソースプログラムから生成された機械語列が、機械語に変換された動作定義と一致又は近似するか否かを判定する。ソースプログラムから生成された機械語列が、機械語に変換された動作定義と一致又は近似すると判定された場合、ステップS73に進む。ソースプログラムから生成された機械語列が、機械語に変換された動作定義と一致又は近似しないと判定された場合、ステップS74に進む。
(b3)ステップS73において、コード生成部132は、機械語に変換された動作定義と一致又は近似すると判定されたソースプログラム中の機械語列を、インライン節中のSIMD命令に置換する。また、演算器規模マクロ定義に基づいて、置換したSIMD命令の実行に必要な演算器規模を累積加算する。
(b4)ステップS74において、コード生成部132は、ソースプログラムから生成されたすべての機械語について、機械語に変換された動作定義との一致判定が終了したか否か判定する。一致判定が終了した場合、ステップS75に進む。一致判定が終了していない場合、ステップS72に処理が戻る。
(b5)ステップS75において、コード生成部132は、ステップS73における演算機器簿の累積加算結果が、コプロセッサ規模制約を満たすか否か判定する。演算機器簿の累積加算結果が、コプロセッサ規模制約を満たすと判定された場合、処理が終了する。演算機器簿の累積加算結果が、コプロセッサ規模制約を満たしていないと判定された場合、ステップS76に進む。
(b5)ステップS75において、コード生成部132は、複数のSIMD命令を1つの演算器で実行可能か否か、即ち演算器の共有化により、コプロセッサ規模制約を満たすことが可能か否かを判定する。演算器の共有化により、コプロセッサ規模制約を満たすことが可能であると判定された場合、処理が終了する。演算器の共有化により、コプロセッサ規模制約を満たすことができないと判定された場合、ステップS77に進む。ステップS77においては、例えばエラーメッセージ等によりユーザに通知を行い、処理が終了する。
このように、第1実施形態によれば、SIMD型のコプロセッサに対して適切なSIMD命令を生成可能な命令生成装置及び命令生成方法を提供できる。更に、命令生成規則判定部122が、並列化可能な命令名、同命令が処理するデータのビット数、及び符号の有無情報をパラメータにして、機械命令関数を取り込むことにより、そしてコード生成部132が、取り込んだ機械命令関数に基づいて、コプロセッサの演算器に対して要求される要求精度とプログラム言語の記述制約から来る精度を保持するSIMD命令を生成できる。また、SIMD命令を割り付けるコード生成部132は、コプロセッサのサイズ制約を満足するように、SIMD演算器の共有を考慮してSIMD命令を割り付け可能である。
(第2実施形態)
本発明の第2実施形態に係る命令生成装置は、図17に示すように、並列性解析部11bが、ソースプログラムをアセンブリ記述に変換(翻訳)するコンパイラ110を備える点が図1と異なる。コンパイラ110としては、図2に示すプロセッサコア71向けの既存のコンパイラが使用できる。その他の構成については図1と同様である。
本発明の第2実施形態に係る命令生成装置は、図17に示すように、並列性解析部11bが、ソースプログラムをアセンブリ記述に変換(翻訳)するコンパイラ110を備える点が図1と異なる。コンパイラ110としては、図2に示すプロセッサコア71向けの既存のコンパイラが使用できる。その他の構成については図1と同様である。
次に、図18に示すフローチャートを参照して、第2実施形態に係る命令生成方法の処理手順例を説明する。但し、第1実施形態に係る命令生成方法と同様の処理については重複する説明を省略する。
(A)ステップS10において、図17に示すコンパイラ10は、図1に示すソースプログラム記憶領域21からソースプログラムを取得して、ソースプログラムをコンパイルする。この結果、ソースプログラムがアセンブリ記述に変換される。
(B)ステップS01において、DAG作成部111は、アセンブリ記述を字句解析し、更に定数伝播、定数の畳み込み、及び不要コードの除去等を行って、DAGを作成する。
このように、本発明の第2実施形態によれば、DAG作成部111が、アセンブリ記述からDAGを作成できる。よって、C言語に限らず、C++言語又はfortran言語等の様々なプログラミング言語に対応できる。
(その他の実施形態)
上記のように、本発明は第1及び第2実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。例えば、第1及び第2実施形態に係る命令生成装置は、ソースプログラム、演算器規模情報、命令生成規則、機械命令関数、コプロセッサ規模制約等のデータをネットワークを介して取得しても良い。この場合、命令生成装置がネットワークとの通信を制御する通信制御装置等を更に備える必要がある。このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
上記のように、本発明は第1及び第2実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。例えば、第1及び第2実施形態に係る命令生成装置は、ソースプログラム、演算器規模情報、命令生成規則、機械命令関数、コプロセッサ規模制約等のデータをネットワークを介して取得しても良い。この場合、命令生成装置がネットワークとの通信を制御する通信制御装置等を更に備える必要がある。このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
11a、11b…並列性解析部
12…SIMD命令生成部
13…SIMDコンパイラ
12…SIMD命令生成部
13…SIMDコンパイラ
Claims (5)
- プロセッサコア及び前記プロセッサコアと協調動作するSIMD型のコプロセッサに対し、オブジェクトコードを生成する命令生成装置であって、
SIMD命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義と前記SIMD命令とが組み込まれた機械命令関数を記憶する機械命令関数記憶領域と、
前記ソースプログラムを解析して並列実行可能な演算子を検出し、前記並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部と、
前記SIMD命令の命令生成規則と前記並列化情報の一致判定を行い、前記一致判定の結果に応じて前記機械命令関数を前記機械命令関数記憶領域から読み出すSIMD命令生成部と、
前記機械命令関数に基づいて前記ソースプログラム中の前記動作定義に一致するプログラム記述を前記SIMD命令に置換して前記オブジェクトコードを生成するSIMDコンパイラ
とを備えることを特徴とする命令生成装置。 - 前記並列性解析部は、前記ソースプログラムから非循環有向グラフを作成して前記並列実行可能な演算子を検出することを特徴とする請求項1に記載の命令生成装置。
- 前記並列性解析部は、前記ソースプログラムのコンパイル結果から非循環有向グラフを作成して前記並列実行可能な演算子を検出することを特徴とする請求項1に記載の命令生成装置。
- 前記SIMD命令生成部は、前記並列化情報に含まれる演算子を実行する演算器の演算器規模を算出して前記機械命令関数に付加し、
前記SIMDコンパイラは、前記ソースプログラム中のプログラム記述を前記SIMD命令に置換する際に前記演算器規模を累積加算し、累積加算結果が前記コプロセッサの規模に収まるか判定することを特徴とする請求項1〜3のいずれか1項に記載の命令生成装置。 - プロセッサコア及び前記プロセッサコアと協調動作するSIMD型のコプロセッサに対し、オブジェクトコードを生成する命令生成方法であって、
命令生成装置内の並列性解析部が、ソースプログラムを解析して並列実行可能な演算子を検出し、前記並列実行可能な演算子の組を示す並列化情報を生成するステップと、
前記命令生成装置内のSIMD命令生成部が、SIMD命令の命令生成規則と前記並列化情報との一致判定を行い、前記一致判定の結果に応じて、前記SIMD命令への置換対象となる前記ソースプログラム中のプログラム記述を定義した動作定義と前記SIMD命令とが組み込まれた機械命令関数を機械命令関数記憶領域から読み出すステップと、
前記命令生成装置内のSIMDコンパイラが、前記機械命令関数に基づいて前記ソースプログラム中の前記動作定義に一致するプログラム記述を前記SIMD命令に置換して前記オブジェクトコードを生成するステップ
とを含むことを特徴とする命令生成方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005055023A JP2006243839A (ja) | 2005-02-28 | 2005-02-28 | 命令生成装置及び命令生成方法 |
US11/362,125 US20060195828A1 (en) | 2005-02-28 | 2006-02-27 | Instruction generator, method for generating instructions and computer program product that executes an application for an instruction generator |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2005055023A JP2006243839A (ja) | 2005-02-28 | 2005-02-28 | 命令生成装置及び命令生成方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2006243839A true JP2006243839A (ja) | 2006-09-14 |
Family
ID=36933232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005055023A Abandoned JP2006243839A (ja) | 2005-02-28 | 2005-02-28 | 命令生成装置及び命令生成方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20060195828A1 (ja) |
JP (1) | JP2006243839A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008276735A (ja) * | 2007-04-03 | 2008-11-13 | Toshiba Corp | プログラムコード変換装置及びプログラムコード変換方法 |
JP2009169862A (ja) * | 2008-01-18 | 2009-07-30 | Panasonic Corp | プログラム変換装置、方法、プログラムおよび記録媒体 |
JP2013206291A (ja) * | 2012-03-29 | 2013-10-07 | Fujitsu Ltd | プログラム、コード生成方法および情報処理装置 |
JP2014038433A (ja) * | 2012-08-14 | 2014-02-27 | Nec Corp | 描画プログラム変換装置、情報処理装置、及び描画プログラム変換装置の制御方法、並びにコンピュータ・プログラム |
US9823911B2 (en) | 2014-01-31 | 2017-11-21 | Fujitsu Limited | Method and apparatus for compiling code based on a dependency tree |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4202673B2 (ja) | 2002-04-26 | 2008-12-24 | 株式会社東芝 | システムlsi開発環境生成方法及びそのプログラム |
JP2005216177A (ja) | 2004-01-30 | 2005-08-11 | Toshiba Corp | コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 |
JP2006243838A (ja) * | 2005-02-28 | 2006-09-14 | Toshiba Corp | プログラム開発装置 |
US8307372B2 (en) | 2007-04-02 | 2012-11-06 | International Business Machines Corporation | Method for declarative semantic expression of user intent to enable goal-driven information processing |
US8863102B2 (en) * | 2007-04-02 | 2014-10-14 | International Business Machines Corporation | Method and system for assembling information processing applications based on declarative semantic specifications |
US8370812B2 (en) * | 2007-04-02 | 2013-02-05 | International Business Machines Corporation | Method and system for automatically assembling processing graphs in information processing systems |
US8296744B2 (en) * | 2008-10-03 | 2012-10-23 | Microsoft Corporation | Tree-based directed graph programming structures for a declarative programming language |
US8756590B2 (en) * | 2010-06-22 | 2014-06-17 | Microsoft Corporation | Binding data parallel device source code |
WO2014137327A1 (en) * | 2013-03-05 | 2014-09-12 | Intel Corporation | Analyzing potential benefits of vectorization |
US9501268B2 (en) | 2013-12-23 | 2016-11-22 | International Business Machines Corporation | Generating SIMD code from code statements that include non-isomorphic code statements |
US9557977B2 (en) * | 2014-05-01 | 2017-01-31 | International Business Machines Corporation | Extending superword level parallelism |
GB2531586A (en) | 2014-10-23 | 2016-04-27 | Ibm | Methods and systems for starting computerized system modules |
CN110187873A (zh) * | 2019-06-03 | 2019-08-30 | 秒针信息技术有限公司 | 一种规则代码生成方法和装置 |
CN113391842A (zh) | 2020-03-13 | 2021-09-14 | 华为技术有限公司 | 一种单指令多数据simd指令的生成、处理方法以及相关设备 |
CN113687816B (zh) * | 2020-05-19 | 2023-09-01 | 杭州海康威视数字技术股份有限公司 | 算子的可执行代码的生成方法及装置 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4847755A (en) * | 1985-10-31 | 1989-07-11 | Mcc Development, Ltd. | Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies |
EP0485690B1 (en) * | 1990-11-13 | 1999-05-26 | International Business Machines Corporation | Parallel associative processor system |
JPH10228382A (ja) * | 1997-02-14 | 1998-08-25 | Nec Corp | コンパイル方式 |
JP3234552B2 (ja) * | 1997-09-30 | 2001-12-04 | 松下電器産業株式会社 | 最適化装置及びコンピュータ読取可能な記録媒体 |
JP3765923B2 (ja) * | 1998-02-26 | 2006-04-12 | シャープ株式会社 | ハードウェア合成方法およびハードウェア合成装置並びにハードウェア合成プログラムを記録した記録媒体 |
US6260190B1 (en) * | 1998-08-11 | 2001-07-10 | Hewlett-Packard Company | Unified compiler framework for control and data speculation with recovery code |
US6941548B2 (en) * | 2001-10-16 | 2005-09-06 | Tensilica, Inc. | Automatic instruction set architecture generation |
JP3779602B2 (ja) * | 2001-11-28 | 2006-05-31 | 松下電器産業株式会社 | Simd演算方法およびsimd演算装置 |
JP4202673B2 (ja) * | 2002-04-26 | 2008-12-24 | 株式会社東芝 | システムlsi開発環境生成方法及びそのプログラム |
US7020873B2 (en) * | 2002-06-21 | 2006-03-28 | Intel Corporation | Apparatus and method for vectorization of detected saturation and clipping operations in serial code loops of a source program |
US20040015676A1 (en) * | 2002-07-17 | 2004-01-22 | Pierre-Yvan Liardet | Sharing of a logic operator having a work register |
JP4487479B2 (ja) * | 2002-11-12 | 2010-06-23 | 日本電気株式会社 | Simd命令シーケンス生成方法および装置ならびにsimd命令シーケンス生成用プログラム |
JP4057938B2 (ja) * | 2003-03-26 | 2008-03-05 | 株式会社東芝 | コンパイラ、コンパイル方法、及びプログラム開発ツール |
JP2005216177A (ja) * | 2004-01-30 | 2005-08-11 | Toshiba Corp | コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 |
US7478377B2 (en) * | 2004-06-07 | 2009-01-13 | International Business Machines Corporation | SIMD code generation in the presence of optimized misaligned data reorganization |
US7386842B2 (en) * | 2004-06-07 | 2008-06-10 | International Business Machines Corporation | Efficient data reorganization to satisfy data alignment constraints |
US8549501B2 (en) * | 2004-06-07 | 2013-10-01 | International Business Machines Corporation | Framework for generating mixed-mode operations in loop-level simdization |
US20060123401A1 (en) * | 2004-12-02 | 2006-06-08 | International Business Machines Corporation | Method and system for exploiting parallelism on a heterogeneous multiprocessor computer system |
-
2005
- 2005-02-28 JP JP2005055023A patent/JP2006243839A/ja not_active Abandoned
-
2006
- 2006-02-27 US US11/362,125 patent/US20060195828A1/en not_active Abandoned
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008276735A (ja) * | 2007-04-03 | 2008-11-13 | Toshiba Corp | プログラムコード変換装置及びプログラムコード変換方法 |
JP2009169862A (ja) * | 2008-01-18 | 2009-07-30 | Panasonic Corp | プログラム変換装置、方法、プログラムおよび記録媒体 |
JP2013206291A (ja) * | 2012-03-29 | 2013-10-07 | Fujitsu Ltd | プログラム、コード生成方法および情報処理装置 |
JP2014038433A (ja) * | 2012-08-14 | 2014-02-27 | Nec Corp | 描画プログラム変換装置、情報処理装置、及び描画プログラム変換装置の制御方法、並びにコンピュータ・プログラム |
US9823911B2 (en) | 2014-01-31 | 2017-11-21 | Fujitsu Limited | Method and apparatus for compiling code based on a dependency tree |
Also Published As
Publication number | Publication date |
---|---|
US20060195828A1 (en) | 2006-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2006243839A (ja) | 命令生成装置及び命令生成方法 | |
US8151254B2 (en) | Compiler, compiler apparatus and compilation method | |
JP2609093B2 (ja) | ソフトウエアプログラムを生成するための装置及びその方法 | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
US20160321039A1 (en) | Technology mapping onto code fragments | |
JP4786268B2 (ja) | コンパイル装置 | |
JP4157016B2 (ja) | コンパイラ装置及びコンパイル方法 | |
JP2004295398A (ja) | コンパイラ、コンパイル方法、及びプログラム開発ツール | |
CN114625844B (zh) | 一种代码搜索方法、装置及设备 | |
CN112069456A (zh) | 一种模型文件的生成方法、装置、电子设备及存储介质 | |
US7694283B2 (en) | Method and apparatus for generating specification data | |
JP2003202991A (ja) | プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム | |
US8621444B2 (en) | Retargetable instruction set simulators | |
CN112416313A (zh) | 支持大整数数据类型和运算符的编译方法 | |
Sargsyan et al. | Scalable and accurate clones detection based on metrics for dependence graph | |
JP6897213B2 (ja) | コード生成装置、コード生成方法及びコード生成プログラム | |
Malle et al. | The need for speed of ai applications: Performance comparison of native vs. browser-based algorithm implementations | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
JP6409639B2 (ja) | コンパイラプログラム、システム、方法、及び装置 | |
JP4371000B2 (ja) | Idlコンパイル装置、idlコンパイル方法及びidlコンパイラ | |
Pahade et al. | Introduction to Compiler and its Phases | |
Sunitha | Compiler construction | |
JPS62269238A (ja) | コンパイル方式 | |
JPH11195011A (ja) | 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体 | |
CN115934103A (zh) | 节点融合处理方法、装置及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20071211 |
|
A762 | Written abandonment of application |
Free format text: JAPANESE INTERMEDIATE CODE: A762 Effective date: 20090717 |