図1は、本開示の以下で説明する実施形態に係る情報処理装置を実現できるコンピュータ100(「コンピュータシステム」とも表記する)の構成のブロック図である。コンピュータシステム100は、プロセッサ110、キャッシュサブシステム120、GPUサブシステム130、画像出力装置140、メモリブリッジ150、I/O(Input/Output)サブシステム160、入力装置170(例えばマウス171やキーボード172)、メモリサブシステム180、及び二次記憶装置190を含む。コンピュータシステム100は、複数の画像出力装置140を含んでいてよい。プロセッサ110は、レジスタ111を含む。レジスタ111は、プロセッサ110に含まれる実行ユニットによって使用されるデータを、キャッシュサブシステム120からステージするのに使われる。プロセッサ110のレジスタ111及び他の部分は、レイテンシを削減するために、同じチップ上に存在する。キャッシュサブシステム120は、2以上のレベルのキャッシュを有していてよい。プロセッサ110及びキャッシュサブシステムの少なくとも1つのレベルは、同じチップ上に実装されていてよい。レベルの数(例えばレベル1、レベル2、レベル3、など)及び場所(プロセッサ110のチップ上、又はチップの外)は、異なるアーキテクチャを有するシステムの間で異なっていてよい。したがって、異なるアーキテクチャを有するシステム間での構成の変異の単純化のため、キャッシュサブシステム120は、プロセッサ110から分離されたモジュールとして示されている。キャッシュサブシステム120は、メモリブリッジ150を介してメモリサブシステム180へ接続されている。メモリブリッジ150は、GPUサブシステム130及びI/Oサブシステム160へ接続されている。GPUサブシステム130は、画像出力装置140へ接続されている。I/Oサブシステム160は、入力/出力装置へ接続されている。メモリサブシステム180は、二次記憶装置190へ接続されている。OS(オペレーティングシステム)181、ドライバ182及びアプリケーション183などのプログラムは、メモリサブシステム180へロードされている。
二次記憶装置190の例は、HDD(ハードディスクドライブ)等である。二次記憶装置190は、コンピュータ100を以下で説明する情報処理装置の一つとして動作させるプログラムを記憶していてよい。プロセッサ110は、二次記憶装置190からプログラムのコピーを読み出してよく、メモリサブシステム180へプログラムをロードしてよく、メモリサブシステム180へロードされたプログラムを実行してよい。プログラムは、メモリサブシステム180の、そのプログラムに割り当てられているメモリ領域へロードされてよい。プロセッサ110は、メモリサブシステム180に記憶されたプログラムに、メモリブリッジ150を介してアクセスできる。プログラムの実行の後に、メモリサブシステム180にロードされたプログラムのコピーは、そのプログラムに割り当てられたメモリ領域を開放することによって、破棄されてよい。
I/Oサブシステム160は、記憶媒体174へのアクセスを可能とする記憶媒体駆動装置173に接続してよい。記憶媒体174は、CD−ROM(Compact Disc Read Only Memory)、USB(Universal Serial Bus)メモリ、又は、コンピュータが読み取り可能な他の可搬媒体の一つであってよい。記憶媒体174は、コンピュータ100を、以下で説明する情報処理装置の一つとして動作させるプログラムを記憶していてよい。プロセッサ110は、記憶媒体174に記憶されたプログラムに、記憶媒体駆動装置173を介してアクセスしてよい。プロセッサ110は、記憶媒体174からプログラムを読み出してよく、メモリサブシステム180へプログラムをロードしてよく、メモリサブシステム180へロードされたプログラムを実行してよい。記憶媒体174に記憶されたプログラムは、二次記憶装置190にインストールされてよい。二次記憶装置190へインストールされたプログラムは、メモリサブシステム180へロードされ、上述のように実行されてよい。
<第1実施形態>
図2は、第1実施形態に係る情報処理装置200の概略構成のブロック図である。情報処理装置200は、プログラムを実行するコンパイラであってよく、このコンパイラは、プログラミング言語で書かれたソースプログラムを、プロセッサ110によって実行可能な目的プログラムへ変換する。実行の間、目的プログラムは、図1の二次記憶装置190に保持される。目的プログラムは、メモリサブシステム180へコピーされ、図1のメモリサブシステム180にロードされたリンカ及びローダを利用して、図1のプロセッサ110により実行される。
情報処理装置200は、フロントエンド210、中間コード生成部220、コード最適化部230及びコード生成部240を含む。
情報処理装置200への入力は、ソースプログラムである。情報処理装置200は、ソースプログラムを目的プログラムへ変換する。フロントエンド210は、フロントエンド210への入力として、ソースプログラムを受信する。フロントエンド210は、字句解析部、構文解析部、及び意味解析部として動作する。字句解析部は、ソースプログラムの文字を読み、文字を語彙素へとグループ化する。その後、字句解析部は、語彙素に対して、トークンのシーケンスを生成する。より詳細には、字句解析部は、語彙素のそれぞれに対して、トークンのシーケンスを生成する。このプロセスは、トークン化として知られる。字句解析部は、トークンのシーケンスを構文解析部へ入力として送信する。構文解析部は、字句解析部から送信されたトークンのストリームを受信し、トークンのストリームからソースプログラムの制御フローを得て、例えば、字句解析部から受信したトークンのストリームから得た制御フローを表す、有向非巡回グラフ(directed asyclic graph、DAG)を作成する。構文解析部は、生成されたDAGを、意味解析部へ入力として送信する。意味解析部は、構文解析部からDAGを受信し、ソースプログラムになんらかの意味的な誤りがあるか確認する。意味解析部は、DAGを、中間コード生成部220へ送信する。
中間コード生成部220は、入力されたDAGを、高水準プログラミング言語及びハードウェアアーキテクチャの両方に依存しない、中間形式(すなわち中間表現)へ変換する。中間コード生成部220は、中間表現を、コード最適化部230へ送信する。
コード最適化部230は、中間表現を受信する。コード最適化部230は、中間表現に対してコード最適化を行う。換言すると、コード最適化部230は、中間表現に含まれる中間命令シーケンスを変更することによって、中間表現を最適化する。コード最適化部230は、機種依存の最適化及び機種非依存の最適化の両方を行う。機種依存の最適化の例は、特殊なハードウェアの機能を活用すること、レイテンシを管理又は隠蔽すること、並列処理を導入することなどである。機種非依存の最適化の例は、冗長性を除去すること、無駄な到達不能コードを削除すること、定数伝搬、ピープホール最適化等であってよい。コード最適化部230は、最適化された中間表現を、コード生成部240へ送信する。
最後に、コード生成部240は、最適化された中間表現を受信し、最適化された中間表現に含まれる中間命令シーケンスに対してアセンブリ命令シーケンスを選択する。アセンブリ命令シーケンスの選択は、最適化された中間表現から生成された目的プログラムを実行するコンピュータ上でリンカ及びローダを利用して実行されてよい。情報処理装置200はシンボルテーブルを記憶していてよい。コンパイラの要素はシンボルテーブルを共有し、シンボルテーブルのデータを、使用し、更新する。情報処理装置200は、エラーハンドラを含んでいてよい。プログラムのコンパイル中にコンパイラの要素の一つでエラーが発生した場合、エラーハンドラが統制をとってよく、適切なメッセージを出力してよい。
図3は、コード生成部240の詳細な構成のブロック図である。コード生成部240は、3つのモジュール、すなわち、命令選択部310、命令スケジューラ320及びレジスタ割当て部330を含む。コード生成部240への入力は、中間コード、すなわち、上述の中間表現である。中間コードは、フロントエンド210の中間コード生成部220によって生成され、コード最適化部230によって最適化され出力される。命令選択部310は、最適化された中間コード、すなわち、コード最適化部230によって最適化された中間コードを受信する。命令選択部310は、中間コードに含まれるIR命令シーケンスに対してアセンブリ命令シーケンスを選択してよい。命令選択部310は、IR命令シーケンスのそれぞれに対して1つのアセンブリ命令シーケンスを選択してよい。命令スケジューラ320は、最終的な目的プログラムにおける、アセンブリ命令シーケンスに含まれるアセンブリ命令の順番を決定する。レジスタ割当て部330は、レジスタ111内のレジスタを、アセンブリ命令のそれぞれに割り当てる。
図4は、本開示に係る情報処理装置200の詳細な構成のブロック図である。情報処理装置200は、既存のコンパイラの構成に合わせて構成されている。図4に示される情報処理装置200は、命令スケジューリングとは無関係に命令選択を行う。
情報処理装置200は、フロントエンド420、中間コード生成部430、コード最適化部440及びコード生成部450を含む。コード生成部450は、命令選択部460、命令スケジューラ470及びレジスタ割当て部480を含む。命令選択部460は、パターン照合・生成部461及びパターン選択部465を含む。パターン照合・生成部461は、代替パターン特定部462及び代替パターン生成部464を含む。フロントエンド420、中間コード生成部430、コード最適化部440、及びコード生成部450は、それぞれ、図2のフロントエンド210、中間コード生成部220、コード最適化部230、及びコード生成部240に相当する。
図4の例では、情報処理装置200への入力は、高水準プログラミング言語で書かれたソースプログラムであり、情報処理装置200の出力は、目的プログラムである。
ソースコードは、情報処理装置200のユーザによって、キーボード172などの入力装置を使って入力されてよい。ソースコードは、情報処理装置200に通信可能に接続された端末装置等から送信されてよい。ソースコードは、情報処理装置200に含まれる記憶装置又はメモリにあらかじめ格納されていてよい。
フロントエンド420は、ソースプログラムを受信してよい。フロントエンド420は、記憶装置又はメモリからソースコードを読み出してよい。フロントエンド420は、入力されたソースプログラムを、有向非巡回グラフへ変換する。有向非巡回グラフの構成は、あらかじめ定義されていてよく、情報処理装置200の構成に応じて異なっていてよい。フロントエンド420は、有向非巡回グラフを出力する。フロントエンド420は、有向非巡回グラフを中間コード生成部430へ送信してよい。
フロントエンド420は、次の3つのモジュール:字句解析部、構文解析部、及び意味解析部を含んでいてよい。字句解析部は、高水準プログラミング言語で書かれたソースプログラムを受信する。字句解析部は、ソースプログラムをトークンのストリームへ変換する。そして、このトークンのストリームは、入力として構文解析部へ送信される。構文解析部は、トークンのストリームを受信する。構文解析部は、受信したトークンのストリームを有向非巡回グラフへ変換し、その有向非巡回グラフを、入力として意味解析部へ送信する。意味解析部はこの有向非巡回グラフを受信し、受信した有向非巡回グラフに基づいて、プログラムの宣言文及び命令文が意味的に正しいことを、確認し、保証する。換言すると、意味解析部は、宣言文及び命令文の意味が明確であり、宣言文及び命令文が、宣言文及び命令文の制御構造及びデータ型の、プログラムにおける想定される使われ方と整合性があることを、確認し、保証する。意味解析部は、プログラムに対して、型の確認、ラベルの確認、フロー制御の確認などの、いくつかの種類の確認を行ってよい。意味解析部は、プログラムの宣言文及び命令文が意味的に正しい場合に、有向非巡回グラフを出力してよい。意味解析部は、中間コード生成部430へ、有向非巡回グラフを出力してよい。
中間コード生成部430への入力は、フロントエンド420から送信された有向非巡回グラフである。中間コード生成部430は、有向非巡回グラフを受信する。中間コード生成部430は、有向非巡回グラフを、中水準言語表現、すなわち、中水準言語による表現へ変換する。中水準言語表現の定義は、情報処理装置200の構成に応じて異なっていてよい。中水準言語表現は中間表現の変種である。中間表現には、次の特性:高水準プログラミング言語に依存しないこと、及び対象ハードウェアアーキテクチャに依存しないこと、がある。中間コード生成部430は、中間表現、すなわち、上述の中水準言語表現を出力する。中間コード生成部430は、中間表現を、入力としてコード最適化部440へ送信してよい。
コード最適化部440への入力は、中間コード生成部430によって出力された、ソースプログラムの中間表現である。コード最適化部440は、中間コード生成部430によって出力された中間表現を受信する。コード最適化部440は、最適化された中間表現を生成するために、ソースプログラムの中間表現に対して、対象非依存の最適化と対象依存の最適化とを含む最適化を行う。コード最適化部440は、最適化された中間表現を出力する。コード最適化部440は、最適化された中間表現を、入力としてコード生成部450へ送信してよい。
コード生成部450への入力は、コード最適化部440によって出力された、ソースプログラムの最適化された中間表現である。コード生成部450は、最適化された中間表現を受信する。コード生成部450は、ソースプログラムの最適化された中間表現を、対象ハードウェアアーキテクチャに依存し、当該対象ハードウェアアーキテクチャを有するコンピュータが実行できる、目的プログラムへ変換する。コード生成部450の出力は、目的プログラムである。コード生成部450は、目的プログラムを出力する。次に、コード生成部450を詳細に説明する。
コード生成部450は、3つのモジュール:命令選択部460、命令スケジューラ470及びレジスタ割当て部480を含んでいてよい。命令選択部460、命令スケジューラ470及びレジスタ割当て部480は、それぞれ、図3の命令選択部310、命令スケジューラ320及びレジスタ割当て部330に相当する。
命令選択部460への入力は、コード最適化部440によって出力された、ソースプログラムの最適化された中間表現である。命令選択部460は、ソースプログラムの、最適化された中間表現を受信する。命令選択部460は、ソースプログラムの、受信した最適化された中間表現を、そのソースプログラムのアセンブリ表現へ変換する。換言すると、命令選択部460は、中間表現における中間命令を、アセンブリ表現のアセンブリ命令へ変換する。命令選択部460は、中間命令からアセンブリ命令へのマッピングに基づいて、1つ又は複数の中間命令を、1つ又は複数のアセンブリ命令へ変換してよい。命令選択部460は、アセンブリ表現を生成するために、中間表現内の1つ又は複数の中間命令を、1つ又は複数のアセンブリ命令へ変換してよい。命令選択部460の出力は、ソースプログラムのアセンブリ表現である。命令選択部460の出力は、ソースプログラムのアセンブリ表現である。命令選択部460は、ソースプログラムのアセンブリ表現を、入力として命令スケジューラ470へ送信してよい。命令選択部460を以下で詳しく説明する。
命令選択部460は、次の2つのモジュール:パターン照合・生成部461及びパターン選択部465、を、含んでいてよい。
パターン照合・生成部461への入力は、コード最適化部440によって出力され、命令選択部460へ入力される、ソースプログラムの最適化された中間表現を含んでいてよい。パターン照合・生成部461には、パターンを特定するタスク、すなわち、与えられたどのような中間命令シーケンスに対してもアセンブリ命令シーケンスをいつどこで使用できるかを検出するタスク、及び、パターンを生成するタスク、すなわち、以下で説明される代替パターン特定部462からの、対応するパターンのそれぞれに対してアセンブリ命令シーケンスを生成するタスクがある。パターンのそれぞれは、命令シーケンスの青写真と考えることができる。パターン照合・生成部461は、ソースプログラムの、最適化された中間表現を受信する。パターン照合・生成部461は、複数の代替パターンを有する中間命令シーケンスを特定し、その中間命令シーケンスの代替パターンを生成する。代替パターンは、それぞれ、アセンブリ命令シーケンス、すなわち、アセンブリ命令のシーケンスを表し、中間命令シーケンスの結果と同じ結果を導く。以下の説明において、中間命令シーケンスが、1つの代替パターン(すなわち複数の代替パターンのうちの1つのアセンブリ命令シーケンス)と対応するという表現は、その中間命令シーケンスとその代替パターンとが同じ結果を導くことを意味する。同様に、1つの中間命令シーケンスが複数の代替パターンと対応するという表現は、その中間命令シーケンスとそれらのアセンブリ命令シーケンスのそれぞれとが同じ結果を導くことを意味する。パターン照合・生成部461は、ソースプログラムの、最適化された中間表現において、代替パターンを有するすべての中間命令シーケンスを特定してよく、ソースプログラムの、最適化された中間表現における、中間命令シーケンスのいずれか一つと対応するすべての代替パターンを生成してよい。パターン照合・生成部461の出力は、中間命令シーケンスと対応する代替パターンである。パターン照合・生成部461は、中間命令シーケンスのそれぞれに対して代替パターンを出力する。パターン照合・生成部461は、代替パターンを、入力としてパターン選択部465へ送信してよい。パターン照合・生成部461を以下で詳しく説明する。
パターン照合・生成部461は、次の2つのモジュール:代替パターン特定部462及び代替パターン生成部464、を、含んでいてよい。
代替パターン特定部462への入力は、コード最適化部440によって出力された、ソースプログラムの、最適化された中間表現である。代替パターン特定部462は、ソースプログラムの、最適化された中間表現を受信する。代替パターン特定部462は、中間命令シーケンスのそれぞれと、あらかじめ用意されたパターンとの間で、照合を行ってよい。あらかじめ用意されたパターンは、「辞書パターン」とも表記される。代替パターン特定部462により行われるこの照合は、ツリーベースのパターン照合又はグラフべースのパターン照合などのような、パターン照合に使われるアルゴリズムには依存しない。代替パターン特定部462の出力は、1つの中間命令シーケンスにつき、その中間命令シーケンスに対応する、すべての特定された代替パターンである。
辞書パターンのそれぞれは、同じ結果に導く2つ以上の異なるアセンブリ命令シーケンスのいずれか一つへ変換できる中間命令シーケンスを選択する条件であってよい。2つ以上の異なるアセンブリ命令シーケンスは、「代替パターン」と表記される。換言すると、ある中間命令シーケンスの代替パターンは、その中間命令シーケンスと等価であり、その中間命令シーケンスの結果である同じ結果に導く、アセンブリ命令シーケンスである。さらに換言すると、ある中間命令シーケンスの代替パターンは、その中間命令シーケンスによる結果を得られるアセンブリ命令シーケンスである。異なる代替パターン、すなわち異なるアセンブリ命令シーケンスは、目的プログラムを実行するプロセッサの、加算器、乗算器及びシフターなどのような演算ユニット(すなわち、arithmetic and logic units、ALU)の異なる組み合わせによって実行される。2つ以上の代替パターンへ変換できる中間命令シーケンス、すなわち、同じ結果に導く2つ以上のアセンブリ命令シーケンスによって実現できる中間命令シーケンスは、「複数の代替パターンを持つ中間命令シーケンス」と呼ばれる。辞書パターン及び辞書パターンのそれぞれに対する代替パターンが、用意されていてよい。代替パターン特定部462は、辞書パターンをあらかじめ記憶していてよい。
代替パターン特定部462は、最適化された中間表現に含まれる中間命令シーケンスのそれぞれを辞書パターンと比べることによって、中間命令シーケンスの辞書パターンとの照合を行ってよい。
代替パターン特定部462は、ソースプログラムから生成された中間表現において、複数の代替パターンを持つ中間命令シーケンスのすべてを特定してよい。中間表現に対するすべての代替パターンが特定されると、パターン選択部465は、代替パターンの任意の組み合わせを、その割合と共に選択できる。
中間命令シーケンスの辞書パターンとのそのような照合の技術及び方法は、情報処理装置200の構成に応じて変化してよい。
中間命令シーケンスの中間命令のそれぞれが1つの演算子及び1つ又はそれ以上のオペランドを含むとすれば、辞書パターンのそれぞれは、ある演算子を持つ中間命令のシーケンスを選択する一連の条件を含んでいてよい。辞書パターンは、特定のオペランドを持つ中間命令を選択する一連の条件を含んでいてよい。
次の例の説明において、1つの中間命令は単一の中間命令のみを含み、代替パターンのそれぞれは単一のアセンブリ命令のみを含む。「r」という名称のレジスタに格納されている値に2を掛け、掛けた結果を「r」という名称のレジスタに格納することを示す、中間命令「multiply r, r, 2」に対する条件の例は、演算子「multiply」に対応する条件と、第3オペランド「2」に対応する条件との組み合わせである。代替パターンは、例えば、アセンブリ命令である「mul r, r, 2」、「shl r, r, 1」及び「fmul r, r, 2.0」であってよい。アセンブリ命令「mul r, r, 2」は、「r」という名称のレジスタに格納されている整数に2を掛け、掛けた結果を「r」という名称のレジスタに格納することを示す。アセンブリ命令「shl r, r, 1」は、「r」という名称のレジスタに格納されている値に対して左シフト演算を行い、左シフト演算の結果を「r」という名称のレジスタに格納することを示す。アセンブリ命令「fmul r, r, 2.0」は、「r」という名称のレジスタに格納されている浮動小数点数に2.0を掛け、掛けた結果を「r」という名称のレジスタに格納することを示す。
中間命令「multiply r, r, 2」が中間表現の中間命令シーケンスに含まれる場合、代替パターン特定部462は、中間命令「multiply r, r, 2」を、代替パターンを持つ中間命令として特定する。代替パターン特定部462は、アセンブリ命令「mul r, r, 2」、「shl r, r, 1」及び「fmul r, r, 2.0」を、中間命令「multiply r, r, 2」の代替パターンとして特定する。
代替パターン特定部462は、さらに、実行カウント、すなわち、実行の回数を、最適化された中間プログラムに含まれる、複数の代替パターンを持つ中間命令シーケンスのそれぞれに対して、決定してよい。複数の代替パターンを持つ中間命令シーケンスのそれぞれに対する実行カウントが、最適化された中間プログラムにおいて定まっている場合、代替パターン特定部462は、実行カウントをカウントしてよい。複数の代替パターンを持つ中間命令シーケンスの少なくとも1つに対する実行カウントは、実行時に定まってもよい。この場合、実行カウントは、コンパイル時に正確に定まっていなくてもよい。代替パターン特定部462は、最適化された中間プログラムに基づいて、初期条件を設定することによって、実行カウントを推定してよい。中間命令シーケンスの実行カウントは、同じ代替パターンの組み合わせが同じである中間命令シーケンスの実行の回数であってよい。
代替パターン特定部462は、中間命令シーケンスに対して特定された代替パターンを出力する。代替パターン特定部462は、特定された代替パターンを、入力として代替パターン生成部464へ送信してよい。
代替パターン特定部462は、さらに、複数の代替パターンを持つ中間命令シーケンスのそれぞれの実行カウントを、代替パターン生成部464を介して、パターン選択部465へ送信してよい。換言すると、代替パターン特定部462は、実行カウントを代替パターン生成部464へ送信してよく、代替パターン生成部464は、実行カウントを受信し、その実行カウントをパターン選択部465へ送信してよい。
以下で詳しく説明されるパターン選択部465は、最適化された中間プログラムに含まれる、複数の代替パターンを持つ中間命令シーケンスのそれぞれに対して、実行カウントを決定してよい。この場合、代替パターン特定部462は、複数の代替パターンを持つ中間命令シーケンスのそれぞれに対する実行カウントを、決定し、送信する必要はない。代替パターン生成部464は、複数の代替パターンを持つ中間命令シーケンスのそれぞれに対する実行カウントを、受信し、送信する必要はなない。
代替パターン生成部464は、代替パターン特定部462から送信された、特定された代替パターンを受信する。代替パターン生成部464は、さらに、複数の代替パターンを持つ中間命令シーケンスのそれぞれの実行カウントを受信する。複数の代替パターンを持つ中間命令シーケンスのそれぞれは、以下で「複数代替シーケンス」と表記される。代替パターン生成部464は、特定された代替パターンを表す連結リスト463を生成する。代替パターン生成部464は、複数の代替パターンを持つ中間命令シーケンスのそれぞれに対する連結リスト463を維持していてよい。具体的には、代替パターン生成部464は、中間命令シーケンスのそれぞれに対して単一の連結リスト463を生成してよい。代替パターン生成部464は、例えば、同じ複数代替シーケンスの代替パターンが互いに関連付けられているように、代替パターンを表す連結リスト463を生成してよい。連結リスト463において、同じ複数代替シーケンスの代替パターンは、同じ複数代替シーケンスに関連付けられている。
代替パターン生成部464の出力は、複数の代替パターンを持つ中間命令シーケンスのそれぞれに対する連結リストである。代替パターン生成部464は、連結リスト463を出力する。代替パターン生成部464は、連結リスト463を、入力としてパターン選択部465へ送信してよい。上述したように、代替パターン生成部464は、さらに、複数の代替パターンを持つ中間命令シーケンスのそれぞれの実行カウントを、パターン選択部465へ送信してよい。
パターン選択部465は、コード最適化部440から入力された、最適化された中間表現を受信してよい。パターン選択部465は、代替パターン生成部464から送信された、連結リスト463を受信する。パターン選択部465は、さらに、複数の代替パターンを持つ中間命令シーケンスのそれぞれの実行カウントを受信する。上述のように、中間命令シーケンスのそれぞれの実行カウントは、代替パターン特定部462によって決定されてよい。パターン選択部465は、代替パターンが連結リスト463に含まれる複数代替シーケンスから、すなわち、最適化された中間表現における中間命令シーケンスのうち複数代替シーケンスから、実行カウントが1よりも大きい複数代替シーケンスを抽出する。
パターン選択部465は、実行カウントが1よりも大きい、抽出された複数代替シーケンスに対して、1よりも多くの代替パターンを選択してよく、抽出された複数代替シーケンスに対して選択された代替パターンについて、割合を決定してよい。パターン選択部465は、実行カウントが1よりも大きい、抽出された複数代替シーケンスのそれぞれに対して、1よりも多くの代替パターンを選択してよい。パターン選択部465は、さらに、例えば費用便益分析の結果に基づいて、抽出された複数代替シーケンスのそれぞれに対して選択された代替パターンについて、割合を決定してよい。換言すると、パターン選択部465は、それぞれ1よりも大きい実行カウントを持つ、抽出された複数代替シーケンスの、それぞれに対する代替パターンの、それぞれの割合を決定してよい。複数代替シーケンスのある代替パターンの割合は、その複数代替シーケンスを含む最適化された中間表現を目的プログラムへ変換する場合の、その複数代替シーケンスに対するアセンブリ命令シーケンスとして選択されたその代替パターンの数の、その複数代替シーケンスの実行カウントに対する割合である。複数代替シーケンスの実行カウントは、中間表現において、その複数代替シーケンスに対して選択されたアセンブリ命令シーケンスの数である。割合のそれぞれは、非負の数によって表されていてよい。割合は、選択された代替パターンの実行カウントによって表されていてもよい。
費用対効果分析のための論理は、情報処理装置200の構成及び目的プログラムの構成に応じて変化してよい。費用対効果分析のための論理は、情報処理装置200のユーザによって、入力装置170を介して選択されてよい。パターン選択部465は、2種類以上の論理を組み合わせによる費用対効果分析に基づいて、割合を決定してよい。例えば、パターン選択部465は、目的プログラムが、実行可能ファイルのサイズの条件、速度の条件、レジスタ圧力の条件、生存レジスタ数の条件、又は、上述の条件の可能な組み合わせのうちの一つなどを満たすように、割合を決定してよい。
例えば、以下の説明における想定は、複数代替シーケンスが「multiply r, r, 2」であり、複数代替シーケンス「multiply r, r, 2」に対する代替パターンが「mul r, r, 2」、「shl r, r, 1」、及び「fmul r, r, 2.0」であり、目的プログラムを実行する対象プロセッサが「mul」、「shl」、及び「fmul」の演算のための演算ユニットをそれぞれ1つ含み、「mul r, r, 2」、「shl r, r, 1」、及び「fmul r, r, 2.0」の演算を実行するためのクロックが、それぞれ、7、1、30であり、並びに「multiply r, r, 2」の実行カウントが35であること、である。この場合、「multiply r, r, 2」の演算を32回実行する時間を最小化するために、パターン選択部465は、割合を、演算「mul r, r, 2」の実行カウントが4回で、演算「shl r, r, 1」の実行カウントが28回で、演算「fmul r, r, 2.0」の実行カウントが0回、と決定してよい。
パターン選択部465は、図4においてシーケンスリスト467として示されているリストを、生成し、出力してよい。シーケンスリスト467は、実行カウントが1よりも大きい複数代替シーケンスのそれぞれに対する代替パターン(すなわち、それぞれ同じ結果に導くすアセンブリ命令シーケンス)を、実行カウントによって表されていてもよい、それぞれの割合と共に含む。1よりも大きい実行カウントを持つ複数代替シーケンスは、中間表現において1回よりも多く現れる。シーケンスリスト467は、割合がゼロである代替パターンを含まなくてよい。
パターン選択部465の上述の動作は、以下のように考えることができる。パターン選択部465は、実行カウントが1よりも大きい複数代替シーケンスに対して、それぞれ割合がゼロではない代替パターンを、その複数代替シーケンスに対応する命令シーケンスとして選択する。パターン選択部465は、シーケンスリスト467における複数代替シーケンスから変換された命令シーケンスとして、選択された代替パターンを、シーケンスリスト467へ格納してよい。
パターン選択部465は、複数代替シーケンスのそれぞれついて、アセンブリ命令シーケンスを、それらの割合(例えば実行カウント)とともに出力する。パターン選択部465は、シーケンスリスト467を出力してよい。パターン選択部465は、シーケンスリスト467を命令スケジューラ470へ送信してよい。
パターン選択部465は、複数のパターンから1つのパターンを選択する方法に従って、実行カウントが1である複数代替シーケンスに対して、その複数代替シーケンスの代替パターンから1つの最適な代替パターン(換言すると、最もよい代替パターン)を選択してよい。パターン選択部465は、実行カウントが1である複数代替シーケンス及び複数代替シーケンスではない中間命令シーケンスに対して、1つの最適な代替パターンとして選択された、アセンブリ命令シーケンスを出力してよい。パターン選択部465は、実行カウントが1である複数代替シーケンスに対して選択されたアセンブリ命令シーケンスを含むシーケンスリスト467を、生成し、出力してよい。パターン選択部の上述の動作は、以下のように考えることができる。パターン選択部465は、実行カウントが1である複数代替シーケンスに対して、シーケンスリスト467における、複数代替シーケンスから変換された命令シーケンスとして、1つの最適な代替パターンを選択する。
パターン選択部465は、中間命令シーケンスからアセンブリ命令シーケンスへのマッピングに基づいて、複数代替シーケンスではない中間命令シーケンスに対して、1つのパターン(すなわち、アセンブリ命令シーケンス)を選択してよい。パターン選択部465は、複数代替シーケンスではない中間命令シーケンスに対して選択された1つのパターンを出力してよい。パターン選択部465は、複数代替シーケンスではない中間命令シーケンスに対して選択されたアセンブリ命令シーケンスを含むシーケンスリスト467を、生成し、出力してよい。パターン選択部の上述の動作は、以下のように考えることができる。パターン選択部465は、複数代替シーケンスではない中間命令シーケンスに対して、その中間命令シーケンスから変換された、シーケンスリスト467における命令シーケンスとして、アセンブリ命令シーケンスを選択する。
パターン選択部465は、以下のように動作してよい。パターン選択部465は、最適化された中間表現の複製を、初期シーケンスリスト467として生成してよい。パターン選択部465は、ソースプログラムから生成された、最適化された中間表現から、中間命令を読み出してよく、読みだされた中間命令において、複数代替シーケンスを見つけてよい。パターン選択部465は、中間命令シーケンスのアセンブリ命令シーケンスへのマッピングに基づいて、複数代替シーケンスに含まれない中間命令シーケンスの各々を、単純にアセンブリ命令シーケンスへ変換してもよく、シーケンスリスト467において、複数代替シーケンスに含まれない中間命令シーケンスを、変換されたアセンブリ命令シーケンスによって置き換えてよい。
複数代替シーケンスが見つかった場合、パターン選択部465は、その複数代替シーケンスの実行カウントが1より大きいか確認してよい。その複数代替シーケンスの実行カウントが1より大きくない場合、パターン選択部465は、その複数代替シーケンスに対して、1つの最もよいアセンブリ命令シーケンスを選択してよく、シーケンスリスト467において、その複数代替シーケンスを、1つの最もよいアセンブリ命令シーケンスとして選択されたアセンブリ命令シーケンスによって置き換えてよい。
複数代替シーケンスの実行カウントが1より大きい(すなわち、2又はそれより大きい)場合、パターン選択部465は、複数代替シーケンスの代替パターンの割合を決定する。パターン選択部465は、非ゼロの割合の代替パターン、すなわち、割合がそれぞれゼロではない代替パターンを、複数代替シーケンスの代替パターンから選択してよく、シーケンスリスト467において、複数代替シーケンスを、選択された代替パターンとそれらの割合とによって置き換えてよい。
代替リストにおける命令シーケンスの順番は、その命令シーケンスへ変換された中間命令シーケンスの、中間表現における順番と同じであってよい。
この例では、シーケンスリスト467は、実行カウントが1よりも大きい複数代替シーケンスの中にはない中間命令に対するアセンブリ命令を含む。シーケンスリスト467は、実行カウントが1よりも複数代替シーケンスに対するアセンブリ命令の代わりに、代替パターンをそれらのそれぞれの割合とともに含む。
命令スケジューラ470は、パターン選択部465により出力される、上述のシーケンスリスト467を受信してよい。上述のように、シーケンスリスト467は、複数代替シーケンスではない中間命令シーケンスから変換されたアセンブリシーケンスを、命令シーケンスとして含んでいてよい。シーケンスリスト467は、実行カウントが1である複数代替シーケンスに対して選択された、1つの最適な代替パターン(すなわち、アセンブリ命令シーケンス)を、命令シーケンスとして含んでいてよい。シーケンスリスト467は、さらに、実行カウントが1よりも大きい複数代替シーケンスに対して選択された代替パターンを、その割合とともに、命令シーケンスとして含んでいてよい。
命令スケジューラ470は、実行カウントが1よりも大きい複数代替シーケンス、すなわち、中間表現においてそれぞれ2回以上現れる複数代替シーケンスに対する、代替パターンを、それらのそれぞれの割合とともに、シーケンスリスト467として受信する。
命令スケジューラ470は、複数代替シーケンスのそれぞれに対する代替パターンのうちの一つを、割合に基づいて選択する。代替パターンの割合は、代替パターンが実行される回数によって表現されていてよい。この場合、命令スケジューラ470は、複数代替シーケンスを、その複数代替シーケンスの代替パターンへ、その代替パターンの割合によって表される回数、変換してよい。命令スケジューラ470は、シーケンスリスト467内における、複数代替シーケンスの数に対する代替パターンのうちのある代替パターンの比率が、その代替パターンの割合と比例するように、複数代替シーケンスの代替パターンのうちの一つを選択し、その複数代替シーケンスを選択された代替パターンによって置き換えてよい。複数代替シーケンスのそれぞれがシーケンスリスト467内の代替パターンで置き換えられた場合、シーケンスリストは、複数代替シーケンスを含まないが、アセンブリ命令を含む。
命令スケジューラ470は、シーケンスリスト467に含まれる命令シーケンスの命令(すなわちアセンブリ命令)をスケジューリングする。換言すると、命令スケジューラ470は、目的プログラムにおける、アセンブリ命令の順番を決定する。
命令スケジューラ470によるスケジューリング(すなわち命令の順番の決定)の方法は、アセンブリ命令をスケジューリングする既存の方法の一つであってよい。命令スケジューラ470は、命令スケジューラ470によって決定された順番で配置されたアセンブリ命令を出力してよい。命令スケジューラ470は、決定された順番で配置されたアセンブリ命令を、レジスタ割当て部480へ送信してよい。
レジスタ割当て部480は、命令スケジューラ470により出力された、配置された(すなわちスケジューリングされた)アセンブリ命令を受信する。レジスタ割当て部480は、アセンブリ命令に対して、対象マシンにおいて利用可能なレジスタを割り当てる。より詳細には、レジスタ割当て部480は、アセンブリ命令内のオペランドがレジスタを参照するオペランドであるレジスタオペランドであり、レジスタ割り当てが必要な場合に、そのオペランドにレジスタを割り当てる。レジスタ割当て部480は、メモリ位置を参照するオペランドであるメモリオペランドにはレジスタを割り当てず、レジスタ割り当ては必要ない。レジスタ割当て部480は、レジスタが割り当てられた配置されたアセンブリ命令から、対象ハードウェアアーキテクチャを有するコンピュータによる実行が可能な、目的プログラムを生成する。レジスタ割当て部480は、目的プログラムを出力する。
次に、情報処理装置の動作の例を、図面を参照しながら詳しく説明する。
図6A、6B、6C、及び6Dは、本開示の実施形態に係る情報処理装置200の動作の例のフローチャートである。本実施形態に係る情報処理装置200は命令スケジューリングとは無関係に命令選択を行う。
図6Aは、情報処理装置200の動作全体の例のフローチャートである。図6Aのフローチャートによれば、フロントエンド420がソースプログラムを解析する(ステップS611)。ソースプログラムは、情報処理装置200へ入力されてもよい。ソースプログラムは、情報処理装置200にあらかじめ記憶されていてもよい。中間コード生成部430は、ソースプログラムから中間表現を生成する。すなわち、中間コード生成部430は、ソースプログラムを中間表現へ変換する(ステップS612)。コード最適化部440は、中間コード生成部430によって生成された中間表現を最適化する(ステップS613)。そして、コード生成部450は、ソースコードから変換された中間表現から、目的プログラムを生成するために、後で詳しく説明するようにコード生成処理を行う(ステップS614)。コード生成部450は、目的プログラムを出力する(ステップS615)。
図6Bは、情報処理装置200のコード生成処理の例のフローチャートである。
代替パターン特定部462は、中間表現において、2つ以上の代替パターン、すなわち、同じ結果に導くアセンブリ命令シーケンス、のいずれか一つによって実現される中間命令シーケンスを探索し、2つ以上の代替パターン、すなわち、同じ結果に導くアセンブリ命令シーケンス、のいずれか一つにより実現される中間命令シーケンスを特定する(ステップS621)。上述のように、2つ以上の代替パターンにより実現される中間命令シーケンスは、「複数の代替パターンを持つ中間命令シーケンス」と表記され、「複数代替シーケンス」とも表記される。
そして代替パターン生成部464は、複数代替シーケンス、すなわち、ステップS621において代替パターン特定部462によって特定された、複数の代替パターンを持つ中間命令シーケンス、のそれぞれに対して、代替パターンを生成する(ステップS622)。代替パターン生成部464は、複数代替シーケンスの代替パターンである2つ以上のアセンブリ命令シーケンスの各アセンブリ命令の演算子とオペランドを、その複数代替シーケンスの演算子及びオペランドに基づいて生成してよい。複数代替シーケンスの代替パターンを生成する方法は、複数代替シーケンスの各種類に対してあらかじめ定義されている。代替パターン生成部464は、複数代替シーケンスの、生成された代替パターンを、複数代替シーケンスのそれぞれについて、複数代替シーケンスの代替パターンが、互いに関連付けられ、そしてその複数代替シーケンスと関連付けられているように、連結リスト463へ格納してよい。
例えば、パターン選択部465は、複数代替シーケンス(すなわち複数の代替パターンを持つ中間命令シーケンス)のそれぞれの実行カウントを決定してよい(ステップS623)。上述のように、複数代替シーケンスの実行カウント正確に決まっていない場合、パターン選択部465は、複数代替シーケンスの実行カウントを推定してよい。
パターン選択部465は、1よりも大きい実行カウントを持つ複数代替シーケンス、すなわち、中間表現において1回よりも多く実行される複数代替シーケンス、のそれぞれについて、代替パターンの割合を決定してよい(ステップS624)。
パターン選択部465は、それぞれ1回よりも多く実行される複数代替シーケンスに対する、代替パターンとそれらのそれぞれの割合とを含むシーケンスリスト467を生成するために、変換処理を行う(ステップS625)。変換処理は後で詳しく説明する。
命令スケジューラ470は、アセンブリ命令を生成するために、スケジューリング処理を行う(ステップS626)。スケジューリング処理も後で詳しく説明する。
レジスタ割当て部480は、プロセッサ110のレジスタをアセンブリ命令に割り当て(ステップS627)、目的プログラムを生成する。アセンブリ命令にレジスタを割り当てる方法は、既存のレジスタ割り当て方法のうちの一つであってよい。
図6Cは、本実施形態に係る情報処理装置200の変換処理の例のフローチャートである。
パターン選択部465は、シーケンスリスト467を初期化してよい(ステップS631)。パターン選択部465は、シーケンスリスト467として、連結リスト463の複製を生成してよい。
パターン選択部465は、シーケンスリスト467において選択されていない複数代替シーケンスから、1つの複数代替シーケンスを選択してよい(ステップS632)。
パターン選択部465は、選択された複数代替シーケンスが中間表現において1回よりも多く実行されるかを判定してよい(ステップS633)。パターン選択部465は、選択された複数代替シーケンスが中間表現において実行される回数を判定するために、選択された複数代替シーケンスの実行カウントの値を確認してよい。選択された複数代替シーケンスの実行カウントが1の場合、この複数代替シーケンスは中間表現において1回実行される。複数代替シーケンスの実行カウントが1よりも大きい場合、その複数代替シーケンスは中間表現において1回よりも多く実行される。
選択された複数代替シーケンスが中間命令において1回だけ実行される場合(ステップS633においてNO)、パターン選択部465は、選択された複数代替シーケンスに対するシーケンスリスト467における命令として、選択された複数代替シーケンスの代替パターンから1つの最適な代替パターンを選択してよい(ステップS634)。
選択された複数代替シーケンスが中間表現において1回よりも多く実行される場合(ステップS633においてYES)、パターン選択部465は、選択された複数代替シーケンスの代替パターンから、非ゼロの割合を持つ代替パターンを選択してよい。非ゼロの割合を持つ代替パターンのそれぞれは、割合がゼロではない代替パターンである。パターン選択部465は、選択された複数代替シーケンスに対するシーケンスリスト467における命令として、選択された代替パターンをそれらのそれぞれの非ゼロの割合とともに選択してよい(ステップS635)。この場合、選択された代替パターンであるアセンブリ命令シーケンスと、それらのそれぞれの割合とが、命令として選択される。非ゼロの割合を持つ代替パターンの数が1つだけである場合、パターン選択部465は、複数代替シーケンスに対するシーケンスリスト467における命令として、割合がゼロではないその代替パターンを選択してよい。この場合、割合がゼロではないその代替パターンであるアセンブリ命令シーケンスが、命令として選択される。
次に、パターン選択部465は、シーケンスリスト467において、複数代替シーケンスを選択された命令で置き換えてよい(ステップS636)。上述したように、選択された命令は、アセンブリ命令シーケンス、又は、複数のアセンブリ命令シーケンス及びそれらのそれぞれの割合であってよい。パターン選択部465は、代替パターンに非ゼロの割合を持つ2つ以上の代替パターンが含まれる複数代替シーケンス以外の複数代替シーケンスを、命令シーケンスとしてのアセンブリ命令シーケンスによって置き換えてよい。パターン選択部465は、代替パターンに非ゼロの割合を持つ2つ以上の代替パターンが含まれる複数代替シーケンスを、命令シーケンスとしての複数の代替パターン及びそれらのそれぞれの割合によって置き換えてよい。
中間表現において全ての複数代替シーケンスが選択されているわけではない場合(ステップS637においてNO)、情報処理装置200の動作は、ステップS632に戻り、情報処理装置200は、ステップS632から動作を繰り返す。中間表現において全ての複数代替シーケンスが選択された場合(ステップS637においてYES)、パターン選択部465は、他の中間命令、すなわち、複数代替シーケンスに含まれない中間命令、に対して、中間命令からアセンブリ命令へのマッピングに基づくアセンブリ命令を、選択された中間命令に対するシーケンスリスト467における命令として選択する(ステップS638)。パターン選択部465は、他の中間命令を、選択された命令、すなわち、選択されたアセンブリ命令によって置き換える(ステップS639)。情報処理装置200は、図6Cの動作を終了する。
図6Dは、本実施形態に係る情報処理装置200のスケジューリング処理の例のフローチャートである。命令スケジューラ470がシーケンスリスト467を受信場合、命令スケジューラ470は、図6Dの動作を開始する。
命令スケジューラ470は、シーケンスリスト467において、非ゼロの割合を持つ代替パターンの命令を特定してよい(ステップS641)。非ゼロの割合を持つ代替パターンの命令の各々は、シーケンスリスト467に命令シーケンスとして含まれる、複数の代替パターンとそれらのそれぞれの割合である。非ゼロの割合を持つ代替パターンの命令がシーケンスリスト467内にない場合(ステップS642においてNO)、命令スケジューラ470は、シーケンスリスト467における命令をスケジューリングする(ステップS644)。そして、情報処理装置200は、図6Dのフローチャートの動作を終了する。
非ゼロの割合を持つ代替パターンの命令がシーケンスリスト467にある場合(ステップS642においてYES)、命令スケジューラ470は、非ゼロの割合を持つ代替パターンの命令の各々について、非ゼロの割合を持つ代替パターンのうち1つの代替パターンを、代替パターンの割合に基づいて選択してよい(ステップS643)。命令スケジューラは、非ゼロの割合を持つ代替パターンの命令シーケンスの各々について、非ゼロの割合を持つ代替パターンの命令シーケンスを、その命令シーケンスに対して選択された代替パターン(すなわちアセンブリ命令シーケンス)で置き換えてよい。命令スケジューラ470は、シーケンスリスト467におけるアセンブリ命令をスケジューリングする(ステップS644)。そして、情報処理装置200は、図6Dのフローチャートの動作を終了する。
本実施形態の有利な効果は、実行ユニットを含むシステムの性能を改善できることである。
同じ中間命令シーケンスが同じアセンブリ命令シーケンスへ変換される場合、同じ中間命令シーケンスから変換されたアセンブリ命令シーケンスは、乗算部などの同じ実行ユニットのみによって実行され、他の実行ユニットは、アイドル状態になるであろう。
本実施形態では、代替パターン特定部462は、1回よりも多く実行される複数代替シーケンスを特定する。パターン選択部465は、特定された複数代替シーケンスの代替パターンの割合を決定する。命令スケジューラ470は、割合に基づいて、代替パターン(すなわち異なるアセンブリ命令シーケンス)のうちの一つを選択する。結果として、同じ中間命令シーケンスの各々は、2つ以上の異なる種類のうちの1つのアセンブリ命令シーケンス、すなわち、演算子の異なる組み合わせのうちの1つのアセンブリ命令へ変換されうる。アセンブリ命令を実行する実行ユニットは、アセンブリ命令に含まれる演算子に応じて定まりうる。
その結果、本実施形態では、同じ中間命令シーケンスから変換されたアセンブリ命令を実行するのに、2つ以上の異なる実行ユニットが使用されうる。異なる実行ユニットは、並列に動作しうる。これにより、同じ中間命令シーケンスから変換されたアセンブリ命令を実行する時間は、同じ中間命令シーケンスが同じ演算子を持つアセンブリ命令へ変換される場合と比べて、短縮される。したがって、実行ユニットを含むシステムの性能を改善できる。
<第2実施形態>
図5は、本開示の第2実施形態に係る情報処理装置500の構成例のブロック図である。
第1実施形態に係る情報処理装置200は、命令スケジューリングとは無関係に、命令選択を行う。換言すると、情報処理装置200は、ソースプログラムから生成されたアセンブリ命令のスケジューリングとは無関係に、代替パターンの各々の割合を決定する。対照的に、情報処理装置500は、命令スケジューリングとは無関係ではなく、命令選択を行う。換言すると、情報処理装置500は、アセンブリ命令のスケジューリングを行う間に得られる情報に基づいて、代替パターンの各々の割合を決定する。
情報処理装置500は、フロントエンド520、中間コード生成部530、コード最適化部540、代替パターン特定部550、代替パターン生成部561、利用可能リスト生成部564、リソースモニタ570、スケジューリング基準モジュール580、パターン選択部582、命令スケジューラ583及びレジスタ割当て部584を含む。上述したように、情報処理装置500は、プロセッサ及びメモリを含むコンピュータによって実現される。情報処理装置500は、プロセッサ590及びメモリ591を含むように、図5に描かれている。以下で説明するように、レジスタ割当て部584は、実行可能な命令である機械語命令を出力する。プロセッサ590は、レジスタ割当て部584によって出力される機械語命令を実行する。
図5のフロントエンド520は、図4のフロントエンド420が動作するのと同様に動作する。図5の中間コード生成部530は、図4の中間コード生成部430が動作するのと同様に動作する。図5のコード最適化部540は、図4のコード最適化部440が動作するのと同様に動作する。図5の代替パターン特定部550は、図4の代替パターン特定部462が動作するのと同様に動作する。図5の代替パターン生成部561は、図4の代替パターン生成部464が動作するのと同様に動作する。代替パターン生成部561により出力される図5の連結リスト563は、図4の連結リスト463と同じである。パターン選択部582により出力されるシーケンスリスト567は、図4のシーケンスリスト467と同じである。シーケンスリストは代替パターンの割合を含まなくてもよい。
リソースモニタ570は、目的プログラムが情報処理装置500のプロセッサ590によって実行される場合に使用されうる、例えば実行ユニットやALUなどのリソースを監視し、監視の結果としてリソースの状態を取得し、リソースの状態を表す状態情報を出力する。リソースの状態は、リソースがビジーであることを示すビジー状態、又は、リソースが空いていることを示す空き状態であってよい。リソースモニタ570は、リソースのそれぞれについて出力される状態として、ビジーであることを示す値又はビジーであることを示す別の値を含む状態情報を、出力してよい。リソースモニタ570は、複数のリソースを監視してよく、複数のリソースの状態を取得してよく、複数のリソースの状態をそれぞれ表す値を出力する。リソースモニタ570は、複数代替シーケンスの代替パターンを代替パターン特定部550から受信してよく、受信した代替パターンをプロセッサ590が実行する際に使用されるリソースの状態を取得してよい。リソースモニタ570は、状態情報を、スケジューリング基準モジュール580及びパターン選択部582へ送信してよい。
スケジューリング基準モジュール580は、アセンブリ命令をスケジューリングするための基準を記憶する。その基準は、情報処理装置500の管理者又はユーザにより定義されてよい。基準は、速度の条件、レジスタ圧力の条件、生存レジスタ数の条件、又は、前述の条件の可能な組み合わせのうちの一つ等を含んでいてよい。基準は上述の例に限定されない。スケジューリング基準モジュール580は、状態情報をリソースモニタ570から受信してよく、状態情報に基づいて基準を更新してよい。リソースモニタ570は、例えば、状態情報が現在ビジーである実行ユニットに関する情報を含む場合、基準において、利用可能な実行ユニットからビジーな実行ユニットを除外すること、状態情報が現在使用中のレジスタに関する情報を含む場合、基準において、利用可能なレジスタから使用中のレジスタを除外すること、などによって、基準を更新してよい。そのような情報は、代替パターン(すなわちアセンブリ命令シーケンス)の組み合わせを決定する際に、代替パターンの決定された組み合わせが最も有利であるように、パターン選択部582によって使用されてよい。基準の更新方法は、上述の例に限定されず、また上述の例を含まなくてもよい。スケジューリング基準モジュール580は、基準を出力する。その基準は、更新された基準であってよい。スケジューリング基準モジュール580は、基準をパターン選択部582へ送信してよい。
パターン選択部582は、代替パターン生成部561によって出力された連結リスト563と、コード最適化部540から出力された、最適化された中間表現とを受信する。連結リスト463と同様に、連結リスト563は、複数代替シーケンスのそれぞれについて、代替パターンを含む。
パターン選択部582は、実行カウント、すなわち、代替パターン特定部550によって特定された複数代替シーケンスのそれぞれが、最適化された中間表現において実行される回数、を、パターン選択部465が回数を決定するのと同様の方法によって決定してよい。
パターン選択部582は、最適化された中間表現において1回実行される複数代替シーケンスに対して、その複数代替シーケンスの代替パターンの中の1つの最適な代替パターンを、シーケンスリスト567における命令として選択してよい。パターン選択部582は、最適化された中間表現において2回以上実行される複数代替シーケンスに対して、その複数代替シーケンスの代替パターンを、シーケンスリスト567における命令として選択してよい。パターン選択部582は、最適化された中間表現に含まれる、複数代替シーケンスに含まれる中間命令ではない中間命令に対して、中間命令シーケンスからアセンブリ命令シーケンスへのマッピングに基づいてアセンブリ命令を選択してよい。
具体的には、パターン選択部582は、以下のように動作してよい。パターン選択部582は、代替パターン特定部550によって特定された複数パターンシーケンスの中の、選択されていない複数パターンシーケンスから、1つの複数パターンシーケンスを選択してよい。
選択された複数代替シーケンスが、最適化された中間表現において実行される回数が1である場合、すなわち、選択された複数代替シーケンスの実行カウントが1である場合、パターン選択部582は、選択された複数代替シーケンスに対するシーケンスリスト567における命令シーケンスとして、選択された複数代替シーケンスの代替パターンから、1つの最適な代替パターンを、パターン選択部465が行うのと同様の方法で選択する。上述のように、代替パターンのそれぞれは、アセンブリ命令シーケンスである。選択された1つの最適な代替パターンも、また、アセンブリ命令シーケンスである。
選択された複数代替シーケンスが、最適化された中間表現において実行される回数が、1よりも多い場合、すなわち、選択された複数代替シーケンスの実行カウントが1よりも大きい場合、パターン選択部582は、選択された複数代替シーケンスに対するシーケンスリスト567における命令シーケンスとして、選択された複数代替シーケンスの代替パターンを選択する。
パターン選択部582は、シーケンスリスト567における他の中間命令に対する命令として、中間命令シーケンスからアセンブリ命令シーケンスへのマッピングに基づいて、アセンブリ命令を選択してよい。他の中間命令は、最適化された中間表現に含まれ、複数代替シーケンスに含まれない中間命令である。パターン選択部582は、アセンブリ命令シーケンスへ変換できる中間命令シーケンスを抽出すること、及び、抽出された中間命令シーケンスに対するシーケンスリスト567における命令シーケンスとして、アセンブリ命令シーケンスを選択することを、全ての他の中間命令が中間命令シーケンスの一部として抽出されるまで繰り返すことができる。
パターン選択部582は、最適化された中間表現をシーケンスリスト567として複製することで、シーケンスリスト567を初期化してよい。パターン選択部582は、実行カウントが1である複数代替シーケンスを、その複数代替シーケンスに対するシーケンスリスト567における命令として選択された1つの最適な代替パターンによって置き換えてよい。パターン選択部582は、実行カウントが1よりも大きい複数代替シーケンスを、その複数代替シーケンスに対するシーケンスリスト567における命令として選択された代替パターンによって置き換えてよい。パターン選択部582は、他の中間命令を、シーケンスリスト567における命令として選択されたアセンブリ命令によって置き換えてよい。パターン選択部582は、シーケンスリスト567を出力する。パターン選択部582は、シーケンスリスト567を、利用可能リスト生成部564へ送信してよい。上述のように、シーケンスリスト567は、代替パターンにの割合を含まなくてもよい。シーケンスリスト567は、命令の割合を含んでいてもよい
以下で、パターン選択部582をさらに説明する。
利用可能リスト生成部564は、パターン選択部582によって出力されたシーケンスリスト567を受信する。
シーケンスリスト567は、1つの最適な代替パターンに含まれるアセンブリ命令と、複数パターンシーケンスに含まれない中間命令から変換されたアセンブリ命令と、実行カウントが1よりも大きい複数パターンシーケンスの代替パターンと、を含む。つまり、シーケンスリスト567は、アセンブリ命令と代替パターンとを含む。以下の説明において、シーケンスリスト567に含まれる命令シーケンスは、複数のアセンブリ命令のうちのアセンブリ命令、1つの最適な代替パターンのアセンブリ命令、又は、代替パターンである。
利用可能リスト生成部564は、次に実行できる命令シーケンスをシーケンスリスト567から抽出してよい。利用可能リスト生成部564は、次に実行できる状態にある複数の命令シーケンスを、シーケンスリスト567から抽出してよい。シーケンスリスト567の命令シーケンスが実行されていない場合、シーケンスリスト567の最初の命令シーケンスが、次に実行できる状態にある命令シーケンスのうちの一つであり得る。シーケンスリスト567に最初の命令シーケンスと並列に実行できる状態にある命令シーケンスがある場合、この命令シーケンスも次に実行できる状態にある命令シーケンスの一つである。ある命令シーケンス(「第2命令シーケンス」と表記する)の結果を使用する命令シーケンス(「第2命令シーケンス」と表記する)は、第2命令シーケンスの結果が得られるまで、実行できる状態にない。利用可能リスト生成部564は、他の命令シーケンスの結果を使用しない命令シーケンスと、結果が既に得られている他の命令シーケンスの結果を使用する命令シーケンスを抽出してよい。利用可能リスト生成部564は、抽出された、次に実行できる状態にある命令シーケンスを含む、利用可能リスト565を生成する。利用可能リスト生成部564は、抽出された、次に実行できる状態にある命令シーケンスを、出力する。利用可能リスト生成部564は、利用可能リスト565を出力してよい。利用可能リスト生成部564は、利用可能リスト565を、命令スケジューラ583へ送信してよい。
以下では、次に実行できる状態にある命令シーケンスを、「実行可能命令シーケンス」と表記する。上述のように、シーケンスリスト567は、代替パターンを命令シーケンスとして含んでいてよい。したがって、利用可能リスト565は、代替パターンを実行可能命令シーケンスとして含んでいてよい。
利用可能リスト生成部564は、シーケンスリスト567で表される動作フローを解析して、抽出された、次に実行できる状態にある命令シーケンスを抽出するために、シーケンスリスト567によって表される動作フローを解析してよい。ソースプログラムにおける論理は、命令シーケンスが、別の命令シーケンスの入力として使われるデータを生成する、プロデューサ−コンシューマ・データフローパターンに従って書かれていてよい。データを生成する命令シーケンスは、プロデューサ命令シーケンス(すなわち上述の第1命令シーケンス)と呼ばれ、プロデューサ命令シーケンスによって生成されたデータを使う命令シーケンスは、コンシューマ命令シーケンス(すなわち上述の第2命令シーケンス)と呼ばれる。コンシューマ命令シーケンスは、プロデューサ命令シーケンスがデータを生成する前には実行できない。これは、コンパイルの用語において、「データハザード」として知られる。利用可能リスト生成部564は、既に消費可能であるデータを使う命令シーケンスを出力する。
パターン選択部582は、さらに、以下で説明されるように実行できる状態にある代替パターンを、命令スケジューラ583から受信する。命令スケジューラ583は、以下で詳しく説明される。命令スケジューラ583から代替パターンを受信した場合、パターン選択部582は、状態情報に対する要求を、リソースモニタ570へ送信してよく、基準に対する要求を、スケジューリング基準モジュール580へ送信してよい。パターン選択部582は、リソースモニタ570によって出力された状態情報と、スケジューリング基準モジュール580によって出力された基準とを受信する。
パターン選択部582は、リソースモニタ570によって出力された状態情報とスケジューリング基準モジュール580によって出力された基準とに基づいて、命令スケジューラ583から受信した代替パターンの割合を決定してよい。換言すると、パターン選択部582は、使用されていない、例えば実行ユニットやALUなどの利用可能なリソースに基づいて、代替パターンの割合を決定してよい。パターン選択部582は、代替パターンを命令スケジューラ583から受信してよく、受信した代替パターンの割合を命令スケジューラ583へ送信してよい。
命令スケジューラ583は、次に実行することのできる命令シーケンスを受信する。命令スケジューラ583は、利用可能リスト生成部564によって出力された、利用可能リスト565を受信してよい。
命令スケジューラ583は、利用可能リスト生成部564が代替パターンを実行可能命令シーケンスとして出力しているかを確認する。命令スケジューラ583は、利用可能リスト565に実行可能命令シーケンスとして含まれている代替パターンを抽出してよい。以下では、利用可能リスト565に実行可能命令シーケンスとして含まれる利用可能なパターンを、「利用可能パターンセット」と表記する。
利用可能リスト生成部564によって代替パターンが実行可能命令シーケンスとして出力された場合、すなわち、命令スケジューラ583が、利用可能リスト565に実行可能命令シーケンスとして含まれる少なくとも1つの利用可能パターンセットを抽出した場合、命令スケジューラ583は、代替パターンとしての同じ代替パターンセットが抽出されたかを確認する。
換言すると、命令スケジューラ583は、利用可能リスト565に含まれる代替パターンである実行可能命令シーケンスのそれぞれに対して、実行カウントを決定してよい。さらに換言すると、命令スケジューラ583は、利用可能リスト565における、複数代替シーケンスに相当する実行可能命令シーケンスのそれぞれに対して、実行カウントを決定してよい。
本実施形態では、代替パターンセット(第1代替パターンセット)は、他の代替パターンセット(第2代替パターンセット)と、第1代替セットの代替パターンに含まれる演算子が第2代替セットの代替パターンに含まれる演算子と同じである場合に、同じになる。
命令スケジューラ583は、同じ利用可能パターンセットが抽出されていない利用可能パターンセットに対して、1つの最適なアセンブリ命令シーケンスを選択してよい。換言すると、命令スケジューラ583は、実行カウントが1である利用可能パターンセットに対して、1つの最適なアセンブリ命令シーケンスを選択してよい。命令スケジューラ583は、利用可能パターンセットの利用可能パターンを、選択された1つの最適なアセンブリ命令シーケンスによって置き換えてよい。
2つ以上の代替パターンセットが同じである場合、これらの代替パターンセットについて、命令スケジューラ583は、代替パターンをパターン選択部582へ送信してよい。換言すると、実行カウントが1よりも大きい実行可能命令シーケンスについて、命令スケジューラ583は、その実行可能命令シーケンスの代替パターンを送信してよい。命令スケジューラ583は、代替パターンの割合を、パターン選択部582から受信してよい。命令スケジューラ583は、代替パターンセットの代替パターンをパターン選択部582へ送信してよい。命令スケジューラ583は、代替パターンとして、代替パターンセットの代替パターンの演算子のセットを送信してよい。命令スケジューラ583は、実行可能命令シーケンスとして受信した代替パターンから、1つの代替パターンを、割合に基づいて選択する。利用可能リスト565が、それぞれ代替パターンの組み合わせである2つ以上の実行可能命令シーケンスを含む場合、命令スケジューラ583は、それらの組み合わせの各々の、代替パターンを、パターン選択部582へ送信してよく、代替パターンの割合を受信してよく、割合に基づいて、代替パターンから1つの代替パターンを選択してよい。
命令スケジューラ583は、受信した利用可能リスト565に含まれる代替パターンを、上述したようにアセンブリ命令シーケンスであり、代替パターンに対して選択された、代替パターンによって置き換えてよい。
結果として、利用可能リスト565は、代替パターンを含まず、アセンブリ命令シーケンスに含まれる、アセンブリ命令を含む。命令スケジューラ583は、利用可能リスト565に含まれるアセンブリ命令をスケジューリングする。命令スケジューラ583は、アセンブリ命令を出力する。
レジスタ割当て部584は、命令スケジューラ583によって出力されたアセンブリ命令を受信し、機械語命令を生成するために、受信したアセンブリ命令にレジスタを割り当てる。
プロセッサ590は、機械語命令を受信し、必要であればメモリ591を使って、機械語命令を実行する。機械語命令を終了する際、プロセッサ590は、利用可能リスト生成部564に終了した機械語命令についての情報を知らせてよい。
利用可能リスト生成部564は、終了した機械語命令についての情報を受信してよく、終了した機械語命令についての情報に基づいて、実行できる状態にある命令シーケンスを更新してよい。より詳細には、利用可能リスト生成部564は、終了した機械語命令に対応するアセンブリ命令を含む命令シーケンスを特定してよく、終了した機械語命令によって生成されるデータが利用可能である場合に利用可能になるデータを使用する命令シーケンスを、新しい実行可能命令シーケンスとして抽出してよい。そして、利用可能リスト生成部564は、新しい実行可能命令シーケンスを含む新しい利用可能リスト565を生成してよく、その新しい利用可能リスト565を命令スケジューラ583へ送信してよい。
図7A、7B、7C、7D及び7Eは、本実施形態の情報処理装置500の動作例のフローチャートである。
図7Aは、情報処理装置500における動作全体の例のフローチャートである。
まず、フロントエンド520が、フロントエンド520へ入力されたソースプログラムを解析する(ステップS711)。次に、中間コード生成部530が、ソースプログラムを中間表現へ変換する(ステップS712)。コード最適化部540は、中間表現を最適化し(ステップS713)、最適化された中間表現を生成する。ステップS711、ステップS712、及びステップS713の動作は、それぞれ、ステップS611、ステップS612、及びステップS613の動作と同様である。次に、情報処理装置500は、コード生成処理を行う(ステップS714)。コード生成処理において、情報処理装置500は、最適化された中間コードを機械語命令へ変換し、その機械語命令を出力する。ステップS714におけるコード生成処理を以下で詳しく説明する。
図7Bは、本実施形態の情報処理装置500のコード生成処理における動作例のフローチャートである。
代替パターン特定部550は、最適化された中間表現において、複数代替シーケンスを特定する(ステップS721)。代替パターン生成部561は、複数代替シーケンスのそれぞれに対して代替パターンを生成する(ステップS722)。ステップS721及びステップS722の動作は、それぞれステップS621及びステップS622の動作と同様である。そして、情報処理装置500は、変換処理(ステップS725)と、スケジューリング処理(ステップS726)とを行う。変換処理において、情報処理装置500は、最適化された中間表現を、アセンブリ命令を含むシーケンスリスト567へ変換する。シーケンスリスト567は、さらに、代替パターンの命令シーケンスを含んでいてよい。換言すると、シーケンスリスト567は、代替パターンを、命令シーケンス(すなわち代替パターンの命令シーケンス)として含んでいてよい。代替パターンの命令シーケンスは、複数代替シーケンスから変換された、複数代替シーケンスの複数の代替パターンである。スケジューリング処理において、情報処理装置500は、ソースプログラムから生成された機械語命令を実行するコンピュータの状態に基づいて、シーケンスリスト567に含まれる複数の代替パターンから、1つの代替パターンを、命令シーケンスとして選択する。本実施形態では、情報処理装置500は、ソースプログラムから生成された機械語命令を実行するコンピュータである。ステップS725における変換処理及びステップS726におけるスケジューリング処理を以下で詳しく説明する。
図7Cは情報処理装置500の変換処理の動作例のフローチャートである。
パターン選択部582はシーケンスリスト567を初期化してよい(ステップS731)。パターン選択部582は、シーケンスリスト567として、連結リスト563の複製を生成してよい。
パターン選択部582は、シーケンスリスト567において、選択されていない複数代替シーケンスから、1つの複数代替シーケンスを選択してよい(ステップS732)。
パターン選択部582は、選択された複数代替シーケンスの代替パターンから、非ゼロの割合を持つ代替パターンを、選択された複数代替シーケンスに対する、シーケンスリスト567における命令として選択してよい(ステップS735)。上述したように、非ゼロの割合を持つ代替パターンのそれぞれは、割合がゼロではない代替パターンである。選択された代替パターンである複数のアセンブリ命令シーケンスと、それらの各々の割合とが、命令として選択される。非ゼロの割合を持つ代替パターンの数が1つだけの場合、パターン選択部582は、複数代替シーケンスに対する、シーケンスリスト567における命令として、割合がゼロではないその代替パターンを選択してよい。この場合、割合がゼロではないその代替パターンであるアセンブリ命令シーケンスが、命令として選択される。
次に、パターン選択部582は、シーケンスリスト567において、複数代替シーケンスを選択された命令によって置き換えてよい(ステップS736)。上述したように、選択された命令は、アセンブリ命令シーケンス、又は、複数のアセンブリ命令シーケンスとそれらの各々の割合とでしてよい。パターン選択部582は、代替パターンが非ゼロの割合を持つ2つ以上の代替パターンを含む複数代替シーケンス以外の、複数代替シーケンスを、命令シーケンスとしてのアセンブリ命令シーケンスによって置き換えてよい。パターン選択部582は、代替パターンが非ゼロの割合を持つ2つ以上の代替パターンを含む複数代替シーケンスを、命令シーケンスとしての複数の代替パターンとそれらの各々の割合とによって、置き換えてよい。
中間表現における全ての複数代替シーケンスが選択されたわけではない場合(ステップS737においてNO)、情報処理装置500の動作は、ステップS732に戻り、情報処理装置500は、ステップS732から動作を繰り返す。
中間表現における全ての複数代替シーケンスが選択された場合(ステップS737においてYES)、パターン選択部582は、他の中間命令、すなわち、複数代替シーケンスに含まれない中間命令に対して、選択された中間命令に対するシーケンスリスト567における命令として、中間命令からアセンブリ命令へのマッピングに基づくアセンブリ命令を選択する(ステップS738)。パターン選択部582は、他の中間命令を、選択された命令、すなわち、選択されたアセンブリ命令によって置き換える(ステップS739)。情報処理装置500は、図7Cの動作を終了する。
図7Dは、情報処理装置500のスケジューリング処理の動作例のフローチャートである。
利用可能リスト生成部564は、中間表現から生成された機械語命令を実行するプロセッサ590によって通知された、完了した機械語命令に基づいて、シーケンスリスト567から実行可能命令シーケンスを抽出し、実行可能命令シーケンスを含む利用可能リスト565を更新する(ステップS740)。利用可能リスト生成部564は、シーケンスリスト567から、複数の実行可能命令シーケンスを抽出してよい。
命令スケジューラ583は、利用可能リスト565において、代替パターンの実行可能命令シーケンスを特定する(ステップS741)。代替パターンの実行可能命令シーケンスは、シーケンスリスト567における命令シーケンスとして選択され、実行できる状態にある命令シーケンスとして利用可能リストへ追加された代替パターンである。
利用可能リストにおいて、代替パターンの実行可能命令シーケンスが特定されない場合(ステップS742においてNO)、命令スケジューラ583は、利用可能リスト565における実行可能命令シーケンスをスケジューリングする(ステップS744)。2つ以上の実行可能命令シーケンスが利用可能リスト565に含まれている場合、命令スケジューラ583は、その2つ以上の実行可能命令シーケンスをスケジューリングする。
少なくとも1つの、代替パターンの実行可能命令シーケンスが、利用可能リストにおいて特定された場合(ステップS742においてYES)、情報処理装置500は、選択処理を行う(ステップS743)。ステップS743における選択処理では、1つの代替パターン(すなわちアセンブリ命令シーケンス)が、代替パターンの実行可能命令シーケンスの、複数の代替パターンに対して選択され、代替パターンの実行可能命令シーケンスが、選択された代替パターンによって置き換えられ、選択された代替パターンが、実行可能命令シーケンスになる。2つ以上の、代替パターンの実行可能命令シーケンスが特定された場合、S743において、2つ以上の、代替パターンの実行可能命令シーケンスは、それらのそれぞれの、選択された代替パターンによって置き換えられる。選択処理は以下で詳しく説明される。そして、命令スケジューラ583は、実行可能命令シーケンスをスケジューリングする(ステップS744)。
次に、レジスタ割当て部584は、実行可能命令シーケンスに、レジスタを割り当てる(ステップS745)。2つ以上の実行可能命令シーケンスがスケジューリングされている場合、レジスタ割当て部は、それらの2つ以上の実行可能命令シーケンスのそれぞれに、レジスタを割り当てる。レジスタ割当て部584は、実行可能命令シーケンスから機械語命令を生成し、その機械語命令を出力する(ステップS746)。
最適化された中間表現から変換されたすべての命令シーケンスが、実行可能命令シーケンスとして命令スケジューラ583へ送信されているわけではなく、命令スケジューラ583によってスケジューリングされているわけではない場合(ステップS747においてNO)、図7Dのスケジューリング処理の動作は、ステップS740の動作へ戻り、情報処理装置500は、ステップS740から動作を繰り返す。
最適化された中間表現から変換されたすべての命令シーケンスが、実行可能命令シーケンスとして命令スケジューラ583へ送信され、命令スケジューラ583によってスケジューリングされている場合(ステップS747においてYES)、情報処理装置500は、図7Dのスケジューリング処理を終了する。
図7Eは、情報処理装置500の選択処理の動作例のフローチャートである。図7Eの選択処理の開始時において、2つ以上の、代替パターンの実行可能命令シーケンスが特定されている。しかし、図7Eの選択処理の開始時において、1つの代替パターンの実行可能命令シーケンスが、特定されていてもよい。
パターン選択部582は、命令スケジューラ583から、代替パターンの実行可能命令シーケンスを受信する。パターン選択部582は、受信した、代替パターンの実行可能命令シーケンスの中の、選択されていない代替パターンの実行可能命令シーケンスから、1つの実行可能命令シーケンスを選択する(ステップS751)。最初は、全ての、受信した代替パターンの実行可能命令シーケンスが、選択されていない。
パターン選択部582は、選択された実行可能命令シーケンスの、実行カウントを判定する(ステップS752)。パターン選択部582は、受信した実行可能命令シーケンスの中で、代替パターンが含む演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターンの演算子の組み合わせと同じである、実行可能命令シーケンスを特定してよい。パターン選択部582は、選択された実行可能命令シーケンスの実行カウントとして、代替パターンが含む演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターンの演算子の組み合わせと同じである、特定された実行可能命令シーケンスの数を判定してよい。パターン選択部582は、代替パターンが含む演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターンの演算子の組み合わせと同じである、特定された実行可能命令シーケンスも、「選択された」実行可能命令シーケンスとみなしてよい。
選択された実行可能命令シーケンスが1回実行される場合(ステップS753においてNO)、すなわち、受信した実行可能命令シーケンスの中に、選択された実行可能命令シーケンスの演算子の組み合わせと同じ演算子の組み合わせを含む、他の実行可能命令シーケンスの代替パターンがない場合、パターン選択部582は、選択された実行可能命令シーケンスの代替パターンから、1つの最適な代替パターンを選択する(ステップS754)。パターン選択部582は、選択された実行可能命令シーケンスと関連付けられている、選択された1つの最適なパターンを示す情報を、命令スケジューラ583へ送信してよい。パターン選択部582は、その情報としてとして、選択された1つの最適なパターンそのものを、命令スケジューラ583へ送信してよい。
命令スケジューラ583は、選択された実行可能命令シーケンスに関連付けられている、選択された1つの最適なパターンを示す情報を受信する。命令スケジューラ583は、選択された実行可能命令シーケンス、すなわち、代替パターンの実行可能命令シーケンスを、選択された1つの最適なパターンによって置き換える(ステップS758)。
選択された実行可能命令シーケンスが1回よりも多く実行される場合(ステップS753においてYES)、すなわち、受信した実行可能命令シーケンスの中で、1つ又はそれ以上の実行可能命令シーケンスのそれぞれの代替パターンが、選択された実行可能命令シーケンスの演算子の組み合わせと同じ演算子の組み合わせを含む場合、パターン選択部582は、リソース状態を送信する要求を、リソースモニタ570に送信してよい。
リソースモニタ570は、リソース状態、すなわち、リソースの状態を取得する(ステップS755)。リソースモニタ570は、パターン選択部582からの要求に応じて、リソース状態を送信してよい。パターン選択部582は、リソースモニタ570から、リソース状態を受信してよい。
パターン選択部582は、リソース状態に基づいて、選択された実行可能命令シーケンスの代替パターンの割合を決定する(ステップS756)。パターン選択部582は、代替パターンの割合を、命令スケジューラ583へ送信する。割合は、それらのそれぞれの代替パターンに関連付けられていてよく、選択された実行可能命令シーケンスと、代替パターン内の演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターン内の演算子の組み合わせと同じである、実行可能命令シーケンスのそれぞれとに、さらに関連付けられていてよい。
命令スケジューラ583は、複数の代替パターンの割合を受信する。命令スケジューラ583は、選択された実行可能命令シーケンスの複数の代替パターンから、1つの代替パターンを、割合に基づいて選択する(ステップS757)。命令スケジューラ583は、代替パターン内の演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターン内の演算子の組み合わせと同じである、実行可能命令シーケンスのそれぞれの、複数の代替パターンから、代替パターンを1つずつ選択してよい。
命令スケジューラ583は、選択された、代替パターンの実行可能命令シーケンスを、選択された代替パターンによって置き換える(ステップS758)。命令スケジューラ583は、代替パターン内の演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターン内の演算子の組み合わせと同じである実行可能命令シーケンスの、その実行可能命令シーケンスに対して選択された代替パターンによる置き換えを、代替パターン内の演算子の組み合わせが、選択された実行可能命令シーケンスの代替パターン内の演算子の組み合わせと同じである、実行可能命令シーケンスのそれぞれについて、行ってよい。
命令スケジューラ583から送信された、代替パターンの実行可能命令シーケンスのすべてが選択されているわけではない場合(ステップS759においてNO)、情報処理装置500は、ステップS751から処理を繰り返す。命令スケジューラ583から送信された、代替パターンの実行可能命令シーケンスのすべてが選択された場合(ステップS759においてYES)、情報処理装置500は、図7Eの選択処理を終了する。
本実施形態の有利な効果は、実行ユニットを含むシステムの性能をさらに改善できることである。
パターン選択部582は、中間命令シーケンスからアセンブリ命令シーケンスを介して変換された実行可能命令を実行するコンピュータシステムのリソース状態に基づいて、特定された複数代替シーケンスの代替パターンの割合を決定する。リソース状態は、実行ユニットの状態であってもよい。
パターン選択部は、ビジー状態の実行ユニットにより実行されるアセンブリ命令シーケンスの割合を減少させ、アイドル状態の実行ユニットにより実行されるアセンブリ命令シーケンスの割合を増加させると決定してよい。パターン選択部は、特定された複数代替シーケンスから変換されたアセンブリ命令シーケンスが、ビジー状態の実行ユニットにより実行されないように、割合を決定してよい。
したがって、本実施形態によれば、ビジー状態の実行ユニットがアイドル状態となり、ビジー状態の実行ユニットにより実行されるアセンブリ命令シーケンスがビジー状態の実行ユニットによって実行されるのを待つ必要はない。そのため、システムの性能をさらに改善できる。
<第3実施形態>
次に、本開示の第3実施形態を、図面を参照しながら詳細に説明する。第3実施形態は上述の実施形態の主要な部分である。
図8は、本実施形態に係る情報処理装置800の構成例のブロック図である。
図8の情報処理装置800は、代替パターン特定部862、パターン選択部865、及び、命令スケジューラ870を含む。
代替パターン特定部862は、中間表現(「第1言語のプログラム」とも表記される)において、複数のアセンブリ命令シーケンス(「第2命令シーケンスとも表記」)によってそれぞれ得られる1つの結果をそれぞれ導く複数の中間命令シーケンス(「第1命令シーケンス」とも表記される)を特定する。複数のアセンブリ命令シーケンスに含まれる複数のオペレータは、複数の第1命令シーケンスに共通である。アセンブリ命令シーケンスは、第1言語とは異なるアセンブリ言語(「第2言語」と表記する)の命令シーケンスである。
つまり、代替パターン特定部862は、2回以上実行される複数代替シーケンスを特定する。特定された複数の第1命令シーケンスのそれぞれは、上述の複数代替シーケンスである。第2命令シーケンスは、代替パターンである。
パターン選択部865は、第2命令シーケンスに対して、割合を決定する。より詳細には、パターン選択部865は、第2命令シーケンスの演算子に対して、割合を決定する。
命令スケジューラ870は、第1命令シーケンスのそれぞれについて、複数の第2命令シーケンスから、割合に基づいて、1つの第2命令シーケンスを選択する。
次に、情報処理装置800の動作の例を、図面を参照しながら説明する。
図9は情報処理装置800の動作例である。
代替パターン特定部862は、1回よりも多く実行される複数代替シーケンスを特定する(ステップS910)。換言すると、代替パターン特定部862は、第1言語のプログラムにおいて、複数の第1命令シーケンスを特定する。第1命令シーケンスのそれぞれは、第1言語とは異なる第2言語の、複数の第2命令シーケンスによってそれぞれ得られる1つの結果を導く。複数の第2命令シーケンスは、複数の第1命令シーケンスに共通の複数の演算子を含む。
次に、パターン選択部865は、複数の第2命令シーケンスの複数の演算子に対して、割合を決定する(ステップS920)。命令スケジューラ870は、複数の第1命令シーケンスのそれぞれについて、複数の第2命令シーケンスから、割合に基づいて、1つの第2命令シーケンスを選択する。
本実施形態の有利な効果は、実行ユニットを含むシステムの性能を改善できることである。
本実施形態は、第1実施形態と同じ有利な効果を有する。有利な効果の理由は、第1実施形態と同じである。
<他の実施形態>
情報処理装置200、情報処理装置500及び情報処理装置800のそれぞれは、例えば図1のコンピュータ100などのコンピュータ、例えば回路などの専用ハードウェア、又は、コンピュータと専用ハードウェアとの組み合わせによって実現される。
記憶媒体174は、コンピュータを、情報処理装置200、情報処理装置500、又は、情報処理装置800として動作させるプログラムを記憶していてよい。プロセッサ110は、プログラムを読み出し、記憶媒体駆動装置173、I/Oサブシステム160、及び、メモリブリッジ150を介して、メモリサブシステム180(「メモリ」とも表記する)に、プログラムを読み出してよい。
プロセッサ110は、コンピュータ100を情報処理装置200として動作させる、メモリサブシステム180へロードされたプログラムを実行してよい。プロセッサ110は、フロントエンド210、中間コード生成部220、コード最適化部230、及び、コード生成部240として動作する。プロセッサ110は、命令選択部310、命令スケジューラ320、及び、レジスタ割当て部330としても動作する。そして、プロセッサ110は、フロントエンド420、中間コード生成部430、コード最適化部440、及び、コード生成部450として動作する。より詳細には、プロセッサ110は、命令選択部460、パターン照合・生成部461、代替パターン特定部462、代替パターン生成部464、及び、パターン選択部465としても動作する。
プロセッサ110は、コンピュータ100を情報処理装置500として動作させる、メモリサブシステム180へロードされたプログラムを実行してよい。プロセッサ110は、フロントエンド520、中間コード生成部530、コード最適化部540、代替パターン特定部550、代替パターン生成部561、利用可能リスト生成部564、リソースモニタ570、スケジューリング基準モジュール580、パターン選択部582、命令スケジューラ583、及び、レジスタ割当て部584として動作する。
プロセッサ110は、コンピュータ100を情報処理装置800として動作させる、メモリサブシステム180へロードされたプログラムを実行してよい。プロセッサ110は、代替パターン特定部862、パターン選択部865、及び、命令スケジューラ870として動作する。
本発明は、その実施形態を特に参照して示され、説明されたが、本発明はこれらの実施形態に限定されない。特許請求の範囲で規定されるようは本発明の精神及び範囲から逸脱することなく、形態及び詳細において様々な変更がなされうることが当業者には理解されるであろう。