(57)【要約】【課題】近年のマルチスレッド機能を搭載したプロセッサに対応して、効率的な命令スケジューリングの実施およびプログラマによる命令スケジューリングの制御を可能とするプログラム変換装置を提供する。【解決手段】命令スケジューリング方法を指定するためのプログラマの指示の入力を受け付ける命令スケジューリング指示入力部２と、前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法に基づいた命令スケジューリングが可能である命令スケジューリング部４１とを備え、前記命令スケジューリング部４１は、前記命令スケジューリング指示入力部２で受け付けられた前記指示に基づいて前記複数種類の命令スケジューリング方法の中からいずれかを選択し、選択した命令スケジューリング方法に従った命令スケジューリングを実行する。【選択図】図２
2010152762.tif 000002
【特許請求の範囲】
【請求項１】
高級言語またはアセンブリ言語で記述されたソースプログラムをターゲットプロセッサで動作する機械語コードに変換するプログラム変換装置であって、
前記ソースプログラムを記憶する記憶部と、
命令スケジューリング方法を指定するためのプログラマの指示の入力を受け付けるプログラマ指示入力部と、
前記記憶部に記憶されている前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法に基づいた命令スケジューリングが可能である命令スケジューリング部とを備え、
前記命令スケジューリング部は、前記プログラマ指示入力部で受け付けられた前記指示に基づいて前記複数種類の命令スケジューリング方法の中からいずれかを選択し、選択した命令スケジューリング方法に従った命令スケジューリングを実行する
プログラム変換装置。
【請求項２】
前記プログラマ指示入力部で受け付けられる前記指示は、前記ターゲットプロセッサの動作モードに関する指示である
請求項１記載のプログラム変換装置。
【請求項３】
前記ターゲットプロセッサは、マルチスレッド実行機構を備えたプロセッサであり、
前記ターゲットプロセッサの動作モードは、マルチスレッド動作に関する動作モードである
請求項２記載のプログラム変換装置。
【請求項４】
前記マルチスレッド動作に関する動作モードは、時分割で動作するスレッドの個数または同一サイクルで動作するスレッドの個数に関する指定である
請求項３記載のプログラム変換装置。
【請求項５】
前記ターゲットプロセッサは、ＶＬＩＷ（Very Long Instruction Word）プロセッサであり、
前記ターゲットプロセッサの動作モードは、ＶＬＩＷプロセッサの動作モードである
請求項２記載のプログラム変換装置。
【請求項６】
前記プログラマ指示入力部で受け付けられる前記指示は、命令スケジューリング方法に関する指示である
請求項１記載のプログラム変換装置。
【請求項７】
前記ターゲットプロセッサは、マルチスレッド実行機構を備えたプロセッサであり、
前記命令スケジューリング方法に関する指示は、前記ターゲットプロセッサにおいて、同一サイクルに動作する１スレッドあたりに並列実行可能な命令数を示す命令並列度に関する指示である
請求項６記載のプログラム変換装置。
【請求項８】
前記命令スケジューリング方法に関する指示は、前記ターゲットプロセッサにおいて１命令の実行のための所要サイクル数である命令レイテンシまたはシングルスレッドモードでの命令レイテンシに対する命令レイテンシの比の逆数である命令レイテンシ比に関する情報である
請求項６記載のプログラム変換装置。
【請求項９】
高級言語またはアセンブリ言語で記述されたソースプログラムをターゲットプロセッサで動作する機械語コードに変換するプログラム変換装置であって、
前記ソースプログラムを記憶する記憶部と、
前記記憶部に記憶されている前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法のそれぞれに基づいて命令スケジューリングを実行する命令スケジューリング部と、
前記命令スケジューリング部で前記複数種類の命令スケジューリング方法に基づいて命令スケジューリングされた複数種類の前記中間コードをそれぞれ機械語コードに変換するコード生成部と
を備えるプログラム変換装置。
【請求項１０】
前記命令スケジューリング方法は、前記ターゲットプロセッサの動作モードの種類ごとに設けられている
請求項９記載のプログラム変換装置。
【請求項１１】
前記ターゲットプロセッサは、マルチスレッド実行機構を備えたプロセッサであり、
前記ターゲットプロセッサの動作モードは、マルチスレッド動作に関する動作モードである
請求項１０記載のプログラム変換装置。
【請求項１２】
前記マルチスレッド動作に関する動作モードは、時分割で動作するスレッドの個数または同一サイクルで動作するスレッドの個数に関する指定である
請求項１１記載のプログラム変換装置。
【請求項１３】
前記ターゲットプロセッサは、ＶＬＩＷ（Very Long Instruction Word）プロセッサであり、
前記ターゲットプロセッサの動作モードは、ＶＬＩＷプロセッサの動作モードである
請求項１０記載のプログラム変換装置。
【請求項１４】
前記ターゲットプロセッサは、マルチスレッド実行機構を備えたプロセッサであり、
前記命令スケジューリング方法は、前記ターゲットプロセッサにおいて、同一サイクルに動作する１スレッドあたりに並列実行可能な命令数を示す命令並列度の値ごとに設けられている
請求項９記載のプログラム変換装置。
【請求項１５】
前記命令スケジューリング方法は、前記ターゲットプロセッサにおいて１命令の実行のための所要サイクル数である命令レイテンシの値ごとに設けられている
請求項９記載のプログラム変換装置。
【請求項１６】
コンピュータにより、高級言語またはアセンブリ言語で記述されたソースプログラムをターゲットプロセッサで動作する機械語コードに変換するプログラム変換方法であって、
命令スケジューリング方法を指定するためのプログラマの指示の入力を受け付けるプログラマ指示入力ステップと、
前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法に基づいた命令スケジューリングが可能である命令スケジューリングステップとを含み、
前記命令スケジューリングステップでは、前記プログラマ指示入力ステップで受け付けられた前記指示に基づいて前記複数種類の命令スケジューリング方法の中からいずれかを選択し、選択した命令スケジューリング方法に従った命令スケジューリングを実行する
プログラム変換方法。
【請求項１７】
コンピュータにより、高級言語またはアセンブリ言語で記述されたソースプログラムをターゲットプロセッサで動作する機械語コードに変換するプログラム変換方法であって、
前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法のそれぞれに基づいて命令スケジューリングを実行する命令スケジューリングステップと、
前記命令スケジューリング部で前記複数種類の命令スケジューリング方法に基づいて命令スケジューリングされた複数種類の前記中間コードをそれぞれ機械語コードに変換するコード生成ステップと
を含むプログラム変換方法。
【請求項１８】
請求項１６又は１７のいずれか１項に記載のプログラム変換方法が備える各ステップをコンピュータに実行させるためのプログラム。
【請求項１９】
請求項１８記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語等の高級言語で記述されたソースプログラムを機械語プログラムに変換するプログラム変換装置に関し、特に、並列処理機構を備えるプロセッサに対応した命令スケジューリングを行うプログラム変換装置に関する。
【背景技術】
【０００２】
プロセッサが備える命令セットにおいては、レイテンシ、つまり１命令の実行のための所要サイクル数が命令によって異なることが一般的である。したがって、同じ命令列であってもその実行順序によっては命令実行開始までの待ち時間が異なり、全体の実行サイクル数が変わってくる。具体的にはレイテンシの長い命令の待ち時間を他の命令の実行で隠蔽できればできるほど全体の実行サイクル数は短くなる。
【０００３】
プロセッサの実行形式コードを生成するコンパイラにおいては、上記の特性を鑑みて、命令間の依存の制約を満たす範囲で命令の並べ替えを行い、全体の実行サイクル数を短くする最適化が実施されている。これが命令スケジューリングであり、命令スケジューリングの能力が、生成された実行形式コードの性能に大きな影響を及ぼす。
【０００４】
ただし、最適な命令並びの導出はＮＰ（Non-deterministic Polynomial time）困難な問題であり、また他の最適化機能の影響によっても実行形式コードの性能は異なる。このため、命令スケジューリング機能としてはヒューリスティックなアルゴリズムが採用されており、どのアルゴリズムがより良い結果を導くかは状況によって異なる。
【０００５】
これに対して、従来、例えば特許文献１のように、レジスタの使用状況を検査し、検査結果に基づいて、並列性優先の命令スケジューリング方法と、レジスタの同時アクティブ数を減らす命令スケジューリング方法とのいずれかを選択し、選択した命令スケジューリング方法に基づいて命令スケジューリングを実行する方法がある。
【０００６】
また、例えば特許文献２のように、最適化手法の一種である共通式削除（common sub-expression elimination）で削除した共通式の情報を参照し、共通式削除が行われたか否かの情報に基づいて命令スケジューリング方法を選択し、選択した命令スケジューリング方法に基づいて命令スケジューリングを実行する方法がある。
【特許文献１】特許第３３１１３８１号公報
【特許文献２】特開２００１−１５９９８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
近年のプロセッサの動向として、命令並列処理に関して、複数の動作モードを持つプロセッサ、またはマルチスレッド動作に対応したプロセッサが現れてきている。
【０００８】
従来技術では、単一動作モード内での入力プログラムまたは中間コードの最適化の状況に応じて、命令スケジューリング方法を選択することはできるが、複数の動作モードの切り替えには対応していない。また、マルチスレッド動作に伴い変動する命令並列度変化や命令レイテンシ変化に基づいて、動作モードを切り替えることができない。さらに、命令スケジューリング方法についてプログラマが制御を行うことができない。
【０００９】
このため、結果的に従来技術では近年のプロセッサに対して、状況に応じた効率的な実行形式コードを生成することができないという問題がある。
【００１０】
本発明は、上述の課題を解決するためになされたもので、（ｉ）動作モードの切り替え、（ｉｉ）マルチスレッド動作に伴う動作モードの変動要因、または（ｉｉｉ）プログラマの要求に対応した効率的な実行形式コードの生成を可能にするプログラム変換装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、本発明のある局面に係るプログラム変換装置は、高級言語またはアセンブリ言語で記述されたソースプログラムをターゲットプロセッサで動作する機械語コードに変換するプログラム変換装置であって、前記ソースプログラムを記憶する記憶部と、命令スケジューリング方法を指定するためのプログラマの指示の入力を受け付けるプログラマ指示入力部と、前記記憶部に記憶されている前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法に基づいた命令スケジューリングが可能である命令スケジューリング部とを備え、前記命令スケジューリング部は、前記プログラマ指示入力部で受け付けられた前記指示に基づいて前記複数種類の命令スケジューリング方法の中からいずれかを選択し、選択した命令スケジューリング方法に従った命令スケジューリングを実行する。
【００１２】
これによって、複数の動作モードを有するプロセッサの各動作モードに対応した実行効率の高い機械語コードを生成することが可能となる。
【００１３】
好ましくは、前記プログラマ指示入力部で受け付けられる前記指示は、前記ターゲットプロセッサの動作モードに関する指示である。
【００１４】
さらに好ましくは、前記ターゲットプロセッサは、ＶＬＩＷ（Very Long Instruction Word）プロセッサであり、前記ターゲットプロセッサの動作モードは、ＶＬＩＷプロセッサの動作モードである。
【００１５】
ターゲットプロセッサがＶＬＩＷ方式にしたがって記述された命令群を実行可能なプロセッサ（以下、「ＶＬＩＷプロセッサ」という。）の場合には、各動作モードの制約に合った機械語コードを生成することが可能となる。
【００１６】
好ましくは、前記プログラマ指示入力部で受け付けられる前記指示は、命令スケジューリング方法に関する指示である。
【００１７】
命令スケジューリング方法をプログラマが直接指定することができ、きめ細かな性能チューニングを実施することが可能となる。
【００１８】
本発明の他の局面に係るプログラム変換装置は、高級言語またはアセンブリ言語で記述されたソースプログラムをターゲットプロセッサで動作する機械語コードに変換するプログラム変換装置であって、前記ソースプログラムを記憶する記憶部と、前記記憶部に記憶されている前記ソースプログラムに対応した中間コードを並べ替える命令スケジューリングに関して、複数種類の命令スケジューリング方法のそれぞれに基づいて命令スケジューリングを実行する命令スケジューリング部と、前記命令スケジューリング部で前記複数種類の命令スケジューリング方法に基づいて命令スケジューリングされた複数種類の前記中間コードをそれぞれ機械語コードに変換するコード生成部とを備える。
【００１９】
これによって、複数の動作モードを有するプロセッサの各動作モードに対応した実行効率の高い機械語コードをユーザが選ぶことが可能となる。
【００２０】
好ましくは、前記命令スケジューリング方法は、前記ターゲットプロセッサの動作モードの種類ごとに設けられている。
【００２１】
さらに好ましくは、前記ターゲットプロセッサは、ＶＬＩＷプロセッサであり、前記ターゲットプロセッサの動作モードは、ＶＬＩＷプロセッサの動作モードである。
【００２２】
ターゲットプロセッサがＶＬＩＷプロセッサの場合には、各動作モードの制約に合った機械語コードをユーザが選ぶことが可能となる。
【００２３】
なお、本発明は、このような特徴的な処理部を備えるプログラム変換装置として実現することができるだけでなく、プログラム変換装置に含まれる特徴的な処理部をステップとするプログラム変換方法として実現することができる。また、プログラム変換装置に含まれる特徴的な手段としてコンピュータを機能させるためのプログラムとして実現することもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【００２４】
本発明によると、ハードウェアの動作モードに応じて命令スケジューリング方法を切り替えることで、動作モードに合った実行効率の高い実行形式コード（機械語コード）を生成することが可能となる。ターゲットプロセッサがＶＬＩＷプロセッサの場合には、動作モードの制約に合った実行形式コードを生成することが可能となる。また、この命令スケジューリング方法の切り替えをプログラマが指示する方法が提供されることにより、きめ細かに、生成される機械語コードのチューニングを実施することが可能となる。
【発明を実施するための最良の形態】
【００２５】
（実施の形態１）
以下、図面を参照しながら本発明の実施の形態１に係るコンパイラシステムについて説明する。
【００２６】
コンパイラシステムは、図１に示すようなメモリとＣＰＵとを含む通常のコンピュータ上で、以下に説明するコンパイラを実行することにより実現される。
【００２７】
図２は、実施の形態１に係るコンパイラ１の構成を示すブロック図である。
【００２８】
コンパイラ１は、プログラマがＣ言語で記述したソースプログラム１０１を入力として受け、中間コードに変換して最適化や資源の割付を実施した後、ターゲットプロセッサ向けの実行形式コード１０２を生成する。ソースプログラム１０１及び実行形式コード１０２は、コンピュータが備えるメモリ又はハードディスクに記憶される。また、コンパイラによる処理実行時の中間データも、コンピュータが備えるメモリ又はハードディスクに記憶される。
【００２９】
ここで、本発明に係るコンパイラがターゲットとするプロセッサの仕様について説明する。
【００３０】
本プロセッサは、１サイクルあたり４命令の命令並列機構を備えたスーパースカラプロセッサである。本プロセッサは、さらに、最大３スレッドのマルチスレッド実行機構を備えている。３つのスレッドを並行動作させるため、本プロセッサは、プログラムカウンタやコンテキストレジスタ群を３セット保持している。マルチスレッド実行については４つの動作モードが存在し、アーキテクチャレジスタの設定により動作モードを選択することができる。
【００３１】
図３Ａ〜図３Ｄは、本プロセッサのマルチスレッド動作モードの概要を示す図である。図３Ａ〜図３Ｄの各行は１サイクルを示しており、横軸が命令並列度、縦軸が時間方向を示している。ここで、命令並列度とは、同一サイクルに動作する１スレッドあたりに並列実行可能な命令数を示す。
【００３２】
図３Ａはモード１、つまりシングルスレッドモードを表している。このモードでは１つのスレッドのみが動作し、各サイクルにつき最大４命令の並列実行が可能である。つまり、同一サイクルで１つのスレッドが実行可能である。
【００３３】
図３Ｂはモード２、つまり時分割の２スレッド実行モードを表している。このモードでは、スレッド１とスレッド２とがサイクル毎に交互に動作する。したがって各スレッドの視点で、２サイクルに１回自スレッドの実行サイクルが回ってくることになる。このため、自スレッドが動作するサイクルのみに着目すると、モード１と比べて各命令のレイテンシが２分の１になったかのように動作することになる。各サイクルについては最大４命令の並列実行が可能である。つまり、同一サイクルで１つのスレッドが実行可能である。
【００３４】
図３Ｃはモード３、つまり時分割の３スレッド実行モードを表している。このモードでは、スレッド１とスレッド２とスレッド３とが順番にラウンドロビンで動作する。したがって、各スレッドの視点では、３サイクルに１回自スレッドの実行サイクルが回ってくることになり、自スレッドが動作するサイクルのみに着目するとモード１と比べて各命令のレイテンシが３分の１になったかのように動作することになる。各サイクルについては最大４命令の並列実行が可能である。つまり、同一サイクルで１つのスレッドが実行可能である。
【００３５】
図３Ｄはモード４、つまり２スレッドのＳＭＴ（Simultaneous Multithreading）実行モードを表している。このモードでは各スレッドはモード１と同様に毎サイクル動作することができるが、命令並列度が各サイクル２命令までに制限されている。つまり、同一サイクルで２つのスレッドが実行可能である。
【００３６】
以下で本発明に係るコンパイラ１の各構成要素の詳細な構成とその動作について説明していく。
【００３７】
コンパイラ１は、コンピュータ上で実行されるプログラムにより実現され、機能的に（コンピュータ上で実行された場合に機能する処理部として）、命令スケジューリング指示入力部２と、パーサ部３と、最適化部４と、コード生成部５とを備える。
【００３８】
命令スケジューリング指示入力部２は、プログラマによる命令スケジューリングに関する指示をコンパイルオプションとして受理する。具体的には、コンパイラ１を実行するプログラマは、以下の形式でターゲットプロセッサのマルチスレッド動作モードをコンパイルオプションとして入力する。
【００３９】
−ｆｈａｒｄｗａｒｅ−ｔｈｒｅａｄ−ｍｏｄｅ＝ＮＵＭ
【００４０】
“ＮＵＭ”の部分には、図３Ａ〜図３Ｄを参照して説明したマルチスレッド動作モードの番号である１〜４のいずれかの数字が指定される。これによってコンパイラ１はいずれのマルチスレッド動作モードに適したコードを生成すべきかの情報を得る。
【００４１】
パーサ部３は、コンパイラ１に入力されたソースプログラム１０１に対して、予約語（キーワード）等を抽出して字句解析および構文解析を行い、各ステートメントを一定規則に基づいて中間コードに変換する処理部である。
【００４２】
最適化部４は、パーサ部３から出力された中間コードに対して、冗長性の除去、命令スケジューリングまたはレジスタの割り付けといった最適化処理を実施する。
【００４３】
コード生成部５は、最適化部４から出力された中間コードに対して、内部に保持する変換テーブル等を参照することで、全てのコードを機械語コードに置き換えることにより、実行形式コード１０２を生成する。
【００４４】
最適化部４は、命令レベルでの機械語コードの並べ替えを実施する命令スケジューリング部４１を備える。命令スケジューリング部４１は、命令のスケジューリング方法を設定する命令スケジューリング方法設定部４１１を備える。
【００４５】
図４は、命令スケジューリング方法設定部４１１の処理内容を示すフローチャートである。
【００４６】
命令スケジューリング方法設定部４１１は、命令スケジューリング指示入力部２で受け付けられたマルチスレッド動作モードに基づいて、命令スケジューリングの際のパラメータを設定する。
【００４７】
具体的には、命令スケジューリング方法設定部４１１は、命令スケジューリング指示入力部２で受け付けられたマルチスレッド動作モードを判定する（ステップＳ１）。判定モードがモード１の場合には（ステップＳ１でモード１）、命令スケジューリング方法設定部４１１は、命令並列度を４、あるスレッドが実行されてから当該スレッドと同一種類のスレッドが次に実行されるまでのサイクル数を示す命令レイテンシ比を１に設定する（ステップＳ２）。判定モードがモード２の場合には（ステップＳ１でモード２）、命令スケジューリング方法設定部４１１は、命令並列度を４、命令レイテンシ比を２に設定する（ステップＳ３）。判定モードがモード３の場合には（ステップＳ１でモード３）、命令スケジューリング方法設定部４１１は、命令並列度を４、命令レイテンシ比を３に設定する（ステップＳ４）。判定モードがモード４の場合には（ステップＳ１でモード４）、命令スケジューリング方法設定部４１１は、命令並列度を２、命令レイテンシ比を１に設定する（ステップＳ５）。これで命令スケジューリング方法に関する設定が完了する。ここで、命令レイテンシ比とは、シングルスレッドモードでの命令レイテンシに対する命令レイテンシの比の逆数のことである。
【００４８】
この後の、命令スケジューリング部４１による命令スケジューリング処理においては、設定された命令並列度に応じて各サイクルに配置する命令の数を制限する。また、各命令の命令レイテンシについては、基準となる命令レイテンシとしてシングルスレッドモードの命令レイテンシのテーブルを保持しておき、このテーブルの値を設定された命令レイテンシ比で割った値を各命令のレイテンシとして使用する。こうすることにより、命令スケジューリング部４１は、設定された条件に適合した命令スケジューリングを実施することができる。
【００４９】
以上のようなコンパイラ１の構成をとることにより、入力されたターゲットプロセッサの動作モードに応じて適切な命令スケジューリング方法に切り替えることができ、実行効率の高いコードを生成することが可能となる。また、コンパイル単位に応じてプログラマが命令スケジューリング方法を直接指定することができ、きめ細かな性能チューニングを実施することが可能となる。
【００５０】
（実施の形態２）
以下、図面を参照しながら本発明の実施の形態２に係るコンパイラシステムについて説明する。実施の形態１に係るコンパイラシステムは、プログラマが指定した命令スケジューリング方法に従い命令スケジューリングを実行したが、実施の形態２に係るコンパイラシステムは、取り得る全命令スケジューリング方法の各々に従い命令スケジューリングを実行する点が異なる。
【００５１】
実施の形態２に係るコンパイラシステムは、実施の形態１に係るコンパイラシステムと同様に、図１に示すようなメモリとＣＰＵとを含む通常のコンピュータ上で、以下に説明するコンパイラを実行することにより実現される。
【００５２】
図５は、本発明の実施の形態２に係るコンパイラ６１の構成を示すブロック図である。
【００５３】
本実施の形態２に係るコンパイラ６１の大部分は実施の形態１で示したコンパイラ１と同一であるが、実施の形態１で存在した命令スケジューリング指示入力部２が存在しない。また、最適化部４とコード生成部５の動作を制御する複数コード生成制御部６６が追加されている。それ以外の構成要素については実施の形態１に係るコンパイラと同一である。また、ターゲットとするプロセッサの仕様も同一である。このため、その詳細な説明はここでは繰り返さない。
【００５４】
以下で追加された複数コード生成制御部６６の動作について説明する。
【００５５】
図６は、複数コード生成制御部６６の処理内容を示すフローチャートである。
【００５６】
複数コード生成制御部６６は、ターゲットプロセッサが備えるすべてのマルチスレッド動作モードに対応させて以下の処理を繰り返す（ステップＳ１１）。具体的にはモード１からモード４までに対応させて以下の処理を４回繰り返すことになる。各モードに対する処理は以下のとおりである。
【００５７】
まず、複数コード生成制御部６６は、所定のマルチスレッド動作モードの設定を与えた状態で最適化部４を起動する（ステップＳ１２）。最適化部４が起動されると、最適化部４内の命令スケジューリング方法設定部４１１には、与えられたマルチスレッドモードに対応した命令並列度および命令レイテンシが設定される。命令スケジューリング部４１は、設定された命令並列度および命令レイテンシに対応した命令スケジューリングを実行する。これにより、最適化された中間コードが得られる。
【００５８】
複数コード生成制御部６６は、コード生成部５を起動する（ステップＳ１３）。コード生成部５が起動されると、コード生成部５は、最適化部４から出力される中間コードから実行形式コードを生成する。なお、コード生成部５は、実行形式コードのファイル名の末尾にマルチスレッド動作モードの数値を付加する。これにより、どのマルチスレッド動作モードに対応した実行形式コードかを識別することが可能となる。
【００５９】
複数コード生成制御部６６は、以上の処理（Ｓ１２およびＳ１３）を各マルチスレッド動作モードに対して繰り返し行う。
【００６０】
以上のようなコンパイラ６１の構成にすることで、ターゲットプロセッサのすべてのマルチスレッド動作モードの各々に対応させて最適化部およびコード生成部を起動し、各マルチスレッド動作モードに適した複数の実行形式コードを生成することができる。プログラマは、瀬制された複数の実行形式コードの中から、プログラムの実行環境におけるハードウェアの設定や用途に応じて、適切な実行形式コードを選択して使用することができる。結果としてプログラムの実行効率を向上させることができる。
【００６１】
以上、本発明に係るコンパイラシステムおよびその構成要素について、実施の形態１および実施の形態２に基づいて説明したが、本発明はこれらの実施の形態に限られない。即ち、
（１）上記実施の形態１および実施の形態２では、Ｃ言語向けのコンパイラシステムを想定していたが、本発明が対象とするソースプログラムの記述言語はＣ言語のみに限定されるものではない。例えば、アセンブリ言語などの他のプログラミング言語を採用した場合でも本発明の有意性は保たれる。
（２）上記実施の形態１および実施の形態２では、高級言語向けのコンパイラシステムを想定していたが、本発明はこれに限定されるものではない。例えば、アセンブラプログラムを入力とするアセンブラオプティマイザもしくはアセンブラ命令スケジューラにも本発明を同様に適用することができる。
（３）上記実施の形態１および実施の形態２では、ターゲットプロセッサとして１サイクルに４命令発行可能で、同時に３スレッドを並行動作可能なプロセッサを想定していたが、本発明はこの同時発行命令数、スレッド数に限定されるものではない。さらに、同時発行命令数やスレッド数のバリエーションとしては、命令並列度が１の場合またはスレッド数が１の場合に対しても本発明を適用可能である。
（４）上記実施の形態１および実施の形態２では、ターゲットプロセッサとしてスーパースカラプロセッサを想定していたが、本発明はこれに限定されるものではない。ＶＬＩＷプロセッサに対しても本発明を適用することができる。この場合は、単に命令並列実行効率が向上するだけでなく、ＶＬＩＷプロセッサの動作モードに応じて各サイクルの発行制約に適合した命令列の生成を可能とするという効果もある。
（５）上記実施の形態１では、命令スケジューリング指示入力部への指示の方法としてコンパイルオプションを想定していたが、本発明はこの指示方法に限定されるものではない。例えば、プログラム中に、＃ｐｒａｇｍａ指令または疑似命令として指示を記述する方法も可能であるし、コンパイル時にコンパイラがプログラマに対して生成コード候補を提示してプログラマが所望のコードを選択する、といった指示方法も可能である。
（６）上記実施の形態１では、命令スケジューリング指示入力部への指示の内容として、ターゲットプロセッサのマルチスレッド動作モードを想定していたが、本発明はこの指示内容に限定されるものではない。例えば、プロセッサの他の動作モードに関する指示であってもよい。また、プロセッサの動作モードではなく、命令スケジューリング方法を直接指示してもよいし、命令並列度または命令レイテンシといった命令スケジューリング方法を設定するための値を直接指示するものであってもよい。
（７）上記実施の形態１では、命令スケジューリング方法設定部にてプログラマによる指示の値に基づいて、命令スケジューリング方法を設定することを想定していたが、本発明の設定方法はこれに限定されるものではない。例えば、図７に示すような指示の値（マルチスレッド動作モード）と命令スケジューリング方法を設定するための値（命令並列度及び命令レイテンシ比）とを対応づけるテーブルを保持しておいて、このテーブルを参照することによって命令スケジューリング方法を設定する、といった方法をとってもよい。
（８）上記実施の形態１および実施の形態２では、命令スケジューリング部において、基準となる命令レイテンシテーブルのレイテンシ値を命令スケジューリング方法設定部で設定されたレイテンシ比で割ることによって得られたレイテンシ値を、命令スケジューリングに用いることを想定していたが、本発明のレイテンシ値導出方法はこれに限定されるものではない。例えば、プロセッサの複数のマルチスレッド動作モードのそれぞれに対応した複数の命令レイテンシテーブルを保持しておいて、動作モードに応じたテーブルを参照することによってレイテンシ値を得る、といった方法をとってもよい。
（９）上記実施の形態２では、複数コード生成制御部においてプロセッサのすべてのマルチスレッド動作モードに対して処理を繰り返すことを想定していたが、本発明はこれに限定されるものではない。プロセッサの他の動作モードのバリエーションに対する処理の繰り返しであってもよいし、コンパイラがあらかじめ規定している命令スケジューリングのパラメータもしくはアルゴリズムのバリエーションに対する処理の繰り返しであってもよい。
（１０）上記実施の形態２では、複数コード生成制御部において複数のコードを生成する際にファイル名の末尾にマルチスレッド動作モードの番号を付加することを想定していたが、本発明のファイル名の命名方法はこれに限定されるものではない。例えば、マルチスレッド動作モードの番号をファイル名の先頭に付加してもよいし、あらかじめ定められた文字列やコンパイラ内部にて生成された乱数を付加してもよい。
（１１）上記実施の形態２では、複数コード生成制御部において複数のマルチスレッド動作モードに対応した複数の実行形式ファイルを生成することを想定していたが、本発明の実行形式コードの出力方法はこれに限定されるものではない。各動作モードに対応した実行形式コードを一つのファイルに結合して出力しておき、実行環境にていずれの実行形式コードを実行するかを選択するようにしてもよい。
【００６２】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【００６３】
本発明は、Ｃ言語などの高級言語で記述されたソースプログラムをターゲットプロセッサに対応した機械語プログラムに変換するコンパイラシステム等に適用できる。
【図面の簡単な説明】
【００６４】
【図１】本発明の実施の形態１および２に係るコンパイラが実行されるコンピュータの外観図である。
【図２】本発明の実施の形態１に係るコンパイラの構成を示すブロック図である。
【図３Ａ】ターゲットプロセッサのマルチスレッド動作モード（モード１）を示す図である。
【図３Ｂ】ターゲットプロセッサのマルチスレッド動作モード（モード２）を示す図である。
【図３Ｃ】ターゲットプロセッサのマルチスレッド動作モード（モード３）を示す図である。
【図３Ｄ】ターゲットプロセッサのマルチスレッド動作モード（モード４）を示す図である。
【図４】命令スケジューリング方法設定部４１１の処理内容を示すフローチャートである。
【図５】本発明の実施の形態２に係るコンパイラの構成を示すブロック図である。
【図６】複数コード生成制御部６６の処理内容を示すフローチャートである。
【図７】命令スケジューリング指示と命令スケジューリング設定との対応テーブルを示す図である。
【符号の説明】
【００６５】
１  コンパイラ
２  命令スケジューリング指示入力部
３  パーサ部
４  最適化部
４１  命令スケジューリング部
４１１  命令スケジューリング方法設定部
５  コード生成部
６６  複数コード生成制御部
１０１  ソースプログラム
１０２  実行形式コード
【図１】
2010152762.tif 000003
【図２】
2010152762.tif 000004
【図３Ａ】
2010152762.tif 000005
【図３Ｂ】
2010152762.tif 000006
【図３Ｃ】
2010152762.tif 000007
【図３Ｄ】
2010152762.tif 000008
【図４】
2010152762.tif 000009
【図５】
2010152762.tif 000010
【図６】
2010152762.tif 000011
【図７】
2010152762.tif 000012