(57)【要約】【課題】  システムソフトウェアの開発において、コンピュータシステム全体としての実行性能を向上させ、かつシステムソフトウェアの開発工数を削減する。【解決手段】  プログラム開発システム３０は、コンパイラシステム３４等を備える。コンパイラシステム３４は、ソースプログラム４４およびシステムレベルヒント情報４１を読み込み、機械語プログラム４３ａへ変換するためのプログラムであり、機械語プログラム４３ａを生成すると共に、当該プログラムに関する情報であるタスク情報４２ａを出力する。システムレベルヒント情報４１は、コンパイラシステム３４における最適化のヒントとなる情報を集めたものであり、プロファイラ３３での解析結果と、プログラマによる指示と、ソースプログラム４４に関するタスク情報４２ａおよびソースプログラム４４とは異なる別のソースプログラムに関するタスク情報４２ｂとからなる。【選択図】      図４
2006260096.tif 000002
【特許請求の範囲】
【請求項１】
高級言語で記述されたソースプログラムを機械語プログラムに変換するプログラム変換方法であって、
前記ソースプログラムの字句解析および構文解析を行うパーサステップと、
前記パーサステップにおける解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換ステップと、
前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付けステップと、
前記ヒント情報に基づいて、前記中間コードを最適化する最適化ステップと、
最適化された前記中間コードを機械語プログラムに変換する機械語プログラム変換ステップとを含み、
前記ヒント情報には、変換対象となる前記ソースプログラムに対応付けられた実行対象以外の実行対象に関する情報が含まれる
ことを特徴とするプログラム変換方法。
【請求項２】
前記最適化ステップは、前記ヒント情報に基づいて、最適化対象とされるデータに対して、キャッシュメモリを有効活用できるような調整を行なうキャッシュライン調整ステップを含む
ことを特徴とする請求項１に記載のプログラム変換方法。
【請求項３】
前記最適化ステップは、前記ヒント情報に基づいて、最適化対象とされるデータのキャッシュメモリ上での配置されるセットに関する情報を設定する配置セット情報設定ステップを含む
ことを特徴とする請求項１または２に記載のプログラム変換方法。
【請求項４】
前記最適化ステップは、前記ヒント情報に基づいて、変換対象とされる前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てるプロセッサ割り当てステップを含む
ことを特徴とする請求項１〜３のいずれか１項に記載のプログラム変換方法。
【請求項５】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて最適化対象とすべきデータを示す情報が含まれている
ことを特徴とする請求項２〜４のいずれか１項に記載のプログラム変換方法。
【請求項６】
前記キャッシュライン調整ステップでは、最適化対象とされるデータに対して、当該データが占めるキャッシュメモリ上のライン数が少なくなるようにデータ配置を調整する
ことを特徴とする請求項２に記載のプログラム変換方法。
【請求項７】
前記キャッシュライン調整ステップでは、最適化対象とされるデータを含むループに対して、当該ループの各イタレーションにおいてキャッシュメモリのライン単位で当該データにアクセスするようにループを分割する
ことを特徴とする請求項２に記載のプログラム変換方法。
【請求項８】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて最適化対象とすべきデータの実配置アドレスに関する情報が含まれている
ことを特徴とする請求項３または４に記載のプログラム変換方法。
【請求項９】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて最適化対象とされるデータがキャッシュメモリのいずれのセットに配置されるかを示す情報が含まれている
ことを特徴とする請求項３または４に記載のプログラム変換方法。
【請求項１０】
前記配置セット情報設定ステップでは、前記ヒント情報に基づいて、前記ヒント情報で指定されたデータがキャッシュメモリ上の同一セットに配置されることによる追い出し合いが発生することのないように、最適化対象とされるデータがキャッシュメモリのいずれのセットに配置されるかを決定する
ことを特徴とする請求項３に記載のプログラム変換方法。
【請求項１１】
前記配置セット情報設定ステップでは、前記ヒント情報に基づいて、キャッシュメモリの各セットにマッピングされるデータ数が均等になるように、変換対象とされる実行対象に含まれるデータの配置を決定する
ことを特徴とする請求項３に記載のプログラム変換方法。
【請求項１２】
前記最適化ステップは、さらに、前記配置セット情報設定ステップで決定された配置情報をヒント情報として出力するヒント情報出力ステップを含む
ことを特徴とする請求項３に記載のコンパイル装置。
【請求項１３】
前記配置セット情報設定ステップでは、前記ヒント情報に基づいて、前記ヒント情報で指定されたデータのうち、所定数以上のプロセッサに割り当てられたデータについては、当該データをキャッシュメモリに割り当てられないようなメインメモリ上の領域に配置するよう決定する
ことを特徴とする請求項３に記載のプログラム変換方法。
【請求項１４】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて各実行対象がいずれのプロセッサに割り当てられているかを示す情報が含まれている
ことを特徴とする請求項３または４に記載のプログラム変換方法。
【請求項１５】
前記プロセッサ割り当てステップでは、前記ヒント情報に基づいて、前記ヒント情報で指定されたデータがキャッシュメモリ上の同一セットに配置されることによる追い出し合いが発生することのないように、または、同一のデータが複数のプロセッサに分散配置されることのないように、前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てる
ことを特徴とする請求項４に記載のプログラム変換方法。
【請求項１６】
前記プロセッサ割り当てステップでは、前記ヒント情報に基づいて、各プロセッサのローカルキャッシュメモリの各セットにマッピングされるデータ数が均等になるように、前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てる
ことを特徴とする請求項４に記載のプログラム変換方法。
【請求項１７】
前記最適化ステップは、さらに、前記プロセッサ割り当てステップで決定された実行対象のプロセッサ割り当てに関する情報をヒント情報として出力するヒント情報出力ステップを含む
ことを特徴とする請求項４に記載のプログラム変換方法。
【請求項１８】
少なくとも１つのオブジェクトファイルを受け、当該オブジェクトファイルを機械語プログラムに変換するプログラム変換方法であって、
前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付けステップと、
前記ヒント情報に基づいて、前記オブジェクトファイルを最適化しつつ、前記機械語プログラムに変換する最適化ステップとを含み、
前記ヒント情報には、変換対象となる前記少なくとも１つのオブジェクトファイルに対応付けられた実行対象以外の実行対象に関する情報が含まれる
ことを特徴とするプログラム変換方法。
【請求項１９】
前記最適化ステップは、前記ヒント情報に基づいて、最適化対象とされる前記オブジェクトファイルに含まれるデータの実配置アドレスを決定するデータ配置決定ステップを含む
ことを特徴とする請求項１８に記載のプログラム変換方法。
【請求項２０】
前記最適化ステップは、前記ヒント情報に基づいて、前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てるプロセッサ割り当てステップを含む
ことを特徴とする請求項１８または１９に記載のプログラム変換方法。
【請求項２１】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて最適化対象とすべきデータを示す情報が含まれている
ことを特徴とする請求項１９または２０に記載のプログラム変換方法。
【請求項２２】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて最適化対象とすべきデータの実配置アドレスに関する情報が含まれている
ことを特徴とする請求項１９または２０に記載のプログラム変換方法。
【請求項２３】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて最適化対象とすべきデータがキャッシュメモリのいずれのセットに配置されるかを示す情報が含まれている
ことを特徴とする請求項１９または２０に記載のプログラム変換方法。
【請求項２４】
前記データ配置決定ステップでは、前記ヒント情報に基づいて、複数のデータがキャッシュメモリ上の同一セットに配置されることによる追い出し合いが発生することのないように、最適化対象とされる前記オブジェクトファイルに含まれるデータの実配置アドレスを決定する
ことを特徴とする請求項１９に記載のプログラム変換方法。
【請求項２５】
前記データ配置決定ステップでは、前記ヒント情報に基づいて、キャッシュメモリの各セットにマッピングされるデータ数が均等になるように、最適化対象とすべきデータが配置されるキャッシュメモリ上のセットを決定し、決定されたセットに基づいて、最適化対象とされる前記オブジェクトファイルに含まれるデータの実配置アドレスを決定する
ことを特徴とする請求項１９に記載のプログラム変換方法。
【請求項２６】
前記最適化ステップは、さらに、前記データ配置決定ステップで決定された実配置アドレスに関する情報をヒント情報として出力するヒント情報出力ステップを含む
ことを特徴とする請求項１９に記載のプログラム変換方法。
【請求項２７】
前記ヒント情報には、変換対象に対応付けられた実行対象以外の実行対象も含めて各実行対象がいずれのプロセッサに割り当てられているかを示す情報が含まれている
ことを特徴とする請求項２０に記載のプログラム変換方法。
【請求項２８】
前記プロセッサ割り当てステップでは、前記ヒント情報に基づいて、前記ヒント情報で指定されたデータがキャッシュメモリ上の同一セットに配置されることによる追い出し合いが発生することのないように、または、同一のデータが複数のプロセッサに分散配置されることのないように、前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てる
ことを特徴とする請求項２０に記載のプログラム変換方法。
【請求項２９】
前記プロセッサ割り当てステップでは、前記ヒント情報に基づいて、各プロセッサのローカルキャッシュメモリの各セットにマッピングされるデータ数が均等になるように、前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てる
ことを特徴とする請求項２０に記載のプログラム変換方法。
【請求項３０】
前記最適化ステップは、さらに、前記プロセッサ割り当てステップで決定された実行対象のプロセッサ割り当てに関する情報をヒント情報として出力するヒント情報出力ステップを含む
ことを特徴とする請求項２０に記載のプログラム変換方法。
【請求項３１】
前記データ配置決定ステップでは、前記ヒント情報に基づいて、前記ヒント情報で指定されたデータがキャッシュメモリ上の同一セットに配置されることによる追い出し合いが発生することのないように、または、同一のデータが複数のプロセッサに分散配置されることのないように、最適化対象とされる前記オブジェクトファイルに含まれるデータの実配置アドレスを決定する
ことを特徴とする請求項１９に記載のプログラム変換方法。
【請求項３２】
前記データ配置決定ステップでは、前記ヒント情報に基づいて、各プロセッサのローカルキャッシュメモリの各セットにマッピングされるデータ数が均等になるように、最適化対象とされる前記オブジェクトファイルに含まれるデータの実配置アドレスを決定する
ことを特徴とする請求項１９に記載のプログラム変換方法。
【請求項３３】
前記データ配置決定ステップでは、前記ヒント情報に基づいて、前記ヒント情報で指定され、かつ最適化対象とされる前記オブジェクトファイルに含まれるデータのうち、所定数以上のプロセッサに割り当てられたデータについては、当該データをキャッシュメモリに割り当てられないようなメインメモリ上の領域に配置するよう当該データの実配置アドレスを決定する
ことを特徴とする請求項１９に記載のプログラム変換方法。
【請求項３４】
前記ヒント情報受け付けステップでは、ソースプログラムのファイルであるソースファイルに記述された最適化に関する指示をヒント情報として受け付ける
ことを特徴とする請求項１〜３３のいずれか１項に記載のプログラム変換方法。
【請求項３５】
前記ヒント情報受け付けステップでは、ソースプログラムのファイルであるソースファイルに記述された組み込み関数をヒント情報として受け付ける
ことを特徴とする請求項１〜３３のいずれか１項に記載のプログラム変換方法。
【請求項３６】
前記ヒント情報受け付けステップでは、変換対象に対応付けられた実行対象以外の実行対象を含めた実行対象を実行した後の分析結果をヒント情報として受け付ける
ことを特徴とする請求項１〜３３のいずれか１項に記載のプログラム変換方法。
【請求項３７】
前記ヒント情報受け付けステップでは、変換後の前記機械語プログラムに関する情報をヒント情報として受け付ける
ことを特徴とする請求項１〜３３のいずれか１項に記載のプログラム変換方法。
【請求項３８】
前記実行対象は、タスクまたはスレッドである
ことを特徴とする請求項１〜３７のいずれか１項に記載のプログラム変換方法。
【請求項３９】
高級言語で記述されたソースプログラムを機械語プログラムに変換するプログラム変換装置であって、
前記ソースプログラムの字句解析および構文解析を行うパーサ手段と、
前記パーサ手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、
前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付け手段と、
前記ヒント情報に基づいて、前記中間コードを最適化する最適化手段と、
最適化された前記中間コードを機械語プログラムに変換する機械語プログラム変換手段とを備え、
前記ヒント情報には、変換対象となる前記ソースプログラムに対応付けられた実行対象以外の実行対象に関する情報が含まれる
ことを特徴とするプログラム変換装置。
【請求項４０】
前記最適化手段は、前記ヒント情報に基づいて、最適化対象とされるデータに対して、キャッシュメモリを有効活用できるような調整を行なうキャッシュライン調整手段を備える
ことを特徴とする請求項３９に記載のプログラム変換装置。
【請求項４１】
前記最適化手段は、前記ヒント情報に基づいて、最適化対象とされるデータのキャッシュメモリ上での配置されるセットに関する情報を設定する配置セット情報設定手段を備える
ことを特徴とする請求項３９または４０に記載のプログラム変換装置。
【請求項４２】
前記最適化手段は、前記ヒント情報に基づいて、変換対象とされる前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てるプロセッサ割り当て手段を備える
ことを特徴とする請求項３９〜４１のいずれか１項に記載のプログラム変換装置。
【請求項４３】
少なくとも１つのオブジェクトファイルを受け、当該オブジェクトファイルを機械語プログラムに変換するプログラム変換装置であって、
前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付け手段と、
前記ヒント情報に基づいて、前記オブジェクトファイルを最適化しつつ、前記機械語プログラムに変換する最適化手段とを備え、
前記ヒント情報には、変換対象となる前記少なくとも１つのオブジェクトファイルに対応付けられた実行対象以外の実行対象に関する情報が含まれる
ことを特徴とするプログラム変換装置。
【請求項４４】
前記最適化手段は、前記ヒント情報に基づいて、最適化対象とされる前記オブジェクトファイルに含まれるデータの実配置アドレスを決定するデータ配置決定手段を備える
ことを特徴とする請求項４３に記載のプログラム変換装置。
【請求項４５】
前記最適化手段は、前記ヒント情報に基づいて、前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てるプロセッサ割り当て手段を備える
ことを特徴とする請求項４３または４４に記載のプログラム変換装置。
【請求項４６】
ソースプログラムから機械語プログラムを開発するコンパイラシステムであって、
請求項３９〜４２のいずれか１項に記載のプログラム変換装置と、
請求項４３〜４５のいずれか１項に記載のプログラム変換装置とを備える
ことを特徴とするコンパイラシステム。
【請求項４７】
あるプログラムを他のプログラムに変換するプログラム変換方法のプログラムであって、
請求項１〜請求項３８のいずれか１項に記載のプログラム変換方法に含まれるステップをコンピュータに実行させる
ことを特徴とするプログラム。
【請求項４８】
コンピュータ読み取り可能な記録媒体であって、
請求項４７に記載のプログラムを記録した
ことを特徴とする記録媒体。
【請求項４９】
ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、
請求項４６に記載のコンパイラシステムと、
前記コンパイラシステムで生成された機械語プログラムを実行し、実行ログを出力するシミュレータ装置と、
前記シミュレータ装置により出力された前記実行ログを解析し、前記コンパイラシステムにおける最適化のための実行解析結果を出力するプロファイル装置とを備える
ことを特徴とするプログラム開発システム。
【請求項５０】
前記ヒント情報には、前記コンパイラシステムが出力するヒント情報が含まれる
ことを特徴とする請求項４９に記載のプログラム開発システム。
【請求項５１】
前記ヒント情報には、前記プロファイル装置が出力する前記実行解析結果が含まれる
ことを特徴とする請求項４９または５０に記載のプログラム開発システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ言語等の高級言語で記述されたソースプログラムを機械語プログラムに変換するプログラム変換方法およびプログラム変換装置に関し、特に、コンパイラに対する情報入力およびコンパイラでの最適化に関する。
【背景技術】
【０００２】
従来、高級言語で記述されたソースプログラムを機械語命令列に変換するコンパイラが各種提案されている。ただし、単純なコンパイラでは、例えばキャッシュメモリのミス等の影響による性能劣化を回避できない。そこで、近年、当該ソースプログラム内の情報や当該ソースプログラムのプロファイル情報に基づいてキャッシュメモリのミスを削減する最適化を実現するコンパイラが提案されている（例えば、特許文献１および特許文献２参照）。
【特許文献１】特開２００１−１６６９４８号公報
【特許文献２】特開平７−１２９４１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来の技術では、自身のタスクのみに着目して、最適化処理を実行している。このため、依然としてシステム内の他のタスクによる影響を考慮できておらず、単一プロセッサ上で複数タスクが時分割で動作する場合や、ローカルキャッシュメモリを持つ複数プロセッサ上で複数のタスクが動作する場合には、キャッシュメモリのキャッシュミス等の影響により、コンピュータシステム全体としてみた場合に、大幅に性能が低下するという問題がある。このような問題は、コンパイラに限られるものではなく、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や、ハードウェアスケジューラがタスクスケジューリングする際においても、タスクスケジューリングの結果によっては、大幅に性能が低下する。
【０００４】
そのため、システムソフトウェアのプログラマは、手動で試行錯誤的にデータの配置等を行なう必要があり、多大な開発工数を必要としている。
【０００５】
本発明は、上述の課題を解決するためになされたもので、システムソフトウェアの開発において、コンピュータシステム全体としての実行性能を向上させ、かつシステムソフトウェアの開発工数を削減することができるプログラム変換方法等を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明に係るプログラム変換方法は、高級言語で記述されたソースプログラムを機械語プログラムに変換するプログラム変換方法であって、前記ソースプログラムの字句解析および構文解析を行うパーサステップと、前記パーサステップにおける解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換ステップと、前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付けステップと、前記ヒント情報に基づいて、前記中間コードを最適化する最適化ステップと、最適化された前記中間コードを機械語プログラムに変換する機械語プログラム変換ステップとを含み、前記ヒント情報には、変換対象となる前記ソースプログラムに対応付けられた実行対象以外の実行対象に関する情報が含まれることを特徴とする。
【０００７】
これによって、変換対象となっている実行対象、すなわち変換対象となっているタスクまたはスレッド以外のタスクまたはスレッドに関する情報も考慮して、システムレベルでの最適化が可能となる。このため、システムソフトウェアの開発において、コンピュータシステム全体としての実行性能を向上させ、かつシステムソフトウェアの開発工数を削減することができるプログラム変換方法を提供することができる。
【０００８】
また、前記最適化ステップは、前記ヒント情報に基づいて、最適化対象とされるデータに対して、キャッシュメモリを有効活用できるような調整を行なうキャッシュライン調整ステップを含んでいてもよい。
【０００９】
これによって、変換対象以外のタスクもしくはスレッドに関する情報も考慮しつつ、データの配置を決定することができ、キャッシュメモリの特定のセットにマッピングが偏って追い出し合いが発生するのを回避することができる。よって、コンピュータシステム全体としての性能向上およびシステムソフトウェアの開発容易性向上に寄与する。
【００１０】
さらに、前記最適化ステップは、前記ヒント情報に基づいて、変換対象とされる前記実行対象を、当該実行対象が実行されるいずれかのプロセッサに割り当てるプロセッサ割り当てステップを含んでいてもよい。
【００１１】
これによって、変換対象以外のタスクもしくはスレッドに関する情報も考慮しつつ、マルチプロセッサシステムにおいて、ローカルキャッシュメモリの利用効率が高まるように、データ配置の決定や割り付けプロセッサの決定を実施することができる。よって、コンピュータシステム全体としての性能向上およびシステムソフトウェアの開発容易性向上に寄与する。
【００１２】
また、このようなプログラム変換方法における各種ステップは、機械語プログラムをメインメモリへロードするローダにも適用することが可能である。
【００１３】
また、本発明の他の局面に係るプログラム開発システムは、ソースプログラムから機械語プログラムを開発するプログラム開発システムであって、コンパイラシステムと、前記コンパイラシステムで生成された機械語プログラムを実行し、実行ログを出力するシミュレータ装置と、前記シミュレータ装置により出力された前記実行ログを解析し、前記コンパイラシステムにおける最適化のための実行解析結果を出力するプロファイル装置とを備え、前記コンパイラシステムは、第１のプログラム変換装置と、第２のプログラム変換装置とを備え、前記第１のプログラム変換装置は、高級言語で記述されたソースプログラムを機械語プログラムに変換するプログラム変換装置であって、前記ソースプログラムの字句解析および構文解析を行うパーサ手段と、前記パーサ手段における解析結果に基づいて、前記ソースプログラムを中間コードに変換する中間コード変換手段と、前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付け手段と、前記ヒント情報に基づいて、前記中間コードを最適化する最適化手段と、最適化された前記中間コードを機械語プログラムに変換する機械語プログラム変換手段とを備え、前記ヒント情報には、変換対象となる前記ソースプログラムに対応付けられた実行対象以外の実行対象に関する情報が含まれることを特徴とする。また、前記第２のプログラム変換装置は、少なくとも１つのオブジェクトファイルを受け、当該オブジェクトファイルを機械語プログラムに変換するプログラム変換装置であって、前記機械語プログラムの実行効率を向上させるためのヒント情報を受け付けるヒント情報受け付け手段と、前記ヒント情報に基づいて、前記オブジェクトファイルを最適化しつつ、前記機械語プログラムに変換する最適化手段とを備え、前記ヒント情報には、変換対象となる前記少なくとも１つのオブジェクトファイルに対応付けられた実行対象以外の実行対象に関する情報が含まれることを特徴とする。
【００１４】
これによって、コンパイラシステムで生成された機械語プログラムの実行結果の解析結果を再度コンパイラシステムにフィードバックすることができる。また、変換対象以外のタスクもしくはスレッドの実行結果についても、当該実行結果の解析結果をコンパイラシステムにフィードバックすることができる。このため、コンピュータシステム全体としての性能向上およびシステムソフトウェアの開発容易性向上に寄与する。
【００１５】
なお、本発明は、このような特徴的なステップを備えるプログラム変換方法として実現することができるだけでなく、プログラム変換方法に含まれる特徴的なステップを手段とするプログラム変換装置として実現したり、プログラム変換方法に含まれる特徴的なステップをコンピュータに実行させるプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）等の記録媒体やインターネット等の通信ネットワークを介して流通させることができるのは言うまでもない。
【発明の効果】
【００１６】
従来のコンパイル手段に比べて、他のファイル、タスク、スレッドの影響も含めたシステムレベルでの最適化が可能となるため、コンピュータシステムの実行性能が向上する。
【００１７】
また、システムソフトウェアのプログラマが試行錯誤的にデータの配置等を行なう必要がなくなり、システムソフトウェアの開発工数が削減される。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照しながら本発明の実施の形態に係るコンパイラシステムについて説明する。
【００１９】
（実施の形態１）
図１は、本発明の実施の形態１に係るコンパイラシステムがターゲットとするコンピュータシステムのハードウェア構成を示すブロック図である。コンピュータシステムは、プロセッサ１とメインメモリ２とキャッシュメモリ３とを備えている。
【００２０】
プロセッサ１は、機械語プログラムを実行する処理部である。
メインメモリ２は、プロセッサ１で実行される機械語命令や各種データなどを記憶するメモリである。
【００２１】
キャッシュメモリ３は４ウェイセットアソシエイティブ方式に従い動作し、メインメモリ２よりも高速にデータの読み書きが可能なメモリである。なお、キャッシュメモリ３の記憶容量はメインメモリ２のそれに比べて小さい。
【００２２】
図２は、キャッシュメモリ３のハードウェア構成を示すブロック図である。同図のように、キャッシュメモリ３は、４ウェイセットアソシエイティブ方式のキャッシュメモリであり、アドレスレジスタ１０と、デコーダ２０と、４つのウェイ２１ａ〜２１ｄ（以下、それぞれ「ウェイ０〜３」と略す）と、４つの比較器２２ａ〜２２ｄと、４つのＡＮＤ回路２３ａ〜２３ｄと、ＯＲ回路２４と、セレクタ２５と、デマルチプレクサ２６とを備えている。
【００２３】
アドレスレジスタ１０は、メインメモリ２へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは３２ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、２１ビットのタグアドレスと、４ビットのセットインデックス（図中のＳＩ）とを含む。ここで、タグアドレスはウェイにマッピングされるメインメモリ２中の領域を指す。セットインデックス（ＳＩ）はウェイ０〜３に跨る複数セットのうちの１つを示す。セットは、セットインデックス（ＳＩ）が４ビットなので１６セット存在する。タグアドレスおよびセットインデックス（ＳＩ）で特定されるブロックは、リプレース単位であり、キャッシュメモリ３に格納されている場合はラインデータ又はラインとも呼ばれる。ラインデータのサイズは、セットインデックス（ＳＩ）よりも下位のアドレスビット（７ビット）で定まるサイズ、すなわち１２８バイトである。１ワードを４バイトとすると、１ラインデータは３２ワードである。アドレスレジスタ１０中の最下位から７ビットは、ウェイのアクセス時には無視される。
【００２４】
デコーダ２０は、セットインデックス（ＳＩ）の４ビットのデータをデコードし、４つのウェイ０〜３に跨る１６セット中の１つを選択する。
【００２５】
４つのウェイ０〜３は、同じ構成を有し、合計４×２Ｋバイトの容量を有する。ウェイ０は、１６個のキャッシュエントリを有する。
【００２６】
図３に１つのキャッシュエントリにおける詳細なビット構成を示す。同図のように、１つのキャッシュエントリは、バリッドフラグＶ、２１ビットのタグ、１２８バイトのラインデータ、ウィークフラグＷおよびダーティフラグＤを保持する。「バリッドフラグＶ」は、そのキャッシュエントリが有効か否かを示す。「タグ」は２１ビットのタグアドレスのコピーである。「ラインデータ」は、タグアドレスおよびセットインデックス（ＳＩ）により特定されるブロック中の１２８バイトデータのコピーである。「ダーティフラグＤ」は、そのキャッシュエントリに書き込みがあったか否か、すなわちキャッシュエントリ中にキャッシュされたデータが書き込みによりメインメモリ２中のデータと異なるためメインメモリ２に書き戻すこと（ライトバックすること）が必要か否かを示すフラグである。「ウィークフラグＷ」は、キャッシュエントリからの追い出し対象を示すフラグであり、キャッシュミスを起こした場合に、ウィークフラグＷが１のキャッシュエントリから優先的にデータが追い出される。
【００２７】
ウェイ１〜３についても、ウェイ０と同様である。セットインデックス（ＳＩ）の４ビットによってデコーダ２０を介して選択される４ウェイに跨る４つのキャッシュエントリは、「セット」と呼ばれる。
【００２８】
比較器２２ａは、アドレスレジスタ１０中のタグアドレスと、セットインデックス（ＳＩ）により選択されたセットに含まれる４つのタグ中のウェイ０のタグとが一致するか否かを比較する。比較器２２ｂ〜２２ｃについても、ウェイ２１ｂ〜２１ｄに対応すること以外は同様である。
【００２９】
ＡＮＤ回路２３ａは、バリッドフラグＶと比較器２２ａの比較結果とを比較し、両者が一致するか否かを調べる。この比較結果をｈ０とする。比較結果ｈ０が１である場合は、アドレスレジスタ１０中のタグアドレスおよびセットインデックス（ＳＩ）に対応するラインデータが存在すること、すなわちウェイ０においてヒットしたことを意味する。比較結果ｈ０が０である場合は、ミスヒットしたことを意味する。ＡＮＤ回路２３ｂ〜２３ｄについても、ウェイ２１ｂ〜２１ｄに対応すること以外は同様である。その比較結果ｈ１〜ｈ３は、ウェイ１〜３でヒットしたかミスヒットしたかを意味する。
【００３０】
ＯＲ回路２４は、比較結果ｈ０〜ｈ３の論理和をとる。この論理和をｈｉｔとするｈｉｔは、キャッシュメモリ３にヒットしたか否かを示す。
【００３１】
セレクタ２５は、選択されたセットにおけるウェイ０〜３のラインデータのうち、ヒットしたウェイのラインデータを選択する。
【００３２】
デマルチプレクサ２６は、キャッシュエントリにデータを書き込む際に、ウェイ０〜３の１つに書き込みデータを出力する。
【００３３】
図４は、図１に示したコンピュータシステムのプロセッサ１において実行される機械語プログラムを開発するプログラム開発システム３０の構成を示すブロック図である。プログラム開発システム３０は、デバッガ３１と、シミュレータ３２と、プロファイラ３３と、コンパイラシステム３４とを備えている。プログラム開発システム３０の各構成処理部は、コンピュータ（図示せず）上で実行されるプログラムとして実現される。
【００３４】
コンパイラシステム３４は、ソースプログラム４４およびシステムレベルヒント情報４１を読み込み、機械語プログラム４３ａへ変換するためのプログラムである。コンパイラシステム３４は、機械語プログラム４３ａを生成すると共に、当該プログラムに関する情報であるタスク情報４２ａを出力する。コンパイラシステム３４の詳細については後で述べる。
【００３５】
デバッガ３１は、コンパイラシステム３４におけるソースプログラム４４のコンパイル時に見つかったバグの位置や原因を特定したり、プログラムの実行状況を調べたりするためのプログラムである。
【００３６】
シミュレータ３２は、機械語プログラムを仮想的に実行するプログラムであり、実行時の情報が実行ログ情報４０として出力される。なお、シミュレータ３２は、キャッシュメモリ３のヒットおよびミスヒット等のシミュレート結果を実行ログ情報４０に含めて出力するキャッシュメモリ用シミュレータ３８を内部に備えている。
【００３７】
プロファイラ３３は、実行ログ情報４０を解析し、コンパイラシステム３４における最適化等のヒントとなる情報をシステムレベルヒント情報４１に出力するプログラムである。
【００３８】
システムレベルヒント情報４１は、コンパイラシステム３４における最適化のヒントとなる情報を集めたものであり、プロファイラ３３での解析結果と、プログラマによる指示（例えば、プラグマ、コンパイルオプション、組込み関数）と、ソースプログラム４４に関するタスク情報４２ａおよびソースプログラム４４とは異なる別のソースプログラムに関するタスク情報４２ｂとからなる。
【００３９】
本ソフトウェア開発システム３０では、コンピュータシステムで実行される複数のタスクについて、デバッガ３１、シミュレータ３２およびプロファイラ３３を用いて情報分析することが可能であり、コンピュータシステムで実行される複数のタスクに関する情報をシステムレベルヒント情報４１として、コンパイラシステム３４に入力することが可能である。またコンパイラシステム３４自身も、機械語プログラム４３ａに加えて、システムレベルヒント情報４１の一部となるコンパイル対象タスクに関するタスク情報４２ａを出力する。
【００４０】
図５は、コンパイラシステム３４の構成を示す機能ブロック図である。このコンパイラシステムは、Ｃ言語やＣ＋＋言語等の高級言語で記述されたソースプログラム４４を上述のプロセッサ１をターゲットプロセッサとする機械語プログラム４３ａに変換するクロスコンパイラシステムであり、パーソナルコンピュータ等のコンピュータ上で実行されるプログラムによって実現され、大きく分けてコンパイラ３５と、アセンブラ３６と、リンカ３７とから構成される。
【００４１】
コンパイラ３５は、パーサ部５０と、中間コード変換部５１と、システムレベル最適化部５２と、コード生成部５３とから構成される。
【００４２】
パーサ部５０は、コンパイルの対象となるソースプログラム４４に対して、予約語（キーワード）等を抽出して字句解析および構文解析を行う処理部である。
【００４３】
中間コード変換部５１は、パーサ部５０から渡されたソースプログラム４４の各ステートメントを一定規則に基づいて中間コードに変換する処理部である。
【００４４】
システムレベル最適化部５２は、中間コード変換部５１より出力された中間コードについて、冗長除去、命令並べ替え、レジスタ割り付け等の処理を行うことにより、実行速度の向上やコードサイズの削減等を行う処理部であり、通常の最適化処理に加え、入力されたシステムレベルヒント情報４１に基づいて本コンパイラ３５特有の最適化を行う、キャッシュライン調整部５５および配置セット情報設定部５６を有する。キャッシュライン調整部５５および配置セット情報設定部５６における処理については後で述べる。なお、システムレベル最適化部５２は、データの配置に関する情報等、他のソースプログラムをコンパイルする際や、当該ソースプログラムを再コンパイルする際にヒントとなる情報をタスク情報４２ａとして出力する。
【００４５】
コード生成部５３は、システムレベル最適化部５２から出力された中間コードに対して、内部に保持する変換テーブル等を参照することで、全てのコードを機械語命令に置き換えることで、アセンブラプログラム４５を生成する。
【００４６】
アセンブラ３６は、コンパイラ３５から出力されたアセンブラプログラム４５に対して、内部に保持する変換テーブル等を参照することで、全てのコードをバイナリの機械語コードに置き換えることで、オブジェクトファイル４６を生成する。
【００４７】
リンカ３７は、アセンブラ３６から出力された複数のオブジェクトファイル４６に対して、未解決なデータのアドレス配置等を決定して連結することにより、機械語プログラム４３ａを生成する。リンカ３７は、通常の連結処理に加え、入力されたシステムレベルヒント情報４１等に基づいて本リンカ３７特有の最適化を行う、システムレベル最適化部５７を有する。システムレベル最適化部５７には、データ配置決定部５８が含まれている。データ配置決定部５８での処理については後で述べる。なお、リンカ３７は、機械語プログラム４３ａと共に、データの配置に関する情報等、他のソースプログラムをコンパイルする際や、当該ソースプログラムを再コンパイルする際にヒントとなる情報をタスク情報４２ａに出力する。
【００４８】
コンパイラシステム３４では、特に、キャッシュメモリ３におけるキャッシュミスを削減することを狙いとしている。キャッシュミスは、（１）初期ミス、（２）容量性ミスおよび（３）競合性ミスの３つに大きく分けることができる。
【００４９】
「初期ミス」とは、オブジェクト（メインメモリ２に記憶されているデータまたは命令）に最初にアクセスする際に、そのオブジェクトがキャッシュメモリ３に記憶されていないために起こるミスヒットを指す。「容量性ミス」とは、大量のオブジェクトを一度に処理しようとするために、それらのオブジェクトをキャッシュメモリ３に一度に載せることができないために起こるミスヒットを指す。「競合性ミス」とは、キャッシュメモリ３中のキャッシュエントリを異なるオブジェクトが同時に使用しようとして、互いにキャッシュエントリからの追い出し合いを行うことにより発生するミスヒットを指す。コンパイラシステム３４では、システムレベルで最も深刻な性能劣化を引き起こす「競合性ミス」に対して対策を実施している。
【００５０】
次に、以上のように構成されたコンパイラシステム３４の特徴的な動作について、具体的な例を示しながら説明する。
【００５１】
図６は、配置セット情報設定部５６およびデータ配置決定部５８におけるデータ配置に関する最適化処理の概略を説明するための図である。図６（ａ）は、各タスクもしくは各ファイルにおいて頻繁にアクセスされる変数（変数Ａ〜Ｆ）を示している。ここでは、簡単のため各変数のデータサイズは、キャッシュメモリ３のラインデータのサイズ、すなわち１２８バイトの倍数であるものとする。コンパイラシステム３４では、これらの変数がキャッシュメモリ３上の同じセットに集中してマッピングされ、スラッシング（追い出し合い）を引き起こすことがないように、変数の配置アドレス・セットを決定していく。図６の例では、図６（ｃ）に示すようにコンピュータシステム中の重要なデータ（タスクＡの変数Ａ、タスクＢの変数ＤおよびタスクＣの変数Ｆ）がキャッシュメモリ３の同一のセットであるセット１に集中してマッピングされてしまっている。このため、スラッシングを引き起こす可能性がある。このような状況を最適化によって回避することが狙いである。以下、コンパイラシステム３４の各最適化処理の内容について説明する。
【００５２】
図７は、コンパイラ３５のシステムレベル最適化部５２のキャッシュライン調整部５５の処理内容を示すフローチャートである。
【００５３】
キャッシュライン調整部５５は、後の最適化が有効に機能するように各種調整処理を行う部分であり、まず、システムレベルヒント情報４１に基づいて、コンパイル対象内の配置を考慮すべき重要なデータを抽出する（ステップＳ１１）。実際には、プロファイラ３３もしくはユーザに指示されたスラッシングを発生しているデータもしくはアクセス頻度の高いデータを抽出することになる。システムレベルヒント情報４１の具体例については後述するが、システムレベルヒント情報４１に含まれるデータが「重要なデータ」として扱われる。
【００５４】
次に、キャッシュライン調整部５５は、ステップＳ１１で抽出されたデータについて、そのデータが占めるライン数が小さくなるようにデータにアライン情報を設定する（ステップＳ１２）。このアライン情報を守ってリンカ３７が最終的な当該データの配置アドレスを決定するため、ここで調整した占有ライン数は保たれることになる。
【００５５】
図８は、アライン情報の一例を示す図であり、例えば、タスクＡのデータである変数Ａは、１２８バイト単位でアラインして配置すべきデータであることを示している。
【００５６】
最後に、キャッシュライン調整部５５は、抽出されたデータを含むループについて、必要に応じて各イタレーションの処理がライン単位になるようにループを再構成する（ステップＳ１３）。具体的には、ループ内での重要データの処理データ量が３ライン分を超えるループについては、ループのイタレーションを分割し、１ライン分の処理を行う内側ループとその単位で繰り返す外側ループの二重ループの構造になるようにループを再構成する。具体的な変換イメージを図９に示す。図８に示したアライン情報では、変数Ａ（配列Ａ）は１２８バイト（１ラインサイズ）ごとにアラインされるべきであるため、二重ループへの構造変換が行なわれる。この処理は、ループ処理を複数のスレッドに分割した場合に、各スレッドで扱うデータがライン境界をまたがってキャッシュメモリの利用効率が低下することを防ぐために実施するものである。すなわち、図９（ａ）に示されるような４ライン（＝４×１２８バイト）分のデータ（配列Ａ）を処理するループ処理を、図９（ｂ）に示されるように、データＡを１ライン（＝１２８バイト）ずつアラインメントすることにより、１ライン分のデータをループ処理するループ処理に構造変換する。
【００５７】
図１０はコンパイラ３５のシステムレベル最適化部５２の配置セット情報設定部５６の処理内容を示すフローチャートである。
【００５８】
配置セット情報設定部５６では、まずシステムレベルヒント情報４１から、コンパイル対象タスク以外のタスクも含めた各重要データの実配置アドレスおよび配置セット情報を入力する（ステップＳ２１）。図１１は、図６に示したデータ配置に基づいて作成された配置セット情報の一例を示す図であり、タスク名と、データ名と、セット番号とからなる。例えば、タスクＡの変数Ａはキャッシュメモリ３上ではセット番号１に配置されることが示されている。図１２は、重要データの実配置アドレスの一例を示す図であり、タスク名とデータ名と、メインメモリ３上の実配置アドレスとからなる。例えば、タスク名Ｇの変数Ｈは、メインメモリ３の０ｘＦＦＥ８７番地に配置されることが示されている。
【００５９】
次に、配置セット情報設定部５６は、ステップＳ２１で入力されたものが実配置アドレスであるデータに対して、キャッシュメモリ３上で配置されるセットを求め、システム全体としてのセット配置状況データを作成する（ステップＳ２２）。このセット配置状況データは、キャッシュメモリの各セットに対してシステム内の重要データが何ライン分マッピングされるかを示したものである。図１３は、図６に示したデータ配置に基づいて作成されたセット配置状況データの一例を示す図であり、セット番号と、当該セット番号のセットにマッピングされるデータのライン数を示している。例えば、セット０には１ライン分のデータがマッピングされ、セット１には３ライン分のデータがマッピングされることが示されている。
【００６０】
最後に、配置セット情報設定部５６は、コンピュータシステム全体として重要データがマッピングされるセットに偏りが生じず均等になるように、前記キャッシュライン調整部５５で抽出したコンパイル対象内の重要データの配置セットを決定し、その属性をデータに付加すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ２３）。このタスク情報４２ａは、他のコンパイル単位のコンパイルにおいてデータ配置を決定する際に参照されることになる。また、データに付加された属性は、ＯＳ等によるタスクスケジューリングの際に参照されることになる。
【００６１】
図１４はリンカ３７のシステムレベル最適化部５７のデータ配置決定部５８の処理内容を示すフローチャートである。
【００６２】
データ配置決定部５８では、まずシステムレベルヒント情報４１から、対象タスクにおいて配置を考慮すべき重要データを抽出する（ステップＳ３１）。実際には、プロファイラ３３もしくはユーザに指示されたスラッシングを発生しているデータもしくはアクセス頻度の高いデータを抽出することになる。この処理はステップＳ１１と同様の処理である。
【００６３】
さらに、データ配置決定部５８は、システムレベルヒント情報４１から、対象タスク以外のタスクも含めた各重要データの実配置アドレスおよび配置セット情報を入力する（ステップＳ３２）。この処理はステップＳ２１と同様の処理である。
【００６４】
次に、データ配置決定部５８は、ステップＳ３２で入力された実配置アドレスおよびリンカ３７に入力されたオブジェクトファイル４６の実配置アドレスから、各データが配置されるキャッシュメモリ３のセットを求め、コンピュータシステム全体としてのセット配置状況データを作成する（ステップＳ３３）。このセット配置状況データは、キャッシュメモリの各セットに対してシステム内の重要データが何ライン分マッピングされるかを示したものである。セット配置状況データは、図１３に示したものと同様である。
【００６５】
最後に、データ配置決定部５８は、コンピュータシステム全体として重要データがマッピングされるセットに偏りが生じず均等になるように、ステップＳ３１で抽出した対象タスク内の重要データの実配置アドレスを決定すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ３４）。このタスク情報４２ａは、他のタスクのコンパイルにおいてデータ配置を決定する際に参照されることになる。すなわち、図１３に示すセット配置状況データのセット１のように、集中してデータがマッピングされる場合には、最もライン数が少ないライン（例えば、セット３やセット４）などに、データをマッピングしなおすことにより、実配置アドレスを決定しなおす。
【００６６】
以上のようにして、コンパイラシステム３４では、コンパイル対象タスク以外のタスクの情報も含めてヒント情報として入力し、重要データのキャッシュメモリのセットへのマッピングが偏らないようにデータ配置を決定していくことにより、スラッシングによる性能低下を防ぐことができる。
【００６７】
（実施の形態２）
図１５は、本発明の実施の形態２に係るコンパイラシステムがターゲットとするコンピュータシステムのハードウェア構成を示すブロック図である。コンピュータシステムは、３つのプロセッサ（６１ａ〜６１ｃ）と、それぞれが備えるローカルキャッシュメモリ（６３ａ〜６３ｃ）と、共有メモリ６２とを備えている。ローカルキャッシュメモリを備える３つのプロセッサは、バス６４を介して共有メモリ６２に接続されている。
【００６８】
プロセッサ６１ａ〜６１ｃの各々の動作については実施の形態１で述べたものと同様であり、共有メモリ６２の動作は実施の形態１で述べたメインメモリ２と同様である。コンピュータシステム内の各プログラムもしくはスレッドは、オペレーティングシステムによって上記３つのプロセッサ６１ａ〜６１ｃで並列実行するようにスケジューリングされる。このオペレーティングシステムのタスクスケジューリングへのヒント情報を、コンパイラシステムとして機械語プログラムに埋め込むことができる。具体的には、各タスクおよびスレッドをいずれのプロセッサに割り付けるのが望ましいか、いずれのタスクおよびスレッド同士を同じプロセッサに割り付けるのが望ましいかのヒント情報を付加することになる。
【００６９】
ローカルキャッシュメモリ６３ａ〜６３ｃの各々は、実施の形態１で述べたキャッシュメモリ３の、メインメモリ２の内容を保持しておいて高速アクセス可能とする機能に加えて、データの一貫性を保持するための機能を有する。これは、複数のローカルキャッシュメモリ６３ａ〜６３ｃが共有メモリ６２の同一アドレスのデータを保持し、それぞれ独立に更新してしまうことによる誤動作を回避するための機能である。具体的には、ローカルキャッシュメモリ６３ａ〜６３ｃは、バス６４および他のローカルキャッシュメモリ６３ａ〜６３ｃの状態を監視する機能を有しており、自らが保持しているデータと同じアドレスのデータが他のローカルキャッシュメモリ６３ａ〜６３ｃにて更新された場合、自らが保持しているデータを無効化することにより、一貫性を維持する。
【００７０】
この機構によりデータの一貫性を維持することは可能であるが、頻繁にデータの無効化が発生すると性能面で大幅な劣化を生じる。したがって、プログラム開発システムにてこの点も考慮してキャッシュメモリ６３ａ〜６３ｃの利用の効率化を図る。
【００７１】
プログラム開発システムの構成は、実施の形態１にて図４に示したプログラム開発システム３０の構成と同じである。ただし、コンパイラシステム３４の代わりに、以下に説明するコンパイラシステム７４を用いている。
【００７２】
図１６は、プログラム開発システム内のコンパイラシステム７４の構成を示す機能ブロック図である。ほとんどの部分は実施の形態１にて図５に示したコンパイラシステム３４の構成図と同様であるので、異なる部分についてのみ以下で説明する。
【００７３】
コンパイラシステム７４は、コンパイラシステム３４におけるコンパイラ３５の代わりにコンパイラ７５を用い、リンカ３７の代わりにリンカ７７を用いたものである。
【００７４】
コンパイラ７５は、コンパイラ３５のシステムレベル最適化部５２の代わりにシステムレベル最適化部８２を用いたものである。システムレベル最適化部８２は、システムレベル最適化部５２において、プロセッサ番号ヒント情報設定部８６が加えられ、かつ配置セット情報設定部５６の代わりに配置セット情報設定部８６を用いたものである。キャッシュライン調整部５５の動作については実施の形態１で説明したものと同じである。
【００７５】
リンカ７７は、リンカ３７のシステムレベル最適化部５７の代わりにシステムレベル最適化部７７を用いたものである。システムレベル最適化部７７は、システムレベル最適化部５７において、プロセッサ番号情報設定部８９が加わり、かつデータ配置決定部５８の代わりにデータ配置決定部８８を用いたものである。
【００７６】
図１７は、プロセッサ番号ヒント情報設定部８５の処理内容を示すフローチャートである。
【００７７】
プロセッサ番号ヒント情報設定部８５では、まずシステムレベルヒント情報４１に基づいて、スレッドおよびタスクにおけるデータ配置を考慮すべき重要なデータを抽出する（ステップＳ４１）。実際には、プロファイラ３３もしくはユーザに指示されたスラッシングを発生しているデータもしくはアクセス頻度の高いデータを抽出することになる。
【００７８】
さらに、プロセッサ番号ヒント情報設定部８５は、システムレベルヒント情報４１から、コンパイル対象タスク以外のタスクも含めた各重要データの実配置アドレスおよび配置セット情報および各タスクのプロセッサ番号ヒント情報を入力する（ステップＳ４２）。
【００７９】
次に、プロセッサ番号ヒント情報設定部８５は、プロセッサ番号毎に各重要データを分類し、システム全体としてのプロセッサ割り当て状況データを作成する（ステップＳ４３）。このプロセッサ割り当て状況データは、各プロセッサに対してどのアドレスおよびセットの重要データが割り当てられるように指示されているかを示したものである。例えば、図１８に示すようなデータである。
【００８０】
最後に、プロセッサ番号ヒント情報設定部８５は、ステップＳ４１で抽出した各データが属するスレッドおよびタスクについて、上記プロセッサ割り当て状況データを考慮して、同一アドレスのデータについては同じプロセッサに割り当てられるように、また同一プロセッサの同一セットにマッピングされるデータに偏りが生じずに均等になるように、当該スレッドおよびタスクのプロセッサ番号ヒントを決定してその属性を付加すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ４４）。このタスク情報４２ａは、他のコンパイル単位のコンパイルにおいてデータ配置およびプロセッサ番号を決定する際に参照されることになる。
【００８１】
図１９は、配置セット情報設定部８６の処理内容を示すフローチャートである。
配置セット情報設定部８６では、まずシステムレベルヒント情報４１から、コンパイル対象タスク以外のタスクも含めた各重要データの実配置アドレス、配置セット情報およびプロセッサ番号情報を入力する（ステップＳ５１）。
【００８２】
次に、配置セット情報設定部８６は、上記プロセッサ番号ヒント情報設定部８５にて抽出した当該スレッドおよびタスクの重要データについて、同一アドレスのデータが３つ以上のプロセッサに割り当てられているかどうかを調べ、該当する場合には当該データにアンキャッシャブル領域の属性を付加すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ５２）。アンキャッシャブル領域とは、当該領域内のデータがローカルキャッシュメモリ６３ａ〜６３Ｃに転送されない共有メモリ６２内の領域のことである。ステップ５２の処理は、重要なデータが多くのローカルキャッシュメモリにコピーされてしまい、データの一貫性を維持するためのオーバーヘッド処理によって、性能が劣化するのを防ぐために実施される。
【００８３】
以降の処理は、プロセッサ番号毎に実施される。なお、プロセッサ番号が付与されていないデータについては、ひとつのプロセッサに割り当てられるものとして取り扱い、処理を実行する。すなわち、配置セット情報設定部８６は、ステップＳ５１で入力された情報が実配置アドレスであった場合には、当該アドレスに配置されるデータの配置されるローカルキャッシュメモリ上のセットを求め、当該プロセッサ全体としてのセット配置状況データを作成する（ステップＳ５３）。このセット配置状況データは、キャッシュメモリの各セットに対して当該プロセッサ内の重要データが何ライン分マッピングされるかを示したものである。すなわち、図１３に示したものと同様のものである。
【００８４】
最後に、配置セット情報設定部８６は、当該プロセッサ全体として重要データがマッピングされるセットに偏りが生じず均等になるように、上記プロセッサ番号ヒント情報設定部８５で抽出したコンパイル対象内の重要データの配置セットを決定し、その属性をデータに付加すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ５４）。このタスク情報４２ａは、他のコンパイル単位のコンパイルにおいてデータ配置およびプロセッサ番号を決定する際に参照されることになる。
【００８５】
図２０は、プロセッサ番号情報設定部８９の処理内容を示すフローチャートである。
プロセッサ番号情報設定部８９では、まずシステムレベルヒント情報４１に基づいて、スレッドおよびタスクにおけるデータ配置を考慮すべき重要なデータを抽出する（ステップＳ６１）。実際には、プロファイラ３３もしくはユーザに指示されたスラッシングを発生しているデータもしくはアクセス頻度の高いデータを抽出することになる。
【００８６】
さらに、プロセッサ番号情報設定部８９は、システムレベルヒント情報４１から、コンパイル対象タスク以外のタスクも含めた各重要データの実配置アドレスおよび配置セット情報および各タスクのプロセッサ番号ヒント情報を入力する（ステップＳ６２）。
【００８７】
次に、プロセッサ番号情報設定部８９は、プロセッサ番号毎に各重要データを分類し、システム全体としてのプロセッサ割り当て状況データを作成する（ステップＳ６３）。このプロセッサ割り当て状況データは、各プロセッサに対してどのアドレスおよびセットの重要データが割り当てられるように指示されているかを示したものである。例えば、図１８に示すようなデータである。
【００８８】
最後に、プロセッサ番号情報設定部８９は、ステップＳ６１で抽出した各データが属するスレッドおよびタスクについて、上記プロセッサ割り当て状況データを考慮して、同一アドレスのデータについては同じプロセッサに割り当てられるように、また同一プロセッサの同一セットにマッピングされるデータに偏りが生じずに均等になるように、当該スレッドおよびタスクのプロセッサ番号を決定してその属性を付加すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ６４）。このタスク情報４２ａは、他のコンパイル単位のコンパイルにおいてデータ配置およびプロセッサ番号を決定する際に参照されることになる。また、ＯＳまたはハードウェアスケジューラは、タスクに付加された属性情報を見ることにより、タスクをプロセッサに割り付け、タスクスケジューリングを行なうことができる。
【００８９】
図２１は、データ配置決定部８８の処理内容を示すフローチャートである。
データ配置決定部８８では、まずシステムレベルヒント情報４１から、コンパイル対象タスク以外のタスクも含めた各重要データの実配置アドレスおよび配置セット情報およびプロセッサ番号情報を入力する（ステップＳ７１）。
【００９０】
次に、データ配置決定部８８は、上記プロセッサ番号情報設定部８９にて抽出したスレッドおよびタスクの重要データについて、同一アドレスのデータが３つ以上のプロセッサに割り当てられているかどうかを調べ、該当する場合には当該データにアンキャッシャブル領域の属性を付加すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ７２）。これは、重要なデータが多くのローカルキャッシュにコピーされてしまい一貫性維持のためのオーバーヘッドによって性能が劣化するのを防ぐために実施する。
【００９１】
以降の処理は、プロセッサ番号毎に実施される。なお、プロセッサ番号が付与されていないデータについては、ひとつのプロセッサに割り当てられるものとして取り扱い、処理を実行する。データ配置決定部８８は、ステップＳ７１で入力された実配置アドレスおよび入力されたオブジェクトファイルの実配置アドレスからそれぞれ配置されるセットを求め、当該プロセッサ全体としてのセット配置状況データを作成する（ステップＳ７３）。このセット配置状況データは、キャッシュメモリの各セットに対して当該プロセッサ内の重要データが何ライン分マッピングされるかを示したものである。
【００９２】
最後に、データ配置決定部８８は、当該プロセッサ全体として重要データがマッピングされるセットに偏りが生じず均等になるように、上記プロセッサ番号情報設定部８９で抽出したコンパイル対象内の重要データの実配置アドレスを決定すると共に、その情報をタスク情報４２ａにも出力する（ステップＳ７４）。このタスク情報４２ａは、他のコンパイル単位のコンパイルにおいてデータ配置およびプロセッサ番号を決定する際に参照されることになる。
【００９３】
以上のようにして、コンパイラシステム７４では、コンパイル対象タスク以外のタスクの情報も含めてヒント情報として入力し、マルチプロセッサにおいて、同一のデータが複数のプロセッサのローカルキャッシュメモリに分散しないように、また各ローカルキャッシュメモリのセットへのマッピングが偏らないようにデータ配置を決定していくことにより、スラッシングによる性能低下を防いでいる。
【００９４】
補足説明として、以上で説明した実施の形態において、コンパイラシステムに対して入力されるシステムレベルヒント情報ファイルの一例を図２２に示す。
【００９５】
図２２に示したように、コンパイラシステムにおいてデータ配置やプロセッサ番号を決定するための情報として、システム内の各タスクおよびそれらが含む各スレッドについて、その時点での割り当てプロセッサＩＤとともに、重要なデータの名前と、もし確定していればそのアドレスやセット番号を指定することができる。例えば、＜ＴａｓｋＩｎｆｏ＞および＜／ＴａｓｋＩｎｆｏ＞で囲まれる部分が１つのタスクに対するタスク情報を示しており、＜ＴｈｒｅａｄＩｎｆｏ＞および＜／ＴｈｒｅａｄＩｎｆｏ＞で囲まれる部分が１つのスレッドに対するスレッド情報を示している。また、＜ＶａｒｉａｂｌｅＩｎｆｏ＞および＜／ＶａｒｉａｂｌｅＩｎｆｏ＞で囲まれる部分が上述の１つの重要データに対応しており、その中に、実アドレス情報や、プロセッサ番号などの情報が含まれている。
【００９６】
このヒント情報は、図４のプログラム開発システムの構成図にも示したように、プロファイラ３３から自動生成されるものと、コンパイラシステムから自動生成されるものと、プログラマが記述したものが含まれている。
【００９７】
以上、本発明に係るプログラム開発手法およびコンパイラシステムについて、実施の形態に基づいて説明したが、本発明はこれらの実施形態に限られない。即ち、
（１）上記実施の形態では、システムレベルヒント情報の与え方としてファイルとして入力することを想定していたが、ファイル入力に限らず、コンパイルオプションとして指定する方法や、ソースファイル内にプラグマ指示を追記する方法や、ソースファイル内に指示内容を示す組み込み関数を追記する方法をとっても、本発明の効果を実現することが可能である。
（２）上記実施の形態では、コンパイラシステムにて静的に最適化することを想定していがた、図２３に示すようにメモリにプログラムおよびデータをロードするローダ９０に本発明の機構を実装することも可能である。この場合、ローダ９０は各機械語プログラム４３とシステムレベルヒント情報９２とを読み込み、プロセッサ番号ヒント情報を付加するとともに、重要データの配置アドレスを決定し、それに基づいてメインメモリ９１にデータを配置していくことになる。このような構成でも本発明の効果を実現することができる。
（３）上記実施の形態では、実施の形態１にて示したシングルプロセッサ用のコンパイラシステムと、実施の形態２にて示したマルチプロセッサ用のコンパイラシステムを別々に示したが、これらは必ずしも独立している必要はない。１つのコンパイラシステムでシングルプロセッサおよびマルチプロセッサの両方に対応することも可能である。この場合、対象プロセッサに関する情報をコンパイルオプションやヒント情報の形でコンパイラシステムに与えることにより実現可能である。
（４）上記実施の形態２では、共有メモリ型のマルチプロセッサを対象としたが、本発明はこのマルチプロセッサおよびキャッシュメモリの構成に限定されるものではない。集中共有メモリを持たない分散共有メモリ型等の構成のマルチプロセッサシステムにおいても本発明の有意性は保たれる。
（５）上記実施の形態２では、プロセッサ番号ヒント情報に基づいてＯＳがタスクおよびスレッドを各プロセッサにスケジューリングすることを想定していたが、ＯＳの存在は必ずしも必要ではない。ＯＳに替わってハードウェアにてスケジューリングを実施するようなスケジューラを搭載したシステムにおいても、本発明の効果を実現することが可能である。
（６）上記実施の形態２では、実プロセッサでのマルチプロセッサシステムを想定していたが、必ずしも実プロセッサである必要はない。例えば、シングルプロセッサを時分割で動作させ、仮想的なマルチプロセッサとして動作させるシステムや、この仮想的なマルチプロセッサを複数備えるマルチプロセッサシステムにおいても、本発明の有意性は保たれる。
【産業上の利用可能性】
【００９８】
本発明は、コンパイラシステムに適用でき、特に複数タスクを実行するシステムをターゲットとするコンパイラシステム等に適用できる。
【図面の簡単な説明】
【００９９】
【図１】本発明の実施の形態１に係るコンパイラシステムがターゲットとするシステムのハードウェア構成を示すブロック図である。
【図２】キャッシュメモリのハードウェア構成を示すブロック図である。
【図３】キャッシュエントリにおける詳細なビット構成を示す図である。
【図４】機械語プログラムを開発するプログラム開発システムの構成を示すブロック図である。
【図５】コンパイラシステムの構成を示す機能ブロック図である。
【図６】配置セット情報設定部およびデータ配置決定部の処理の概要を説明するための図である。
【図７】キャッシュライン調整部の処理内容を示すフローチャートである。
【図８】アライン情報の一例を示す図である。
【図９】キャッシュライン調整部におけるループの再構成のイメージを示す図である。
【図１０】配置セット情報設定部の処理内容を示すフローチャートである。
【図１１】配置セット情報の一例を示す図である。
【図１２】重要データの実配置アドレスの一例を示す図である。
【図１３】セット配置状況データの一例を示す図である。
【図１４】データ配置決定部の処理内容を示すフローチャートである。
【図１５】本発明の実施の形態２に係るコンパイラシステムがターゲットとするシステムのハードウェア構成を示すブロック図である。
【図１６】コンパイラシステムの構成を示す機能ブロック図である。
【図１７】プロセッサ番号ヒント情報設定部の処理内容を示すフローチャートである。
【図１８】プロセッサ割り当て状況データの一例を示す図である。
【図１９】配置セット情報設定部の処理内容を示すフローチャートである。
【図２０】プロセッサ番号情報設定部の処理内容を示すフローチャートである。
【図２１】データ配置決定部の処理内容を示すフローチャートである。
【図２２】システムレベルヒント情報の一例を示す図である。
【図２３】本発明をローダに適用する構成を示す図である。
【符号の説明】
【０１００】
１  プロセッサ
２  メインメモリ
３  キャッシュメモリ
３０  プログラム開発システム
３１  デバッガ
３２  シミュレータ
３３  プロファイラ
３４  コンパイラシステム
３５  コンパイラ
３６  アセンブラ
３７  リンカ
４０  実行ログ情報
４１  システムレベルヒント情報
４２ａ，４２ｂ  タスク情報
４３，４３ａ，４３ｂ  機械語プログラム
４４  ソースプログラム
５０  パーサ部
５１  中間コード変換部
５２  システムレベル最適化部
５３  コード生成部
５５  キャッシュライン調整部
５６  配置セット情報設定部
５７  システムレベル最適化部
５８  データ配置決定部
６１  プロセッサ
６２  共有メモリ
６３ａ〜６３ｃ  ローカルキャッシュメモリ
６４  バス
７４  コンパイラシステム
７５  コンパイラ
７７  リンカ
８２  システムレベル最適化部
８５  プロセッサ番号ヒント情報設定部
８６  配置セット情報設定部
８７  システムレベル最適化部
８８  データ配置決定部
８９  プロセッサ番号情報設定部
９０  ローダ
９１  メインメモリ
９２  システムレベルヒント情報
【図１】
2006260096.tif 000003
【図２】
2006260096.tif 000004
【図３】
2006260096.tif 000005
【図４】
2006260096.tif 000006
【図５】
2006260096.tif 000007
【図６】
2006260096.tif 000008
【図７】
2006260096.tif 000009
【図８】
2006260096.tif 000010
【図９】
2006260096.tif 000011
【図１０】
2006260096.tif 000012
【図１１】
2006260096.tif 000013
【図１２】
2006260096.tif 000014
【図１３】
2006260096.tif 000015
【図１４】
2006260096.tif 000016
【図１５】
2006260096.tif 000017
【図１６】
2006260096.tif 000018
【図１７】
2006260096.tif 000019
【図１８】
2006260096.tif 000020
【図１９】
2006260096.tif 000021
【図２０】
2006260096.tif 000022
【図２１】
2006260096.tif 000023
【図２２】
2006260096.tif 000024
【図２３】
2006260096.tif 000025