(57)【要約】【課題】本発明は、従来よりも少ないクロックサイクルに命令を配置する命令スケジューリング方法、及び装置を提供する。【解決手段】データ依存関係解析部１４０は、アセンブラコード生成部１２０から取得した各命令のデータ依存関係を表すデータ依存グラフを生成する。先行制約順位算出部１５１は、当該グラフの各アークに所定の重み値を付し累計することにより先行制約順位を算出する。資源制約評価部１５２は、データ依存関係にあってかつ同一の先行制約順位を算出された２命令が、資源制約のために並行処理されない場合、その先行命令の先行制約順位を繰上げる。優先順位算出部１５０は、繰上げ後の先行制約順位を本発明の優先順位とし、命令選択部１６１は最高優先順位の命令を選択し、実行時期決定部１６０は選択された命令を配置する処理を、全ての命令が配置済となるまで繰り返す。【選択図】　　　　　図１
2004078824.tif 000002
【特許請求の範囲】
【請求項１】
対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出ステップと、
最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定ステップと
を含むことを特徴とする命令スケジューリング方法。
【請求項２】
前記優先順位算出ステップは、
前記各対象命令に対し、前記データ依存関係にのみ基づいて先行制約順位を算出する先行制約順位算出サブステップと、
前記各対象命令が、自命令と同一の先行制約順位を算出され、かつ前記データ依存関係にある後続命令を持つ場合、自命令とその後続命令とを前記ハードウェア資源が並行して処理可能か否かを判断する資源制約評価サブステップと
を含み、
否と判断された各対象命令に対し、前記算出された先行制約順位を繰り上げて得られる優先順位を算出し、その他の各対象命令に対し、前記算出された先行制約順位と等しい優先順位を算出する
ことを特徴とする請求項１に記載の命令スケジューリング方法。
【請求項３】
前記優先順位算出ステップは、
前記各対象命令に対し、（１）前記データ依存関係にある後続命令を持たない場合１、（２）逆依存関係又は出力依存関係にある１つ以上の後続命令を持つ場合、当該後続命令に算出された最大値、及び（３）真の依存関係にある１つ以上の後続命令を持つ場合、当該後続命令に算出された最大値よりも１大きい値を、それぞれ先行制約順位として算出する先行制約順位算出サブステップと、
前記各対象命令に対し、自命令を処理するハードウェア資源によって処理され実行時期未決定なる命令の総数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出する資源制約評価サブステップとを含み、
当該資源制約値が当該先行制約順位よりも大きい場合、前記対象命令に当該資源制約値を優先順位として算出し、その他の場合、前記対象命令に当該先行制約順位を優先順位として付与し、
前記実行時期決定ステップは、最も大きい優先順位を算出された対象命令の実行時期を決定する
ことを特徴とする請求項１に記載の命令スケジューリング方法。
【請求項４】
対象プログラム中に記述された複数命令の実行時期をそれぞれ決定する命令スケジューリング方法であって、
第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断ステップと、
当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定ステップと
を含むことを特徴とする命令スケジューリング方法。
【請求項５】
前記所定期間は、クロックサイクル数により示され、
前記決定可否判断ステップは、
前記第２命令を処理するハードウェア資源によって処理され実行時期未決定なる命令の総数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出する資源制約評価サブステップを含み、
当該資源制約値が前記クロックサイクル数よりも大きければ、前記決定ができなくなると判断する
ことを特徴とする請求項４に記載の命令スケジューリング方法。
【請求項６】
入力プログラムを、複数命令によって記述された中間プログラムに変換し、当該中間プログラムに対して請求項１乃至５の何れかに記載の命令スケジューリング方法を適用することにより、当該複数命令の実行時期を決定する
ことを特徴とするプログラム変換方法。
【請求項７】
対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出手段と、
最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定手段と
を備えることを特徴とする命令スケジューリング装置。
【請求項８】
対象プログラム中に記述された複数命令の実行時期をそれぞれ決定する命令スケジューリング装置であって、
第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断手段と、
当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定手段と
を備えることを特徴とする命令スケジューリング装置。
【請求項９】
命令スケジューリングをコンピュータを用いて行うための、コンピュータ実行可能なプログラムであって、
対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出ステップと、
最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定ステップと
を前記コンピュータに実行させることを特徴とするプログラム。
【請求項１０】
対象プログラム中に記述された複数命令の実行時期を、コンピュータを用いてそれぞれ決定するための、コンピュータ実行可能なプログラムであって、
第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断ステップと、
当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定ステップと
を前記コンピュータに実行させることを特徴とするプログラム。
【請求項１１】
請求項９又は請求項１０のプログラムを記録していることを特徴とする、コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令スケジューリング方法、及び命令スケジューリング装置に関し、特に、命令を処理するハードウェア資源固有の制約条件を考慮して命令をスケジューリングする技術に関する。
【０００２】
【従来の技術】
従来の並列処理プロセッサを対象として命令をスケジューリングする命令スケジューリング装置は、入力プログラム中に記述された複数命令それぞれの好適な実行時期を決定する。
このような命令スケジューリング装置は、並列プロセッサを対象とする従来のコンパイラ装置に一般に備えられており、コンパイル後のプログラムに含まれる各命令の好適な実行時期を決定し、当該決定された実行時期に従って各命令を並べ換えることにより、並列最適化された目的プログラムを生成する。
【０００３】
従来のある種の命令スケジューリング装置は、リストスケジューリングと呼ばれる方法を用いて命令スケジューリングを行う。当該方法は、入力プログラム中の各命令に命令間に存するデータ依存関係にのみ基づいて優先順位（本願発明に係る優先順位と特に区別する場合、先行制約順位と称する）を算出し、実行時期未決定なる命令のうち最高の先行制約順位を算出された命令の実行時期を決定する処理を、全ての命令の実行時期が決定されるまで繰り返す。
【０００４】
ここで、データ依存関係とは、同一のハードウェア資源により処理される命令間に存する順序関係を言い、従来、（１）入力プログラムにおいて先に記述された命令（先行命令と称する）が定義した資源を、同じく後に記述された命令（後続命令と称する）が参照する真の依存関係、（２）先行命令が参照した資源を後続命令が定義する逆依存関係、及び（３）先行命令が定義した資源を後続命令がさらに定義する出力依存関係の３種類に分類されている。
【０００５】
これらの関係にある命令間の実行順序を変更すると、プログラムの実行結果の同一性が保証されなくなるため、命令スケジューリング装置は、データ依存関係にある命令間の実行順序が維持されるよう各命令の実行時期を決定する。
図１４は、従来装置が行う命令スケジューリング処理の一例を示すフローチャートである。従来の命令スケジューリング処理は、大きく、データ依存グラフ生成処理Ｓ９１０、優先順位算出処理Ｓ９２０、及び実行時期決定処理Ｓ９３０に分けて実行される。
（データ依存グラフ生成処理Ｓ９１０）
従来装置は、まず、入力プログラムにおける命令間のデータ依存関係を表すデータ依存グラフを生成する。当該データ依存グラフは、有向非循環グラフであり、入力プログラムの個々の命令に対応してそのノードが設けられ、データ依存関係があると判定された命令に対応するノード間に、先行命令から後続命令に向かうアークが設けられる。
【０００６】
図１５は、従来装置に入力される入力プログラムの一例である。
図１６は、図１５の入力プログラムに対して従来装置が生成するデータ依存グラフである。
（優先順位算出処理Ｓ９２０）
従来装置は、個々の命令に先行制約順位を算出する。算出される先行制約順位は、一例として、（１）データ依存関係にある後続命令を持たない命令に対して１、（２）逆依存関係又は出力依存関係にある１つ以上の後続命令を持つ命令に対して、当該後続命令に算出された最大値、及び（３）真の依存関係にある１つ以上の後続命令を持つ命令に対して、当該後続命令に算出された最大値よりも１大きい値であり、数値が大きいほど高い順位を表す。
【０００７】
この先行制約順位は、具体的に、まず前述したデータ依存グラフにおいて真の依存関係、逆依存関係、及び出力依存関係を表すアークに、それぞれ、１、０、及び０なる重み値を付与し、次に各ノードからデータ依存関係にある後続命令を終端ノードまで辿るパス上のアークに付与された重み値を累計し、さらに１を加えることによって算出される。終端ノードに至るパスが複数あり、複数の値が算出される場合、その最大値を採用する。
【０００８】
図１６において、算出される先行制約順位を各ノードに付記する。
先行制約順位の値は、真の依存関係、逆依存関係、及び出力依存関係にある命令間のレイテンシを、それぞれ一律に１、０、及び０とし、かつ、データ依存関係にある命令間の実行順序を維持する限りにおいて、各パス上の先頭命令を含む実行時期未決定なる命令を全て実行するための最小所要時間に相当する。
【０００９】
当該値が最大のパスは、クリティカルパスと呼ばれる。従来装置は、クリティカルパスの先頭命令（即ち、最大の優先順位を算出された命令）をできるだけ早い時期に実行させるようにスケジューリングすることにより、全命令の実行所要時間を極小化する。
（実行時期決定処理Ｓ９３０）
従来装置は、データ依存関係にある命令の実行順序を維持するために、データ依存関係にある先行命令が存在しないか、又は存在するならば全て実行時期決定済である命令のみを配置可能と判断する。
【００１０】
そして、各命令の配置可否判断、配置可能と判断された命令のうち最も高い先行制約順位を算出された命令の選択、及び、当該選択された命令の実行時期決定処理を、全ての命令の実行時期が決定されるまで繰り返す。
命令の実行時期は、具体的には、当該命令を実行すべきクロックサイクルとして決定される。命令の実行時期をあるクロックサイクルに決定することを、命令をそのクロックサイクルに配置するとも言う。
【００１１】
従来装置は、命令を、（１）逆依存関係又は出力依存関係にある先行命令が配置されたクロックサイクルと同じかそれ以降、かつ真の依存関係にある先行命令が配置されたクロックサイクルよりも後で、（２）ハードウェア資源が当該命令を処理可能な最先のクロックサイクルに配置する。
従来装置は、これにより、プログラムの実行結果の同一性を保つと共に、全命令を極小のクロックサイクルに配置する。
【００１２】
図１７は、対象プロセッサに備えられた命令デコーダ、演算部、及びメモリアクセス部が、１つのクロックサイクルあたり、それぞれ２命令、２命令、及び１命令を並行して処理可能である場合に、図１５のプログラムの各命令が配置されるクロックサイクルを示している。同図中、クロックサイクル欄９０１は、クロックサイクルを相対番号で示し、命令１欄９０２及び命令２欄９０３は、各クロックサイクルに配置された命令と、それが何回目の決定によって配置されたかを示している。
【００１３】
メモリアクセス部により処理される命令Ｅ、命令Ｆ、及び命令Ｇは、一クロックサイクルあたり一命令のみを実行可能である。そのため、これらの命令はサイクル３、サイクル４、及びサイクル５に配置され、その結果、サイクル４には、命令Ｆのみが配置される。
従来のコンパイラは、このようにして配置された命令をクロックサイクルの早い順に並べると共に、各クロックサイクルの末尾の命令に、クロックサイクルの境界を示す境界情報を付加することにより、並列最適化された目的プログラムを生成する。当該境界情報は、例えば１ビットのフラグ情報として表される。対象プロセッサは、当該境界情報を付加された命令とその次の命令とを、それぞれ異なるクロックサイクルにおいて実行する。
【００１４】
図１７の例について言えば、各命令は再び図１５に示した順序で出力されると共に、命令Ａ、命令Ｃ、命令Ｅ、命令Ｆ、及び命令Ｇに当該境界情報が付加される。
並列最適化された目的プログラムは、対象プロセッサにおいて、並列最適化されないプログラムに比べて、より少ないクロックサイクルで実行されることが期待される。
【００１５】
【発明が解決しようとする課題】
しかしながら、上記従来の命令スケジューリング技術によれば、全命令が必ずしも最小のクロックサイクルに配置されない、即ち並列最適化が十分に行われない場合があるという問題がある。
例えば、図１５の例について言えば、第２決定において命令Ｅを選択してサイクル２に配置すれば、命令Ｆ、及び命令Ｇが、サイクル３、及びサイクル４にそれぞれ配置できるとともに、命令Ｂ、命令Ｃ、及び命令Ｄもまた、サイクル２、サイクル３、及びサイクル４にそれぞれ配置でき、全命令が４クロックサイクルに配置されることとなる（図５参照）。
【００１６】
しかしながら、従来技術によれば、先行制約順位をデータ依存関係にのみ基づいて算出するので、第２決定において命令Ｅが選択されるような先行制約順位は算出され得ず、このような最適な配置は行われない。
上記の問題に鑑み、本発明は、従来よりも少ないクロックサイクルに全命令を配置できる命令スケジューリング方法、及び命令スケジューリング装置の提供を目的とする。
【００１７】
【課題を解決するための手段】
上記問題を解決するため、本発明の命令スケジューリング方法は、対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出ステップと、最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定ステップとを含む。
【００１８】
また、本発明の命令スケジューリング方法は、対象プログラム中に記述された複数命令の実行時期をそれぞれ決定する命令スケジューリング方法であって、第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断ステップと、当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定ステップとを含んでもよい。
【００１９】
また、本発明の命令スケジューリング装置は、対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出手段と、最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定手段とを備える。
【００２０】
また、本発明の命令スケジューリング装置は、対象プログラム中に記述された複数命令の実行時期をそれぞれ決定する命令スケジューリング装置であって、第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断手段と、当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定手段とを備えてもよい。
【００２１】
【発明の実施の形態】
（第１の実施の形態）
第１の実施の形態における命令スケジューリング装置は、入力プログラム中に記述された複数命令の各々に、データ依存関係と、ハードウェア資源固有の制約条件とに基づいて優先順位を算出し、算出された優先順位を用いて命令の選択と配置とを行う。
【００２２】
より詳細には、データ依存関係にあって、かつ同一の先行制約順位を算出される２つの命令について、対象プロセッサにおけるハードウェア資源が両者を並行して処理可能か否かを判断する。そして、否と判断された場合その先行命令に対して当該先行制約順位を繰上げて得られる順位を本発明に係る優先順位とし、それ以外の命令に対して当該先行制約順位を本実施の形態に係る優先順位とする。そして、最も高い優先順位を算出された未配置命令の選択と配置とを、全ての命令が配置されるまで繰り返す。
【００２３】
本命令スケジューリング装置は、言うなれば、先行制約順位としては同一値を算出されるが、ハードウェア資源に関する制約のために並行して処理されない２つの命令について、その先行命令の優先順位を従来の先行制約順位よりも高く算出することで、資源制約のために生じるクリティカルパスを発見する。従来装置は、資源制約のために生じるクリティカルパスを発見していなかった。
【００２４】
本命令スケジューリング装置は、そのようなクリティカルパス上の先頭命令をできるだけ早いクロックサイクルに配置するので、資源制約のために並行処理されない命令を含む全命令を、従来よりも少ないクロックサイクルに配置できる。
（全体構成）
図１は、第１の実施の形態におけるコンパイラ装置１００の全体構成を示す機能ブロック図である。コンパイラ装置１００は、命令スケジューリング部１３０として、第１の実施の形態に係る命令スケジューリング装置を含んでいる。
【００２５】
コンパイラ装置１００は、ソースファイル１０１からソースプログラムを取得し、当該ソースプログラムをコンパイルして得られたプログラムから、並列最適化された目的プログラムを生成し、当該目的プログラムを目的ファイル１０２へ出力する。
コンパイラ装置１００は、コンパイラ上流部１１０、アセンブラコード生成部１２０、命令スケジューリング部１３０、及び出力部１７０から構成される。命令スケジューリング部１３０は、データ依存関係解析部１４０、優先順位算出部１５０、及び実行時期決定部１６０から構成される。優先順位算出部１５０は、先行制約順位算出部１５１、及び資源制約評価部１５２を含み、実行時期決定部１６０は、命令選択部１６１を含む。
【００２６】
コンパイラ装置１００は、具体的にはプロセッサ、プログラムを記憶しているＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）、作業用のＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）、ディスク装置等のソフトウェア及びハードウェアにより実現される。前記各部の機能は、プロセッサがＲＯＭに記憶されているプログラムを実行することにより実現される。前記各部の間におけるデータの受け渡しは、ＲＡＭ、ディスク装置等のハードウェアを介して行われる。
【００２７】
コンパイラ上流部１１０は、ソースファイル１０１からソースプログラムを読み出し、字句解析処理及び構文解析処理を行うことにより、中間コード列を生成する。
アセンブラコード生成部１２０は、コンパイラ上流部１１０により生成された中間コード列から、アセンブラコード列を生成する。
【００２８】
命令スケジューリング部１３０は、アセンブラコード生成部１２０により生成されたアセンブラコード列に含まれる各命令に、他の命令との間のデータ依存関係と、自命令を処理するハードウェア資源固有の制約条件とに基づいて優先順位を算出する。そして、実行時期未決定なる命令のうち最も高い優先順位を算出された命令を選択し、選択された命令の実行時期を決定する処理を、全ての命令の実行時期が決定されるまで繰り返す。命令スケジューリング部１３０の詳細について、後述する。
【００２９】
出力部１７０は、各命令を、配置されたクロックサイクルの早い順に、従来技術の項で述べた境界情報と共に出力する。
以下、コンパイラ装置１００が対象とするプロセッサの構成について説明し、その後、命令スケジューリング部１３０の詳細を説明する。
（対象プロセッサ）
図２は、コンパイラ装置１００が対象とするプロセッサの一構成例を示す機能ブロック図である。本図は、本願発明に言うハードウェア資源固有の制約条件の一具体例を説明するために掲げられ、当該説明に必要な部分のみを簡略に示している。
【００３０】
プロセッサ８００は、大きく分けて、命令供給部８１０、解読部８２０、実行部８３０から構成される。
命令供給部８１０は、ＩＡ（Ｉｎｓｔｒｕｃｔｉｏｎ　Ａｄｄｒｅｓｓ）バス、及びＩＤ（Ｉｎｓｔｒｕｃｔｉｏｎ　ｄａｔａ）バスを介して、命令フェッチ部８１１により、図示しない外部メモリから命令をフェッチし、フェッチされた命令を第１命令レジスタ８１２及び第２命令レジスタ８１３に保持すると共に、１つのクロックサイクルに２命令を並行して解読部８２０へ供給する。
【００３１】
解読部８２０は、第１命令デコーダ８２１及び第２命令デコーダ８２２を含み、１つのクロックサイクルに２命令を並行して解読し、その解読結果に応じた制御信号を実行部８３０へ供給する。
実行部８３０は、解読部８２０から供給された制御信号に応じて動作する。第１演算部８３１と第２演算部８３２とは、それぞれ専用のバスラインでレジスタファイル８３３、及び条件フラグレジスタ８３４と接続され、１つのクロックサイクルに２つの命令に関する演算処理を並行して行う。メモリアクセス部８３５は、ＯＡ（Ｏｐｅｒａｎｄ　Ａｄｄｒｅｓｓ）バス、及びＯＤ（Ｏｐｅｒａｎｄ　ｄａｔａ）バスを介して、１つのクロックサイクルに１つの命令に関するメモリアクセス処理を行う。
【００３２】
プロセッサ８００は、このような構成を有するため、１つのクロックサイクルに、演算部を用いて処理される命令であれば最大２つ、メモリアクセスユニットを用いて処理される命令であれば最大１つを処理可能である。これが、プロセッサ８００の資源制約条件となる。
（命令スケジューリング部１３０の詳細）
第１の実施の形態における命令スケジューリング部１３０の詳細についてフローチャートを参照しながら説明する。
【００３３】
図３は、第１の実施の形態における命令スケジューリング処理を示すフローチャートである。
（ステップＳ１０１）データ依存関係解析部１４０は、アセンブラコード生成部１２０により生成されたアセンブラコード列に含まれる命令間のデータ依存関係を表すデータ依存グラフを、従来技術と同様にして生成する。
【００３４】
（ステップＳ１０２）先行制約順位算出部１５１は、データ依存関係解析部１４０により生成されたデータ依存グラフにおいて、真の依存関係、逆依存関係、及び出力依存関係を表す各アークに、それぞれ１、０、及び０なる重み値を付与する。この処理は、従来技術において先行制約順位を算出する処理に相当する。
（ステップＳ１０３）重み値０を付与された各アークについて、ステップＳ１０６までを実行する。
【００３５】
（ステップＳ１０４）資源制約評価部１５２は、当該アークの両端の命令、即ち、先行制約値として同一値を算出される命令について、ハードウェア資源が当該命令を並行して処理可能か否か判断する。否と判断された場合、ステップＳ１０５を実行する。
（ステップＳ１０５）当該アークの重み値を１に変更する。
【００３６】
（ステップＳ１０６）ステップＳ１０３から繰り返す。
（ステップＳ１０７）優先順位算出部１５０は、各ノードからデータ依存関係にある後続命令を終端ノードまで辿るパス上のアークに付与され、資源制約評価部１５２によって変更された後の重み値を累計し、さらに１を加えることにより、ノード毎に優先順位を算出する。ステップＳ１０５において変更した重み値を累計することで、先行制約順位を繰上げて得られる優先順位が算出される。
【００３７】
（ステップＳ１０８）実行時期未決定なる命令がある間、ステップＳ１１１までを実行する。
（ステップＳ１０９）命令選択部１６１は、実行時期未決定なる命令に対応するノードのうち、優先順位算出部１５０により最も高い優先順位を算出されたノードを選択する。
【００３８】
（ステップＳ１１０）実行時期決定部１６０は、命令選択部１６１により選択されたノードに対応する命令を、（１）命令と逆依存関係又は出力依存関係にある先行命令が配置されたクロックサイクルと同じかそれよりも後、かつ当該命令と真の依存関係にある先行命令が配置されたクロックサイクルよりも後で、（２）ハードウェア資源が当該命令を処理可能な最も早いクロックサイクルに当該命令を配置する。
【００３９】
（ステップＳ１１１）ステップＳ１０８から繰り返す。
（具体例）
図４は、図１５のプログラムから、データ依存関係解析部１４０によって生成され、先行制約順位算出部１５１によって各アークに重み付けされたデータ依存グラフを示している。かっこ内の数値は、各アークに付与された重み値を示す。
【００４０】
資源制約評価部１５２は、重み値０を付与されたアークの両端の命令、即ち命令Ｅ及び命令Ｆ、並びに命令Ｆ及び命令Ｇが、何れもメモリアクセスユニットを用いて処理される命令であることから、同一のクロックサイクルにおいて並行して処理不可能であると判断し、重み値をそれぞれ１に変更する。図４において、（０→１）なる表記は重み値の変更を示す。
【００４１】
優先順位算出部１５０は、当該変更後の重み値を累計することにより優先順位を算出する。図４において、各ノードに付記した数値は、当該算出された優先順位を示す。ノードＡの優先順位は、パスＡＥＦＧから算出された４が採られる。
図５は、図４のデータ依存グラフから算出された優先順位を用いて行われる命令の配置を示している。表記法は図１７と同様である。命令Ｅの優先順位が３と算出され、第２決定で命令Ｅがサイクル２に配置されることによって、図１７の配置よりも１クロックサイクル少ない４クロックサイクルに全ての命令が配置される。
（第１のまとめ）
以上述べたように、第１の実施の形態における命令スケジューリング装置は、データ依存関係にあって、かつ同一の先行制約順位を算出される２つの命令が、対象プロセッサにおけるハードウェア資源によって並行処理されない場合、その先行命令の優先順位を従来の先行制約順位よりも高く算出する。
【００４２】
これにより、従来の技術では発見されなかった資源制約のために生じるクリティカルパスを発見し、そのようなクリティカルパス上の先頭命令をできるだけ早いクロックサイクルに配置するので、資源制約のために並行処理されない命令を含む全命令を、従来よりも少ないクロックサイクルに配置できる。
（第２の実施の形態）
第２の実施の形態における命令スケジューリング装置は、まず、入力プログラム中に記述された複数命令の各々に先行制約順位を算出する。そして、配置可能な命令の各々に、自命令を処理するハードウェア資源によって処理される未配置命令の総数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出し、当該資源制約値及び前記先行制約順位の何れか大きい方を優先順位とし、最も高い優先順位を持つ命令の選択と配置とを、全ての命令が配置されるまで繰り返す。
【００４３】
資源制約値は、当該ハードウェア資源によって処理される未配置命令を全て実行するための最小所要時間に相当する。
本命令スケジューリング装置は、この資源制約値を算出する点、及び、命令が配置されるたびに優先順位を算出し直す点で、第１の実施の形態と異なる。
以下、第１の実施の形態と同一の事項については説明を省略し、異なる事項について主に説明する。
（全体構成）
第２の実施の形態におけるコンパイラ装置は、第１の実施の形態のコンパイラ装置と同一の全体構成（図１参照）を有している。命令スケジューリング部１３０として、第２の実施の形態に係る命令スケジューリング装置を含み、その詳細な動作が、第１の実施の形態と異なる。
（命令スケジューリング部１３０の詳細）
第２の実施の形態における命令スケジューリング部１３０の詳細について、フローチャートを参照しながら説明する。
【００４４】
図６は、第２の実施の形態における命令スケジューリング処理を示すフローチャートである。
（ステップＳ２０１）データ依存関係解析部１４０は、アセンブラコード生成部１２０により生成されたアセンブラコード列に含まれる命令間のデータ依存関係を表すデータ依存グラフを生成する。
【００４５】
（ステップＳ２０２）先行制約順位算出部１５１は、データ依存関係解析部１４０により生成されたデータ依存グラフにおいて、真の依存関係、逆依存関係、及び出力依存関係を表す各アークに、それぞれ、１、０、及び０なる重み値を付与し累計することにより、先行制約順位を算出する。
（ステップＳ２０３）未配置命令がある間ステップＳ２１３までを実行する。
【００４６】
（ステップＳ２０４）命令スケジューリング部１３０は、データ依存関係にある先行命令を持たないか、持つならば全て配置済となっている命令を配置可能命令と認識して、そのリストを作成する。
（ステップＳ２０５）作成されたリスト中の各命令についてステップＳ２１０までを実行する。
【００４７】
（ステップＳ２０６）資源制約評価部１５２は、当該命令に対し、自命令を処理するハードウェア資源によって処理される未配置命令の数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出する。
（ステップＳ２０７）算出された資源制約値が、当該命令に算出された先行制約順位よりも大きい場合、ステップＳ２０８を実行し、その他の場合、ステップＳ２０９を実行する。
【００４８】
（ステップＳ２０８）当該資源制約値を、当該命令の優先順位とする。
（ステップＳ２０９）当該先行制約順位を、当該命令の優先順位とする。
（ステップＳ２１０）ステップＳ２０５から繰り返す。
（ステップＳ２１１）命令選択部１６１は、実行時期未決定なる命令に対応するノードのうち、優先順位算出部１５０により最も高い優先順位を算出されたノードを選択する。
【００４９】
（ステップＳ２１２）実行時期決定部１６０は、命令選択部１６１により選択されたノードに対応する命令を、（１）命令と逆依存関係又は出力依存関係にある先行命令が配置されたクロックサイクルと同じかそれよりも後、かつ当該命令と真の依存関係にある先行命令が配置されたクロックサイクルよりも後で、（２）ハードウェア資源が当該命令を処理可能な最も早いクロックサイクルに当該命令を配置する。
【００５０】
（ステップＳ２１３）ステップＳ２０３から繰り返す。
（具体例）
再び、図１５のプログラムを例に説明する。第２の実施の形態におけるデータ依存関係解析部１４０は、図１６に示した従来と同様のデータ依存グラフを生成し、先行制約順位算出部１５１は、当該データ依存グラフから従来の優先順位である先行制約順位を算出する。
【００５１】
図７及び図８は、命令スケジューリング部１３０による各命令の配置過程を示している。
両図中、命令欄３０１は各命令を符号で示し、使用資源欄３０２は当該命令の処理に使用される資源がメモリアクセス部、又は演算部であることを、それぞれ記号Ｍ、Ａで示し、先行制約順位欄３０３は、当該命令に算出される先行制約順位を示している。
【００５２】
第１決定欄３１０乃至第７決定欄３７０は、配置の決定順に、それぞれの決定について、決定前の配置状態、算出される資源制約値、算出される優先順位を示している。配置状態について、未配置でかつその回に配置不可、未配置でかつその回に配置可能、及び配置済である状態が、未決定、配置可能、及び決定されたサイクル番号により、それぞれ表される。
【００５３】
配置結果欄３８０は、最終的に各命令が配置されるサイクル番号を示している。
以下、各回の決定について、詳細に説明する。
（第１決定）命令スケジューリング部１３０は、データ依存関係にある先行命令を持たない命令Ａを唯一の配置可能命令と認識し、Ａのみを要素とするリスト｛Ａ｝を作成する。
【００５４】
資源制約評価部１５２は、命令Ａに対し、資源制約値を算出する。命令Ａは、メモリアクセス部によって処理される命令である。この時点で実行時期未決定なる命令のうちメモリアクセス部によって処理される命令は、命令Ａ、命令Ｅ、命令Ｆ、及び命令Ｇの４つであり、その数をメモリアクセス部が並行して処理可能な最大命令数１で除して得られる４を命令Ａの資源制約値とする。
【００５５】
当該資源制約値は、先行制約順位よりも大きいため、当該資源制約値４が命令Ａの優先順位とされる。
命令選択部１６１は、命令Ａを選択し、実行時期決定部１６０は、命令Ａをサイクル１に配置する。
（第２決定）命令Ａが配置済となったことで、優先順位算出部１５０は命令Ｂ、命令Ｃ、及び命令Ｅを配置可能命令と認識し、リスト｛Ａ、Ｃ、Ｅ｝を作成する。
【００５６】
資源制約評価部１５２は、命令Ｂに対し、資源制約値を算出する。命令Ｂは、演算部によって処理される命令である。この時点で演算部によって処理される未配置命令は、命令Ｂ、命令Ｃ、及び命令Ｄの３つであり、その数を演算部が並行して処理可能な最大命令数２で除して得られる１．５を命令Ｂの資源制約値とする。
【００５７】
当該資源制約値は、先行制約順位よりも大きくないため、先行制約順位２が命令Ｂの優先順位とされる。
資源制約評価部１５２は、命令Ｃの優先順位を、命令Ｂと同様にして２と算出する。
資源制約評価部１５２は、命令Ｅに対し、資源制約値を算出する。命令Ｅは、メモリアクセス部によって処理される命令である。この時点でメモリアクセス部によって処理される未配置命令は、命令Ｅ、命令Ｆ、及び命令Ｇの３つであり、その数をメモリアクセス部が並行して処理可能な最大命令数１で除して得られる３を命令Ｅの資源制約値とする。
【００５８】
当該資源制約値は、先行制約順位よりも大きいため、優先順位算出部１５０は、当該資源制約値３を命令Ｅの優先順位とする。
命令選択部１６１は、最大の優先順位を算出された命令Ｅを選択し、実行時期決定部１６０は、命令Ｅを、命令Ａが配置されたサイクルの次サイクル以降、最先のサイクル２に配置する。
【００５９】
（第３決定）命令Ａ及び命令Ｅが配置済となったことで、優先順位算出部１５０は、それらを先行命令とする命令Ｂ、命令Ｃ、及び命令Ｆを配置可能命令と認識し、リスト｛Ａ、Ｃ、Ｆ｝を作成する。
資源制約評価部１５２は、命令Ｃ、及び命令Ｂに対し、第２決定と同様にして優先順位２を算出する。
【００６０】
資源制約評価部１５２は、命令Ｆに対し資源制約値２を算出する。当該資源制約値は先行制約順位よりも大きいため、優先順位算出部１５０は当該資源制約値２を命令Ｆの優先順位とする。
命令Ｂ、命令Ｃ、及び命令Ｆに同一の優先順位が算出されるため、命令選択部１６１は、元のプログラムにおける記述順に従って命令Ｂを選択する。実行時期決定部１６０は、命令Ａが配置されたサイクル１の次サイクル以降、最先のサイクルに配置する。対象プロセッサにおいて、命令Ｂと、第２決定でサイクル２に配置された命令Ｅとが、各構成の動作並列度数の最大値を超えることなく並行して処理可能であると判断されることから、この最先のサイクルはサイクル２と決定される。
【００６１】
（第４決定）以下、簡略に説明する。優先順位算出部１５０は、配置可能命令のリスト｛Ｃ、Ｆ｝を作成する。資源制約評価部１５２は、命令Ｃ、及び命令Ｆにそれぞれ資源制約値１、及び２を算出し、優先順位算出部１５０は、命令Ｃ、及び命令Ｆにそれぞれ優先順位２を算出する。
命令選択部１６１は、元のプログラムにおける記述順に従って命令Ｃを選択し、実行時期決定部１６０は、命令Ｃをサイクル３に配置する。
【００６２】
（第５決定）優先順位算出部１５０は、配置可能命令のリスト｛Ｄ、Ｆ｝を作成する。資源制約評価部１５２は、命令Ｄ、及び命令Ｆにそれぞれ資源制約値０．５、及び２を算出し、優先順位算出部１５０は、命令Ｄ、及び命令Ｆにそれぞれ優先順位１、及び２を算出する。
命令選択部１６１は、命令Ｆを選択し、実行時期決定部１６０は、命令Ｆをサイクル３に配置する。
【００６３】
（第６決定）優先順位算出部１５０は、配置可能命令のリスト｛Ｄ、Ｇ｝を作成する。資源制約評価部１５２は、命令Ｄ、及び命令Ｇにそれぞれ資源制約値０．５、及び１を算出し、優先順位算出部１５０は、命令Ｄ、及び命令Ｇにそれぞれ優先順位１を算出する。
命令選択部１６１は、元のプログラムにおける記述順に従って命令Ｄを選択し、実行時期決定部１６０は、命令Ｄをサイクル４に配置する。
【００６４】
（第７決定）優先順位算出部１５０は、配置可能命令のリスト｛Ｇ｝を作成する。優先順位算出部１５０は、命令Ｇに優先順位１を算出する。
命令選択部１６１は、命令Ｇを選択し、実行時期決定部１６０は、命令Ｇをサイクル４に配置する。
このような配置過程から、第１の実施の形態と同様の命令の配置（図５参照）が決定される。
（第２のまとめ）
以上述べたように、第２の実施の形態における命令スケジューリング装置は、配置可能な命令の各々に、資源制約値と先行制約順位の何れか大きい方を優先順位として算出し、最も高い優先順位を算出された命令の選択と配置とを、全ての命令が配置されるまで繰り返す。
【００６５】
これにより、資源制約の厳しい命令を従来よりも早いクロックサイクルに配置するので、そのような命令を含む全命令を従来よりも少ないクロックサイクルに配置できる。
特に、並列処理可能な命令数の小さな資源によって処理される多数の未配置命令があって、それらがデータ依存関係にない場合に、そのような命令に大きな資源制約値が算出されるので、早いクロックサイクルに適切に配置されるという、特有の効果が生じる。第１の実施の形態の命令スケジューリング装置は、データ依存関係にある命令間においてのみ、資源制約に応じて先行命令の優先順位を繰上げるので、そのような場合を適切に処理できない。
（第３の実施の形態）
第３の実施の形態における命令スケジューリング装置は、まず、入力プログラム中に記述された複数命令の各々に対し、先行制約順位を算出する。
【００６６】
そして、以下に述べる処理を繰り返すことにより、所定目標数のクロックサイクルに命令の配置を試みる。
配置可能命令のうち最大の先行制約順位を算出された命令を配置し、その後、各未配置命令について、当該命令を配置可能なクロックサイクルの残数と、資源制約値とを算出する。当該資源制約値と当該残数との大小関係に基づいて、前記目標数のクロックサイクルに全未配置命令が配置可能か否かを判断する。
【００６７】
否と判断された場合、直前に行った命令の配置を撤回すると共に、その命令を配置可能命令から除外し、他の配置可能命令の配置を試みる。
本命令スケジューリング装置は、資源制約値を用いて未配置命令の配置可否を判断し、否と判断された場合、直前の配置を撤回して他の命令の配置を試みる点で、第２の実施の形態と異なる。
【００６８】
以下、第２の実施の形態と同一の事項については説明を省略し、異なる事項について主に説明する。
（全体構成）
図９は、第３の実施の形態におけるコンパイラ装置４００の全体構成を示す機能ブロック図である。コンパイラ装置４００は、命令スケジューリング部４３０として、第３の実施の形態に係る命令スケジューリング装置を含んでいる。
【００６９】
コンパイラ装置４００は、コンパイラ装置１００と同様、ソースファイル１０１に保持されているソースプログラムから、並列最適化された目的プログラムを生成して目的ファイル１０２へ出力する。
コンパイラ装置４００は、第１の実施の形態におけるコンパイラ装置１００と共通の構成要素を含んでいる。同図中、そのような共通の構成要素を、図１に付した符号と同一の符号を用いて示す。
【００７０】
コンパイラ装置４００は、コンパイラ上流部１１０、アセンブラコード生成部１２０、命令スケジューリング部４３０、及び出力部１７０から構成される。命令スケジューリング部４３０は、データ依存関係解析部１４０、先行制約順位算出部１５１、及び実行時期決定部４６０から構成される。実行時期決定部４６０は、命令選択部１６１、決定可否判断部４６２、及び再決定制御部４６４を含む。決定可否判断部４６２は、資源制約評価部１５２を含む。
【００７１】
コンパイラ装置４００は、具体的にはプロセッサ、プログラムを記憶しているＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）、作業用のＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）、ディスク装置等のソフトウェア及びハードウェアにより実現される。前記各部の機能は、プロセッサがＲＯＭに記憶されているプログラムを実行することにより実現される。前記各部の間におけるデータの受け渡しは、ＲＡＭ、ディスク装置等のハードウェアを介して行われる。
【００７２】
コンパイラ上流部１１０、アセンブラコード生成部１２０、及び出力部１７０は、第１の実施の形態と共通のため説明を省略し、以下、命令スケジューリング部４３０について説明する。
（命令スケジューリング部４３０の詳細）
第３の実施の形態における命令スケジューリング部４３０の詳細についてフローチャートを参照しながら説明する。
【００７３】
図１０は、第３の実施の形態における命令スケジューリング処理を示すフローチャートである。
（ステップＳ４０１）データ依存関係解析部１４０は、アセンブラコード生成部１２０により生成されたアセンブラコード列に含まれる命令間のデータ依存関係を表すデータ依存グラフを生成する。
【００７４】
（ステップＳ４０２）先行制約順位算出部１５１は、データ依存関係解析部１４０により生成されたデータ依存グラフにおいて、真の依存関係、逆依存関係、及び出力依存関係を表す各アークに、それぞれ、１、０、及び０なる重み値を付与し累計することにより、先行制約順位を算出する。
（ステップＳ４０３）未配置命令がある間ステップＳ４１４までを実行する。
【００７５】
（ステップＳ４０４）命令スケジューリング部４３０は、データ依存関係にある先行命令を持たないか、持つならば全て配置済となっている命令を配置可能命令と認識して、そのリストを作成する。
（ステップＳ４０５）命令選択部１６１は、当該リストから、最大の先行制約順位を算出された命令を選択し、実行時期決定部４６０は、（１）命令と逆依存関係又は出力依存関係にある先行命令が配置されたクロックサイクルと同じかそれよりも後、かつ当該命令と真の依存関係にある先行命令が配置されたクロックサイクルよりも後で、（２）ハードウェア資源が当該命令を処理可能な最も早いクロックサイクルに配置する。
【００７６】
（ステップＳ４０６）命令スケジューリング部４３０は、当該命令を当該リストから除外する。
（ステップＳ４０７）ステップＳ４０５において行われた決定によって新たに配置可能となった命令を含む各配置可能命令について、ステップＳ４１１までを実行する。
【００７７】
（ステップＳ４０８）資源制約評価部１５２は、当該命令を処理するハードウェア資源によって処理される未配置命令の数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出する。
決定可否判断部４６２は、当該命令を配置する余地があるクロックサイクルの数を残サイクル数として算出する。この算出には、対象プロセッサにおいて全ての命令を共通して処理する資源（例えば命令デコーダ）が、１クロックサイクルあたり並行して処理できる命令の最大数（以降、共通最大数と称する）が用いられる。前述のプロセッサ８００の例では、この共通最大数は２である。
【００７８】
当該残サイクル数は、具体的に、（１）所定目標数のクロックサイクルの中で、（２）当該命令と逆依存関係又は出力依存関係にある先行命令が配置されたクロックサイクルと同じかそれよりも後、かつ当該命令と真の依存関係にある先行命令が配置されたクロックサイクルよりも後において、（３）配置済の命令数が共通最大数に達していないクロックサイクルの数として求められる。
【００７９】
（ステップＳ４０９）当該資源制約値が当該残サイクル数を上回っていれば、ステップＳ４１０へ進み、そうでなければ、ステップＳ４１３へ進む。
（ステップＳ４１０）当該リストが空なら、ステップＳ４１２へ進み、そうでなければ、ステップＳ４１１へ進む。
（ステップＳ４１１）再決定制御部４６４は、ステップＳ４０５において行われた決定を撤回する。ステップＳ４０５へ戻って他の命令の配置を試みる。
【００８０】
（ステップＳ４１２）全命令を所定目標数のクロックサイクルに配置できないと判定し、命令スケジューリング処理を終了する。
（ステップＳ４１３）ステップＳ４０７から繰り返す。
（ステップＳ４１４）ステップＳ４０３から繰り返す。
（具体例）
再び、図１５のプログラムを例に、クロックサイクルの目標数を４とした場合について説明する。第３の実施の形態におけるデータ依存関係解析部１４０は、図１６に示した従来と同様のデータ依存グラフを生成し、先行制約順位算出部１５１は、当該データ依存グラフから従来の優先順位である先行制約順位を算出する。
【００８１】
図１１及び図１２は、命令スケジューリング部４３０による各命令の配置過程を示している。
両図中、命令欄５０１は各命令を符号で示し、使用資源欄５０２は当該命令の処理に使用される資源がメモリアクセス部、又は演算部であることを、それぞれ記号Ｍ、Ａで示し、先行制約順位欄５０３は、当該命令に算出される先行制約順位を示している。
【００８２】
第１決定欄５１０乃至第７決定欄５８０は、配置の決定順に、それぞれの決定について、配置状態、算出される残サイクル数、算出される資源制約値を示している。配置状態欄について、未配置でかつその回に配置不可、未配置でかつその回に配置可能、及び配置済である状態が、未決定、配置可能、及び決定されたサイクル番号により、それぞれ表されると共に、その回において１つの配置可能命令に決定されるサイクル番号が付記される。
【００８３】
配置結果欄５９０は、最終的に各命令が配置されるサイクル番号を示している。
以下、各回の決定について、詳細に説明する。
（第１決定）命令スケジューリング部４３０は、データ依存関係にある先行命令を持たない命令Ａを唯一の配置可能命令と認識し、Ａのみを要素とするリスト｛Ａ｝を作成する。命令選択部１６１は、命令Ａを選択し、実行時期決定部４６０は、命令Ａをサイクル１に配置し、命令スケジューリング部４３０は、Ａを当該リストから除外する。
【００８４】
命令Ａが配置された後の配置可能命令は、命令Ｂ、命令Ｃ、及び命令Ｅの３つである。これらの命令は、対象プロセッサにおいて、それぞれ演算部、演算部、及びメモリアクセス部により処理される。この時点で、演算部によって処理される未配置命令は、命令Ｂ、命令Ｃ、及び命令Ｄの３つであり、メモリアクセス部によって処理される未配置命令は、命令Ｅ、命令Ｆ、及び命令Ｇの３つである。
【００８５】
命令Ｂに対し、資源制約評価部１５２は、演算部によって処理される未配置命令の数３を、演算部が並行して処理可能な最大命令数２で除して得られる資源制約値１．５を算出する。
また、決定可否判断部４６２は、命令Ｂと真の依存関係にある命令Ａが配置されたサイクル１よりも後で、配置済の命令数が前記共通最大数に達していないクロックサイクルが、サイクル２、サイクル３、及びサイクル４の３つであることを認識し、残サイクル数３を算出する。
【００８６】
同様に、命令Ｃに対し、資源制約評価部１５２は、資源制約値１．５を算出し、決定可否判断部４６２は、残サイクル数３を算出する。
命令Ｅに対し、資源制約評価部１５２は、メモリアクセス部によって処理される未配置命令の数３を、メモリアクセス部が並行して処理可能な最大命令数１で除して得られる資源制約値３を算出する。
【００８７】
また、決定可否判断部４６２は、命令Ｅと真の依存関係にある命令Ａが配置されたサイクル１よりも後で、配置済の命令数が前記共通最大数に達していないクロックサイクルが、サイクル２、サイクル３、及びサイクル４の３つであることを認識し、残サイクル数３を算出する。
何れの命令についても資源制約値が残サイクル数を上回らないので、第２決定処理へ進む。
【００８８】
（第２決定）第２決定において、命令Ｂがサイクル２に配置される。当該配置後、配置可能である命令Ｃ及び命令Ｅについて、同様に、資源制約値と残サイクル数とが算出される。何れの命令についても資源制約値が残サイクル数を上回らないので、第３決定処理へ進む。
（第３決定）命令スケジューリング部４３０は、全ての先行命令が配置済となった命令Ｃ及び命令Ｅを配置可能命令と認識し、リスト｛Ｃ、Ｅ｝を作成する。命令選択部１６１は、命令Ｃを選択し、実行時期決定部４６０は、命令Ｃをサイクル２に配置し、命令スケジューリング部４３０は、Ｃを当該リストから除外する。
【００８９】
命令Ｃが配置された後の配置可能命令は、命令Ｄ及び命令Ｅの２つである。これらの命令は、対象プロセッサにおいて、それぞれ演算部及びメモリアクセス部により処理される。この時点で、演算部によって処理される未配置命令は、命令Ｄのみであり、メモリアクセス部によって処理される未配置命令は、命令Ｅ、命令Ｆ、及び命令Ｇの３つである。
【００９０】
命令Ｄに対し、資源制約評価部１５２は、演算部によって処理される未配置命令の数１を、演算部が並行して処理可能な最大命令数２で除して得られる資源制約値０．５を算出する。
また、決定可否判断部４６２は、命令Ｄと真の依存関係にある命令Ｃが配置されたサイクル２よりも後において、配置済の命令数が前記共通最大数に達していないクロックサイクルが、サイクル３、及びサイクル４の２つであることを認識し、残サイクル数２を算出する。
【００９１】
命令Ｅに対し、資源制約評価部１５２は、メモリアクセス部によって処理される未配置命令の数３を、メモリアクセス部が並行して処理可能な最大命令数１で除して得られる資源制約値３を算出する。
また、決定可否判断部４６２は、命令Ｅと真の依存関係にある命令Ａが配置されたサイクル１よりも後で、配置済の命令数が前記共通最大数に達していないクロックサイクルが、サイクル３、及びサイクル４の２つであることを認識し、残サイクル数２を算出する。
【００９２】
ここで、命令Ｅについても資源制約値が残サイクル数を上回るので、再決定制御部４６４は、命令Ｃについて行われた決定を撤回して、他の命令の配置を試みる。
（第３決定−再試行）第３決定の再試行において、前記リストが｛Ｅ｝となっており、命令Ｅがサイクル２に配置される。
【００９３】
命令Ｅが配置された後の配置可能命令は、決定を撤回された命令Ｃ、及び命令Ｆの２つである。これらの命令は、対象プロセッサにおいて、それぞれ演算部及びメモリアクセス部により処理される。この時点で、演算部によって処理される未配置命令は、命令Ｃ、及び命令Ｄの２つであり、メモリアクセス部によって処理される未配置命令は、命令Ｆ、及び命令Ｇの２つである。
【００９４】
命令Ｃに対し、資源制約評価部１５２は、資源制約値１を算出し、決定可否判断部４６２は、残サイクル数２を算出する。
命令Ｅに対し、資源制約評価部１５２は、資源制約値２を算出し、決定可否判断部４６２は、残サイクル数２を算出する。
何れの命令についても資源制約値が残サイクル数を上回らないので、第４決定処理へ進む。
【００９５】
（第４決定乃至第７決定）第４決定乃至第７決定において、決定の再試行は発生しない。図１２に示した決定が各回に行われる。
図１３は、このような配置過程から得られる命令の配置であり、目標の４クロックサイクルへの全ての命令の配置に成功している。
各命令が配置されるクロックサイクルは、第１及び第２の実施の形態における配置（図５参照）と同様であるが、決定の順序が一部異なる。
（第３のまとめ）
以上述べたように、第３の実施の形態における命令スケジューリング装置は、所定目標数のクロックサイクルに命令の配置を試みる。このために、先行制約順位を用いて各命令を配置し、配置が行われるごとに未配置命令が当該目標数のクロックサイクルに配置できなくなるか否か資源制約を考慮して判断し、否と判断される場合、直前の配置を撤回すると共に他の命令の配置を試みる。
【００９６】
本命令スケジューリング装置は、資源制約を考慮して未配置命令の配置可否判断を行い、それに応じて配置の再試行を制御するので、同様の判断をデータ依存関係にのみ基づいて行い配置の再試行を制御する方法に比べてより多くの場合、資源制約の厳しい命令を含む全命令の配置に成功する。
（その他の変形例）
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
（１）本発明は、実施の形態で説明したステップを含む方法であるとしてもよい。また、これらの方法を、コンピュータシステムを用いて実現するためのコンピュータプログラムであるとしてもよいし、前記プログラムを表すデジタル信号であるとしてもよい。
【００９７】
また、本発明は、前記プログラム又は前記デジタル信号を記録したコンピュータ読取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、半導体メモリ等であるとしてもよい。
また、本発明は、電気通信回線、無線又は有線通信回線、若しくはインターネットに代表されるネットワーク等を経由して伝送される前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【００９８】
また、本発明は、マイクロプロセッサ及びメモリを備えたコンピュータシステムであり、前記メモリは前記プログラムを記憶しており、前記マイクロプロセッサは前記メモリに記憶されている前記プログラムに従って動作することにより、前記方法を実現するとしてもよい。
また、前記プログラム又は前記デジタル信号は、前記記録媒体に記録されて移送され、若しくは、前記ネットワーク等を経由して移送され、独立した他のコンピュータシステムにおいて実施されるとしてもよい。
（２）本発明を説明するために例示したプログラム（図１５参照）は、ソースプログラムをコンパイルして得られた並列最適化前のプログラムの総体であってもよく、また、そのようなプログラムの一つの基本ブロックに対応する部分であってもよい。これらの何れの場合も、本発明に含まれる。
（３）第３の実施の形態において、ステップＳ４１１で直前の命令の配置が撤回された場合、ステップＳ４０５へ戻ってリスト中の他の命令の配置を試行し、リスト中の各命令の配置に失敗した場合、ステップＳ４１２で目標クロックサイクルへの命令の配置はできないと判定するとした。
【００９９】
しかしながら、別法として、ステップＳ４０４で過去に生成された配置可能命令のリストを記録すると共に、現在のリスト中の各命令の配置の再試行に失敗した場合、直ちに目標クロックサイクルへ配置不能と判定せず、過去のリストから決定された命令の配置を撤回し、その過去のリスト中の他の命令の配置を試行してもよい。
【０１００】
このような処理は、いわゆるバックトラックアルゴリズムとして従来一般化されており、当該アルゴリズムの一具体化として容易に実施可能である。過去のリストを記録すると共に、あるリスト中の各命令の配置に失敗した場合に、過去のリストをバックトラックする場合も、本発明に含まれる。
【０１０１】
【発明の効果】
本発明の命令スケジューリング方法は、対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出ステップと、最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定ステップとを含む。
【０１０２】
この方法によれば、ハードウェア資源固有の制約条件が考慮された前記優先順位を命令の選択と配置に用いることにより、資源制約の厳しい命令を優先的に早いクロックサイクルに配置できる。これにより、そのような命令を含む全命令を、従来よりも少ないクロックサイクルに配置できる。
また、前記命令スケジューリング方法において、前記優先順位算出ステップは、前記各対象命令に対し、前記データ依存関係にのみ基づいて先行制約順位を算出する先行制約順位算出サブステップと、前記各対象命令が、自命令と同一の先行制約順位を算出され、かつ前記データ依存関係にある後続命令を持つ場合、自命令とその後続命令とを前記ハードウェア資源が並行して処理可能か否かを判断する資源制約評価サブステップとを含み、否と判断された各対象命令に対し、前記算出された先行制約順位を繰り上げて得られる優先順位を算出し、その他の各対象命令に対し、前記算出された先行制約順位と等しい優先順位を算出してもよい。
【０１０３】
この方法によれば、データ依存関係にあって、かつ同一の先行制約順位を算出される２つの命令が、対象プロセッサにおけるハードウェア資源によって並行処理されない場合、その先行命令の優先順位を従来の先行制約順位よりも高く算出するので、従来の技術では発見されなかった資源制約のために生じるクリティカルパスを発見することができる。
【０１０４】
そして、そのようなクリティカルパス上の先頭命令をできるだけ早いクロックサイクルに配置するので、資源制約のために並行処理されない命令を含む全命令を、従来よりも少ないクロックサイクルに配置できる。
また、前記命令スケジューリング方法において、前記優先順位算出ステップは、前記各対象命令に対し、（１）前記データ依存関係にある後続命令を持たない場合１、（２）逆依存関係又は出力依存関係にある１つ以上の後続命令を持つ場合、当該後続命令に算出された最大値、及び（３）真の依存関係にある１つ以上の後続命令を持つ場合、当該後続命令に算出された最大値よりも１大きい値を、それぞれ先行制約順位として算出する先行制約順位算出サブステップと、前記各対象命令に対し、自命令を処理するハードウェア資源によって処理され実行時期未決定なる命令の総数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出する資源制約評価サブステップとを含み、当該資源制約値が当該先行制約順位よりも大きい場合、前記対象命令に当該資源制約値を優先順位として算出し、その他の場合、前記対象命令に当該先行制約順位を優先順位として付与し、前記実行時期決定ステップは、最も大きい優先順位を算出された対象命令の実行時期を決定してもよい。
【０１０５】
この方法によれば、前記各対象命令に、資源制約値と先行制約順位の何れか大きい方を優先順位として算出し、最も高い優先順位を算出された命令を選択して配置することにより、資源制約の厳しい命令を従来よりも早いクロックサイクルに配置することができるので、そのような命令を含む全命令を従来よりも少ないクロックサイクルに配置できる。
【０１０６】
特に、並列処理可能な命令数の小さな資源によって処理される多数の未配置命令があって、それらがデータ依存関係にない場合に、そのような命令に大きな資源制約値が算出されるので、早いクロックサイクルに適切に配置されるという特有の効果が生じる。
本発明の命令スケジューリング方法は、対象プログラム中に記述された複数命令の実行時期をそれぞれ決定する命令スケジューリング方法であって、第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断ステップと、当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定ステップとを含む。
【０１０７】
また、前記命令スケジューリング方法において、前記所定期間は、クロックサイクル数により示され、前記決定可否判断ステップは、前記第２命令を処理するハードウェア資源によって処理され実行時期未決定なる命令の総数を、当該ハードウェア資源が並行して処理可能な最大命令数で除して得られる資源制約値を算出する資源制約評価サブステップを含み、当該資源制約値が前記クロックサイクル数よりも大きければ、前記決定ができなくなると判断してもよい。
【０１０８】
これらの方法によれば、命令の実行時期を所定期間に含まれるように決定できなくなるか否か資源制約を考慮して判断し、否と判断される場合、直前の配置を撤回すると共に他の命令の配置を行うので、同様の判断をデータ依存関係にのみ基づいて行い配置の撤回を制御する方法に比べてより多くの場合、資源制約の厳しい命令を含む全命令の配置に成功する。
【０１０９】
本発明のプログラム変換方法は、入力プログラムを、複数命令によって記述された中間プログラムに変換し、当該中間プログラムに対して前述の何れかの命令スケジューリング方法を適用することにより、当該複数命令の実行時期を決定することを特徴とする。
この方法によれば、前述の命令スケジューリング方法を当該中間プログラムに適用するので、従来よりも高度に並列最適化された目的プログラムが生成可能となる。
【０１１０】
本発明の命令スケジューリング装置は、対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出手段と、最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定手段とを備える。
【０１１１】
本発明の命令スケジューリング装置は、対象プログラム中に記述された複数命令の実行時期をそれぞれ決定する命令スケジューリング装置であって、第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断手段と、当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定手段とを備える。
【０１１２】
これらの構成によれば、前述と同様効果を有する命令スケジューリング装置を実現できる。
本発明のプログラムは、命令スケジューリングをコンピュータを用いて行うための、コンピュータ実行可能なプログラムであって、対象プログラム中に記述された複数命令のうち１つ以上の命令を対象命令とし、各対象命令に、自命令を処理するハードウェア資源固有の制約条件と、当該ハードウェア資源によって処理される他命令との間に存するデータ依存関係とに基づいて優先順位を算出する優先順位算出ステップと、最も高い優先順位を算出された対象命令の実行時期を決定する実行時期決定ステップとを前記コンピュータに実行させる。
【０１１３】
本発明のプログラムは、対象プログラム中に記述された複数命令の実行時期を、コンピュータを用いてそれぞれ決定するための、コンピュータ実行可能なプログラムであって、第１命令の実行時期を決定した場合、第２命令の実行時期を所定期間に含まれるように決定できなくなるか否かを、当該第２命令を処理するハードウェア資源固有の制約条件に基づいて判断する決定可否判断ステップと、当該決定ができなくなると判断された場合、当該第１命令の実行時期の決定を撤回すると共に、当該第１命令と異なる命令の実行時期を決定する再決定ステップとを前記コンピュータに実行させる。
【０１１４】
これらのプログラムによれば、前述と同様の効果を有する命令スケジューリング処理をコンピュータに実行させることができる。
本発明のプログラム記録媒体は、コンピュータ読み取り可能な記録媒体であって、前述のプログラムを記録していることを特徴とする。
このプログラム記録媒体によれば、前述した効果を有するプログラムを移送し所期のコンピュータにおいて実行させることができる。
【図面の簡単な説明】
【図１】コンパイラ装置１００の全体構成を示す機能ブロック図である。
【図２】コンパイラ装置１００が対象とするプロセッサの一構成例である。
【図３】命令スケジューリング処理を示すフローチャートである。
【図４】データ依存関係解析部１４０によって生成されるデータ依存グラフの一例である。
【図５】命令の配置の一例である。
【図６】命令スケジューリング処理を示すフローチャートである。
【図７】各命令の配置過程の一例である。
【図８】各命令の配置過程の一例である。
【図９】コンパイラ装置４００の全体構成を示す機能ブロック図である。
【図１０】命令スケジューリング処理を示すフローチャートである。
【図１１】各命令の配置過程の一例である。
【図１２】各命令の配置過程の一例である。
【図１３】命令の配置の一例である。
【図１４】従来装置が行う命令スケジューリング処理の一例を示すフローチャートである。
【図１５】従来装置に入力される入力プログラムの一例である。
【図１６】入力プログラムに対して従来装置が生成するデータ依存グラフである。
【図１７】入力プログラムの各命令が配置されるクロックサイクルの一例である。
【符号の説明】
１００　　コンパイラ装置
１０１　　ソースファイル
１０２　　目的ファイル
１１０　　コンパイラ上流部
１２０　　アセンブラコード生成部
１３０　　命令スケジューリング部
１４０　　データ依存関係解析部
１５０　　優先順位算出部
１５１　　先行制約順位算出部
１５２　　資源制約評価部
１６０　　実行時期決定部
１６１　　命令選択部
１７０　　出力部
３０１　　命令欄
３０２　　使用資源欄
３０３　　先行制約順位欄
３１０〜３７０　第１決定欄〜第７決定欄
３８０　　配置結果欄
４００　　コンパイラ装置
４３０　　命令スケジューリング部
４６０　　実行時期決定部
４６２　　決定可否判断部
４６４　　再決定制御部
５０１　　命令欄
５０２　　使用資源欄
５０３　　先行制約順位欄
５１０〜５８０　第１決定欄〜第７決定欄
５９０　　配置結果欄
８００　　プロセッサ
８１０　　命令供給部
８１１　　命令フェッチ部
８１２　　第１命令レジスタ
８１３　　第２命令レジスタ
８２０　　解読部
８２１　　第１命令デコーダ
８２２　　第２命令デコーダ
８３０　　実行部
８３１　　第１演算部
８３２　　第２演算部
８３３　　レジスタファイル
８３４　　条件フラグレジスタ
８３５　　メモリアクセス部
９０１　　クロックサイクル欄
９０２　　命令１欄
９０３　　命令２欄
【図１】
2004078824.tif 000003
【図２】
2004078824.tif 000004
【図３】
2004078824.tif 000005
【図４】
2004078824.tif 000006
【図５】
2004078824.tif 000007
【図６】
2004078824.tif 000008
【図７】
2004078824.tif 000009
【図８】
2004078824.tif 000010
【図９】
2004078824.tif 000011
【図１０】
2004078824.tif 000012
【図１１】
2004078824.tif 000013
【図１２】
2004078824.tif 000014
【図１３】
2004078824.tif 000015
【図１４】
2004078824.tif 000016
【図１５】
2004078824.tif 000017
【図１６】
2004078824.tif 000018
【図１７】
2004078824.tif 000019