(57)【要約】【課題】  ＳＩＭＤ型のコプロセッサに対して適切なＳＩＭＤ命令を生成可能な命令生成装置及び命令生成方法を提供する。【解決手段】  ソースプログラムを記憶装置から取得し、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部１１ａと、ＳＩＭＤ型のコプロセッサに実行させるＳＩＭＤ命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、ソースプログラム中のＳＩＭＤ命令への置換対象となるプログラム記述を定義した動作定義とＳＩＭＤ命令とが組み込まれた機械命令関数を記憶装置から読み出すＳＩＭＤ命令生成部１２と、機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をＳＩＭＤ命令に置換するＳＩＭＤコンパイラ１３とを備える。【選択図】  図１
2006243839.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサコア及び前記プロセッサコアと協調動作するＳＩＭＤ型のコプロセッサに対し、オブジェクトコードを生成する命令生成装置であって、
ＳＩＭＤ命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義と前記ＳＩＭＤ命令とが組み込まれた機械命令関数を記憶する機械命令関数記憶領域と、
前記ソースプログラムを解析して並列実行可能な演算子を検出し、前記並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部と、
前記ＳＩＭＤ命令の命令生成規則と前記並列化情報の一致判定を行い、前記一致判定の結果に応じて前記機械命令関数を前記機械命令関数記憶領域から読み出すＳＩＭＤ命令生成部と、
前記機械命令関数に基づいて前記ソースプログラム中の前記動作定義に一致するプログラム記述を前記ＳＩＭＤ命令に置換して前記オブジェクトコードを生成するＳＩＭＤコンパイラ
とを備えることを特徴とする命令生成装置。
【請求項２】
前記並列性解析部は、前記ソースプログラムから非循環有向グラフを作成して前記並列実行可能な演算子を検出することを特徴とする請求項１に記載の命令生成装置。
【請求項３】
前記並列性解析部は、前記ソースプログラムのコンパイル結果から非循環有向グラフを作成して前記並列実行可能な演算子を検出することを特徴とする請求項１に記載の命令生成装置。
【請求項４】
前記ＳＩＭＤ命令生成部は、前記並列化情報に含まれる演算子を実行する演算器の演算器規模を算出して前記機械命令関数に付加し、
前記ＳＩＭＤコンパイラは、前記ソースプログラム中のプログラム記述を前記ＳＩＭＤ命令に置換する際に前記演算器規模を累積加算し、累積加算結果が前記コプロセッサの規模に収まるか判定することを特徴とする請求項１〜３のいずれか１項に記載の命令生成装置。
【請求項５】
プロセッサコア及び前記プロセッサコアと協調動作するＳＩＭＤ型のコプロセッサに対し、オブジェクトコードを生成する命令生成方法であって、
命令生成装置内の並列性解析部が、ソースプログラムを解析して並列実行可能な演算子を検出し、前記並列実行可能な演算子の組を示す並列化情報を生成するステップと、
前記命令生成装置内のＳＩＭＤ命令生成部が、ＳＩＭＤ命令の命令生成規則と前記並列化情報との一致判定を行い、前記一致判定の結果に応じて、前記ＳＩＭＤ命令への置換対象となる前記ソースプログラム中のプログラム記述を定義した動作定義と前記ＳＩＭＤ命令とが組み込まれた機械命令関数を機械命令関数記憶領域から読み出すステップと、
前記命令生成装置内のＳＩＭＤコンパイラが、前記機械命令関数に基づいて前記ソースプログラム中の前記動作定義に一致するプログラム記述を前記ＳＩＭＤ命令に置換して前記オブジェクトコードを生成するステップ
とを含むことを特徴とする命令生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、単一命令複合データ型（ＳＩＭＤ）命令を生成する命令生成装置及び命令生成方法に関する。
【背景技術】
【０００２】
画像・音声処理等のマルチメディアアプリケーションでは、大量のデータに対して同一の演算を行うものが多い。よって、処理の効率化を目的として、１命令で複数の演算を実行するＳＩＭＤ型のマルチメディア拡張命令を実装したプロセッサが用いられている。プログラムの開発期間を短縮し、プログラムの移植性を向上するには、高級言語で記述されたソースプログラムから自動的にＳＩＭＤ命令を生成できることが望ましい。
【０００３】
また、ＳＩＭＤ型のマルチメディア拡張命令には、以下の（１）〜（５）に示すような特殊な演算処理が要求される場合がある。（１）飽和演算、差の絶対値、及び乗算の上位ワード等の特殊な演算子を伴う。（２）データサイズが混合する。（３）レジスタ間転送命令（ＭＯＶ命令）及び論理演算等では、同一の命令が複数のサイズを扱うことができる。例えば、６４ビット演算は、８ビットオペランド８個とも１６ビットオペランド４個とも解釈可能である。（４）入力と出力のサイズが異なる。（５）一部のオペランドだけ変更する命令がある。
【０００４】
更に、プロセッサが内蔵するＳＩＭＤ演算器に対するＳＩＭＤ命令生成手法として、Ｃ言語プログラム中の並列実行可能な命令を解析して、加減算及び乗除算等のＳＩＭＤ命令を生成するコンパイラが知られている。また、Ｃ言語プログラム記述に含まれる多重ｆｏｒループ文内の処理をＮウェイの長命令語（ＶＬＩＷ）命令に割り付け、各ネストの演算をプロセッサアレーに割り付ける技術も知られている。複数の命令演算リソースのシェアリングを考慮したＶＬＩＷ演算器の生成技術が報告されている（例えば、非特許文献１参照。）。
【０００５】
しかしながら、高速化を目的としてＳＩＭＤ演算器をコプロセッサとして、プロセッサコアと個別に実装する場合に、適切なＳＩＭＤ命令を生成する命令生成手法は存在しない。したがって、ＳＩＭＤ型のコプロセッサに対して適切なＳＩＭＤ命令を生成可能な手法の実現が望まれている。
【非特許文献１】P.brisk, A.Kaplan, M.Sarrafzdeh，「再構成可能なシステム・オン・チップ設計のための効率的な命令セット合成」（Area-Efficient Instruction Set Synthesis for Reconfigurable System-on-Chip Designs），（米国），設計自動化会議（ＤＡＣ）２００４，ｐ．３９５−４００
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、ＳＩＭＤ型のコプロセッサに対して適切なＳＩＭＤ命令を生成可能な命令生成装置及び命令生成方法を提供する。
【課題を解決するための手段】
【０００７】
本発明の一態様は、プロセッサコア及びプロセッサコアと協調動作するＳＩＭＤ型のコプロセッサに対し、オブジェクトコードを生成する命令生成装置であって、（イ）ＳＩＭＤ命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とＳＩＭＤ命令とが組み込まれた機械命令関数を記憶する機械命令関数記憶領域と、（ロ）ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成する並列性解析部と、（ハ）ＳＩＭＤ命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて機械命令関数を機械命令関数記憶領域から読み出すＳＩＭＤ命令生成部と、（ニ）機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をＳＩＭＤ命令に置換してオブジェクトコードを生成するＳＩＭＤコンパイラとを備える命令生成装置であることを要旨とする。
【０００８】
本発明の一態様は、プロセッサコア及びプロセッサコアと協調動作するＳＩＭＤ型のコプロセッサに対し、オブジェクトコードを生成する命令生成方法であって、（イ）命令生成装置内の並列性解析部が、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成するステップと、（ロ）命令生成装置内のＳＩＭＤ命令生成部が、ＳＩＭＤ命令の命令生成規則と並列化情報との一致判定を行い、一致判定の結果に応じて、ＳＩＭＤ命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とＳＩＭＤ命令とが組み込まれた機械命令関数を機械命令関数記憶領域から読み出すステップと、（ハ）命令生成装置内のＳＩＭＤコンパイラが、機械命令関数に基づいてソースプログラム中の動作定義に一致するプログラム記述をＳＩＭＤ命令に置換してオブジェクトコードを生成するステップとを含む命令生成方法であることを要旨とする。
【発明の効果】
【０００９】
本発明によれば、ＳＩＭＤ型のコプロセッサに対して適切なＳＩＭＤ命令を生成可能な命令生成装置及び命令生成方法を提供できる。
【発明を実施するための最良の形態】
【００１０】
次に、図面を参照して、本発明の第１及び第２実施形態を説明する。以下の第１及び第２実施形態における図面の記載において、同一又は類似の部分には同一又は類似の符号を付している。
【００１１】
（第１実施形態）
本発明の第１実施形態に係る命令生成装置は、図１に示すように、中央演算処理装置（ＣＰＵ）１ａ、記憶装置２、入力装置３、出力装置４、主記憶装置５、及び補助記憶装置６等を備える。図１に示すＣＰＵ１ａは、並列性解析部１１ａ、ＳＩＭＤ命令生成部１２、及びＳＩＭＤコンパイラ１３のそれぞれの機能を実行する。並列性解析部１１ａは、ソースプログラムを記憶装置２から取得し、ソースプログラムを解析して並列実行可能な演算子を検出し、並列実行可能な演算子の組を示す並列化情報を生成して記憶装置２に格納する。ここで、「ソースプログラム」としては、例えばＣ言語で記述されたプログラムが利用できる。以下の第１実施形態の説明においては、Ｃ言語で記述されたソースプログラムを利用する場合について説明する。ＳＩＭＤ命令生成部１２は、ＳＩＭＤ型のコプロセッサに実行させるＳＩＭＤ命令の命令生成規則と並列化情報の一致判定を行い、一致判定の結果に応じて、ＳＩＭＤ命令への置換対象となるソースプログラム中のプログラム記述を定義した動作定義とＳＩＭＤ命令とが組み込まれた機械命令関数を記憶装置２から読み出す。ここで、「機械命令関数」とは、コプロセッサ固有のＳＩＭＤ命令を高級言語から直接指定するために、ＳＩＭＤ命令を高級言語の関数として記述したものを意味する。ＳＩＭＤコンパイラ１３は、機械命令関数に組み込まれたＳＩＭＤ命令に基づいてソースプログラムにおける動作定義に一致するプログラム記述をＳＩＭＤ命令に置換し、ＳＩＭＤ命令を含むオブジェクトコード（機械語）を生成して記憶装置２に格納する。
【００１２】
図１に示す命令生成装置は、図２に示すように、プロセッサコア７１と協調して動作するＳＩＭＤ型のコプロセッサ７２に実行させるＳＩＭＤ命令を生成可能である。例えば、図２に示すプロセッサ７０においては、プロセッサ７０の外部から供給されたＳＩＭＤ命令が、プロセッサコア７１の命令ＲＡＭ７１１に一旦格納されてコプロセッサ７２に転送される。コプロセッサ７２に転送されたＳＩＭＤ命令は、コプロセッサ７２の命令デコーダ７２１によりデコードされる。デコードされたＳＩＭＤ命令は、ＳＩＭＤ演算器７２３により実行される。尚、プロセッサコア７１は、命令ＲＡＭ７１１に加えて、例えば、命令デコーダ７１２、算術演算ユニット（ＡＬＵ）７１３、及びデータＲＡＭ７１４等を備える。プロセッサコア７１及びコプロセッサ７２間は、例えば制御バス７３及びデータバス７４等により接続される。
【００１３】
記憶装置２に格納されるソースプログラムが、図３に示すような繰り返し処理を含む場合、図２に示すプロセッサコア７１のみでは、繰り返し処理の処理時間が仕様（要求性能）を満足できないことが多い。したがって、コプロセッサ７２が繰り返し処理中の並列実行可能な演算を実行することで、プロセッサ７０全体の処理速度が向上する。
【００１４】
更に、図１に示す並列性解析部１１ａは、非循環有向グラフ（ＤＡＧ）作成部１１１、依存関係解析部１１２、及び並列化情報生成部１１３等を備える。ＤＡＧ作成部１１１は、ソースプログラムを字句解析したあと定数伝播、定数の畳み込み、及び不要コードの除去等を行ってＤＡＧを作成する。図３に示すソースプログラム例においては、図４に示すように図３の繰り返し処理がＤＡＧ作成部１１１により展開される。図４に示すプログラムから作成されるＤＡＧの一部を図５に示す。但し、説明の簡略化のためＤＡＧの一部のみを示している。
【００１５】
また、依存関係解析部１１２は、ＤＡＧをトレースして、ＤＡＧ上の各演算に対してオペランド（被演算子）のデータ依存関係を調べる。ＤＡＧでは演算子と変数はノードで表現される。ノード間の有向エッジはオペランド（入力）を示す。
【００１６】
具体的には、依存関係解析部１１２は、ある演算の入力が並列化対象の演算の出力になっていないか、更に、演算の出力がポインタ変数で示される場合、同変数が並列化対象の演算の入力になっていないかどうかを調べる。この結果、並列化候補の演算の入力と出力の依存関係の有無が解析される。任意の演算を２つ以上選びその演算のオペランドに依存関係があると、それらの演算は並列には処理できず、演算の順番が定められる。
【００１７】
また、依存関係解析部１１２は、図５に示すＤＡＧの祖先演算ノード（下から３段目のノード群Ｃ２）から解析を開始する。乗算（＊で示される）ｍｌ１のオペランド（ノード群Ｃ２の下方のノード群Ｃ３）はオペランドａｒ０（ｓｈｏｒｔ型）と定数１００であり、また乗算ｍｌ２のオペランドは、オペランドｂｒ０（ｓｈｏｒｔ型）と定数２００である。定数はターミナル（終点）であるためそれ以上トレースしない。乗算ｍｌ１と乗算ｍｌ２はそれぞれのオペランドａｒ０及びｂｒ０のデータ型から、１６ビットの符号付き乗算（以下「ｍｕｌ１６ｓ」と記す。）とみなせる。
【００１８】
オペランドａｒ０及びｂｒ０について更にグラフをトレースする。図５では点線で示しているが、それぞれターミナル・ノードｐ１及びｐ２（異なる変数）に到達する。またターミナル・ノードｐ１及びｐ２は、それぞれ乗算ｍｌ２、乗算ｍｌ１の出力ノード（＋：ｘｒ０）と接続していない。したがって、乗算ｍｌ１と乗算ｍｌ２のオペランドにはデータ依存関係が無いことが分かる。
【００１９】
次に乗算ｍｌ１と乗算ｍｌ３のデータ依存関係を調べる。即ちオペランドａｒ０とオペランドａｒ１の依存関係をトレースして調べる。オペランドａｒ０とオペランドａｒ１の祖先ノードがそれぞれ乗算ｍｌ３、乗算ｍｌ１の親ノード（＋：ｘｒ１、＋：ｘｒ０）でない場合は並列化可能であるが、図５ではオペランドａｒ０の祖先ノードｐ１と子ノード＋：ｘｒ１が接続するため乗算ｍｌ１と乗算ｍｌ３はデータ依存関係があり並列化できない。
【００２０】
同様に乗算ｍｌ１及び乗算ｍｌ４、乗算ｍｌ１及び乗算ｍｌ５とすべての乗算についてデータ依存関係を調べる。乗算ｍｌ１と乗算ｍｌ５のオペランドのデータに依存関係が無いとすると２つは並列化可能であり、また上記のとおり乗算ｍｌ１と乗算ｍｌ２は並列化可能なため、乗算ｍｌ１と乗算ｍｌ２と乗算ｍｌ５は並列化可能とみなせる。
【００２１】
乗算についてのデータ依存関係解析が終わったあとは、乗算の子ノードである加算ノード（ノード群Ｃ１）の並列性解析を行う。加算ａｄ１のオペランドは乗算ｍｌ１、乗算ｍｌ２で上記の解析により並列化可能であるため、乗算ｍｌ、乗算ｍｌ２と加算ａｄ１は複合可能と判断する。また代入先の変数ｘｒ０のデータ型ｉｎｔから符号付き３２ビット加算（以下「ａｄｄ３２ｓ」と記す。）とみなす。ここでは、ｉｎｔの変数に加算結果を代入しているが、変数ｘｒ０がｌｏｎｇ宣言されていれば符号付き６４ビット加算とみなす。
【００２２】
それから加算ａｄ１と加算ａｄ２のオペランドのトレースを行う。加算ａｄ２の出力ノードは加算ａｄ１のターミナル・ノードｐ１に接続されるため、２つの加算は並列化できないと判断される。同様にすべての加算についてオペランドをトレースして出力が並列候補演算のオペランドとデータ依存関係に無いか解析される。
【００２３】
更に、並列化情報生成部１１３は、依存関係解析部１１２の解析結果に応じて、図６に示すような並列化情報を生成する。並列化情報は、複数のｐａｒａｌｌｅｌ｛命令タイプ：ＩＤリスト｝記述から構成される。命令タイプは［命令名］［ビット数］［符号有無］を結合した名前である。“ｐａｒａｌｌｅｌ｛｝”の｛｝内の記号“｜”は複合可能な命令があることを示す。記号“｜”をはさんでその前を「前段命令」、記号“｜”の後ろを「後段命令」と呼ぶ。ここでは記号“｜”が１つだけの場合を示すが、複数記述することにより、２段の命令複合だけでなく、多段命令の複合化に対応できる。
【００２４】
図５に示す例においては、乗算ｍｌ１と乗算ｍｌ２が並列化可能で、更に子ノードの加算ａｄ１と複合化可能である。更に、乗算ｍｌ１、乗算ｍｌ２、及び乗算ｍｌ５は並列化可能なため、並列化情報は図６の第３行に示す様な記述になる。図６において記号“ｍｕｌ”は乗算命令を、記号“ａｄｄ”は加算命令をそれぞれ示し、１６はビット数、記号“ｓ”は符号あり演算命令を示す。記号“ｓ”が付かない場合は符号無し命令である。
【００２５】
更に、図１に示すＳＩＭＤ命令生成部１２は、演算器規模取得部１２１及び命令生成規則判定部１２２等を備える。演算器規模取得部１２１は、並列化情報の“ｐａｒａｌｌｅｌ｛｝”リストを取り込み、これらの命令演算だけを実行する上で必要な回路規模を演算器規模情報から求める。回路規模は、例えば演算毎に対応したゲート数から構成される。演算器規模情報は、図７に示すようなリストとして記述される。図７において、“２ｐ”は２並列を、記号“；”は複数の演算器の候補を、“ｘ，ｙ”は命令ｘとｙの複合命令を実行する演算器を、記号“：”の後ろの数字はゲート数を示す。
【００２６】
一例として、符号付き１６ビット乗算ｍｕｌ１６ｓを２並列で実行する符号付き３２ビット乗算器のサイズは８００ゲート、符号付き３２ビット加算ａｄｄ３２ｓを実現する加算器は５００ゲート、符号付き３２ビット積和演算器は１２００ゲート、符号付き４８ビット乗算器のサイズは１１００ゲートとして格納されている。
【００２７】
更に、演算器規模取得部１２１は、図８に示すように、図６に示す並列化情報の命令タイプに基づいて、図７に示す演算器規模情報から演算器の回路規模を取り出すことができる。並列化情報の第１行目の“ｐａｒａｌｌｅｌ｛｝”に含まれる演算ｍｕｌ１６ｓを２並列で実行する演算器は、演算器規模情報から２ｐ（ｍｕｌ１６ｓ）が選択され、ゲート数は８００であることが分かる。同様に“ｐａｒａｌｌｅｌ｛｝”に含まれる命令を演算器で実装した場合のゲート数を加算により求めて付加する。
【００２８】
命令生成規則判定部１２２は、並列化情報の各“ｐａｒａｌｌｅｌ｛｝”記述に対して、命令生成規則に基づき機械命令関数を生成する。命令生成規則は、図９及び図１０に示すように、命令名、ビット幅、符号、命令個数の条件パラメータに対して機械命令関数が対応するように記述される。図９に示す命令生成規則は２並列乗算命令をｍｕｌ３２ｓ演算に割り当てる規則（以下において、「規則ｍｕｌ３２ｓ」という。）であり、図１０に示す命令生成規則は２段の命令をｍａｄ３２ｓ複合演算に割り当てる規則（以下において、「規則ｍａｄ３２ｓ」という。）である。
【００２９】
図１０に示す規則ｍａｄ３２ｓは、図８の第２行目の“ｐａｒａｌｌｅｌ｛｝”記述にマッチングし、機械命令関数ｃｐｍａｄ３２が選択される。この結果、演算器規模マクロは、“＃ｄｅｆｉｎｅ  ｍａｄ３２ｓ  １２００”のように定義される。また、命令生成規則判定部１２２は、並列化情報に命令生成規則がマッチングした場合、命令生成規則に対応する機械命令関数の定義群と上記演算器規模マクロの定義をＳＩＭＤ命令情報として記憶装置２に格納する。
【００３０】
図１に示すＳＩＭＤコンパイラ１３は、解析部１３１及びコード生成部１３２等を備える。解析部１３１は、ソースプログラムとＳＩＭＤ命令情報を取得して、ソースプログラムを構文木に変換しＳＩＭＤ機械命令関数の機械命令関数の動作定義の構文木とのマッチングをとる。
【００３１】
コード生成部１３２は、コプロセッサ規模制約（面積制約）を満足する範囲でソースプログラムをＳＩＭＤ命令に置き換えてＳＩＭＤ命令生成を行いアセンブラ記述に変換する。ソースプログラムから生成された構文木には、機械命令関数内の動作定義から生成された構文木と同じものが複数存在する場合がある。マッチしたソースプログラムの構文木のそれぞれには、機械命令関数内のインライン節中のＳＩＭＤ命令が割り付くが、ＳＩＭＤ演算器と同演算器の入力と出力のレジスタが機械命令関数毎に用意されると、ハードウェアの規模が大きくなる。このため、１つのＳＩＭＤ演算器は複数のＳＩＭＤ命令で共有化される。
【００３２】
例えば機械命令関数ｃｍｍａｄ３２が３つある場合、図１１に示すように、１つのＭａｄ３２ｓ演算器９２に対して、３つの３２ビット入力を１つに切り替えるマルチプレクサ（ＭＵＸ）３２＿３が２つと、１つの３２ビット出力を３つの３２ビット出力に振り分けるデマルチプレクサ（ＤＭＵＸ）３２＿３が用いられる。ＭＵＸ＿３２＿３とＤＭＵＸ＿３２＿３のゲート数は、図１２に示すように演算器規模情報に定義される。この結果、ＭＵＸ＿３２＿３とＤＭＵＸ＿３２＿３のゲート数は、上述した演算器規模マクロと一緒に定義される。ＭＵＸ＿３２＿３とＤＭＵＸ＿３２＿３のゲート数の情報は、ＳＩＭＤ命令生成部１２が、機械命令関数の演算器規模マクロ定義として、図１３に示すように定義する。
【００３３】
ここで、割り付け対象の機械命令関数ｃｐｍａｄ３２ｓが３つ以上存在し、ＳＩＭＤ演算器が共有されＭＵＸとＤＭＵＸが割り付けられることを想定する。ＳＩＭＤコンパイラ１３のコード生成部１３２は、上述した演算器規模マクロ定義を取り込む。コプロセッサ規模制約が１３５０ゲートの場合、コード生成部１３２は、機械命令関数ｃｐｍａｄ３２を３つ割り付ける。このとき符号付３２ビット積和演算器とＭＵＸ＿３２＿３とＤＭＵＸ＿３２＿３のゲート数は、１２００＋（５０×２）＋４５＝１３４５ゲートで１３５０ゲートを満足する。また機械命令関数ｃｐｍｕｌ３２ｓが３つ以上存在し、コプロセッサ規模制約が１０００ゲートの場合は、機械命令関数ｃｐｍｕｌ３２を３つ割り付ける。このときのゲート数は８００＋(５０×２)＋４５＝９４５ゲートであり、コプロセッサ規模制約を満足する。コード生成部１３２の処理の詳細については後述する。
【００３４】
更に、図１に示す記憶装置２には、ソースプログラム記憶領域２１、演算器規模情報記憶領域２２、機械命令関数記憶領域２３、コプロセッサ規模制約記憶領域２４、並列化情報記憶領域２５、ＳＩＭＤ命令情報記憶領域２６、及びオブジェクトコード記憶領域２７等が備えられる。ソースプログラム記憶領域２１には、ソースプログラムが予め格納される。演算器規模情報記憶領域２２には、演算器規模情報が予め格納される。機械命令関数記憶領域２３には、命令生成規則及び機械命令関数の組が予め複数組格納される。コプロセッサ規模制約記憶領域２４には、コプロセッサ規模制約が予め格納される。並列化情報記憶領域２５には、並列化情報生成部１１３が生成した並列化情報が格納される。ＳＩＭＤ命令情報記憶領域２６には、命令生成規則判定部１２２からの機械命令関数等が格納される。オブジェクトコード記憶領域２７には、コード生成部１３２が生成したＳＩＭＤ命令を含むオブジェクトコードが格納される。
【００３５】
尚、命令生成装置は、図示を省略するデータベース制御装置及び入出力制御装置を備える。データベース制御装置は、記憶装置２に対するファイルの格納場所の検索、及びデータの読み出し・書き込みを行う。これに対して入出力制御装置は、入力装置３からのデータを受け取り、ＣＰＵ１ａに伝達する。即ち入出力制御装置は、入力装置３、出力装置４、或いはＣＤ−ＲＯＭ、及びフレキシブルディスク等の補助記憶装置６の読取装置等をＣＰＵ１ａに接続するインターフェイスである。データの流れから見ると、入出力制御装置は、入力装置３、出力装置４、補助記憶装置６、及び外部記憶装置の読取装置と主記憶装置５とのインターフェイスとなる。また入出力制御装置は、ＣＰＵ１ａからのデータを受け取り、出力装置４及び補助記憶装置６等へ伝達する。
【００３６】
更に、図に示す入力装置３としては、例えば、キーボード、マウス、光学式文字読取装置（ＯＣＲ）等の認識装置、イメージスキャナ等の図形入力装置、及び音声認識装置等の特殊入力装置が使用できる。出力装置４としては、例えば、液晶ディスプレイ、ＣＲＴディスプレイ等の表示装置、インクジェットプリンタ、レーザープリンタ等の印刷装置が使用できる。主記憶装置５には、ＲＯＭ及びＲＡＭが組み込まれている。ＲＯＭは、ＣＰＵ１ａにおいて実行されるプログラムを格納するプログラム記憶装置等として機能する。これに対してＲＡＭは、ＣＰＵ１ａにおけるプログラム実行処理中に利用されるデータ等を一時的に格納したり、作業領域として利用される一時的なデータメモリ等として機能する。
【００３７】
次に、図１４に示すフローチャートを参照して、第１実施形態に係る命令生成方法の処理手順例を説明する。
【００３８】
（Ａ）ステップＳ０１において、図１に示すＤＡＧ作成部１１１は、ソースプログラム記憶領域２１からソースプログラムを読み出す。ＤＡＧ作成部１１１は、ソースプログラムを字句解析し、定数伝播、定数の畳み込み、及び不要コードの除去等を行ってＤＡＧを作成する。
【００３９】
（Ｂ）ステップＳ０２において、依存関係解析部１１２は、ＤＡＧ上の各演算に対してオペランドのデータ依存関係を解析する。即ち、並列化候補の演算の入力と出力に依存関係が無いことを調べる。
【００４０】
（Ｃ）ステップＳ０３において、並列化情報生成部１１３は、依存関係に無い演算子について、上述した並列化情報を生成し、並列化情報を並列化情報記憶領域２５に格納する。
【００４１】
（Ｄ）ステップＳ０４において、演算器規模取得部１２１は、並列化情報のそれぞれを実行するために必要な演算器の回路規模を演算器規模情報記憶領域２２から読み出す。
【００４２】
（Ｅ）ステップＳ０５において、命令生成規則判定部１２２は、並列化情報に対して機械命令関数記憶領域２３に格納された命令生成規則との適合性を判定し、判定結果に応じて機械命令関数記憶領域２３から機械命令関数を読み出す。機械命令関数には、演算器規模マクロ定義が付加されてＳＩＭＤ命令情報記憶領域２６に格納される。
【００４３】
（Ｆ）ステップＳ０６において、解析部１３１は、ソースプログラム記憶領域からソースプラグラムを取得し、ソースプラグラムに対して字句解析及び構文解析を行う。この結果、ソースプログラムが構文木に変換される。
【００４４】
（Ｇ）ステップＳ０７において、コード生成部１３２は、ステップＳ０６で生成された構文木と各機械命令関数の動作定義とを比較して、一致した場合にインライン節中のＳＩＭＤ命令に置き換える。また、コード生成部１３２は、オブジェクトコードを生成してオブジェクトコード記憶領域２７に格納する。
【００４５】
次に、図１５に示すフローチャートを参照して、図１４に示す命令生成規則判定処理の詳細な処理手順例を説明する。
【００４６】
（ａ１）ステップＳ５１において、図１に示す命令生成規則判定部１２２は、並列化情報記憶領域２５に格納された並列化情報の“ｐａｒａｌｌｅｌ｛｝”記述を読み出す。
【００４７】
（ａ２）ステップＳ５２において、命令生成規則判定部１２２は、“ｐａｒａｌｌｅｌ｛｝”記述について命令生成規則との適合性を判定する。“ｐａｒａｌｌｅｌ｛｝”記述が命令生成規則に一致する場合、ステップＳ５４に進む。“ｐａｒａｌｌｅｌ｛｝”記述が命令生成規則に一致しない場合、ステップＳ５３に進み、次の命令生成規則が選択される。
【００４８】
（ａ３）ステップＳ５４において、命令生成規則判定部１２２は、命令生成規則に対応する機械命令関数を決定して、演算器規模マクロ定義を機械命令関数に付加する。
【００４９】
（ａ４）ステップＳ５５において、命令生成規則判定部１２２は、すべての“ｐａｒａｌｌｅｌ｛｝”記述について、命令生成規則との一致判定が終了したか否か判定する。すべての“ｐａｒａｌｌｅｌ｛｝”記述について、命令生成規則との一致判定が終了していないと判定された場合、ステップＳ５１で次の“ｐａｒａｌｌｅｌ｛｝”記述が取得される。
【００５０】
次に、図１６に示すフローチャートを参照して、オブジェクトコード生成処理の詳細な処理手順例を説明する。
【００５１】
（ｂ１）ステップＳ７１において、コード生成部１３２は、ソースプログラムの構文木からオブジェクトコード（機械語）を生成する。更に、コード生成部１３２は、ＳＩＭＤ命令情報記憶領域２６に格納された機械命令関数内の動作定義の記述を機械語に変換する。
【００５２】
（ｂ２）ステップＳ７２において、コード生成部１３２は、ソースプログラムから生成された機械語列が、機械語に変換された動作定義と一致又は近似するか否かを判定する。ソースプログラムから生成された機械語列が、機械語に変換された動作定義と一致又は近似すると判定された場合、ステップＳ７３に進む。ソースプログラムから生成された機械語列が、機械語に変換された動作定義と一致又は近似しないと判定された場合、ステップＳ７４に進む。
【００５３】
（ｂ３）ステップＳ７３において、コード生成部１３２は、機械語に変換された動作定義と一致又は近似すると判定されたソースプログラム中の機械語列を、インライン節中のＳＩＭＤ命令に置換する。また、演算器規模マクロ定義に基づいて、置換したＳＩＭＤ命令の実行に必要な演算器規模を累積加算する。
【００５４】
（ｂ４）ステップＳ７４において、コード生成部１３２は、ソースプログラムから生成されたすべての機械語について、機械語に変換された動作定義との一致判定が終了したか否か判定する。一致判定が終了した場合、ステップＳ７５に進む。一致判定が終了していない場合、ステップＳ７２に処理が戻る。
【００５５】
（ｂ５）ステップＳ７５において、コード生成部１３２は、ステップＳ７３における演算機器簿の累積加算結果が、コプロセッサ規模制約を満たすか否か判定する。演算機器簿の累積加算結果が、コプロセッサ規模制約を満たすと判定された場合、処理が終了する。演算機器簿の累積加算結果が、コプロセッサ規模制約を満たしていないと判定された場合、ステップＳ７６に進む。
【００５６】
（ｂ５）ステップＳ７５において、コード生成部１３２は、複数のＳＩＭＤ命令を１つの演算器で実行可能か否か、即ち演算器の共有化により、コプロセッサ規模制約を満たすことが可能か否かを判定する。演算器の共有化により、コプロセッサ規模制約を満たすことが可能であると判定された場合、処理が終了する。演算器の共有化により、コプロセッサ規模制約を満たすことができないと判定された場合、ステップＳ７７に進む。ステップＳ７７においては、例えばエラーメッセージ等によりユーザに通知を行い、処理が終了する。
【００５７】
このように、第１実施形態によれば、ＳＩＭＤ型のコプロセッサに対して適切なＳＩＭＤ命令を生成可能な命令生成装置及び命令生成方法を提供できる。更に、命令生成規則判定部１２２が、並列化可能な命令名、同命令が処理するデータのビット数、及び符号の有無情報をパラメータにして、機械命令関数を取り込むことにより、そしてコード生成部１３２が、取り込んだ機械命令関数に基づいて、コプロセッサの演算器に対して要求される要求精度とプログラム言語の記述制約から来る精度を保持するＳＩＭＤ命令を生成できる。また、ＳＩＭＤ命令を割り付けるコード生成部１３２は、コプロセッサのサイズ制約を満足するように、ＳＩＭＤ演算器の共有を考慮してＳＩＭＤ命令を割り付け可能である。
【００５８】
（第２実施形態）
本発明の第２実施形態に係る命令生成装置は、図１７に示すように、並列性解析部１１ｂが、ソースプログラムをアセンブリ記述に変換（翻訳）するコンパイラ１１０を備える点が図１と異なる。コンパイラ１１０としては、図２に示すプロセッサコア７１向けの既存のコンパイラが使用できる。その他の構成については図１と同様である。
【００５９】
次に、図１８に示すフローチャートを参照して、第２実施形態に係る命令生成方法の処理手順例を説明する。但し、第１実施形態に係る命令生成方法と同様の処理については重複する説明を省略する。
【００６０】
（Ａ）ステップＳ１０において、図１７に示すコンパイラ１０は、図１に示すソースプログラム記憶領域２１からソースプログラムを取得して、ソースプログラムをコンパイルする。この結果、ソースプログラムがアセンブリ記述に変換される。
【００６１】
（Ｂ）ステップＳ０１において、ＤＡＧ作成部１１１は、アセンブリ記述を字句解析し、更に定数伝播、定数の畳み込み、及び不要コードの除去等を行って、ＤＡＧを作成する。
【００６２】
このように、本発明の第２実施形態によれば、ＤＡＧ作成部１１１が、アセンブリ記述からＤＡＧを作成できる。よって、Ｃ言語に限らず、Ｃ＋＋言語又はｆｏｒｔｒａｎ言語等の様々なプログラミング言語に対応できる。
【００６３】
（その他の実施形態）
上記のように、本発明は第１及び第２実施形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施形態、実施例及び運用技術が明らかとなろう。例えば、第１及び第２実施形態に係る命令生成装置は、ソースプログラム、演算器規模情報、命令生成規則、機械命令関数、コプロセッサ規模制約等のデータをネットワークを介して取得しても良い。この場合、命令生成装置がネットワークとの通信を制御する通信制御装置等を更に備える必要がある。このように本発明は、ここでは記載していない様々な実施形態等を包含するということを理解すべきである。したがって、本発明はこの開示から妥当な特許請求の範囲の発明特定事項によってのみ限定されるものである。
【図面の簡単な説明】
【００６４】
【図１】本発明の第１実施形態に係る命令生成装置の構成例を示すブロック図である。
【図２】本発明の第１実施形態に係る命令生成装置の命令生成対象となるプロセッサの構成例を示すブロック図である。
【図３】本発明の第１実施形態に係る命令生成装置に適用されるソースプログラムの一例を示す図である。
【図４】図３に示すソースプログラム中の繰り返し処理を展開したプログラム記述を示す図である。
【図５】図４に示すプログラム記述から作成されたＤＡＧの一部を示す図である。
【図６】本発明の第１実施形態に係る並列化情報のプログラム記述の一部を示す図である。
【図７】本発明の第１実施形態に係る演算器規模情報のプログラム記述の一例を示す図である（その１）。
【図８】図６に示す並列化情報に図７に示す演算器規模情報が付加された場合のプログラム記述例を示す図である。
【図９】本発明の第１実施形態に係る命令生成規則及び機械命令関数の組を示す図である（その１）。
【図１０】本発明の第１実施形態に係る命令生成規則及び機械命令関数の組を示す図である（その２）。
【図１１】本発明の第１実施形態に係る命令生成装置の命令生成対象となるコプロセッサ内のＳＩＭＤ演算器の一例を示すブロック図である。
【図１２】本発明の第１実施形態に係る演算器規模情報のプログラム記述の一例を示す図である（その２）。
【図１３】本発明の第１実施形態に係る命令生成規則判定部が生成する演算器規模マクロ定義の一例を示す図である。
【図１４】本発明の第１実施形態に係る命令生成方法の処理手順例を示すフローチャートである。
【図１５】本発明の第１実施形態に係る命令生成規則判定処理の処理手順例を示すフローチャートである。
【図１６】本発明の第１実施形態に係るオブジェクトコード生成処理の処理手順例を示すフローチャートである。
【図１７】本発明の第２実施形態に係る並列性解析部の構成例を示すブロック図である。
【図１８】本発明の第２実施形態に係る命令生成方法の処理手順例を示すフローチャートである。
【符号の説明】
【００６５】
１１ａ、１１ｂ…並列性解析部
１２…ＳＩＭＤ命令生成部
１３…ＳＩＭＤコンパイラ
【図１】
2006243839.tif 000003
【図２】
2006243839.tif 000004
【図３】
2006243839.tif 000005
【図４】
2006243839.tif 000006
【図５】
2006243839.tif 000007
【図６】
2006243839.tif 000008
【図７】
2006243839.tif 000009
【図８】
2006243839.tif 000010
【図９】
2006243839.tif 000011
【図１０】
2006243839.tif 000012
【図１１】
2006243839.tif 000013
【図１２】
2006243839.tif 000014
【図１３】
2006243839.tif 000015
【図１４】
2006243839.tif 000016
【図１５】
2006243839.tif 000017
【図１６】
2006243839.tif 000018
【図１７】
2006243839.tif 000019
【図１８】
2006243839.tif 000020