(57)【要約】【課題】  メインメモリからキャッシュメモリへの不要な読込みを削減する。【解決手段】  入力プログラムの実行時において、メモリの領域のうち、書込みが読出しよりも先に行われる領域を定義領域として抽出する定義領域抽出部１０と、定義領域への書込みアクセスを実行する命令の前に、キャッシュメモリに対してエントリを追加するキャッシュエントリ指定命令を挿入するキャッシュエントリ指定部２０とを備える。【選択図】      図３
2005322110.tif 000002
【特許請求の範囲】
【請求項１】
入力プログラムを、キャッシュメモリを用いるプロセッサで動作するプログラムに変換して出力するプログラム変換装置であって、
前記入力プログラムの実行時において、メモリの領域のうち、書込みが読出しよりも先に行われる領域を定義領域として抽出する定義領域抽出部と、
前記定義領域への書込みアクセスを実行する命令の前に、前記キャッシュメモリに対してエントリを追加するキャッシュエントリ指定命令を挿入するキャッシュエントリ指定部とを備える
プログラム変換装置。
【請求項２】
請求項１に記載のプログラム変換装置において、
前記定義領域抽出部は、
連続した領域が確保される変数であって、書込みが読出しよりも先に開始される変数を抽出し、この変数に対応する領域を前記定義領域とする変数書込み抽出部を有する
ことを特徴とするプログラム変換装置。
【請求項３】
請求項１に記載のプログラム変換装置において、
前記定義領域抽出部は、
前記入力プログラムのプログラミング言語の性質上、書込みが読出しよりも先に行われることが確定している領域を前記定義領域として抽出する書込み確定領域抽出部を有する
ことを特徴とするプログラム変換装置。
【請求項４】
請求項３に記載のプログラム変換装置において、
前記書込み確定領域抽出部は、
関数呼び出し時に確保されるスタック領域を前記定義領域として抽出するスタック領域抽出部を有する
ことを特徴とするプログラム変換装置。
【請求項５】
請求項３に記載のプログラム変換装置において、
前記書込み確定領域抽出部は、
前記入力プログラムの実行時に動的に確保されるヒープ領域を、前記定義領域として抽出するヒープ領域抽出部を有する
ことを特徴とするプログラム変換装置。
【請求項６】
請求項３に記載のプログラム変換装置において、
前記書込み確定領域抽出部は、
前記入力プログラムの実行開始時に初期化されることが確定している変数の領域を、前記定義領域として抽出する初期化領域抽出部を有する
ことを特徴とするプログラム変換装置。
【請求項７】
請求項１に記載のプログラム変換装置において、
前記定義領域抽出部は、
指定された領域を前記定義領域として抽出するプログラマ指定抽出部を有する
ことを特徴とするプログラム変換装置。
【請求項８】
請求項１に記載のプログラム変換装置において、
前記キャッシュエントリ指定部は、
前記定義領域の開始アドレスのアライメントを解析する開始アドレス解析部を有する
ことを特徴とするプログラム変換装置。
【請求項９】
請求項１に記載のプログラム変換装置において、
前記キャッシュエントリ指定部は、
前記定義領域と同一のキャッシュラインに属する領域である隣接領域が、前記入力プログラムにおいて参照されるか否かを解析し、参照されない場合には、前記隣接領域を前記定義領域に加える隣接領域解析部を有する
ことを特徴とするプログラム変換装置。
【請求項１０】
請求項１に記載のプログラム変換装置において、
前記キャッシュエントリ指定部は、
その全体が前記定義領域に含まれるようなキャッシュラインが１つもない場合には、前記エントリ指定命令を出力しないように当該キャッシュエントリ指定部を制御するサイズ判定部を有する
ことを特徴とするプログラム変換装置。
【請求項１１】
請求項１０に記載のプログラム変換装置において、
前記サイズ判定部は、
前記定義領域の開始アドレスが確定していない場合において、前記定義領域の大きさが、１つのキャッシュライン全体を必ず含む大きさであるときに、前記エントリ指定命令を出力するように制御を行う
ことを特徴とするプログラム変換装置。
【請求項１２】
請求項１０に記載のプログラム変換装置において、
前記サイズ判定部は、
前記定義領域の開始アドレスが確定していない場合において、前記定義領域の大きさが、１つのキャッシュライン全体を含む可能性がある大きさであるときに、前記エントリ指定命令を出力するように制御を行う
ことを特徴とするプログラム変換装置。
【請求項１３】
スタック領域を示すポインタのアドレスを更新する命令による動作と、キャッシュメモリに対してエントリを追加する命令による動作とを、１命令で実行する処理部を備える
プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアクセスを高速化するキャッシュメモリを用いるプロセッサのためのプログラム変換装置に関する。
【背景技術】
【０００２】
近年のプロセッサでは、ＳＲＡＭ（static random-access memory）等の小容量で高速なキャッシュメモリを、プロセッサの内部、又は近傍に配置し、データの一部をキャッシュメモリに記憶させることによって、プロセッサのメモリアクセスを高速化させている。
【０００３】
キャッシュメモリへのリードアクセス又はライトアクセス時に、キャッシュメモリにデータが存在しない場合、キャッシュミスヒットとなるので、新たにデータをメインメモリからキャッシュメモリの空きブロックに読込み、アドレスの一部をエントリとしてキャッシュメモリに格納する。このとき、空きブロックが存在しない場合には、キャッシュメモリを構成する複数ブロックのうちのいずれか１つが格納するデータを、メインメモリに書き戻す必要がある。
【０００４】
一方、キャッシュメモリへの読込みが不要である場合や、メインメモリへの書戻しが不要である場合がある。例えば、プロセッサが、読込んだキャッシュメモリのデータを参照せずに、そのデータの領域の全てに書込みを行うような場合には、キャッシュへの読込みは不要である。また、キャッシュメモリ上のデータが一時的なデータであり、以後利用されない場合は、このデータのメインメモリへの書戻しは不要である。
【０００５】
このような、キャッシュメモリへの不要な読込みや、メインメモリへの不要な書戻しを削減する方法として、次のようなものが知られている。例えば、特許文献１には、プログラム変換装置が、以後参照されない変数を求めて、キャッシュブロックが書込み専用であることを示すフラグをセットすることにより、メインメモリへの不要な書戻しを削減する点が開示されている。
【０００６】
また、例えば特許文献２には、一度確保した領域を開放する場合に、以後参照されないことがわかっている領域に関して、キャッシュメモリの内容がメインメモリよりも新しいことを示すダーティフラグをリセットすることにより、メインメモリへの不要な書戻しや、メインメモリからの不要な読込みを削減することが可能となる点が開示されている。
【特許文献１】特開平８−１３７７４８号公報
【特許文献２】特開２００３−２２３３６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、このような従来の技術によると、少なくとも一度はメインメモリからキャッシュメモリへの読込みが行われた領域に関してのみ、メインメモリからキャッシュメモリへの不要な読込みを削減するように、指示が行われる。したがって、一度もメインメモリからキャッシュメモリへの読込みが行われていない領域に対して書込みを行う場合には、メインメモリからキャッシュメモリへの不要な読込みを削減するように指示を行うことができないという問題があった。
【０００８】
本発明は、メインメモリからキャッシュメモリへの読込みが一度も行われていない領域に対して書込みを行うプログラムに対して、メインメモリからキャッシュメモリへの不要な読込みを削減するように変換を行う、プログラム変換装置を提供することを目的とする。
【０００９】
また、本発明は、変換されたプログラムの実行に適したプロセッサを提供することを目的とする。
【課題を解決するための手段】
【００１０】
前記課題を解決するため、請求項１の発明が講じた手段は、入力プログラムを、キャッシュメモリを用いるプロセッサで動作するプログラムに変換して出力するプログラム変換装置であって、前記入力プログラムの実行時において、メモリの領域のうち、書込みが読出しよりも先に行われる領域を定義領域として抽出する定義領域抽出部と、前記定義領域への書込みアクセスを実行する命令の前に、前記キャッシュメモリに対してエントリを追加するキャッシュエントリ指定命令を挿入するキャッシュエントリ指定部とを備えるものである。
【００１１】
請求項１の発明によると、入力プログラムを実行すると、メインメモリからキャッシュメモリへの読込みが一度も行われていない領域に対して書込みが行われるような場合であっても、その領域に関してキャッシュメモリにエントリを追加する命令が挿入されるので、メインメモリからキャッシュメモリへの不要な読込みが削減されるプログラムを出力することが可能となる。
【００１２】
請求項２の発明では、請求項１に記載のプログラム変換装置において、前記定義領域抽出部は、連続した領域が確保される変数であって、書込みが読出しよりも先に開始される変数を抽出し、この変数に対応する領域を前記定義領域とする変数書込み抽出部を有するものである。
【００１３】
請求項３の発明では、請求項１に記載のプログラム変換装置において、前記定義領域抽出部は、前記入力プログラムのプログラミング言語の性質上、書込みが読出しよりも先に行われることが確定している領域を前記定義領域として抽出する書込み確定領域抽出部を有するものである。
【００１４】
請求項４の発明では、請求項３に記載のプログラム変換装置において、前記書込み確定領域抽出部は、関数呼び出し時に確保されるスタック領域を前記定義領域として抽出するスタック領域抽出部を有するものである。
【００１５】
請求項５の発明では、請求項３に記載のプログラム変換装置において、前記書込み確定領域抽出部は、前記入力プログラムの実行時に動的に確保されるヒープ領域を、前記定義領域として抽出するヒープ領域抽出部を有するものである。
【００１６】
請求項６の発明では、請求項３に記載のプログラム変換装置において、前記書込み確定領域抽出部は、前記入力プログラムの実行開始時に初期化されることが確定している変数の領域を、前記定義領域として抽出する初期化領域抽出部を有するものである。
【００１７】
請求項７の発明では、請求項１に記載のプログラム変換装置において、前記定義領域抽出部は、指定された領域を前記定義領域として抽出するプログラマ指定抽出部を有するものである。
【００１８】
請求項８の発明では、請求項１に記載のプログラム変換装置において、前記キャッシュエントリ指定部は、前記定義領域の開始アドレスのアライメントを解析する開始アドレス解析部を有するものである。
【００１９】
請求項９の発明では、請求項１に記載のプログラム変換装置において、前記キャッシュエントリ指定部は、前記定義領域と同一のキャッシュラインに属する領域である隣接領域が、前記入力プログラムにおいて参照されるか否かを解析し、参照されない場合には、前記隣接領域を前記定義領域に加える隣接領域解析部を有するものである。
【００２０】
請求項１０の発明では、請求項１に記載のプログラム変換装置において、前記キャッシュエントリ指定部は、その全体が前記定義領域に含まれるようなキャッシュラインが１つもない場合には、前記エントリ指定命令を出力しないように当該キャッシュエントリ指定部を制御するサイズ判定部を有するものである。
【００２１】
請求項１１の発明では、請求項１０に記載のプログラム変換装置において、前記サイズ判定部は、前記定義領域の開始アドレスが確定していない場合において、前記定義領域の大きさが、１つのキャッシュライン全体を必ず含む大きさであるときに、前記エントリ指定命令を出力するように制御を行うものである。
【００２２】
請求項１２の発明では、請求項１０に記載のプログラム変換装置において、前記サイズ判定部は、前記定義領域の開始アドレスが確定していない場合において、前記定義領域の大きさが、１つのキャッシュライン全体を含む可能性がある大きさであるときに、前記エントリ指定命令を出力するように制御を行うものである。
【００２３】
請求項１３の発明は、プロセッサとして、スタック領域を示すポインタのアドレスを更新する命令による動作と、キャッシュメモリに対してエントリを追加する命令による動作とを、１命令で実行する処理部を備えるものである。
【発明の効果】
【００２４】
本発明のプログラム変換装置によれば、メインメモリからキャッシュメモリへの読込みが一度も行われていない領域に対して書込みが行われるような場合であっても、メインメモリからキャッシュメモリへの不要な読込みが削減されるプログラムを出力することが可能となる。したがって、プログラムの実行を高速化し、かつ、実行の際の消費電力を削減することができる。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２６】
図１は、キャッシュメモリ装置の構成の例を示すブロック図である。このキャッシュメモリ装置２００は、本発明の実施形態に係るプログラム変換装置が出力するプログラムが実行されるプロセッサ２８０によって用いられる。図１のキャッシュメモリ装置２００は、アドレスレジスタ２１２と、デコーダ２１４と、キャッシュウェイ２３２，２３４と、セレクタ２４２，２４４と、メモリインタフェース（メモリＩ／Ｆ）２４６とを備えている。
【００２７】
アドレスレジスタ２１２は、入力されたアドレスを、タグとインデックスとに分けて保持する。タグは、キャッシュウェイ２３２，２３４に格納され、データがキャッシュメモリ上に存在するか否かの判定に使用される。インデックスは、キャッシュウェイ２３２，２３４のどの部分にデータを格納するかを示す。
【００２８】
キャッシュウェイ２３２，２３４は、それぞれ複数のライン（キャッシュライン）を有し、メインメモリ２５０及びプロセッサ２８０から入力されたデータ等を保持する。各ラインは、Ｖフラグ、タグ、データ、Ｄフラグを格納する。Ｖフラグは、格納されているデータが有効か否かを表す。タグは、キャッシュメモリに格納されているデータのアドレスを表す。データは、キャッシュメモリに関するデータ転送の単位である。Ｄフラグは、キャッシュメモリに書込みが行われ、同一アドレスのメインメモリと内容が異なるか否かを表す。
【００２９】
メモリＩ／Ｆ２４６は、メインメモリ２５０やプロセッサ２８０との間のデータの入出力、及びセレクタ２４２，２４４を介したキャッシュウェイ２３２，２３４との間のデータの入出力を行う。
【００３０】
図２（ａ）は、キャッシュエントリ指定命令の例を示す説明図である。この命令は、図１のプロセッサ２８０が実行することが可能な命令の１つである。キャッシュエントリ指定命令（ｃｅｎｔ命令）は、キャッシュメモリのエントリを指定する命令であって、書込みアクセスが行われる領域（定義領域）の開始アドレスＡＤＲとサイズＳＩＺＥとを指定することにより、キャッシュウェイ２３２，２３４にエントリのみを追加する。
【００３１】
図２（ｂ）は、キャッシュエントリ指定命令による読込み不要ラインの設定についての説明図である。キャッシュエントリ指定命令で指定された領域（開始アドレスＡＤＲ、終了アドレスＡＤＲ＋ＳＩＺＥ）は、ラインＮから始まり、ラインＭで終わっている（Ｍ＞Ｎ、Ｎ，Ｍは自然数）。このとき、この領域にライン全体が含まれるラインＮ＋１〜Ｍ−１を読込み不要ラインとする。読込み不要ラインに関しては、キャッシュウェイ２３２，２３４にＶフラグとタグとをセットする（すなわち、エントリを追加する）ことによって、キャッシュメモリへのデータの読込みを行わないようにする。
【００３２】
図３は、本発明の実施形態に係るプログラム変換装置の構成例を示すブロック図である。図３のプログラム変換装置１００は、定義領域抽出部１０と、キャッシュエントリ指定部２０とを備えており、入力プログラムＰＧ１を出力プログラムＰＧ２に変換して出力する。定義領域抽出部１０は、変数書込み抽出部１２と、書込み確定領域抽出部１４と、プログラマ指定抽出部１６とを備えている。キャッシュエントリ指定部２０は、開始アドレス解析部２２と、隣接領域解析部２４と、サイズ判定部２６と、エントリ指定命令出力部２８とを備えている。
【００３３】
定義領域抽出部１０は、入力プログラムＰＧ１を解析し、入力プログラムＰＧ１の実行時において、メモリの領域のうち、書込みがその領域に対する最初の読出しよりも先に行われる領域である定義領域を抽出し、管理情報３０として登録する。管理情報３０は、メモリに格納される。
【００３４】
開始アドレス解析部２２は、定義領域の開始アドレスを解析する。隣接領域解析部２４は、定義領域の前後の隣接領域へのメモリアクセスを解析する。サイズ判定部２６は、定義領域のサイズを解析して、キャッシュエントリ指定命令の出力を制御する。エントリ指定命令出力部２８は、管理情報３０として登録されている定義領域に対してキャッシュエントリ指定命令を生成し、入力プログラムＰＧ１においてその定義領域へのメモリ書込み命令の前にこのキャッシュエントリ指定命令を挿入し、得られた出力プログラムＰＧ２を出力する。
【００３５】
図４は、図３の管理情報３０の例を示す説明図である。プログラム位置情報、書込み開始アドレス、及び領域サイズが、定義領域毎に管理情報３０として格納されている。プログラム位置情報は、定義領域への書込みアクセスを行う命令等のプログラムにおける位置を表す。書込み開始アドレスは、書込みアクセスが行われる定義領域の開始アドレスを示す。領域サイズは、定義領域のサイズを示す。
【００３６】
図５は、図３のプログラム変換装置１００によって生成された出力プログラムの動作を説明するための説明図である。まず、出力プログラムＰＧ２を実行するプロセッサ２８０は、定義領域抽出部１０で抽出した定義領域に対してキャッシュエントリ指定命令ｃｅｎｔを実行して、キャッシュメモリにエントリのみを追加する。すなわち、図２（ｂ）の読込み不要ラインに関して、キャッシュウェイ２３２又は２３４のＶフラグとタグのみを更新する。
【００３７】
次に、プロセッサがメモリ書込み命令ｓｔを実行して、定義領域への書込みが行われる。このとき、定義領域の読込み不要ラインに関しては、既にキャッシュウェイ２３２又は２３４にエントリが追加されているので、メインメモリ２５０からキャッシュウェイ２３２又は２３４への不要なデータ読込みを行わないようにすることができる。
【００３８】
以下では、図３のプログラム変換装置１００の定義領域抽出部１０について、具体的に説明する。変数書込み抽出部１２、書込み確定領域抽出部１４、及びプログラマ指定抽出部１６における処理はそれぞれ独立しており、定義領域抽出部１０には、これらのうち少なくとも１つが含まれていればよい。
【００３９】
図６は、図３の変数書込み抽出部１２の動作を説明するための説明図である。まず、変数書込み抽出部１２は、入力プログラムＰＧ１において、連続した領域が確保される変数であって、最初の読出しが行われる前に書込みが開始される変数を抽出する（例えば、図６のarray[i]）。次に、変数書込み抽出部１２は、抽出された変数に対応するメモリの領域を定義領域とし、管理情報３０として登録する。変数が配列であり、かつ、ループ内に含まれるときは、変数書込み抽出部１２は、配列添字が取る値の範囲を解析し、書込みが行われる配列要素全てを定義領域とし、管理情報３０として登録する。
【００４０】
図７は、図３の書込み確定領域抽出部１４の構成例を示すブロック図である。書込み確定領域抽出部１４は、スタック領域抽出部５２と、ヒープ領域抽出部５４と、初期化領域抽出部５６とを備えている。これらにおける処理はそれぞれ独立しており、書込み確定領域抽出部１４には、これらのうちの少なくとも１つが含まれていればよい。
【００４１】
書込み確定領域抽出部１４は、入力プログラムＰＧ１のプログラム言語の性質上、最初の読出しの前に書込みが行われることが確定している領域を、定義領域として抽出する。このような領域には、次のようなものがある。
【００４２】
例えば、関数呼び出しを実現するためのスタック領域は、領域確保直後には値が不定であるので、読出しアクセスの前に書込みアクセスが必ず先に行われることが保証されている。すなわち、スタック領域が確保された後の最初のアクセスは、必ず書込みアクセスである。また、プログラム実行中に動的にメモリを確保するための機構を実現するヒープ領域も、領域確保後の値は不定であり、必ず書込みアクセスから先に行われることが保証されている。また、外部変数や静的変数等の領域は、プログラム実行前に初期化されていることが確定しているので、読出しアクセスの前に書込みアクセスが必ず先に行われることが保証されている。
【００４３】
図８（ａ）は、関数呼び出し時のスタック領域の確保の例についての説明図である。関数呼び出しが実行されると、呼び出された関数で使用するスタック領域の分だけスタックポインタ（ＳＰ）の値が変更される。
【００４４】
図８（ｂ）は、図７のスタック領域抽出部５２の動作を説明するための説明図である。スタック領域抽出部５２は、まず、入力プログラムＰＧ１において関数呼び出し時に確保されるスタック領域のサイズを解析し、スタック領域を定義領域として抽出し、次に、呼び出された関数におけるスタック領域への最初の書込みを検出する（例えば、図８（ｂ）のint a=0）。スタック領域抽出部５２は、得られた結果を管理情報３０として登録する。
【００４５】
図９は、スタック領域を確保する際の動作を支援する命令の例を示す説明図である。スタック領域の確保後にキャッシュエントリ指定を行う場合、まずスタックポインタをスタック領域のサイズ分だけ、減算命令ｓｕｂによって更新する。次にそのスタックポインタの指す領域からサイズ分だけをキャッシュエントリ指定命令ｃｅｎｔによってエントリを追加する。
【００４６】
このとき、キャッシュエントリ指定命令ｃｅｎｔで指定するアドレスとサイズが、それぞれスタックポインタのアドレスを更新する命令ｓｕｂで指定するスタックポインタの値とサイズに等しいので、これらの２つの命令を１つにまとめると、実行効率の向上やプログラムサイズの削減に効果がある。そこで、スタック領域抽出部５２は、キャッシュエントリ指定命令ｃｅｎｔと、スタックポインタのアドレスを更新する命令ｓｕｂとに代えて、これらを１つにまとめた命令ｃｅｎｔ＿ｓｐを出力する。
【００４７】
出力プログラムＰＧ２を実行するプロセッサ２８０は、このような、キャッシュメモリに対してエントリのみを追加するキャッシュエントリ指定命令による動作と、スタックポインタのアドレスを更新する命令による動作とを、１命令ｃｅｎｔ＿ｓｐで実行することができるように構成された処理部を備えている。
【００４８】
図１０（ａ）は、図７のヒープ領域抽出部５４の動作を説明するための説明図である。図１０（ｂ）は、動的に確保されるメモリ領域の例についての説明図である。この図では、確保される領域のアドレスがＡＤＲであり、サイズが４００バイトである場合について示している。
【００４９】
まず、ヒープ領域抽出部５４は、入力プログラムＰＧ１において、プログラムの実行時に動的にメモリ領域を確保している部分を検出し（図１０（ａ）の（１））、確保されるヒープ領域のアドレスとサイズとを求め、ヒープ領域を定義領域として抽出する。次に、ヒープ領域抽出部５４は、検出された領域に対する最初の書込みが行われている命令等の記述の位置を、入力プログラムＰＧ１において検出する（図１０（ａ）の（２））。ヒープ領域抽出部５４は、得られた結果を管理情報３０として登録する。
【００５０】
図１１（ａ）は、図７の初期化領域抽出部５６の動作を説明するための説明図である。図１１（ｂ）は、外部変数領域として確保されるメモリ領域についての説明図である。外部変数領域は、入力プログラムＰＧ１において定義されている外部変数のために確保される領域である。外部変数は、入力プログラムＰＧ１の実行開始時（プログラム本体の実行開始前）に初期化されることが確定している変数である。この図では、確保される領域のアドレスがＡＤＲであり、サイズがＳＩＺＥバイトである場合について示している。
【００５１】
初期化領域抽出部５６は、外部変数領域に対する初期化処理のための記述から、外部変数領域のアドレスやサイズ等を求め、外部変数領域を定義領域として抽出する。外部変数領域に対する初期化処理のための記述は、図１１（ａ）のように、プログラム変換装置１００が出力プログラムＰＧ２の一部としてプログラム本体の前に出力する。初期化領域抽出部５６は、得られた結果を管理情報３０として登録する。
【００５２】
なお、ここでは入力プログラムＰＧ１における外部変数のみについて説明したが、関数内においてアドレスが固定される静的変数についても同様に扱うことができる。
【００５３】
図１２は、図３のプログラマ指定抽出部１６の動作を説明するための説明図である。プログラマ指定抽出部１６は、プログラマがプログラム変換装置１００に対して行う指示を、入力プログラムＰＧ１から抽出する。すなわち、プログラマ指定抽出部１６は、例えば図１２のように、入力プログラムＰＧ１においてプログラマによって指定された領域（アドレスＡＤＲ、サイズＳＩＺＥ）を、定義領域として抽出する。プログラマ指定抽出部１６は、得られた結果を管理情報３０として登録する。
【００５４】
プログラム変換装置への指示を行うには、図１２のようにプログラム内に記述する他に、プログラム変換装置の起動時に、抽出すべき領域を指定する指示をパラメータとして与えるようにすることも可能である。この場合、プログラマ指定抽出部は、パラメータによって指定された領域を定義領域として抽出する。
【００５５】
次に、図３のプログラム変換装置１００のキャッシュエントリ指定部２０について、具体的に説明する。図３のキャッシュエントリ指定部２０を構成する要素のうち、エントリ指定命令出力部２８は必須である。一方、開始アドレス解析部２２、隣接領域解析部２４、及びサイズ判定部２６は、エントリ指定命令出力部２８から出力されるキャッシュエントリ指定命令に関するパラメータ変更や、この命令を出力するか否かの判定を行うものであり、キャッシュエントリ指定部２０に必ずしも必要ではない。
【００５６】
図１３は、図３の開始アドレス解析部２２の動作を説明するための説明図である。図１３の入力プログラムＰＧ１では、プログラマによって変数ａのアライメントが指定されている。
【００５７】
プログラム変換時には、変数のアドレスが確定していないことがある。そこで、開始アドレスが確定していない場合には、開始アドレス解析部２２は、定義領域抽出部１０によって抽出され、管理情報３０として登録されている定義領域の開始アドレスのアライメントを解析し、得られたアライメント情報を管理情報３０として登録する。開始アドレスやアライメントについては、変数の型の情報や、プログラマ指定の情報などから解析可能である。このように、開始アドレスが未確定の場合にそのアライメントを解析することにより、定義領域がキャッシュラインのどの部分に格納されるかを推定することが可能である。
【００５８】
図１４は、図３の隣接領域解析部２４の動作を説明するため説明図である。隣接領域とは、管理情報３０としてその情報が格納されている定義領域の前後に隣接している領域であって、定義領域をキャッシュメモリに格納した場合に、定義領域と同じキャッシュラインに格納される領域のことである。隣接領域には、定義領域の前方に隣接する前方隣接領域（図１４のラインＮ）と、定義領域の後方に隣接する後方隣接領域（図１４のラインＭ）とがある。
【００５９】
隣接領域解析部２４は、管理情報３０を解析して隣接領域を抽出し、キャッシュラインの読込み後に、隣接領域のデータが入力プログラムＰＧ１において参照されるか否かを解析する。また、隣接領域解析部２４は、隣接領域のデータが参照されない場合には、定義領域に隣接領域を加え、得られた領域を管理情報３０として登録する。
【００６０】
定義領域がキャッシュラインの一部にしか格納されない場合に、そのラインについてキャッシュのエントリだけを追加すると、キャッシュメモリには正しいデータが格納されないので、隣接領域のデータが参照されるとプログラムの実行結果が誤りになる。逆に隣接領域のデータが参照されなければ、プログラムの実行結果が誤りにはならない。つまり、隣接領域への参照がなければ、キャッシュメモリにエントリだけを追加することが可能となり、メインメモリからキャッシュメモリへの不要な読込みが削減できることになる。
【００６１】
図１５（ａ）は、読込み不要ラインを必ず含むために必要なサイズの定義領域の例を示す説明図である。図１５（ｂ）は、読込み不要ラインを含む定義領域であって、そのサイズが最小のものの例を示す説明図である。
【００６２】
サイズ判定部２６は、管理情報３０として登録されている定義領域のサイズと開始アドレスの情報から、定義領域が実際にキャッシュラインをいくつ含むかを解析し、定義領域が読込み不要ライン（その全体が定義領域に含まれるようなキャッシュライン）を１つも含まない場合には、キャッシュエントリ指定命令を出力しないようにエントリ指定命令出力部２８を制御する。
【００６３】
定義領域の開始アドレスＡＤＲが６４バイトアライメント、キャッシュラインが１２８バイトアライメント、キャッシュラインのサイズが１２８バイトであると仮定する。図１５（ａ）のような場合を考慮すると、定義領域のサイズが１９２バイト以上であるとき、定義領域が読込み不要ラインを必ず含む。また、図１５（ｂ）のような場合を考慮すると、定義領域のサイズが１２８バイト以上であるとき、定義領域が読込み不要ラインを含む可能性がある。
【００６４】
そこで、サイズ判定部２６は、定義領域の開始アドレスが確定していない場合において、定義領域が読込み不要ラインを必ず含むとき、すなわち、定義領域のサイズが例えば１９２バイト以上であるときにのみ、キャッシュエントリ指定命令を出力するようにエントリ指定命令出力部２８を制御する。また、サイズ判定部２６は、定義領域の開始アドレスが確定していない場合において、定義領域に読込み不要ラインを含む可能性があるとき、すなわち、定義領域のサイズが例えば１２８バイト以上であるときには、必ずキャッシュエントリ指定命令を出力するようにエントリ指定命令出力部２８を制御してもよい。
【００６５】
定義領域が読込み不要ラインを含む可能性がある場合に、必ずキャッシュエントリ指定命令を出力すると、開始アドレスの値によっては、定義領域が含まれずに、キャッシュエントリ指定命令を実行しても、実際にはキャッシュメモリにエントリが登録されないことがある。そこで、プログラム変換装置１００は、アドレス確定後にキャッシュエントリ指定命令を解析し、キャッシュエントリ指定命令が読込み不要ラインを含まないことがわかった場合には、キャッシュエントリ指定命令を削除する。これにより、実行しても効果がないキャッシュエントリ指定命令を削除することが可能である。
【００６６】
図１６は、図３のエントリ指定命令出力部２８の動作を説明するための説明図である。エントリ指定命令出力部２８は、管理情報３０として格納された定義領域に関してはキャッシュメモリへの読込みを行わないように、出力プログラムＰＧ２にキャッシュエントリ指定命令ｃｅｎｔを付加して出力する。
【００６７】
以上のように、プログラム変換装置１００によると、入力プログラムにキャッシュエントリ指定命令を負荷して出力するので、読出しアクセスよりも先に書込みアクセスが行われる定義領域に関して、メインメモリからキャッシュメモリへの不要な読込みを削減することができる。
【産業上の利用可能性】
【００６８】
以上説明したように、本発明は、プログラム実行時において、メインメモリからキャッシュメモリへの不要な読込みを削減することができるので、プログラム変換装置として有用である。
【図面の簡単な説明】
【００６９】
【図１】キャッシュメモリ装置の構成の例を示すブロック図である。
【図２】（ａ）は、キャッシュエントリ指定命令の例を示す説明図である。（ｂ）は、キャッシュエントリ指定命令による読込み不要ラインの設定についての説明図である。
【図３】本発明の実施形態に係るプログラム変換装置の構成例を示すブロック図である。
【図４】図３の管理情報の例を示す説明図である。
【図５】図３のプログラム変換装置によって生成された出力プログラムの動作を説明するための説明図である。
【図６】図３の変数書込み抽出部の動作を説明するための説明図である。
【図７】図３の書込み確定領域抽出部の構成例を示すブロック図である。
【図８】（ａ）は、関数呼び出し時のスタック領域の確保の例についての説明図である。（ｂ）は、図７のスタック領域抽出部の動作を説明するための説明図である。
【図９】図７のスタック領域抽出部の動作を支援する命令の例を示す説明図である。
【図１０】（ａ）は、図７のヒープ領域抽出部の動作を説明するための説明図である。（ｂ）は、動的に確保されるメモリ領域の例についての説明図である。
【図１１】（ａ）は、図７の初期化領域抽出部の動作を説明するための説明図である。（ｂ）は、外部変数領域として確保されるメモリ領域についての説明図である。
【図１２】図３のプログラマ指定抽出部の動作を説明するための説明図である。
【図１３】図３の開始アドレス解析部の動作を説明するための説明図である。
【図１４】図３の隣接領域解析部の動作を説明するため説明図である。
【図１５】（ａ）は、読込み不要ラインを必ず含むために必要なサイズの定義領域の例を示す説明図である。（ｂ）は、読込み不要ラインを含む定義領域であって、そのサイズが最小のものの例を示す説明図である。
【図１６】図３のエントリ指定命令出力部の動作を説明するための説明図である。
【符号の説明】
【００７０】
１０  定義領域抽出部
１２  変数書込み抽出部
１４  書込み確定領域抽出部
１６  プログラマ指定抽出部
２０  キャッシュエントリ指定部
２２  開始アドレス解析部
２４  隣接領域解析部
２６  サイズ判定部
２８  エントリ指定命令出力部
３０  管理情報
５２  スタック領域抽出部
５４  ヒープ領域抽出部
５６  初期化領域抽出部
１００  プログラム変換装置
２００  キャッシュメモリ装置
２８０  プロセッサ
【図１】
2005322110.tif 000003
【図２】
2005322110.tif 000004
【図３】
2005322110.tif 000005
【図４】
2005322110.tif 000006
【図５】
2005322110.tif 000007
【図６】
2005322110.tif 000008
【図７】
2005322110.tif 000009
【図８】
2005322110.tif 000010
【図９】
2005322110.tif 000011
【図１０】
2005322110.tif 000012
【図１１】
2005322110.tif 000013
【図１２】
2005322110.tif 000014
【図１３】
2005322110.tif 000015
【図１４】
2005322110.tif 000016
【図１５】
2005322110.tif 000017
【図１６】
2005322110.tif 000018