説明

命令スケジューリング装置、命令スケジューリング方法および命令スケジューリングプログラム

【課題】 処理の遅延を抑えてレジスタの利用期間を短縮する命令列を生成することができる命令スケジューリング装置を提供すること。
【解決手段】 依存関係のある一連の命令を1つの命令群として命令ブロック内の命令を複数の命令群に分割する命令群分割部2と、各命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、各命令群に対して、命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定部3と、命令群別優先度の高い命令群から順に、該命令群に含まれる命令を命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち実機によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を命令単位優先度に基づいて配置する命令スケジューリング部4とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置に実行させる命令をスケジューリングして命令列を生成する命令スケジューリング装置に関し、特に、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令をスケジューリングする命令スケジューリング装置、命令スケジューリング方法および命令スケジューリングプログラムに関する。
【背景技術】
【0002】
一般的に、命令スケジューリング装置は、実行時間をより短縮する命令列を生成するため、命令を効率よく配置するスケジューリングを行って命令列を生成する。このような命令スケジューリング装置として、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令をスケジューリングするものが知られている。
【0003】
処理サイクル毎に複数の命令を並列に実行可能な情報処理装置としては、例えば、命令パイプラインを採用したものがよく知られている。命令パイプラインを採用した情報処理装置は、命令が分割された複数のステージに対して、各ステージを処理する処理部を有する。各処理部は、前のステージの出力を入力として担当するステージを処理し、その結果を次のステージに出力する。各処理部が連続する命令の各ステージを並行して実行することにより、複数の命令を並列に実行する。
【0004】
また、命令パイプラインを採用した情報処理装置において、さらなる性能向上のため、例えば、VLIW(Very Long Instruction Word)を採用したものも知られている。VLIWを採用した情報処理装置は、並列実行可能な複数の命令が1つに記述された命令をパイプラインで実行する。
【0005】
このような処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に対応した命令スケジューリング装置としては、命令ブロック毎に、命令の依存関係がノードおよびエッジで表されたDAG(Directed Acyclic Graph:無閉路有向グラフ)を構築し、ノード間の依存関係に基づいてノードの優先度を計算するものがある。そして、このような命令スケジューリング装置は、優先度の高いノードから順に、依存関係がない命令を並列実行可能であるとみなして並列に配置しながら全命令をスケジューリングする(例えば、非特許文献1および特許文献1参照)。
【0006】
また、他のこのような命令スケジューリング装置として、1つ以上の命令からなる命令グループを生成し、並列に実行可能な命令グループ同士を対応付け、命令グループごとに、対応付けられた他の命令グループとの入れ替えまたは発行繰り上げを判断して、全体としての総実行時間を短縮するものがある(例えば、特許文献2参照)。
【0007】
また、さらに他のこのような命令スケジューリング装置として、依存関係のある一連の命令を命令群とし、命令群毎に他の命令群とのコンフリクトを無視して命令スケジューリングを行って配置データを生成した後、複数の命令群の配置データをコンフリクトを解消するよう調整して合成するものがある(例えば、特許文献3参照)。
【0008】
また、さらに他のこのような命令スケジューリング装置として、1つのレジスタの第1の部分にアクセスする命令と、同一のレジスタの第2の部分をアクセスする命令を同一のサイクルにスケジューリングするものがある(例えば、特許文献4参照)。また、この特許文献4に記載の命令スケジューリング装置は、同一のサイクルにおいて、複数の命令が1つのレジスタの同一の部分にアクセスする場合には、命令の種類毎に設定された優先度に基づいて優先度の高い命令を選択する。
【先行技術文献】
【非特許文献】
【0009】
【非特許文献1】中田育男著「コンパイラの構成と最適化」朝倉書店、1999年9月20日、pp.358−362
【特許文献】
【0010】
【特許文献1】特開平3−135630号公報
【特許文献2】特開平6−28324号公報
【特許文献3】特開2002−268895号公報
【特許文献4】特開2000−222209号公報
【発明の概要】
【発明が解決しようとする課題】
【0011】
しかしながら、非特許文献1および特許文献1に記載されたものは、優先度の高い命令から順に、依存関係がないものを並列に配置し、情報処理装置のアーキテクチャに左右される並列実行可能な命令の組合せおよび数を考慮せずに命令を並べ替える。そのため、特許文献1および非特許文献1に記載されたものは、実機で並列に実行できない命令を並列に配置した命令列を生成する場合がある。したがって、特許文献1および非特許文献1に記載されたものは、生成した命令列を実機に実行させると、1つの処理を実行するための一連の命令の間で、依存関係のない他の命令を実行することになり、1つの処理の完了までの時間を遅延させる可能性があるという課題があった。
【0012】
また、特許文献2に記載されたものは、1つの処理を実行するための一連の命令の依存関係を考慮せずに命令グループを生成している。このため、特許文献2に記載されたものは、1つの処理を実行するための一連の命令の間に、並列実行可能な他の命令を挿入してしまい、この1つの処理の完了を遅延させる可能性があるという課題があった。
【0013】
また、特許文献3に記載されたものは、複数の命令群の配置データのコンフリクトを調整する際に、いったん配置した命令列の処理サイクル数を延長する場合があり、1つの処理の完了を遅延させる可能性があるという課題があった。
【0014】
また、特許文献4に記載されたものは、命令の種類毎に設定された優先度に基づいて命令スケジューリングを行うとき、命令間の依存関係に関わらず優先度の高いものを選択する。このため、特許文献4に記載されたものは、1つの処理を実行するための一連の命令の間に、これらの一連の命令とは依存関係のない他の命令を配置する場合があり、1つの処理の完了を遅延させる可能性があるという課題があった。
【0015】
また、これらの特許文献1〜4に記載されたものは、1つの処理の完了を遅延させる命令列では、この処理に必要な中間結果を保持するレジスタを長時間必要とするという課題があった。
【0016】
ここで、これらの関連技術により生成される命令列の一例を用いて、上述の課題の具体例について図21〜図22を参照して説明する。
【0017】
図21(a)はソースコードを表している。このソースコードは、x[j+0]およびx[j+1]の互いに独立した処理によって構成されている。図21(b)は、(a)に示したソースコードから生成される中間言語の命令列である。
【0018】
図22(a)は、上述の関連技術によって、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に対して、x[j+0]およびx[j+1]の処理に対応する中間言語がスケジューリングされた命令列の一例である。なお、この情報処理装置では、同一の処理サイクルで並列に実行できる命令には次のような制約があるものとする。
・ロード命令(ld)同士は並列に実行できない。
・ストア命令(st)同士は並列に実行できない。
・ロード命令およびストア命令は並列に実行できない。
・上記以外の組合せの命令は2命令並列に実行できる。
【0019】
また、この情報処理装置は、各命令の実行に以下のサイクル数を必要するものとする。
・ロード命令の完了までに3サイクル
・その他の命令の完了までに1サイクル
図22(a)の命令列では、x[j+0]の処理に関する一連の命令の間にx[j+1]に関する命令の一部が挿入されている。したがって、図22(a)の命令列は、x[j+0]の処理開始から完了までに14サイクルを要している。
【0020】
これに対して、図22(b)に、x[j+0]に対応する命令のみをスケジューリングした場合の命令列を示す。図22(b)の命令列では、x[j+0]の処理開始から完了までに要する時間は12サイクルである。このように、上述の関連技術により生成された命令列の一例では、x[j+0]の処理の完了を2サイクル遅延させている。
【0021】
また、この遅延に伴って、上述の関連技術により生成された命令列の一例は、x[j+0]の処理に必要なレジスタr15を解放可能とするタイミングを遅延させており、レジスタr15をより長期間必要とする命令列となっている。
【0022】
本発明は、上述の課題を解決するためになされたもので、処理の遅延を抑えてレジスタの利用期間を短縮する命令列を生成することができる命令スケジューリング装置を提供することを目的とする。
【課題を解決するための手段】
【0023】
本発明の命令スケジューリング装置は、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令ブロックに含まれる複数の命令の依存関係を分析し、依存関係のある一連の命令を1つの命令群として前記命令ブロックを複数の命令群に分割する命令群分割手段と、前記命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、前記命令群に対して、前記命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定手段と、前記命令群別優先度の高い命令群から順に、該命令群に含まれる命令を前記命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち前記情報処理装置によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する命令スケジューリング手段と、を備える。
【0024】
また、本発明の命令スケジューリング方法は、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令ブロックに含まれる複数の命令をスケジューリングする命令スケジューリング装置が、前記複数の命令の依存関係を分析し、依存関係のある一連の命令を1つの命令群として前記命令ブロックを複数の命令群に分割する命令群分割ステップと、前記命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、前記命令群に対して、前記命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定ステップと、前記命令群別優先度の高い命令群から順に、該命令群に含まれる命令を前記命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち前記情報処理装置によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する命令スケジューリングステップと、を実行する。
【0025】
また、本発明の命令スケジューリングプログラムは、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令ブロックに含まれる複数の命令をスケジューリングする命令スケジューリング装置に、前記複数の命令の依存関係を分析し、依存関係のある一連の命令を1つの命令群として前記命令ブロックを複数の命令群に分割する命令群分割ステップと、前記命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、前記命令群に対して、前記命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定ステップと、
前記命令群別優先度の高い命令群から順に、該命令群に含まれる命令を前記命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち前記情報処理装置によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する命令スケジューリングステップと、を実行させる。
【発明の効果】
【0026】
本発明は、処理の遅延を抑えてレジスタの利用期間を短縮する命令列を生成することができる命令スケジューリング装置を提供することができる。
【図面の簡単な説明】
【0027】
【図1】本発明の第1の実施の形態としての命令スケジューリング装置の構成を示すブロック図である。
【図2】本発明の第1の実施の形態としての命令スケジューリング装置の動作を示すフローチャートである。
【図3】本発明の第2の実施の形態としての命令スケジューリング装置の構成を示すブロック図である。
【図4】本発明の第2の実施の形態において構築されるDAGの一例を説明する模式図である。
【図5】本発明の第2の実施の形態において分割される部分DAGの一例を説明する模式図である。
【図6】本発明の第2の実施の形態において分割される部分DAGの他の一例を説明する模式図である。
【図7】本発明の第2の実施の形態において命令単位優先度が設定された部分DAGの一例を説明する模式図である。
【図8】本発明の第2の実施の形態において命令単位優先度が設定された部分DAGの他の一例を説明する模式図である。
【図9】本発明の第2の実施の形態としての命令スケジューリング装置の動作を示すフローチャートである。
【図10】本発明の第2の実施の形態としての命令スケジューリング装置の命令群別優先度の設定動作を示すフローチャートである。
【図11】本発明の第2の実施の形態としての命令スケジューリング装置によって生成される命令列の一例を説明する図である。
【図12】本発明の第2の実施の形態としての命令スケジューリング装置によって生成される命令列と関連技術によって生成される命令列とを比較する図である。
【図13】本発明の第3の実施の形態としての命令スケジューリング装置の構成を示すブロック図である。
【図14】本発明の第3の実施の形態において2段階優先度が設定された部分DAGの一例を説明する模式図である。
【図15】本発明の第3の実施の形態において2段階優先度が設定された部分DAGの他の一例を説明する模式図である。
【図16】本発明の第3の実施の形態において統合された統合DAGの一例を説明する模式図である。
【図17】本発明の第3の実施の形態としての命令スケジューリング装置の動作を示すフローチャートである。
【図18】本発明の第3の実施の形態としての命令スケジューリング装置の命令スケジューリング動作を示すフローチャートである。
【図19】本発明の第4の実施の形態としての命令スケジューリング装置の構成を示すブロック図である。
【図20】本発明の第4の実施の形態におけるDAGに対応付けられた情報を説明する図である。
【図21】本発明の各実施の形態におけるソースコードおよび中間言語を説明する図である。
【図22】関連技術の命令スケジューリング装置によって生成される命令列の一例を説明する図である。
【発明を実施するための形態】
【0028】
以下、本発明の第1の実施の形態について、図面を参照して詳細に説明する。
【0029】
本発明の第1の実施の形態としての命令スケジューリング装置1の構成を図1に示す。
【0030】
図1において、命令スケジューリング装置1は、機能ブロックとして、命令群分割部2と、優先度設定部3と、命令スケジューリング部4と、を備える。
【0031】
ここで、命令スケジューリング装置1は、CPU(Central Processing Unit)と、RAM(Random Access Memory)と、ROM(Read Only Memory)と、記憶装置とを備えた汎用的なコンピュータ装置によって構成されている。また、命令群分割部2と、優先度設定部3と、命令スケジューリング部4とは、プログラムモジュールとして記憶装置に記憶され、CPUによってRAMに読み込まれて実行される回路として構成される。
【0032】
命令群分割部2は、処理サイクル毎に複数の命令を並列に実行可能な情報処理装置99(図示せず)に実行させる命令列を命令ブロック単位で読み込み、命令ブロックを構成する命令の依存関係を分析する。そして、命令群分割部2は、依存関係のある一連の命令を1つの命令群として、命令ブロックを複数の命令群に分割する。
【0033】
優先度設定部3は、各命令群内の各命令に対して、該命令群における処理順序の優先度を表す命令単位優先度を設定する。さらに、優先度設定部3は、各命令群に対して、命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する。
【0034】
ここで、優先度設定部3は、例えば、その命令の結果に依存する全ての命令の処理を完了するまでの時間(処理サイクル数)に基づいて命令単位優先度を設定してもよい。また、優先度設定部3は、例えば、命令群内の命令に設定された命令単位優先度のうち最も高いものに基づいて命令群別優先度を設定してもよい。
【0035】
命令スケジューリング部4は、命令群別優先度の高い命令群から順に、該命令群に含まれる命令を命令単位優先度に基づいてスケジューリングする。また、命令スケジューリング部4は、スケジューリングした命令群内の命令が配置された処理サイクルのうち、情報処理装置99によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する。
【0036】
以上のように構成された命令スケジューリング装置1の動作について、図2を用いて説明する。
【0037】
まず、命令群分割部2によって、命令ブロック内の命令が、依存関係のある一連の命令をそれぞれ表す複数の命令群に分割される(ステップS1)。
【0038】
次に、優先度設定部3によって、命令群毎に、命令群内の各命令に命令単位優先度が設定されるとともに、各命令群に命令群別優先度が設定される(ステップS2)。
【0039】
次に、命令スケジューリング部4によって、命令群別優先度が最も高い命令群に含まれる命令が、命令単位優先度に基づいてスケジューリングされる(ステップS3)。ここで、命令スケジューリング部4は、この命令群内の命令で、情報処理装置99で並列に実行可能な命令があれば並列に配置しながらこれらの命令をスケジューリングする。
【0040】
次に、命令スケジューリング部4によって、ステップS3で生成された命令列の処理サイクルのうち、情報処理装置99で他の命令群の命令を実行可能な処理サイクルがあるか否かが判断される(ステップS4)。
【0041】
ここで、他の命令群の命令を実行可能な処理サイクルがあると判断された場合、命令スケジューリング部4によって、次に命令群別優先度が高い命令群に含まれる命令が命令単位優先度に基づいて順次選択され、これらの処理サイクルに配置される(ステップS5)。
【0042】
次に、命令スケジューリング部4によって、次に命令群別優先度が高い命令群に含まれる残りの命令が、次の処理サイクルから順にスケジューリングされる(ステップS6)。
【0043】
一方、ステップS4において、ステップS3で生成された命令列の処理サイクルに他の命令群の命令を実行可能なものがないと判断された場合も、ステップS6が実行される。
【0044】
命令スケジューリング部4によって、全ての命令群がスケジューリングされるまで(ステップS7でYes)、ステップS4〜S7が繰り返される。
【0045】
全ての命令群のスケジューリングが完了すると、命令スケジューリング装置1は動作を終了する。
【0046】
次に、本発明の第1の実施の形態の効果について述べる。
【0047】
本発明の第1の実施の形態としての命令スケジューリング装置は、処理の遅延を抑えてレジスタの利用期間を短縮する命令列を生成することができる。
【0048】
その理由は、まず、命令群別優先度の高い命令群のスケジューリングを完了させ、情報処理装置で他の命令を実行可能な処理サイクルに、命令群別優先度が次に高い命令群に属する命令も並行に実行するようスケジューリングを行い、実機で並列実行可能でない命令を並列に配置しないからである。
【0049】
これにより、本発明の第1の実施の形態としての命令スケジューリング装置は、必要以上に並行処理を行わない命令スケジューリングを実現し、並行配置される他の命令によって、開始した1つの処理の完了が遅延することを防止することができる。
【0050】
次に、本発明の第2の実施の形態としての命令スケジューリング装置10の構成について図3を用いて説明する。
【0051】
図3において、命令スケジューリング装置10は、機能ブロックとして、命令ブロック入力部11と、DAG(無閉路有向グラフ)構築部12と、DAG分割部13と、優先度設定部14と、命令スケジューリング部16と、命令ブロック出力部17と、を備えている。
【0052】
ここで、命令スケジューリング装置10は、本発明の第1の実施の形態と同様な汎用的なコンピュータ装置によって構成される。また、命令ブロック入力部11と、DAG構築部12と、DAG分割部13と、優先度設定部14と、命令スケジューリング部16と、命令ブロック出力部17とは、プログラムモジュールとして記憶装置に記憶され、CPUによってRAMに読み込まれて実行される回路として構成される。
【0053】
命令ブロック入力部11は、情報処理装置99に実行させるソースコードの命令列を命令ブロック単位で読み込む。なお、ソースコードの命令列は、命令スケジューリング装置10の外部の装置によってブロックに分割されている。
【0054】
また、命令ブロック入力部11は、読み込んだソースコードの命令列を、アセンブラコードに即した命令列である中間言語100に変換する。例えば、命令ブロック入力部11は、図21の(a)に示したソースコードから(b)に示した中間言語100を生成する。
【0055】
DAG構築部12は、中間言語100を解析し、命令間の依存関係に基づいてDAG200を構築する。DAG200の一例を図4に示す。
【0056】
ここで、一般的なDAGは、ノードと、ノード間を結ぶエッジとによって構成され、非循環でエッジが方向性を持つグラフである。DAG内のノードのうち、他のノードから依存されないノードは根ノードと呼ばれ、他のノードに依存しないノードは葉ノードと呼ばれる。一般的なDAGは、ノード間の依存関係を表現するために用いられる。
【0057】
DAG構築部12は、中間言語100におけるデータ(図4のi、j、&y、&zなど)または命令の計算結果(図4のt2、t3など)をノードで表し、データから計算結果への依存関係をエッジで表すようDAG200を構築する。
【0058】
ここで、このような依存関係を表すエッジを、以下、依存のエッジと呼ぶ。図4において、依存のエッジは、データを表すノードから計算結果を表すノードへの方向を持った実線矢印で表される。
【0059】
また、DAG構築部12は、DAG200を構成するエッジに、データが取得されて命令の表す計算が開始されてから計算結果が得られるまでの時間(サイクル数)を付す。これにより、DAG200において、エッジの表す依存関係が解消されるまでに要する時間が表現される。
【0060】
また、DAG構築部12は、DAG200を構成するノードのうち、他のノードより先に処理される必要のあるノードが存在する場合、先に処理される必要のあるノードから後に処理されるノードへ、非実線エッジを張り、制約のある依存関係を表す。このようなエッジを、以下、制約のエッジと呼ぶ。なお、制約のエッジは、図4の例では図示されていない。
【0061】
例えば、元のソースコードに、同一のメモリに対する読む命令(1)と書く命令(2)とがこの順に含まれる場合、命令を並べ替えた後も命令(1)および命令(2)は、ソースコードの順に従って処理される制約が生ずる。このような場合、DAG構築部12は、命令(1)の計算結果を表すノードから命令(2)の計算結果を表すノードへ制約のエッジを張る。
【0062】
DAG分割部13は、DAG200において、根ノードから依存のエッジだけをエッジと逆方向に辿ることにより、依存関係のある一連の命令を表すノードとエッジを抽出する。そして、DAG分割部13は、抽出したノードとエッジを1つの部分DAGとする。
【0063】
また、DAG分割部13は、DAG200を部分DAG301および部分DAG302(以下、総称して部分DAG300ともいう)に分割する。ここで、部分DAG301の一例を図5に示し、部分DAG302の一例を図6に示す。
【0064】
図5の部分DAG301は、図4に示したDAG200の根ノード「t7[0]」から依存のエッジが辿られて分割されたものである。
【0065】
また、図6の部分DAG302は、DAG200の根ノード「t7[4]」から依存のエッジが辿られて分割されたものである。
【0066】
すなわち、DAG分割部13は、DAG200に根ノードが2つ含まれる場合、DAG200を2つの部分DAG300に分割する。
【0067】
なお、本実施の形態において、DAG分割部13がDAG200を2つの部分DAG300に分割する例について説明しているが、本発明において、DAG分割手段が分割する部分DAGの数を限定するものではない。
【0068】
DAG分割部13は、同一のノードやエッジが異なる部分DAG300に重複して含まれるようにDAG200を分割する場合もある。
【0069】
例えば、図4〜図6において、DAG200に含まれるノード2001およびノード2001が依存するノード、ノード2002およびノード2002が依存するノード、ならびにノード2003およびノード2003が依存するノードは、根ノード「t7[0]」からも、根ノード「t7[4]」からも依存されているため、部分DAG301および部分DAG302の両方に含まれている。
【0070】
優先度設定部14は、各部分DAG300の各ノードについて、命令単位優先度を計算し対応付ける。
【0071】
優先度設定部14は、例えば、ある命令の処理を開始してから、その命令の処理結果に依存する全ての命令の処理を完了するまでの時間(サイクル数)を命令単位優先度として設定する。すなわち、優先度設定部14は、部分DAG300内の各ノードについて、該当するノードが依存するノードをたどって根ノードにたどりつくまでのエッジに付されたサイクル数を合計したものを命令単位優先度として対応付ける。
【0072】
優先度設定部14によって、部分DAG301の各ノードに命令単位優先度が対応付けられた部分DAG301aの一例を図7に示す。また、部分DAG302の各ノードに命令単位優先度が対応付けられた部分DAG302aの一例を図8に示す。図7、図8において、各ノードの右側に記載された数字が命令単位優先度を表す。数字が大きいほど優先度が高いことを表す。
【0073】
このように、優先度設定部14は、部分DAG300内で完了までの時間が長い命令に高い優先度を設定することにより、複数の命令を同時に実行させる命令列を生成する可能性を高め、1つの処理の完了までの時間を減らす。
【0074】
また、優先度設定部14は、各部分DAG300について、内部のノードに対応付けられた命令単位優先度のうち最も高いものがより高い部分DAGに、より高い命令群別優先度を設定する。
【0075】
すなわち、優先度設定部14は、部分DAG300が表す命令群による一連の処理の完了までにより多くの時間を要する命令群ほど、より高い命令群別優先度を設定する。
【0076】
なお、優先度設定部14は、内部のノードに対応付けられた命令単位優先度のうち最も高いものが同一の命令群については、命令ブロック入力部11で入力された命令列において先に出現する命令に関連する命令群により高い命令群別優先度を設定するようにしてもよい。
【0077】
命令スケジューリング部16は、各部分DAG300に対応付けられた命令群別優先度、および、各部分DAG300内のノードに対応付けられた命令単位優先度に基づいて、命令を並べ替えて命令列を生成する。
【0078】
詳細には、命令スケジューリング部16は、i(iは1以上の整数)番目に高い命令群別優先度が対応付けられた部分DAG300内の命令をまず完了させて命令列を生成した後、生成した命令列のうち、情報処理装置99によって他の命令を並列実行可能な処理サイクルに、i+1番目に高い命令群別優先度が対応付けられた命令群内の命令を配置する。
【0079】
このようにして、命令スケジューリング部16は、全ての命令群の命令について順次スケジューリングを行い命令列700を生成する。
【0080】
命令ブロック出力部17は、命令列700を、外部へ出力する。なお、出力された命令列700は、命令スケジューリング装置10の外部の装置によってアセンブラコードおよび情報処理装置99によって実行可能なマシンコードに変換される。
【0081】
以上のように構成された命令スケジューリング装置10の動作について、図9〜図11を用いて説明する。
【0082】
まず、命令ブロック入力部11によって、ソースコードの命令列が命令ブロック単位で読み込まれ、中間言語100に変換される(ステップS11)。
【0083】
次に、DAG構築部12によって、中間言語100の命令間の依存関係が分析され、DAG200が構築される(ステップS12)。
【0084】
次に、DAG分割部13によって、DAG200が、依存関係のある一連の命令群をそれぞれ表す複数の部分DAG300に分割される(ステップS13)。
【0085】
次に、優先度設定部14によって、各部分DAG300の各ノードに命令単位優先度が対応付けられる(ステップS14)。
【0086】
次に、優先度設定部14によって、各部分DAG300に対して命令群別優先度が設定される(ステップS15)。ステップS15の処理の詳細については後述する。
【0087】
次に、命令スケジューリング部16によって、各部分DAG300に基づいて、命令列700が生成される(ステップS16)。ステップS16の処理の詳細については後述する。
【0088】
次に、命令ブロック出力部17によって、命令列700が出力される(ステップS17)。
【0089】
ここで、ステップS15において、優先度設定部14によって各部分DAG300に命令群別優先度が設定される動作について、図10を用いて説明する。
【0090】
ここでは、まず、優先度設定部14によって、命令群別優先度が未設定の命令群があるか否かが判断される(ステップS21)。
【0091】
ここで、未設定の命令群があると判断された場合、優先度設定部14によって、未設定の命令群のうち、命令群内のノードに対応付けられた最高の命令単位優先度が一番低い命令群が選択される(ステップS22)。
【0092】
次に、優先度設定部14によって、選択された命令群に対して、前回選択した命令群に対して設定した優先度より大きい優先度が、今回選択した命令群に対して設定される(ステップS23)。例えば、優先度設定部14によってn回目のステップS23で選択された命令群には、命令群別優先度nが設定されてもよい。
【0093】
以上で、優先度設定部14による命令群別優先度の設定動作が終了する。
【0094】
ここで、命令群別優先度の設定動作の一例として、図7および図8に示した部分DAG301aおよび部分DAG302aに命令群別優先度が設定される動作を説明する。
【0095】
まず、優先度設定部14によって、1回目のステップS21〜S23が実行される。
【0096】
すなわち、優先度設定部14によって、命令群別優先度が未設定の部分DAG300が残っているかどうかが判断される。ここでは、部分DAG301aおよび部分DAG302aが残っていると判断される(ステップS21でYes)。
【0097】
次に、優先度設定部14によって、未設定の部分DAG300のうち、部分DAG内で最高の命令単位優先度が最も低いものが選択される。このとき、部分DAG301aおよび部分DAG302a内で最高の命令単位優先度はそれぞれ11で等しい。
【0098】
この場合は、優先度設定部14によって、命令ブロック入力部11で入力された命令列に後に出現する命令が含まれる部分DAG300が選択される。ここでは、部分DAG302aにのみ属する命令が後に出現するため、部分DAG302aが選択される(ステップS22)。
【0099】
なお、優先度設定部14が、最高の命令単位優先度が等しい部分DAG300を選択する順序は、他の順序であってもよい。
【0100】
次に、優先度設定部14によって、1回目に選択された部分DAG302aに、命令群別優先度1が設定される(ステップS23)。
【0101】
次に、優先度設定部14によって、2回目のステップS21〜S23が実行される。
【0102】
すなわち、優先度設定部14によって、命令群別優先度が未設定の部分DAG300が残っているかどうかが判断される。ここでは、部分DAG301aが残っていると判断される(ステップS21でYes)。
【0103】
次に、優先度設定部14によって、未設定の部分DAG300のうち、部分DAG内で最高の命令単位優先度が最も低いものが選択される。ここでは、未設定の部分DAGは部分DAG301aのみなので、部分DAG301aが選択される(ステップS22)。
【0104】
次に、優先度設定部14によって、2回目に選択された部分DAG302aに、命令群別優先度2が設定される(ステップS23)。
【0105】
次に、優先度設定部14によって、3回目のステップS21が実行される。
【0106】
すなわち、優先度設定部14によって、命令群別優先度が未設定の部分DAG300が残っているかどうかが判断される。ここでは、未設定の部分DAG300が残っていないと判断され(ステップS21でNo)、命令群別優先度の設定動作が終了する。
【0107】
次に、図9のステップS16において、命令スケジューリング部16による命令列700の生成動作について、図2および図11を用いて詳細に説明する。図11において、各処理サイクルに命令がスケジューリングされている。図11(a)、(b)において、命令の左側の番号が処理リサイクルの順番を表す。
【0108】
命令スケジューリング部16は、ステップS16において、本発明の第1の実施の形態に係る命令スケジューリング部4と同様に図2に示したステップS3〜S7の動作を実行する。
【0109】
ここでは、命令スケジューリング部16が、図7および図8に示した部分DAG300に基づいて命令列を生成する動作についてステップS3〜S7に沿って説明する。
【0110】
なお、ここでは、情報処理装置99が同一の処理サイクルで並列に実行できる命令には次のような制約があるものとする。
・ロード命令(ld)同士は並列に実行できない。
・ストア命令(st)同士は並列に実行できない。
・ロード命令およびストア命令は並列に実行できない。
・上記以外の組合せの命令は2命令並列に実行できる。
【0111】
また、情報処理装置99は、各命令の実行に以下のサイクル数を必要するものとする。
・ロード命令の完了までに3サイクル
・その他の命令の完了までに1サイクル
まず、命令スケジューリング部16によって、より高い命令群別優先度2が対応付けられた部分DAG301a内の命令についてスケジューリングが行われ、図11(a)に示す命令列が生成される(ステップS3)。
【0112】
次に、命令スケジューリング部16によって、生成された命令列のうち、図11(a)の処理サイクル8、9および12に、情報処理装置99で他の命令を実行可能な余裕があると判断される(ステップS4でYes)。
【0113】
そこで、命令スケジューリング部16によって、次に高い命令群別優先度1が対応付けられた部分DAG302a内の命令のうち、命令単位優先度の高い命令から順に3つの命令が、処理サイクル8、9および12に配置される(ステップS5)。
【0114】
次に、命令スケジューリング部16によって、次に高い命令群別優先度1が対応付けられた部分DAG302a内の残りのノードに対応する命令が、命令単位優先度の高いものから順に処理サイクル13および14に配置され(ステップS6)、図11(b)に示す命令列700が生成される。
【0115】
次に、命令スケジューリング部16によって、命令群を表す部分DAG300の全てについて処理が完了したと判断され(ステップS7でYes)、命令列700の生成動作が終了する。
【0116】
以上のように命令スケジューリング装置10によって生成された命令列700と、関連技術の命令スケジューリング装置によって生成された命令列との比較を図12に示す。
【0117】
ここで、関連技術の命令スケジューリング装置は、命令単位優先度のみに基づいて命令列を生成しているものとする。
【0118】
関連技術の命令スケジューリング装置は、図12(a)に示すように、x[j+0]の処理に関連する一連の命令に14サイクル要する命令列を生成している。これに対して、本発明の第2の実施の形態としての命令スケジューリング装置10は、図12(b)に示すように、x[j+0]の処理に関連する一連の命令を12サイクルで完了させる命令列を生成することができ、x[j+0]の処理の遅延を抑えている。
【0119】
また、関連技術の命令スケジューリング装置は、図12(a)に示すように、x[j+0]の処理に必要とするレジスタr15をサイクル14で解放可能にする。これに対して、本発明の第2の実施の形態としての命令スケジューリング装置10は、図12(b)に示すように、レジスタr15をサイクル12で解放可能にすることができ、レジスタの利用期間を短縮している。
【0120】
また、関連技術の命令スケジューリング装置は、図12(a)に示すように、x[j+0]およびx[j+1]の処理として、全体で15サイクルの命令列を生成している。これに対して、本発明の第2の実施の形態としての命令スケジューリング装置10は、x[j+0]およびx[j+1]の処理として、全体で14サイクルの命令列を生成することができ、全体としての処理の完了の遅延も抑えることができる。
【0121】
次に、本発明の第2の実施の形態の効果について述べる。
【0122】
本発明の第2の実施の形態としての命令スケジューリング装置は、処理の遅延を抑えてレジスタの利用期間を短縮する命令列を、DAGを利用して効率的に生成することができる。
【0123】
その理由は、依存関係のある一連の命令を部分DAGで表し、部分DAGの各ノードに命令単位優先度を対応付け、部分DAGに命令群別優先度を対応付け、部分DAGに基づいて命令スケジューリングを行うからである。
【0124】
また、本発明の第2の実施の形態としての命令スケジューリング装置は、計算中に同時に必要になるレジスタの数を抑えた命令列を生成することができる。
【0125】
その理由は、開始した処理の遅延を抑えた命令列を生成することにより、処理中に利用が開始されるレジスタを、処理の完了と共に遅延なく解放できるからである。
【0126】
例えば、関連技術の命令スケジューリング装置は、3つの独立した処理を行うソースコードに対して、3つの処理を並行に実行する命令列を生成する場合があり、3つの処理に関連するレジスタが同時に必要になる場合があった。
【0127】
本発明の第2の実施の形態の命令スケジューリング装置は、3つの独立した処理を行うソースコードに対しても、1つの処理を表す命令群別に命令群別優先度を設定して、命令群別優先度の高い順に並べ替える。その結果、本発明の第2の実施の形態の命令スケジューリング装置は、1つ目の処理を開始し、その処理の終了の間際に2つ目の処理を開始し、その処理の終了間際に3つ目の処理を開始するような命令列を生成する。このような命令列では、並行して実行される命令が高々2つに抑えられる。
【0128】
したがって、本発明の第2の実施の形態の命令スケジューリング装置は、同時に必要なレジスタを高々2つの処理に関連するものに抑えた命令列を生成することができる。
【0129】
次に、本発明の第3の実施の形態について、図面を参照して詳細に説明する。
【0130】
本発明の第3の実施の形態としての命令スケジューリング装置20の構成を図13に示す。
【0131】
図13において、命令スケジューリング装置20は、本発明の第2の実施の形態の命令スケジューリング装置10に対して、優先度設定部14に替えて優先度設定部24を備え、命令スケジューリング部16に替えて命令スケジューリング部26を備え、さらにDAG統合部25を備える点が異なる。
【0132】
ここで、命令スケジューリング装置20は、本発明の第2の実施の形態と同様な汎用的なコンピュータ装置によって構成される。また、優先度設定部24と、DAG統合部25と、命令スケジューリング部26とは、プログラムモジュールとして記憶装置に記憶され、CPUによってRAMに読み込まれて実行される回路として構成される。
【0133】
優先度設定部24は、本発明の第2の実施の形態における優先度設定部14と同様に命令単位優先度および命令群別優先度を設定する。
【0134】
また、優先度設定部24は、さらに、各部分DAGを構成する各ノードに、該ノードが含まれる部分DAGに設定された命令群別優先度および各ノードに設定された命令単位優先度からなる2段階優先度を対応付ける。
【0135】
優先度設定部24によって、部分DAG301の各ノードに2段階優先度が対応付けられた部分DAG301bを図14に示す。また、部分DAG302の各ノードに2段階優先度が対応付けられた部分DAG302bを図15に示す。
【0136】
図14および図15において、2段階優先度を「命令群別優先度:命令単位優先度」と表記している。
【0137】
DAG統合部25は、分割した部分DAG300を、元のDAG200と同様の形に統合した統合DAG600を生成する。
【0138】
また、DAG統合部25は、統合DAG600内の各ノードに、優先度設定部24によって設定された2段階優先度を対応付ける。
【0139】
このとき、DAG統合部25は、統合DAG600内のノードのうち、複数の部分DAG300に含まれていたノードに対しては、以下のように2段階優先度を対応付ける。
・命令群別優先度が異なる場合は、命令群別優先度が高い方の2段階優先度を選択して対応付ける。
・命令群別優先度が等しい場合は、命令単位優先度が高い方の2段階優先度を選択して対応付ける。
【0140】
部分DAG301および部分DAG302が統合された統合DAG600の一例を図16に示す。
【0141】
命令スケジューリング部26は、統合DAG600内の各ノードに対応付けられた2段階優先度に基づいて、より高い命令群別優先度でより高い命令単位優先度の命令から順に各処理サイクルに配置していく。
【0142】
このとき、命令スケジューリング部26は、各処理サイクルに命令を配置する際に、該処理サイクルで他の命令群の命令を実行可能であるか否かを判断し、実行可能であれば、次に高い命令群別優先度の命令を該処理サイクルに配置する。
【0143】
以下、「より高い命令群別優先度が含まれる2段階優先度が対応付けられたノードに対応する命令」のことを、単に「より高い命令群別優先度の命令」ともいう。また、「より高い命令単位優先度が含まれる2段階優先度が対応付けられたノードに対応する命令」のことを、単に「より高い命令単位優先度の命令」ともいう。
【0144】
具体的には、命令スケジューリング部26は、i番目に高い命令群別優先度の命令について、命令単位優先度に基づいて各処理サイクルに配置していく。このとき、命令スケジューリング部26は、命令を配置する処理サイクルで情報処理装置99によって他の命令を並列実行可能か否かを判断する。そして、命令スケジューリング部26は、他の命令を並列実行可能であれば、i+1番目に高い命令群別優先度の命令を該処理サイクルに配置する。
【0145】
このようにして、命令スケジューリング部26は、i+1番目に命令群別優先度の高い命令を配置可能な処理サイクルには該命令を配置しながら、i番目に命令群別優先度の高い命令のスケジューリングを完了させる。
【0146】
このようにして、命令スケジューリング部16は、統合DAG600内のノードに対応する全ての命令について並べ替えを行い命令列700を生成する。
【0147】
以上のように構成された命令スケジューリング装置20の動作について、図17を用いて説明する。
【0148】
なお、図17において、本発明の第2の実施の形態としての命令スケジューリング装置10と同様に動作するステップについては同一の符号を付して詳細な説明を省略する。
【0149】
命令スケジューリング装置20は、ステップS11〜S15まで本発明の第2の実施の形態としての命令スケジューリング装置10と同様に動作して部分DAG300を生成し、命令単位優先度および命令群別優先度を設定する。
【0150】
次に、命令単位優先度および命令群別優先度からなる2段階優先度が、優先度設定部24によって、各部分DAG300の各ノードに対応付けられる(ステップS36)。
【0151】
次に、部分DAG300が統合された統合DAG600が、DAG統合部25によって生成される(ステップS37)。
【0152】
次に、統合DAG600に基づいて、命令スケジューリング部26によって命令が並べ替えられ、命令列700が生成される(ステップS38)。
【0153】
ここで、ステップS38における命令スケジューリング部26の命令スケジューリング動作について、図18を用いて説明する。
【0154】
ここでは、命令スケジューリング部26によって、命令群別優先度が高いものから順に、命令群別優先度が同一の命令についてステップS41〜S44が実行される。
【0155】
まず、命令スケジューリング部26によって、この命令群別優先度で次に命令単位優先度が高い命令が次の処理サイクルに配置可能であれば配置される(ステップS41)。
【0156】
ここで、この命令群別優先度でさらに次に高い命令単位優先度の命令がこの処理サイクルに並列に配置可能であればこれらの命令がこの処理サイクルに並列に配置される。また、この命令群別優先度の命令でこの処理サイクルに配置可能なものがなければ、この命令群別優先度の命令はこの処理サイクルに配置されない。
【0157】
次に、命令スケジューリング部26によって、この処理サイクルで他の命令群別優先度の命令が実行可能か否かが判断される(ステップS42)。
【0158】
ここで、該当する処理サイクルで他の命令群別優先度の命令が実行可能でないと判断されると、命令スケジューリング部26の処理はステップS41に戻る。
【0159】
一方、該当する処理サイクルで他の命令群別優先度の命令が実行可能であると判断されると、命令群スケジューリング部26によって、次に命令群別優先度が高い命令のうち命令単位優先度が高いものが該当する処理サイクルに配置される(ステップS43)。
【0160】
このようにして、この命令群別優先度の命令のスケジューリングが完了すると(ステップS44でYes)、命令スケジューリング部26によって、次に命令群別優先度が高い命令のうち未配置の命令について、ステップS41〜S44が繰り返し実行される。
【0161】
命令スケジューリング部26によって、全ての命令群別優先度の命令のスケジューリングが完了すると、命令スケジューリング動作が終了する。
【0162】
例えば、命令スケジューリング部26が、図16に示した統合DAG600に基づいて、図12(b)に示した命令列700を生成する例について説明する。
【0163】
命令スケジューリング部26は、まず、命令群別優先度2の命令を、命令単位優先度に基づいて図12(b)の処理サイクル0に配置する(ステップS41)。このとき、命令スケジューリング部26は、命令群別優先度2の2つの命令を並列に配置可能であるため並列に配置する。
【0164】
次に、命令スケジューリング部26は、この処理サイクル0で他の命令群別優先度の命令を実行可能でないと判断する(S42でNo)。
【0165】
命令スケジューリング部26は、ステップS41の処理およびステップS42でNoの判断を繰り返して図12(b)の処理サイクル0〜7までスケジューリングを行う。
【0166】
次に、命令スケジューリング部26は、次の処理サイクル8には、命令群別優先度2内の命令で配置可能なものがないため配置しない(ステップS41)。
【0167】
ここで、命令スケジューリング部26は、この処理サイクル8で他の命令群別優先度の命令を実行可能であると判断し(ステップS42でYes)、命令群別優先度1の命令のうち、2段階優先度「1:3」が対応付けられた「t8へのロード命令」を選択し処理サイクル8に配置する(ステップS43)。
【0168】
次に、命令スケジューリング部26は、さらに次の処理サイクル9にも、命令群別優先度2内の命令で配置可能なものがないため配置しない(ステップS41)。
【0169】
ここで、命令スケジューリング部26は、この処理サイクル9で他の命令群別優先度の命令を実行可能であると判断し(ステップS42でYes)、命令群別優先度1の命令のうち、2段階優先度「1:3」が対応付けられた「t9へのロード命令」を選択し処理サイクル9に配置する(ステップS43)。
【0170】
次に、命令スケジューリング部26は、命令群別優先度2の残りの命令について、ステップS41の処理およびステップS42でNoの判断を繰り返して図12(b)の処理サイクル10〜12までスケジューリングを行う。
【0171】
次に、命令スケジューリング部26は、処理サイクル12で他の命令群内の命令を実行可能であると判断し(ステップS42でYes)、命令群別優先度1の命令を処理サイクル12に配置する(ステップS43)。
【0172】
これで、命令スケジューリング部26は、命令群別優先度2の命令群内の命令のスケジューリングを終えたと判断し(ステップS44でYes)、次の命令群別優先度1の命令群内の命令のスケジューリングに処理を移す。
【0173】
次に、命令スケジューリング部26は、命令群別優先度1の残りの命令について、ステップS41〜S42を繰り返し、処理サイクル13〜14に配置する。
【0174】
これで、命令スケジューリング部26は、全ての命令のスケジューリングを終え、命令列700の生成を終了する。
【0175】
このように、命令スケジューリング部26は、命令スケジューリング部16と同様の命令列700を、命令スケジューリング部16に比べて簡略化された処理手順で生成する。
【0176】
次に、本発明の第3の実施の形態の効果について述べる。
【0177】
本発明の第3の実施の形態としての命令スケジューリング装置は、処理の遅延を抑えてレジスタの利用期間を短縮する命令列を、さらに効率的に生成することができる。
【0178】
その理由は、各ノードに2段階優先度を対応付けた統合DAGを生成することにより、命令群毎の命令スケジューリングを完了させてから次の命令群の命令を前の命令群の命令列にマージする必要がなく、簡略化された生成手順で命令列の生成時間を短縮することができるからである。
【0179】
次に、本発明の第4の実施の形態について、図面を参照して説明する。
【0180】
本発明の第4の実施の形態の命令スケジューリング装置30の構成を図19に示す。
【0181】
図19において、命令スケジューリング装置30は、本発明の第3の実施の形態の命令スケジューリング装置20に対して、DAG分割部13に替えてDAG分割部33を備え、優先度設定部24に替えて優先度設定部34を備え、DAG統合部25に替えてDAG統合部35を備える点が異なる。
【0182】
ここで、命令スケジューリング装置30は、本発明の第3の実施の形態と同様な汎用的なコンピュータ装置によって構成される。また、DAG分割部33と、優先度設定部34と、DAG統合部35とは、プログラムモジュールとして記憶装置に記憶され、CPUによってRAMに読み込まれて実行される回路として構成される。
【0183】
DAG分割部33は、DAG構築部12によって構成されたDAG200の各ノードに、依存関係のある一連の命令群を識別する命令群識別情報を対応付ける。ここで、DAG分割部33は、複数の命令群に含まれるノードには、複数の命令群識別情報を対応付ける。これにより、DAG分割部33は、DAG200を複数の部分DAG300に仮想的に分割する。
【0184】
優先度設定部34は、DAG200の各ノードに対応付けられた命令群識別情報に、2段階優先度を対応付ける。ここで、優先度設定部34は、複数の命令群に含まれ複数の命令群識別情報が対応付けられたノードには、各命令群識別情報に対して2段階優先度を対応付ける。
【0185】
DAG統合部35は、複数の2段階優先度が対応付けられたノードについて、いずれかの2段階優先度を選択したことを表す選択情報を対応付ける。例えば、DAG統合部35は、複数の2段階優先度のうち、命令群別優先度が高い方の2段階優先度を選択したことを表す選択情報を、該当するノードに対応付ける。この場合、DAG統合部35は、複数の2段階優先度の命令群別優先度が同一であれば、命令単位優先度が高い方の2段階優先度を選択したことを表す選択情報を、該当するノードに対応付ける。
【0186】
これにより、DAG統合部35は、仮想的に分割された複数の部分DAGを仮想的に統合する。
【0187】
DAG分割部33、優先度設定部34およびDAG統合部35によって、命令群識別情報、2段階優先度および選択情報が対応付けられたDAG200のノードの一例を図20に示す。
【0188】
以上のように構成された命令スケジューリング装置30は、各ノードに2段階優先度の選択情報が対応付けられたDAG200を、本発明の第3の実施の形態における統合DAG600とみなすことにより、本発明の第3の実施の形態としての命令スケジューリング装置20と同様に動作して、命令列700を生成する。
【0189】
本発明の第4の実施の形態の効果について述べる。
【0190】
本発明の第4の実施の形態としての命令スケジューリング装置は、処理の遅延を抑えてレジスタの利用期間を短縮する命令列を生成する際の、メモリ使用量および生成時間を短縮することができる。
【0191】
その理由は、本発明の第4の実施の形態としての命令スケジューリング装置は、構築したDAGを用いて部分DAGおよび統合DAGを仮想的に生成するので、部分DAGおよび統合DAGを表す情報を生成する時間を短縮することができ、部分DAGおよび統合DAGを表す情報を記憶するためのメモリ領域を必要としないからである。
【0192】
なお、上述した本発明の各実施の形態において、命令スケジューリング装置の動作は、本発明の命令スケジューリングプログラムを構成するプログラムモジュールとして命令スケジューリング装置が備える記憶装置に格納され、CPUによって実行されるようにしてもよい。
【0193】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【0194】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【0195】
1、10、20、30 命令スケジューリング装置
2 命令群分割部
3 優先度設定部
4 命令スケジューリング部
11 命令ブロック入力部
12 DAG構築部
13、33 DAG分割部
14、24、34 優先度設定部
16、26 命令スケジューリング部
17 命令ブロック出力部
25、35 DAG統合部

【特許請求の範囲】
【請求項1】
処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令ブロックに含まれる複数の命令の依存関係を分析し、依存関係のある一連の命令を1つの命令群として前記命令ブロックを複数の命令群に分割する命令群分割手段と、
前記命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、前記命令群に対して、前記命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定手段と、
前記命令群別優先度の高い命令群から順に、該命令群に含まれる命令を前記命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち前記情報処理装置によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する命令スケジューリング手段と、
を備えた命令スケジューリング装置。
【請求項2】
前記命令群分割手段は、
前記命令ブロックに含まれる複数の命令の依存関係を表すDAG(Directed Acyclic Graph)を構築するDAG構築手段と、
前記DAGを、前記複数の命令群をそれぞれ表す複数の部分DAGに分割するDAG分割手段と、
を有することを特徴とする請求項1に記載の命令スケジューリング装置。
【請求項3】
前記部分DAGを統合した統合DAGを生成するDAG統合手段をさらに備え、
前記優先度設定手段は、前記部分DAGを構成する各ノードに、前記ノードが含まれる部分DAGが表す命令群に設定した命令群別優先度および前記ノードが表す命令に設定した命令単位優先度からなる2段階優先度を対応付け、
前記DAG統合手段は、前記統合DAGの各ノードのうち、複数の前記部分DAGに重複して含まれていたノードにはより高い命令群別優先度を含む2段階優先度を選択して対応付け、
前記命令スケジューリング手段は、前記統合DAGの各ノードに対応付けられた2段階優先度に基づいて前記命令を順次配置していき、各処理サイクルに前記命令を配置する際に該処理サイクルで前記情報処理装置によって他の命令群の命令を実行可能であるか否かを判断し、実行可能であれば次に高い命令群別優先度を含む2段階優先度が設定された命令を該処理サイクルに配置することを特徴とする請求項2に記載の命令スケジューリング装置。
【請求項4】
前記DAG分割手段は、前記DAGを構成する各ノードに前記複数の命令群をそれぞれ識別する命令群識別情報を対応付けることにより前記DAGを前記部分DAGに仮想的に分割し、
前記優先度設定手段は、前記各ノードに対応付けられた命令群識別情報毎に前記2段階優先度を対応付け、
前記DAG統合手段は、前記各ノードに対応付けられた命令群識別情報毎に対応づけられた2段階優先度のうち、より高い命令群別優先度を含む2段階優先度を前記各ノードに対応付けることにより、前記統合DAGを仮想的に生成することを特徴とする請求項3に記載の命令スケジューリング装置。
【請求項5】
前記優先度設定手段は、前記命令群に含まれる命令に設定した命令単位優先度のうち最も高いものに基づいて前記命令群に対する命令群別優先度を設定することを特徴とする請求項1から請求項4のいずれかに記載の命令スケジューリング装置。
【請求項6】
処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令ブロックに含まれる複数の命令をスケジューリングする命令スケジューリング装置が、
前記複数の命令の依存関係を分析し、依存関係のある一連の命令を1つの命令群として前記命令ブロックを複数の命令群に分割する命令群分割ステップと、
前記命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、前記命令群に対して、前記命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定ステップと、
前記命令群別優先度の高い命令群から順に、該命令群に含まれる命令を前記命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち前記情報処理装置によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する命令スケジューリングステップと、
を実行する命令スケジューリング方法。
【請求項7】
前記命令スケジューリング装置が、
前記命令群分割ステップにおいて、
前記命令ブロックに含まれる複数の命令の依存関係を表すDAG(Directed Acyclic Graph)を構築するDAG構築ステップと、
前記DAGを、前記複数の命令群をそれぞれ表す複数の部分DAGに分割するDAG分割ステップと、
を実行することを特徴とする請求項6に記載の命令スケジューリング方法。
【請求項8】
処理サイクル毎に複数の命令を並列に実行可能な情報処理装置に実行させる命令ブロックに含まれる複数の命令をスケジューリングする命令スケジューリング装置に、
前記複数の命令の依存関係を分析し、依存関係のある一連の命令を1つの命令群として前記命令ブロックを複数の命令群に分割する命令群分割ステップと、
前記命令に対して、該命令が含まれる命令群における処理順序の優先度を表す命令単位優先度を設定するとともに、前記命令群に対して、前記命令ブロックにおける処理順序の優先度を表す命令群別優先度を設定する優先度設定ステップと、
前記命令群別優先度の高い命令群から順に、該命令群に含まれる命令を前記命令単位優先度に基づいてスケジューリングし、該命令群内の命令が配置された処理サイクルのうち前記情報処理装置によって他の命令群の命令を並列実行可能な処理サイクルに、次に命令群別優先度の高い命令群に含まれる命令を前記命令単位優先度に基づいて配置する命令スケジューリングステップと、
を実行させる命令スケジューリングプログラム。
【請求項9】
前記命令スケジューリング装置に、
前記命令群分割ステップにおいて、
前記命令ブロックに含まれる複数の命令の依存関係を表すDAG(Directed Acyclic Graph)を構築するDAG構築ステップと、
前記DAGを、前記複数の命令群をそれぞれ表す複数の部分DAGに分割するDAG分割ステップと、
を実行させることを特徴とする請求項8に記載の命令スケジューリングプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate