(57)【要約】【課題】原始プログラムを解析し、キャッシュメモリをソフトウェアから動的に制御する目的プログラムを生成する。【解決手段】コンパイラは、原始プログラムをコンパイルして目的プログラムを生成する。コンパイラは、メモリアクセス解析処理手段と、目的プログラム生成処理手段とを具備する。メモリアクセス解析処理手段は、原始プログラムの解析結果から、原始プログラムの変数及び配列のメモリアクセス状況を調査する。目的プログラム生成処理手段は、メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成する。【選択図】図１
2011170439.tif 000002
【特許請求の範囲】
【請求項１】
原始プログラムをコンパイルして目的プログラムを生成するコンパイラであって、
原始プログラムの解析結果から、前記原始プログラムの変数及び配列のメモリアクセス状況を調査するメモリアクセス解析処理手段と、
メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成する目的プログラム生成処理手段と
を具備する
コンパイラ。
【請求項２】
請求項１に記載のコンパイラであって、
前記メモリアクセス解析処理手段は、
前記原始プログラムの変数及び配列のメモリアクセス時に、キャッシュメモリを利用してメモリアクセスするか否か判定する手段と、
キャッシュメモリを利用してメモリアクセスする場合、複数のキャッシュメモリセットの候補の中から、利用するキャッシュメモリセットを決定する手段と
を具備する
コンパイラ。
【請求項３】
請求項２に記載のコンパイラであって、
目的プログラム生成処理手段は、
前記決定されたキャッシュメモリセットに対して、キャッシュメモリの制御コードを作成し、前記目的プログラムに組み込む手段
を具備する
コンパイラ。
【請求項４】
原始プログラムをコンパイルして目的プログラムを生成するコンパイラにより実施されるコンパイル方法であって、
原始プログラムの解析結果から、前記原始プログラムの変数及び配列のメモリアクセス状況を調査することと、
メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成することと
を含む
コンパイル方法。
【請求項５】
請求項４に記載のコンパイル方法であって、
前記原始プログラムの変数及び配列のメモリアクセス時に、キャッシュメモリを利用してメモリアクセスするか否か判定することと、
キャッシュメモリを利用してメモリアクセスする場合、複数のキャッシュメモリセットの候補の中から、利用するキャッシュメモリセットを決定することと
を更に含む
コンパイル方法。
【請求項６】
請求項５に記載のコンパイル方法であって、
前記決定されたキャッシュメモリセットに対して、キャッシュメモリの制御コードを作成し、前記目的プログラムに組み込むこと
を更に含む
コンパイル方法。
【請求項７】
原始プログラムをコンパイルして目的プログラムを生成する際に、原始プログラムの解析結果から、前記原始プログラムの変数及び配列のメモリアクセス状況を調査するステップと、
メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成するステップと
を計算機に実行させるための
コンパイル実行プログラム。
【請求項８】
請求項７に記載のコンパイル実行プログラムであって、
前記原始プログラムの変数及び配列のメモリアクセス時に、キャッシュメモリを利用してメモリアクセスするか否か判定するステップと、
キャッシュメモリを利用してメモリアクセスする場合、複数のキャッシュメモリセットの候補の中から、利用するキャッシュメモリセットを決定するステップと
を更に計算機に実行させるための
コンパイル実行プログラム。
【請求項９】
請求項８に記載のコンパイル実行プログラムであって、
前記決定されたキャッシュメモリセットに対して、キャッシュメモリの制御コードを作成し、前記目的プログラムに組み込むステップ
を更に計算機に実行させるための
コンパイル実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラに関し、特に原始プログラムをコンパイルして目的プログラムを生成するコンパイラに関する。
【背景技術】
【０００２】
従来、プロセッサや情報処理装置のキャッシュメモリ（ｃａｃｈｅ  ｍｅｍｏｒｙ）は、ソフトウェアから動的に制御できなかったが、近年、キャッシュメモリをソフトウェアから動的に制御する方法や装置が開発されている。
【０００３】
その例として、特許文献１（特開２００９−９３５５９号公報）では、プログラムの動作中に動的にキャッシュ制御を変更することが可能で、プログラム中のメモリアクセス命令語において、キャッシュメモリの利用の有無の指定ができる。
【０００４】
また、特許文献２（特開２０００−２９３４３７号公報）では、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋ−ａｓｉｄｅ  Ｂｕｆｆｅｒ）にキャッシュメモリの制御情報を指定することが可能で、メモリアクセス時にその論理アドレスに対応するＴＬＢに設定された値により、利用するキャッシュメモリセット、又はキャッシュメモリセットのグループの指定や、キャッシュメモリの置換アルゴリズムの指定が可能である。
【０００５】
更に、非特許文献１では、ＳＰＡＲＣ６４（登録商標）  ＶＩＩＩｆｘは、キャッシュを２つのセクタ（ｓｅｃｔｏｒ）と呼ばれる部分に分けて、更新処理をする仕組みが導入されており、メモリアクセス命令単位で指定することができる。
【０００６】
しかし、キャッシュメモリのソフトウェア制御機能を利用した高速化機能を有するコンパイラ（ｃｏｍｐｉｌｅｒ）はなく、プログラマは自力でプログラムのメモリアクセスを解析し、制御しなければならない。
【０００７】
なお、キャッシュメモリの効率的な利用のために、種々のソフトウェア制御機能を有するキャッシュメモリ装置が検討、開発されているが、そのソフトウェア制御機能に対応したプログラムの最適化機能を有するコンパイラは開発されていない。
【０００８】
このため、プログラマは、キャッシュメモリのソフトウェア制御機能を利用する場合、原始プログラムの変数や配列のメモリアクセス状況を分析して、もっとも良いキャッシュメモリの設定を決定し、その制御コードを自分でプログラミングしなければならない。
【０００９】
このため、原始プログラムのステップ数が大きい場合は、解析に長時間必要となり、またプログラマには対象となるキャッシュメモリシステムの詳細な知識が必要となる等、プログラムの高速化の負担が大きい。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００９−９３５５９号公報
【特許文献２】特開２０００−２９３４３７号公報
【非特許文献】
【００１１】
【非特許文献１】富士通  ＳＰＡＲＣ６４（登録商標）  アーキテクチャーマニュアル  ＳＰＡＲＣ６４（登録商標）  ＶＩＩＩｆｘ  Ｅｘｔｅｎｓｉｏｎｓ  日本語版（２００９年９月８日）  ＳＰＡＲＣ６４（登録商標）  ＶＩＩＩｆｘ  Ｅｘｔｅｎｓｉｏｎｓ  Ｆｕｊｉｔｓｕ  Ｌｉｍｉｔｅｄ  Ｖｅｒ１４，  ８  Ｓｅｐ．２００９  ｐ．２３２〜２３５  ＜ｈｔｔｐ：／／ｉｍｇ．ｊｐ．ｆｕｊｉｔｓｕ．ｃｏｍ／ｄｏｗｎｌｏａｄｓ／ｊｐ／ｊｈｐｃ／ｓｐａｒｃ６４ｖｉｉｉｆｘ−ｅｘｔｅｎｓｉｏｎｓｊ．ｐｄｆ＞
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明の目的は、原始プログラムを解析し、キャッシュメモリをソフトウェアから動的に制御する目的プログラムを生成するコンパイラを提供することである。
【課題を解決するための手段】
【００１３】
本発明のコンパイラは、原始プログラムをコンパイルして目的プログラムを生成する。このコンパイラは、メモリアクセス解析処理手段と、目的プログラム生成処理手段とを具備する。メモリアクセス解析処理手段は、原始プログラムの解析結果から、原始プログラムの変数及び配列のメモリアクセス状況を調査する。目的プログラム生成処理手段は、メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成する。
【００１４】
本発明のコンパイル方法は、原始プログラムをコンパイルして目的プログラムを生成するコンパイラにより実施されるコンパイル方法である。このコンパイル方法では、原始プログラムの解析結果から、原始プログラムの変数及び配列のメモリアクセス状況を調査する。また、メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成する。
【００１５】
本発明のコンパイル実行プログラムは、原始プログラムをコンパイルして目的プログラムを生成する際に、原始プログラムの解析結果から、原始プログラムの変数及び配列のメモリアクセス状況を調査するステップと、メモリアクセス状況の調査結果から、キャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御し利用する目的プログラムを作成するステップとを計算機に実行させるためのプログラムである。なお、本発明のコンパイル実行プログラムは、記憶装置や記憶媒体に格納することが可能である。
【発明の効果】
【００１６】
対象となる計算機が有するキャッシュメモリのソフトウェア制御機能を利用して効率的にキャッシュメモリを使用する目的プログラムが得られ、プログラムを高速化する負担が減少する。
【図面の簡単な説明】
【００１７】
【図１】本発明におけるコンパイル方式を説明するための図である。
【図２】本発明のコンパイラの処理を示すフローチャートである。
【図３】Ｆｏｒｔｒａｎの原始プログラム例を示す図である。
【図４】本発明に係る計算機の構成例を説明するための図である。
【発明を実施するための形態】
【００１８】
以下に、本発明の第１実施形態について添付図面を参照して説明する。
図１を参照すると、本発明におけるコンパイル方式では、原始プログラム１０と、コンパイラ２０と、目的プログラム３０が存在する。
【００１９】
原始プログラム１０は、プログラミング言語で記述したソースコード（ｓｏｕｒｃｅ  ｃｏｄｅ）である。
【００２０】
コンパイラ２０は、原始プログラム１０を入力し、目的プログラム３０を出力する。
【００２１】
目的プログラム３０は、計算機が実行できる形式のオブジェクトコード（ｏｂｊｅｃｔ  ｃｏｄｅ）である。
【００２２】
コンパイラ２０は、中間言語作成処理部２１と、最適化処理部２２と、メモリアクセス解析処理部２３と、目的プログラム生成処理部２４と、キャッシュ制御コード生成処理部２５を備える。
【００２３】
中間言語作成処理部２１は、原始プログラム１０を読み込み、原始プログラム１０の字句解析や構文解析を行い、字句解析や構文解析の結果に基づいて、中間言語１を作成する。すなわち、中間言語１は、中間言語作成処理部２１により作成される中間ファイル（ｉｎｔｅｒｍｅｄｉａｔｅ  ｆｉｌｅ）である。
【００２４】
最適化処理部２２は、中間言語１を読み込み、共通式の削除やループのアンロール、レジスタ割当等の種々の最適化処理を行い、その最適化処理の結果に基づいて、中間言語２を作成する。すなわち、中間言語２は、最適化処理部２２により作成される中間ファイルである。
【００２５】
メモリアクセス解析処理部２３は、中間言語２を読み込み、原始プログラム１０の変数や配列のメモリアクセス状況を分析し、メモリアクセス時にキャッシュメモリを利用するか否かを決める。メモリアクセス解析処理部２３は、キャッシュメモリを利用する場合、利用するキャッシュメモリセット、又はキャッシュメモリセットのグループを決める。メモリアクセス解析処理部２３は、その結果に基づいて、中間言語３を作成する。すなわち、中間言語３は、メモリアクセス解析処理部２３により作成される中間ファイルである。
【００２６】
目的プログラム生成処理部２４は、中間言語３を読み込み、キャッシュ制御コード生成処理部２５を利用して目的プログラム３０を生成する。
【００２７】
キャッシュ制御コード生成処理部２５は、中間言語３を読み込んで、前記メモリアクセス解析部２３が決定した結果に従い、キャッシュの設定を変更するキャッシュ制御コード、又はキャッシュ制御を指定したメモリアクセス命令を作成する。
【００２８】
キャッシュ制御コード生成処理部２５は、目的プログラム生成処理部２４と連携している。ここでは、キャッシュ制御コード生成処理部２５は、目的プログラム生成処理部２４の内部で（又は一部として）動作するものとする。但し、実際には、目的プログラム生成処理部２４の外部で動作していても良い。
【００２９】
＜処理の流れ＞
次に、図２を用いて、本発明のコンパイラの動作について詳細に説明する。
ここでは、コンパイラ２０は、Ｆｏｒｔｒａｎのコンパイラであるものとして説明する。但し、実際には、この例に限定されない。
【００３０】
（１）ステップＳ１０１
まず、コンパイラ２０において、中間言語作成処理部２１は、原始プログラム１０を読み込み、字句解析や構文解析を行い、中間言語１を作成する。
【００３１】
（２）ステップＳ１０２
次に、最適化処理部２２は、中間言語１を最適化し、中間言語２を作成する。
【００３２】
（３）ステップＳ１０３
次に、メモリアクセス解析処理部２３は、中間言語２を解析し、メモリアクセスの際におけるキャッシュメモリの利用の有無を決定する。
【００３３】
（４）ステップＳ１０４
メモリアクセス解析処理部２３は、キャッシュメモリを利用する場合、利用するキャッシュメモリセット、又はキャッシュメモリセットのグループを決定し、中間言語３を作成する。
【００３４】
（５）ステップＳ１０５
目的プログラム生成処理部２４は、中間言語３を読み込み、キャッシュ制御コード生成処理部２５に通知する。このとき、目的プログラム生成処理部２４は、キャッシュ制御コード生成処理部２５を起動するようにしても良い。
【００３５】
（６）ステップＳ１０６
キャッシュ制御コード生成処理部２５は、中間言語３を読み込み、キャッシュを制御するコードや、キャッシュ制御を指定したメモリアクセス命令を作成し、目的プログラム３０に組み込む。
（７）ステップＳ１０７
最後に、目的プログラム生成処理部２４は、目的プログラム３０が完成すると、目的プログラム３０をコンパイラ２０の外部に出力する。
【００３６】
＜実施例＞
次に、図３を参照して、本発明の実施例について説明する。
図３は、Ｆｏｒｔｒａｎの原始プログラム例を示す。図３の原始プログラム例は、原始プログラム１０に該当する。
【００３７】
まず、図１に示すメモリアクセス解析処理部２３は、図３の原始プログラム例に対し、計算機のキャッシュメモリサイズが５１２Ｋｂｙｔｅを超える配列Ｂ、Ｃがあることから、キャッシュメモリを、図４のように、キャッシュメモリサイズが２５６Ｋｂｙｔｅの２つのキャッシュメモリセットに分割して利用することを決定する。
【００３８】
図４は、計算機のイメージ図である。
計算機１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０と、主メモリ装置１２０を備える。ＣＰＵ１１０は、キャッシュメモリ１１１を備える。キャッシュメモリ１１１は、第１キャッシュメモリセット１１１１と、第２キャッシュメモリセット１１１２に分割されている。
【００３９】
ここでは、図１に示すコンパイラ２０は、上記の計算機１００上で、ＣＰＵ１１０と、主メモリ装置１２０と、このＣＰＵ１１０を駆動して所望の処理を実行するソフトウェアによって実現されるものとする。
【００４０】
計算機１００の例として、ＰＣ（パソコン）、シンクライアント端末／サーバ、ワークステーション、メインフレーム、スーパーコンピュータ等の計算機を想定している。なお、計算機１００は、仮想マシン（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ（ＶＭ））環境でも良い。但し、実際には、これらの例に限定されない。
【００４１】
ＣＰＵ１１０は、マイクロプロセッサ（ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ、或いは、同様の機能を有する半導体集積回路（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＩＣ））等でも良い。但し、実際には、これらの例に限定されない。
【００４２】
主メモリ装置１２０の例として、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ等の半導体記憶装置が考えられる。また、主メモリ装置１２０は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の補助記憶装置、又は、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）やＳＤメモリカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  ｍｅｍｏｒｙ  ｃａｒｄ）等のリムーバブルディスクや記憶媒体（メディア）等でも良い。但し、実際には、これらの例に限定されない。
【００４３】
また、メモリアクセス解析処理部２３は、変数Ａ、Ｎ、Ｍについてはループ内で繰返し参照されるため、キャッシュメモリを利用してメモリアクセスすることとし、第１キャッシュメモリセットを利用する。
【００４４】
次に、配列ＢはＤＯループ内で参照されているが、ループ変数Ｉが２次元目にあるため、８０００ｂｙｔｅ飛びのメモリアクセスとなる。また、配列サイズもキャッシュメモリサイズより大きいため、キャッシュメモリ上にデータがなく、全てキャッシュミスヒットする。
【００４５】
このため、ＣＰＵ１１０が配列Ｂのメモリアクセスにキャッシュメモリを利用すると、キャッシュメモリ上の他のデータを全て追い出すこととなる。
【００４６】
従って、メモリアクセス解析処理部２３は、メモリ参照にはキャッシュを利用しないことを決定する。
【００４７】
メモリアクセス解析処理部２３は、配列Ｃに関しても、ＤＯループ内で参照されているがループ変数が１次元目にあり、メモリアクセスは連続アクセスとなるため、キャッシュメモリを利用してメモリアクセスするが、配列サイズがキャッシュメモリサイズより大きいため、第２キャッシュメモリセットを利用してメモリアクセスすることとし、変数Ａ、Ｎ、Ｍのキャッシュ上のデータを追い出さないようにする。
【００４８】
本発明を適用しない場合は、全てのメモリアクセスに対して、一つのキャッシュメモリを無条件に利用することとなるため、ＤＯループの処理中に変数Ａ、Ｎ、Ｍのデータが、配列Ｂ、Ｃの参照によりキャッシュ上から追い出され、キャッシュミスヒットが生じ性能低下を起こしていた。
【００４９】
本発明の適用により、変数Ａ、Ｎ、Ｍのデータはキャッシュ上から追い出されることがなくなり、性能向上が図られる。
【００５０】
＜本発明の特徴＞
以上のように、本発明におけるコンパイラのコンパイル方式では、キャッシュメモリのソフトウェア制御機能を利用した目的プログラムを生成する。
【００５１】
このコンパイラのコンパイル方式では、キャッシュメモリのソフトウェア制御機能を有するコンピュータシステム用のコンパイラにおいて、原始プログラムの解析結果から変数や配列のメモリアクセス状況を調べ、その結果によりキャッシュメモリのソフトウェア制御機能を用いて動的にキャッシュメモリを制御することにより、効率的にキャッシュメモリを利用する目的プログラムを作成することを特徴とする。
【００５２】
このコンパイラは、少なくとも、メモリアクセス解析処理部と、目的プログラム生成処理部と、キャッシュ制御コード生成処理部を備える。
【００５３】
メモリアクセス解析処理部は、原始プログラムをコンパイルして、目的プログラムを生成するコンパイラにおいて、原始プログラムで使用されている、変数や配列のサイズ、メモリアクセス箇所や回数等のメモリアクセス状況を解析する。
【００５４】
また、メモリアクセス解析処理部は、原始プログラムの変数や配列のメモリアクセス時に、キャッシュメモリを利用してメモリアクセスするか否か判定する。
【００５５】
また、メモリアクセス解析処理部は、キャッシュメモリを利用してメモリアクセスする場合、複数個のキャッシュメモリセットからどのキャッシュメモリセットを利用するのかを決定する。すなわち、メモリアクセス解析処理部は、キャッシュメモリセットの候補の中から、利用するキャッシュメモリセットを決定する。
【００５６】
目的プログラム生成処理部は、前記キャッシュ制御コード生成処理部を利用しながら、目的プログラムを生成する。
【００５７】
キャッシュ制御コード生成処理部は、前記メモリアクセス解析処理部で決定された情報に従ってキャッシュメモリの制御コードを作成する。ここでは、決定された情報とは、利用するキャッシュメモリセットに関する情報である。
【００５８】
本発明を適用したコンパイラを、プログラマが利用すると、対象となる計算機が有するキャッシュメモリのソフトウェア制御機能を利用して効率的にキャッシュメモリを使用する目的プログラムが得られ、プログラムを高速化する負担が減少する。
【００５９】
本発明では、プログラムのメモリアクセスパターンに応じてキャッシュメモリを割り当てを最適化するため、キャッシュの汚染が減少し、より効率的なキャッシュメモリの利用ができるようになる。このため、目的プログラムが高速化される。
【００６０】
また、本発明では、プログラマの代わりにコンパイラがキャッシュメモリの利用の最適化を行うため、プログラマのプログラムの高速化の負荷を軽減できる。
【００６１】
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
【符号の説明】
【００６２】
１、２、３…  中間言語
１０…  原始プログラム
２０…  コンパイラ
２１…  中間言語作成処理部
２２…  最適化処理部
２３…  メモリアクセス解析処理部
２４…  目的プログラム生成処理部
２５…  キャッシュ制御コード生成処理部
３０…  目的プログラム
１００…  計算機
１１０…  ＣＰＵ
１１１…  キャッシュメモリ
１１１１…  第１キャッシュメモリセット
１１１２…  第２キャッシュメモリセット
１２０…  主メモリ装置
【図１】
2011170439.tif 000003
【図２】
2011170439.tif 000004
【図３】
2011170439.tif 000005
【図４】
2011170439.tif 000006