(57)【要約】【課題】メインメモリの異なる複数のキャッシュラインへのアクセス時にキャッシュメモリの同一のキャッシュラインを使用する際、キャッシュミスの発生を抑制可能な情報処理技術を提供する。【解決手段】出力プログラム生成部３０３は、入力プログラム解析部３０２が出力した内部表現プログラムに含まれるメモリアクセス命令に対して、ロードキャッシュ命令、キャッシュヒット判定命令、キャッシュヒット判定命令に従って行われる判定結果に応じて行うキャッシュミス処理命令を生成し、メインメモリの異なる複数のキャッシュラインへのアクセス時に使用されるキャッシュメモリのキャッシュラインが同一である可能性がある複数のメモリアクセス命令が内部表現プログラムに含まれる場合、キャッシュヒット判定命令に従って行われる判定の判定結果を１つに融合する融合命令を生成してこれらを含む出力プログラム１０３を出力する。【選択図】        図３
2009020695.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つの処理命令を含む第１プログラムを、プログラムの実行時に用いるデータを一時的に記憶するレジスタを有するプロセッサとキャッシュライン単位で分割されるメモリであり且つ複数の前記データを当該データのアドレスに対応する第１キャッシュラインに各々記憶するメインメモリとキャッシュライン単位で分割され前記データへのアクセス時に少なくとも１つの第２キャッシュラインが使用されるキャッシュメモリとを備える第１情報処理装置が実行可能な第２プログラムに変換するプログラム変換手段と、
前記第２プログラムを出力する出力手段とを備え、
前記プログラム変換手段は、
前記第１プログラムに含まれる処理命令であって前記データへアクセスする命令を表すメモリアクセス命令に対して、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに記憶されている記憶データを前記レジスタに転送する命令を表すロードキャッシュ命令を生成する第１命令生成手段と、
前記メモリアクセス命令に対して、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに前記データが記憶されているか否かを判定する命令を表すキャッシュヒット判定命令を生成する第２命令生成手段と、
異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である可能性のある複数の前記メモリアクセス命令が前記第１プログラムに含まれる場合、当該複数のメモリアクセス命令に対して各々生成された前記キャッシュヒット判定命令による判定結果を１つに融合する融合命令を生成する第３命令生成手段とを有する
ことを特徴とする情報処理装置。
【請求項２】
前記メモリアクセス命令は、前記データの前記メインメモリにおけるアドレスを、ベースアドレスを表す第１レジスタに対する定数値の加算により求める第１のレジスタ間接アドレス方式のメモリアクセス命令であり、
前記第３命令生成手段は、前記第１レジスタが表す前記ベースアドレスに対応する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインが同一である複数の前記メモリアクセス命令が前記第１プログラムに含まれる場合に、前記融合命令を生成する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記メモリアクセス命令は、前記データの前記メインメモリにおけるアドレスを、第１レジスタと第２レジスタとの加算により求める第２のレジスタ間接アドレス方式のメモリアクセス命令であり、
前記第３命令生成手段は、前記第１レジスタ及び前記第２レジスタのうち少なくとも一方により、異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である複数の前記メモリアクセス命令が前記第１プログラムに含まれると判定した場合に、前記融合命令を生成する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記第３命令生成手段は、異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である可能性のある複数の前記メモリアクセス命令が前記第１プログラムに含まれる場合、前記判定結果の論理和を求める命令を前記融合命令として生成する
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記プログラム変換手段は、前記キャッシュヒット判定命令による前記判定結果又は前記融合命令によって融合された前記判定結果が、前記データが前記第２キャッシュラインに記憶されていないことを示す場合に前記メインメモリにおけるアドレスを用いて当該データを前記メインメモリから前記キャッシュメモリに転送した後当該キャッシュメモリから前記レジスタに転送する命令を表すキャッシュミス処理命令を生成する第４命令生成手段を更に有する
請求項１乃至請求項４のいずれか一項に記載の情報処理装置。
【請求項６】
前記プログラム変換手段は、前記ロードキャッシュ命令、前記キャッシュヒット判定命令、前記融合命令及び前記キャッシュミス処理命令を含む第２プログラムを生成する
ことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記第３命令生成手段は、前記第１のプログラムにおいて所定の処理単位で分割される基本ブロック毎に、異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である可能性のある複数のメモリアクセス命令が含まれるか否かを判定し、当該判定結果が肯定的である場合、前記融合命令を生成する
ことを特徴とする請求項１乃至請求項６のいずれか一項に記載の情報処理装置。
【請求項８】
前記第１プログラムは、高級プログラミング言語で記述されたプログラムである
ことを特徴とする請求項１乃至請求項７のいずれか一項に記載の情報処理装置。
【請求項９】
前記第１プログラムは、前記プロセッサ以外の他のプロセッサが解釈可能なマシン語で記述されたプログラムである
ことを特徴とする請求項１乃至請求項７のいずれか一項に記載の情報処理装置。
【請求項１０】
前記第２プログラムは、前記プロセッサが解釈可能なマシン語で記述されたプログラムである
ことを特徴とする請求項１乃至請求項９のいずれか一項に記載の情報処理装置。
【請求項１１】
プログラムの実行時に用いるデータを一時的に記憶するレジスタを有するプロセッサとキャッシュライン単位で分割されるメモリであり且つ複数の前記データを当該データのアドレスに対応する第１キャッシュラインに各々記憶するメインメモリとキャッシュライン単位で分割され前記データへのアクセス時に少なくとも１つの第２キャッシュラインが使用されるローカルメモリと、
前記メインメモリに記憶された前記データを前記ローカルメモリに転送する転送手段と、
前記プロセッサが前記プログラムの実行時において前記データへアクセスする際に、前記データが前記ローカルメモリに記憶されているか否かを判定する判定処理を行うとともに、当該判定処理が完了する前に、前記ローカルメモリにおいて前記データへのアクセス時に使用するメモリ領域に記憶されている記憶データを、前記レジスタに転送する転送処理を行うキャッシュデータ制御手段とを備え、
前記キャッシュデータ制御手段は、複数の前記データに対して行う前記判定処理及び前記転送処理を並行して行い、異なる前記第１キャッシュラインに記憶されている複数の前記データへのアクセス時に使用する前記第２キャッシュラインが同一である可能性がある場合、複数の前記データに対する各前記判定処理の判定結果を融合し、当該融合した判定結果に応じて、前記転送手段を介して前記データを前記メインメモリから前記ローカルメモリに転送し、その後、当該データを前記ローカルメモリから前記レジスタに転送する第２転送処理を行う
ことを特徴とする情報処理装置。
【請求項１２】
プログラムの実行時に用いるデータを一時的に記憶するレジスタを有するプロセッサとキャッシュライン単位で分割されるメモリであり且つ複数の前記データを当該データのアドレスに対応する第１キャッシュラインに各々記憶するメインメモリとキャッシュライン単位で分割され前記データへのアクセス時に少なくとも１つの第２キャッシュラインが使用されるローカルメモリとを備える情報処理装置であって、
少なくとも１つの処理命令を含む第１プログラムを、前記プロセッサが実行可能な第２プログラムに変換するプログラム変換手段と、
前記プロセッサが前記第２プログラムの実行時において前記データへアクセスする際に、前記データが前記ローカルメモリに記憶されているか否かを判定する判定処理を行うとともに、当該判定処理が完了する前に、前記ローカルメモリにおいて前記データへのアクセス時に使用するメモリ領域に記憶されている記憶データを、前記レジスタに転送する転送処理を行うキャッシュデータ制御手段とを備え、
前記プログラム変換手段は、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに記憶されている記憶データを前記レジスタに転送する命令を表すロードキャッシュ命令を生成する第１命令生成手段と、前記メモリアクセス命令に対して、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに前記データが記憶されているか否かを判定する命令を表すキャッシュヒット判定命令を生成する第２命令生成手段と、異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である可能性のある複数の前記メモリアクセス命令が前記第１プログラムに含まれる場合、当該複数のメモリアクセス命令に対して各々生成された前記キャッシュヒット判定命令による判定結果を１つに融合する融合命令を生成する第３命令生成手段とを有し、前記ロードキャッシュ命令及び前記キャッシュヒット判定命令を少なくとも含む前記第２プログラムを生成し、
前記キャッシュデータ制御手段は、複数の前記データに対して行う前記判定処理及び前記転送処理を並行して行い、異なる前記第１キャッシュラインに記憶されている複数の前記データへのアクセス時に使用する前記第２キャッシュラインが同一である可能性がある場合、複数の前記データに対する各前記判定処理の判定結果を融合し、当該融合した判定結果に応じて、前記転送手段を介して前記データを前記メインメモリから前記ローカルメモリに転送し、その後、当該データを前記ローカルメモリから前記レジスタに転送する第２転送処理を行う
ことを特徴とする情報処理装置。
【請求項１３】
請求項１乃至請求項１０のいずれか一項に記載の情報処理装置と、前記第１情報処理装置とを備え、
前記第１情報処理装置が、請求項１１に記載の情報処理装置である
ことを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、第１プログラムを、プロセッサが解釈可能なマシン語で記述された第２プログラムに変換する情報処理技術、および、メインメモリに記憶されたデータを一時的に記憶するキャッシュメモリを有する情報処理技術に関する。
【背景技術】
【０００２】
従来一般的なプロセッサは、そのプロセッサ用の命令セットアーキテクチャで規定されたマシン語で記述されたプログラム（オブジェクトコード）を実行することができる。一方、プログラマは、マシン語よりも分かりやすいＣ言語などの高級プログラミング言語を用いてプログラミングすることが多い。その為、プログラムをプロセッサで実行する前に、高級プログラミング言語を用いて記述されたプログラムを、コンパイラなどのプログラム変換手段を用いて、オブジェクトコードに変換する必要がある。また、バイナリトランスレータなどのプログラム変換手段を用いて、あるプロセッサ用のオブジェクトコードを、他のプロセッサ用のオブジェクトコードに変換することもある。例えば、特許文献１には、プログラム実行時にあるプロセッサ用のオブジェクトコードを、他のプロセッサ用のオブジェクトコードに変換する技術が記載されている。
【０００３】
また、近年の計算機の中には、プロセッサのデータ処理性能とメインメモリのデータ供給性能との差を埋めるために、プロセッサとメインメモリ間に、メインメモリより少量ではあるがデータ供給性能が高いキャッシュメモリやローカルメモリなどの一時記憶装置を備えるものも多い。このような計算機では、メインメモリに記憶されたデータを一時記憶装置に一時的に記憶することで、データ供給性能を高め、プロセッサのデータ処理性能を活かすことができる。しかし、一時記憶装置は、メインメモリよりも少量であり、メインメモリ上の全てのデータを記憶することはできない。このため、プロセッサのデータアクセス等に伴って、一時記憶装置に記憶させるデータを適宜置換する必要がある。尚、キャッシュメモリとメインメモリ間のデータ転送は自動的に行われるが、ローカルメモリとメインメモリ間のデータ転送は、プログラムからデータ転送装置に対して明示的に指示されることにより行われる。
【０００４】
このキャッシュメモリとメインメモリとは、キャッシュラインと呼ばれる部分メモリ領域に分割される。キャッシュメモリとメインメモリとの間のデータ置換はキャッシュライン単位で行われる。プロセッサがメインメモリ上のデータにアクセスするアクセス処理を行う際には、メインメモリ上のデータがキャッシュメモリ上に一時的に記憶されているか（キャッシュヒット）を確認するキャッシュヒット判定を行う。このキャッシュヒット判定において、アクセスするデータがキャッシュメモリ上に一時的に記憶されていないと判定した場合、即ち、キャッシュミスが発生した場合には、アクセスする対象のデータを含むメインメモリのキャッシュライン上のデータをキャッシュメモリのキャッシュライン上に転送する。この際、キャッシュメモリのキャッシュラインに空き領域が存在しない場合には、既に他のデータが一時的に記憶されている使用中のキャッシュラインを再利用する。この結果キャッシュメモリにおけるデータが置換される。尚、再利用するキャッシュラインのデータが変更されていた場合には、このキャッシュラインを再利用する前にこのキャッシュラインに記憶されているデータをメインメモリに転送する。
【０００５】
このような構成において、例えば、メインメモリの異なる２つのキャッシュライン（キャッシュラインＡ，Ｂとする）があり、各キャッシュライン上のデータに各々アクセスする場合に、キャッシュメモリの同一のキャッシュラインＸを使用することがある。始めに、メインメモリのキャッシュラインＡ上のデータ（データＡとする）にアクセスすると、データＡが、キャッシュメモリのキャッシュラインＸに転送される。次に、メインメモリのキャッシュラインＢ上のデータ（データＢとする）にアクセスすると、このときキャッシュメモリのキャッシュラインＸには上述のデータＡが一時的に保持されているためキャッシュミスが発生し、データＢが、キャッシュメモリのキャッシュラインＸに転送される。仮に、メインメモリのキャッシュラインＡ上のデータＡとキャッシュラインＢ上のデータＡとに交互にアクセスするとした場合、常にキャッシュミスが発生し、メインメモリとキャッシュメモリとの間でデータＡ及びデータＢのデータ転送を繰り返し行なうことになる。
【０００６】
【特許文献１】特表２００２―５３６７１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
即ち、従来のキャッシュメモリでは、メインメモリの異なる複数のキャッシュラインへのアクセス時にキャッシュメモリ上の同一キャッシュラインを使用する際、メインメモリの異なる複数のキャッシュラインへのアクセスを交互に行う場合、常にキャッシュミスが発生し、頻繁なキャッシュミスヒットにより処理速度が低下するというスラッシング現象が起こる恐れがあった。この場合、メインメモリとキャッシュメモリとの間でデータ転送を繰り返し行なうことになり、メモリのデータ供給性能が悪化してしまうという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、メインメモリの異なる複数のキャッシュラインへのアクセス時にキャッシュメモリの同一のキャッシュラインを使用する際、メインメモリの異なる複数のキャッシュラインへのアクセスを交互に行う場合にも、キャッシュミスの発生を抑制可能な情報処理装置及びシステムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、本発明は、情報処理装置であって、少なくとも１つの処理命令を含む第１プログラムを、プログラムの実行時に用いるデータを一時的に記憶するレジスタを有するプロセッサとキャッシュライン単位で分割されるメモリであり且つ複数の前記データを当該データのアドレスに対応する第１キャッシュラインに各々記憶するメインメモリとキャッシュライン単位で分割され前記データへのアクセス時に少なくとも１つの第２キャッシュラインが使用されるキャッシュメモリとを備える第１情報処理装置が実行可能な第２プログラムに変換するプログラム変換手段と、前記第２プログラムを出力する出力手段とを備え、前記プログラム変換手段は、前記第１プログラムに含まれる処理命令であって前記データへアクセスする命令を表すメモリアクセス命令に対して、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに記憶されている記憶データを前記レジスタに転送する命令を表すロードキャッシュ命令を生成する第１命令生成手段と、前記メモリアクセス命令に対して、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに前記データが記憶されているか否かを判定する命令を表すキャッシュヒット判定命令を生成する第２命令生成手段と、異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である可能性のある複数の前記メモリアクセス命令が前記第１プログラムに含まれる場合、当該複数のメモリアクセス命令に対して各々生成された前記キャッシュヒット判定命令による判定結果を１つに融合する融合命令を生成する第３命令生成手段とを有することを特徴とする。
【００１０】
また、本発明は、情報処理装置であって、プログラムの実行時に用いるデータを一時的に記憶するレジスタを有するプロセッサとキャッシュライン単位で分割されるメモリであり且つ複数の前記データを当該データのアドレスに対応する第１キャッシュラインに各々記憶するメインメモリとキャッシュライン単位で分割され前記データへのアクセス時に少なくとも１つの第２キャッシュラインが使用されるローカルメモリと、前記メインメモリに記憶された前記データを前記ローカルメモリに転送する転送手段と、前記プロセッサが前記プログラムの実行時において前記データへアクセスする際に、前記データが前記ローカルメモリに記憶されているか否かを判定する判定処理を行うとともに、当該判定処理が完了する前に、前記ローカルメモリにおいて前記データへのアクセス時に使用するメモリ領域に記憶されている記憶データを、前記レジスタに転送する転送処理を行うキャッシュデータ制御手段とを備え、前記キャッシュデータ制御手段は、複数の前記データに対して行う前記判定処理及び前記転送処理を並行して行い、異なる前記第１キャッシュラインに記憶されている複数の前記データへのアクセス時に使用する前記第２キャッシュラインが同一である可能性がある場合、複数の前記データに対する各前記判定処理の判定結果を融合し、当該融合した判定結果に応じて、前記転送手段を介して前記データを前記メインメモリから前記ローカルメモリに転送し、その後、当該データを前記ローカルメモリから前記レジスタに転送する第２転送処理を行うことを特徴とする。
【００１１】
また、本発明は、情報処理装置であって、プログラムの実行時に用いるデータを一時的に記憶するレジスタを有するプロセッサとキャッシュライン単位で分割されるメモリであり且つ複数の前記データを当該データのアドレスに対応する第１キャッシュラインに各々記憶するメインメモリとキャッシュライン単位で分割され前記データへのアクセス時に少なくとも１つの第２キャッシュラインが使用されるローカルメモリとを備える情報処理装置であって、少なくとも１つの処理命令を含む第１プログラムを、前記プロセッサが実行可能な第２プログラムに変換するプログラム変換手段と、前記プロセッサが前記第２プログラムの実行時において前記データへアクセスする際に、前記データが前記ローカルメモリに記憶されているか否かを判定する判定処理を行うとともに、当該判定処理が完了する前に、前記ローカルメモリにおいて前記データへのアクセス時に使用するメモリ領域に記憶されている記憶データを、前記レジスタに転送する転送処理を行うキャッシュデータ制御手段とを備え、前記プログラム変換手段は、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに記憶されている記憶データを前記レジスタに転送する命令を表すロードキャッシュ命令を生成する第１命令生成手段と、前記メモリアクセス命令に対して、前記データを記憶する前記第１キャッシュラインに対応して使用される前記第２キャッシュラインに前記データが記憶されているか否かを判定する命令を表すキャッシュヒット判定命令を生成する第２命令生成手段と、異なる前記第１キャッシュラインに記憶されている前記データへのアクセス時に使用される前記第２キャッシュラインが同一である可能性のある複数の前記メモリアクセス命令が前記第１プログラムに含まれる場合、当該複数のメモリアクセス命令に対して各々生成された前記キャッシュヒット判定命令による判定結果を１つに融合する融合命令を生成する第３命令生成手段とを有し、前記ロードキャッシュ命令及び前記キャッシュヒット判定命令を少なくとも含む前記第２プログラムを生成し、前記キャッシュデータ制御手段は、複数の前記データに対して行う前記判定処理及び前記転送処理を並行して行い、異なる前記第１キャッシュラインに記憶されている複数の前記データへのアクセス時に使用する前記第２キャッシュラインが同一である可能性がある場合、複数の前記データに対する各前記判定処理の判定結果を融合し、当該融合した判定結果に応じて、前記転送手段を介して前記データを前記メインメモリから前記ローカルメモリに転送し、その後、当該データを前記ローカルメモリから前記レジスタに転送する第２転送処理を行うことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、メインメモリの異なる複数のキャッシュラインへのアクセス時にキャッシュメモリの同一のキャッシュラインを使用する際、メインメモリの異なる複数のキャッシュラインへのアクセスを交互に行う場合にも、キャッシュミスの発生を抑制することができる。
【発明を実施するための最良の形態】
【００１３】
以下に添付図面を参照して、この発明にかかる情報処理装置及びシステムの最良な実施の形態を詳細に説明する。
【００１４】
（１）構成
＜計算機システムの構成＞
図１は、本実施の形態にかかる計算機システムの構成を例示するブロック図である。計算機システムは、ホスト計算機１０１と、ターゲット計算機１０２とから構成される。ホスト計算機１０１は、入力された入力プログラムから、ターゲット計算機１０２が解釈可能なマシン語で記述された出力プログラム１０３を生成してこれを出力する。ターゲット計算機１０２は、出力プログラム１０３を実行する。尚、出力プログラム１０３の出力は、フロッピー（登録商標）ディスクやＣＤ−Ｒなどの記録媒体を用いて行うようにしても良いし、ホスト計算機１０１とターゲット計算機１０２とを通信路で接続し、当該通信路を介して行うようにしても良い。また、ホスト計算機１０１とターゲット計算機１０２とを単一の計算機で実現しても良い。
【００１５】
尚、入力プログラムは、Ｃ言語などの高級プログラミング言語で記述されたプログラムであっても良いし、所定のプロセッサ用の命令セットアーキテクチャで規定されたマシン語で記述されたプログラムであっても良い。
【００１６】
＜ホスト計算機の構成＞
図２は、ホスト計算機１０１の構成を例示するブロック図である。ホスト計算機１０１は、プロセッサ２０１と、プログラムメモリ２０２と、メインメモリ２０３と、入力プログラム入力装置２０４と、出力プログラム出力装置２０５と、バス２０６とから構成される。プロセッサ２０１は、プログラムメモリ２０２、メインメモリ２０３、入力プログラム入力装置２０４及び出力プログラム出力装置２０５にバス２０６を介して接続される。プロセッサ２０１は、プログラムメモリ２０２上に記憶されるプログラム又はメインメモリ２０３上に記憶されるプログラムを実行する。プログラムメモリ２０２は、プロセッサ２０１が実行するプログラムを記憶するためのメモリであり、例えばリードオンリーメモリ（ＲＯＭ）により構成される。また、このプログラムメモリ２０２には、入力プログラムから出力プログラムを生成するためのプログラム変換プログラムが記憶される。このプログラム変換プログラムの詳細については後述する。メインメモリ２０３は、プロセッサ２０１が実行するプログラムとそのプログラムの実行中に使用するデータとを記憶するためのメモリであり、例えばランダムアクセスメモリ（ＲＡＭ）により構成される。入力プログラム入力装置２０４は、入力プログラムを入力するための入力装置であり、例えば、キーボード、フロッピー（登録商標）ディスクドライブ、ＣＤ-ＲＯＭドライブなどにより構成される。出力プログラム出力装置２０５は、入力プログラム入力装置２０４に入力された入力プログラムから生成された出力プログラムを出力するための出力装置であり、例えば、フロッピー（登録商標）ディスクドライブ、ＣＤ-Ｒドライブなどにより構成される。
【００１７】
次に、ホスト計算機１０１のプロセッサ２０１が上述のプログラム変換プログラムを実行することにより実現される機能について説明する。図３は、プロセッサ２０１がプログラム変換プログラムを実行することにより実現される機能的構成を例示するブロック図である。同図に示されるように、プログラム変換プログラム３０１により、入力プログラム解析部３０２と、出力プログラム生成部３０３との機能が実現される。入力プログラム解析部３０２は、入力プログラム入力装置２０４に入力された入力プログラム３０４の入力を受け付け、これを解析し、内部処理用のデータ表現形式で記述されたプログラムである内部表現プログラム３０５を出力する。出力プログラム生成部３０３は、入力プログラム解析部３０２が出力した内部表現プログラム３０５を解析し、ターゲット計算機１０２で実行可能な出力プログラム１０３を生成してこれを出力する。
【００１８】
具体的には、出力プログラム生成部３０３は、内部表現プログラムに含まれる処理命令であって処理対象のデータへアクセスする命令を表すメモリアクセス命令に対して、以下の処理命令を生成してこれらを含む出力プログラム１０３を出力する。尚、以下に記載したメインメモリ、ローカルメモリ及びレジスタは、出力プログラム１０３を実行する情報処理装置（ここでは、ターゲット計算機１０２である）に備わるものである。ターゲット計算機１０２に備わるメインメモリ、ローカルメモリ及びレジスタの構成と、出力プログラム１０３の具体例とについては後述する。
(a)処理対象のデータのメインメモリにおけるアドレス（メインメモリアドレス）に対応するメインメモリのキャッシュラインに対応して使用されるローカルメモリのキャッシュラインに記憶されているデータをレジスタに転送する命令を表すロードキャッシュ命令
(b)処理対象のデータがローカルメモリに記憶されているか否か、即ち、上述のメインメモリアドレスに対応するメインメモリのキャッシュラインに対応して使用されるローカルメモリのキャッシュラインに、処理対象のデータが記憶されているかを判定する命令を表すキャッシュヒット判定命令
(c)メインメモリの異なるキャッシュラインに記憶されているデータへのアクセス時に使用されるローカルメモリのキャッシュラインが同一である可能性のある複数のメモリアクセス命令が内部表現プログラムに含まれる場合、キャッシュヒット判定命令に従って行われる判定の判定結果を１つに融合する融合命令
(d)キャッシュヒット判定命令に従って行われる判定の判定結果又は融合命令によって融合された判定結果が、処理対象のデータが上述のキャッシュラインに記憶されていないことを示す場合に当該処理対象のデータをメインメモリからローカルメモリに転送した後当該ローカルメモリからレジスタに転送する命令を表すキャッシュミス処理命令
【００１９】
＜ターゲット計算機の構成＞
図４は、ターゲット計算機１０２の構成を例示する図である。ターゲット計算機１０２は、プロセッサ４０１と、プログラムメモリ４０２と、ローカルメモリ４０３と、内部バス４０４と、データ転送装置４０５と、メインメモリ４０６と、外部バス４０７と、出力プログラム入力装置４０９とから構成される。プロセッサ４０１は、内部バス４０４を介して、プログラムメモリ４０２とローカルメモリ４０３とに接続される。データ転送装置４０５は、プロセッサ４０１とローカルメモリ４０３とに接続され、さらに、外部バス４０７を介してメインメモリ４０６に接続される。
【００２０】
プロセッサ４０１は、内部にレジスタファイル４０８を備え、これを、演算に用いる入力データや出力データの記憶領域として使用する。レジスタファイル４０８は、内部に複数のレジスタを備える。プロセッサ４０１は、プログラムメモリ４０２上に記憶されるプログラム又はローカルメモリ４０３上に記憶されるプログラムを実行する。また、プロセッサ４０１は、データ転送装置４０５を制御する。プログラムメモリ４０２は、プロセッサ４０１で実行されるプログラムを記憶するためのメモリであり、例えばリードオンリーメモリ（ＲＯＭ）により構成される。プログラムメモリ４０２には、後述するキャッシュメモリ制御プログラムが記憶される。ローカルメモリ４０３は、プロセッサ４０１で実行されるプログラムとプログラムの実行中に使用するデータとを記憶するためのメモリであり、例えばランダムアクセスメモリ（ＲＡＭ）により構成される。データ転送装置４０５は、プロセッサ４０１からの制御により、指定されたサイズのデータを、ローカルメモリ４０３からメインメモリ４０６に転送したり、あるいは、メインメモリ４０６からローカルメモリ４０３に転送したりする。データ転送装置４０５には、例えばダイレクトメモリアクセスコントローラ（ＤＭＡコントローラ）を用いることができる。出力プログラム入力装置４０９は、ホスト計算機１０１が出力した出力プログラム１０３を、ローカルメモリ４０３に入力するための入力装置であり、例えば、キーボード、フロッピー（登録商標）ディスクドライブ、CD−ROMドライブなどにより構成される。
【００２１】
尚、本実施の形態においては、プロセッサ４０１は、メインメモリ４０６に直接アクセスすることができない構成としているが、直接アクセスできるように構成しても良い。その場合、ローカルメモリ４０３のアクセス時間は、メインメモリ４０６のアクセス時間よりも短いことが望ましい。
【００２２】
次に、プロセッサ４０１がプログラムメモリ４０２に記憶された上述のキャッシュ制御プログラムを実行することにより実現される機能について説明する。図５は、プロセッサ４０１がプログラムメモリ４０２に記憶されたキャッシュ制御プログラムを実行することにより実現される機能を例示する図である。キャッシュデータ制御部５０４が、当該キャッシュ制御プログラムをプロセッサ４０１が実行することによって実現される機能を表す。タグアレイ５０５とデータアレイ５０６とは、ローカルメモリ４０３上に用意されるメモリである。タグアレイ５０５は、データアレイ５０６上のデータを管理するための情報を記憶する。データアレイ５０６は、メインメモリ４０６上のデータを一時的に記憶する。データ転送部５０７の機能は、上述したデータ転送装置４０５によって実現される。これらのキャッシュデータ制御部５０４、タグアレイ５０５、データアレイ５０６及びデータ転送部５０７により、同図に示されるキャッシュメモリ部５０２が構成される。キャッシュメモリ部５０２は、プロセッサ４０１とメインメモリ４０６とに接続され、プロセッサ４０１がメインメモリ４０６上のデータにアクセスするための手段を提供する。
【００２３】
上述したプロセッサ４０１は、レジスタファイル４０８に加え、さらに制御装置５０８と演算装置５０９とを備える。制御装置５０８は、プロセッサ４０１がプログラムの実行中に、メインメモリ４０６上のデータへのアクセスを行う場合には、アクセス要求をキャッシュメモリ部５０２に通知する。この時、アクセスが書き込みの場合には、プロセッサ４０１は、レジスタファイル４０８内のレジスタ上のデータをキャッシュメモリ部５０２に出力する。アクセスが読み出しの場合には、プロセッサ４０１は、キャッシュメモリ部５０２上のデータをレジスタファイル４０８を構成するレジスタに記憶（複製）する。演算装置５０９は、レジスタファイル４０８内のレジスタ上のデータを用いて演算を行い、演算結果をレジスタファイル４０８を構成するレジスタに記憶する。
【００２４】
以上のような構成において、キャッシュデータ制御部５０４は、プロセッサ４０１の制御装置５０８、タグアレイ５０５、データアレイ５０６及びデータ転送部５０７に接続され、プロセッサ４０１からのアクセス要求を受信し、当該アクセス要求に応じたアクセス処理を制御する。アクセス処理においては、キャッシュデータ制御部５０４は、タグアレイ５０５を用いてデータアレイ５０６上のデータを管理し、データ転送部５０７を介してデータアレイ５０６とメインメモリ４０６との間のデータ転送を制御する。
【００２５】
図６は、プロセッサ４０１が出力するメインメモリアドレスのデータ構成を例示する図である。メインメモリアドレス６０１は、１６ビット幅のタグアドレス６０２と、８ビット幅のライン番号６０３と、８ビット幅のオフセット６０４との計３２ビットで構成される。例えば、メインメモリアドレス６０１が「０ｘ１２３４５６７８」である場合には、タグアドレス６０２は「０ｘ１２３４」であり、ライン番号６０３は「０ｘ５６」であり、オフセット６０４は「０ｘ７８」である。尚、メインメモリアドレス６０１のビット幅は、メインメモリ４０６の容量以上であれば良く、例えば、メインメモリアドレス６０１が３２ビット幅であり、メインメモリ４０６が１バイト単位でアクセス可能である場合には、最大４GBまでの容量に対応することができる。また、ライン番号６０３は、８ビット幅であるため、「０」から「２５５」までのライン番号を用いることができる。
【００２６】
図７は、ローカルメモリ４０３の構成を例示する図である。同図では、データアレイのキャッシュラインとタグアレイのタグ（管理情報）を、「キャッシュライン（ウェイ番号）−（ライン番号）」、「タグ（ウェイ番号）−（ライン番号）」と記載している。例えば、「キャッシュライン０−２５５」は、ウェイ番号「０」、ライン番号「２５５（０ｘＦＦ）」のキャッシュラインを示す。
【００２７】
ローカルメモリ４０３は、メインメモリ４０６上のデータをキャッシュライン（キャッシュラインの容量は２５６バイト）ごとに一時的に記憶するデータアレイ５０６と、データアレイ５０６に記憶されるデータのタグ（管理情報）をキャッシュラインごとに記憶するタグアレイ５０５とを記憶する。このローカルメモリ４０３には、「０ｘ００００００」から「０ｘＦＦＦＦＦＦ」までのローカルメモリアドレスがふられている。ここで、例えば、ローカルメモリ４０３の容量を１６ＭＢとし、各ローカルメモリアドレスによってローカルメモリ４０３に記憶された１バイトのデータが指定されるものとする。
【００２８】
なお、メインメモリアドレスのライン番号は、データアレイ５０６のキャッシュラインを識別するために用いられる。メインメモリアドレスのタグアドレスは、データアレイ５０６のキャッシュラインに記憶されたデータを識別するために用いられる。オフセットは、データアレイ５０６のキャッシュラインに記憶されたデータ（２５６バイト）のうちの何バイト目のデータかを識別するために用いられる。
【００２９】
なお、データアレイ５０６が有するキャッシュラインの数と、タグアレイ５０５が有するタグの数とは同一である。尚、説明の便宜上、図７においては、データアレイ５０６とタグアレイ５０５とを１ウェイとしているが、これらを複数のウェイにより構成するようにしても良い。
【００３０】
図８は、メインメモリ４０６の構成を例示する図である。メインメモリ４０６は、キャッシュライン単位に分割されている。また、キャッシュラインは、ローカルメモリ４０３のデータアレイ５０６が備えるキャッシュラインの数と同数のキャッシュラインの数毎に、グループ化されている。同図に示すメインメモリ４０６の各キャッシュラインには、「グループ番号―キャッシュライン番号」を示すキャッシュライン番号が付与されている。メインメモリ４０６の各キャッシュラインにアクセスする際には、メインメモリ４０６のキャッシュラインに付与されたキャッシュライン番号と同じキャッシュライン番号が付与された、データアレイ５０６のキャッシュラインが使用される。その為、例えば、メインメモリ４０６のキャッシュライン「０−０」、キャッシュライン「１−０」、キャッシュライン「２−０」及びキャッシュライン「６５５３５−０」にアクセルする場合は、全て、データアレイ５０６のキャッシュライン「０−０」が使用される。
【００３１】
図９は、図３に示した入力プログラム解析部３０２が出力する内部表現プログラム３０５を例示する図である。内部表現プログラム３０５には、内部表現コード７０１ａ,７０１ｂ,７０１ｃ,７０１ｄ,７０１ｅ,７０１ｆ,７０１ｇ，７０１ｈ，７０１ｉ，７０１ｋが含まれている。内部表現コード７０１ａ、７０１ｂ、７０１ｇ、７０１ｈは、即値をレジスタに設定する即値ロード命令である。内部表現コード７０１ａは、即値「０ｘ０００１０４００」を、レジスタｒ１にロードする命令である。内部表現コード７０１ｂは、即値「０ｘ０００２０４００」を、レジスタｒ８にロードする命令である。内部表現コード７０１ｇは、即値「０ｘ０００Ａ０８００」を、レジスタｒ１０にロードする命令である。内部表現コード７０１ｈは、即値「０ｘ０００Ｂ０８００」を、レジスタｒ１８にロードする命令である。
【００３２】
内部表現コード７０１ｃ，７０１ｄ，７０１ｅは、ベースアドレスレジスタ値にオフセット値を加算した、メインメモリ４０６のアドレスからデータをレジスタにロードする、第一のレジスタ間接アドレッシングを用いたロード命令の例である。内部表現コード７０１ｃは、ベースアドレスレジスタであるレジスタｒ０の値に、オフセット値「４」を加えたアドレスからデータをロードし、レジスタｒ２に記録する命令である。内部表現コード７０１ｄは、ベースアドレスレジスタであるレジスタｒ１の値に、オフセット値「４」を加えたアドレスからデータをロードし、レジスタｒ３に記録する命令である。内部表現コード７０１ｅは、ベースアドレスレジスタであるレジスタｒ８の値に、オフセット値「８」を加えたアドレスからデータをロードし、レジスタｒ４に記録する命令である。内部表現コード７０１ｆおよび７０１ｋは、２つのレジスタ値を加算する命令の例である。内部表現コード７０１ｆは、レジスタｒ３の値とレジスタｒ４の値を加算し、レジスタｒ５に記録する命令である。内部表現コード７０１ｋは、レジスタｒ１３の値とレジスタｒ１４の値を加算し、レジスタｒ１５に記録する命令である。
【００３３】
内部表現コード７０１ｉおよび７０１ｊは、ベースアドレスレジスタ値にオフセットレジスタ値を加算した、メインメモリ４０６のアドレスからデータをレジスタにロードする、第二のレジスタ間接アドレッシングを用いたロード命令の例である。内部表現コード７０１ｉは、ベースアドレスレジスタであるレジスタｒ１０の値に、オフセットレジスタであるレジスタｒ１１の値を加えたアドレスからデータをロードし、レジスタｒ１３に記録する命令である。内部表現コード７０１ｊは、ベースアドレスレジスタであるレジスタｒ１８の値に、オフセットレジスタであるレジスタｒ１２の値を加えたアドレスからデータをロードし、レジスタｒ１４に記録する命令である。
【００３４】
尚、内部表現プログラム３０５は入力プログラム３０４の一部であり、さらに、ループ中の基本ブロックであるとする。加えて、内部表現プログラム３０５におけるシーケンスを保持した出力プログラム１０３がホスト計算機１０１から出力され、ターゲット計算機１０２で実行されるものとする。
【００３５】
（２）動作
＜ホスト計算機１０１の動作＞
次に、本実施の形態にかかるホスト計算機１０１が出力プログラムを出力する処理について説明する。上述したように、図２に示したホスト計算機１０１のプロセッサ２０１がプログラム変換プログラムを実行することにより、図３に示した入力プログラム解析部３０２及び出力プログラム生成部３０３の機能が実現される。ここでは、入力プログラム３０４が入力を受け付けた入力プログラム３０４を解析して出力した内部表現プログラム３０５を出力プログラム生成部３０３が解析して出力プログラム１０３を生成する生成処理の手順について詳細に説明する。図１０は、出力プログラム生成部３０３が内部表現プログラム３０５を解析して出力プログラム１０３を生成する生成処理の手順を示すフローチャートである。
【００３６】
出力プログラム生成部３０３は、まず、内部表現プログラム３０５に含まれる全ての内部表現コードを処理したか否かを判定し（ステップＳ８０１）、全ての内部表現コードに対する処理が完了していれば（ステップＳ８０１：ＹＥＳ）、生成処理を終了する。全ての内部表現コードに対する処理が完了していない場合（ステップＳ８０１：ＮＯ）、出力プログラム生成部３０３は、処理対象の内部表現コードが、ロード命令などのメモリアクセス命令であるか否かを判定し（ステップＳ８０２）。当該判定結果が否定的である場合には、内部表現コードに対応する通常のコード（マシン語）を生成する（ステップＳ８０５）。処理対象の内部表現コードがメモリアクセス命令である場合には（ステップＳ８０２：ＹＥＳ）、出力プログラム生成部３０３は、近隣の内部表現コードに、メインメモリ４０６の異なるキャッシュラインにアクセスするメモリアクセス命令であって、アクセス時に使用するデータアレイ５０６のキャッシュラインが処理対象の内部表現コードと同一である可能性のあるメモリアクセス命令があるか否かを判定する（ステップＳ８０３）。即ち、出力プログラム生成部３０３は、メインメモリ４０６の異なるキャッシュラインにアクセスするメモリアクセス命令のうち、データアレイ５０６の同一のキャッシュラインへアクセスする可能性があるメモリアクセス命令が複数あるか否かを判定する。
【００３７】
尚、「近隣の内部表現コード」とは、例えば、以下の(a)〜(c)のいずれかの条件を満たすものとする。
(a)内部表現プログラム３０５において処理対象の内部表現コードと同じベーシックブロックに含まれる内部表現コード
(b)上記(a)に該当する内部表現コードのうち、処理対象の内部表現コードから後続する１つあるいは複数の内部表現コード
(c) 上記(b)に該当する内部表現コードのうち、メモリアクセス命令である処理対象の内部表現コードとその内部表現コードの間に、処理対象の内部表現コードが使用するレジスタの値を変更する命令を表す内部表現コードが無い、内部表現コード
【００３８】
また、近隣の内部表現コードと処理対象の内部表現コードとが、データアレイ５０６の同一のキャッシュラインを使用する可能性があるものか否かは、例えば、双方のベースアドレスレジスタの値のキャッシュライン番号が同一か否かにより判定することができる。例えば、内部表現コード７０１ｄのベースアドレスレジスタｒ１の値「０ｘ０００１０４００」については、キャッシュライン番号が「０４」であるため、このデータへのアクセス時には、データアレイ５０６のキャッシュライン番号が「０−４」のキャッシュラインが使用される。一方、内部表現コード７０１ｅのベースアドレスレジスタｒ８の値「０ｘ０００２０４００」については、キャッシュライン番号が「０４」であるため、このデータへのアクセス時には、データアレイ５０６のキャッシュライン番号が「０−４」のキャッシュラインが使用される。この場合、内部表現コード７０１ｅと内部表現コード７０１ｄとはデータアレイ５０６の同一のキャッシュラインを使用するものと判定することができる。尚、ベースアドレスレジスタの値のキャッシュライン番号に限らず、ベースアドレスレジスタとオフセットレジスタ、あるいは、オフセットレジスタ同士を用いてデータアレイ５０６の同一のキャッシュラインを使用するか否かを判定しても良い。
【００３９】
そして、近隣の内部表現コードに該当のメモリアクセス命令がある場合には（ステップＳ８０３：ＹＥＳ）、出力プログラム生成部３０３は、複数のメモリアクセスを行なうキャッシュメモリアクセス命令を生成して（ステップＳ８０４）、ステップＳ８０７に進む。近隣の内部表現コードに該当のメモリアクセス命令が無い場合には（ステップＳ８０３：ＮＯ）、出力プログラム生成部３０３は、単一のメモリアクセスを行なうキャッシュメモリアクセス命令を生成し（ステップＳ８０６）、ステップＳ８０７に進む。ステップＳ８０７では、出力プログラム生成部３０３は、次の内部表現コードに処理を進め、ステップＳ８０１より処理を継続する。
【００４０】
例えば、図９に示した内部表現プログラム３０５においては、処理対象の内部表現コードが内部表現コード７０１ａである場合、出力プログラム生成部３０３は、内部表現コード７０１ａから、単一のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する。処理対象の内部表現コードが内部表現コード７０１ｂである場合、これの近隣の内部表現コードは内部表現コード７０１ｃであるから、出力プログラム生成部３０３は、内部表現コード７０１ｂ，７０１ｃから、複数のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する。また、処理対象の内部表現コードが内部表現コード７０１ｅである場合、これの近隣の内部表現コードは内部表現コード７０１ｆであるから、出力プログラム生成部３０３は、内部表現コード７０１ｅ，７０１ｆから、複数のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する。
【００４１】
尚、出力プログラム生成部３０３がここで生成する出力プログラムは、ターゲット計算機１０２のローカルメモリ４０３にアクセスするデータが既に記憶されているか否かの判定処理（キャッシュヒット判定処理）と、キャッシュヒット判定処理が完了する前にローカルメモリ４０３に記憶されているデータをレジスタに複製する処理（先行ロード処理）とを、ターゲット計算機１０２のプロセッサ４０１に並列に実行させるように構成されている。このような構成によれば、ターゲット計算機１０２のプロセッサ４０１が先行ロード処理とキャッシュヒット判定処理とを並列に実行するため、プロセッサ４０１がローカルメモリ４０３上のデータへアクセスするのに要する時間（データアクセス時間）は、キャッシュヒット判定処理後に通常のロード処理を行ってデータアクセスする場合と比較して、削減される。即ち、キャッシュヒット判定処理後に通常のロード処理を行う場合と比較して、先行ロード処理に要する時間あるいはキャッシュヒット判定処理に要する時間のうち、処理時間の短い一方の処理時間を、データアクセス時間から削減することができる。  
【００４２】
ここで、ステップＳ８０６における単一のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する処理の手順について説明する。図１１は、単一のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する処理の手順を示すフローチャートである。
【００４３】
出力プログラム生成部３０３は、始めに、メインメモリアドレスを用いて、データアレイ５０６上のデータをレジスタに読み出す命令（ロードキャッシュ命令）を生成する（ステップＳ９０１）。次に、出力プログラム生成部３０３は、メインメモリアドレス上のデータがデータアレイ５０６上にあるのか否かを判定する命令（キャッシュヒット判定命令）を生成する（ステップＳ９０２）。最後に、出力プログラム生成部３０３は、メインメモリアドレス上のデータがデータアレイ５０６上にないと判定した場合、即ち、判定結果がキャッシュミスであった場合にキャッシュミス処理を行うためのキャッシュミス処理ルーチンへ分岐する条件分岐命令を生成する（ステップＳ９０３）。尚、キャッシュミス処理とは、上述のキャッシュヒット判定の対象となったデータをデータアレイ５０６に記憶（複製）する処理である。
【００４４】
図１２は、ステップＳ８０６の結果生成されたキャッシュメモリアクセス命令を例示する図である。同図に示される部分出力プログラム１００１は、出力プログラム１０３の一部であり、内部表現コード７０１ｃを処理した結果生成したものである。出力コード１００２ａは、第一のロードキャッシュ命令であり、ベースアドレスレジスタ値にオフセット値を加算した、メインメモリ４０６のアドレスに対応する、データアレイ５０６の対応するキャッシュライン上のデータをロードすることを示す。出力コード１００２ａは、ベースアドレスレジスタであるレジスタｒ０の値に、オフセット値「４」を加えたアドレスのデータをデータアレイ５０６からロードし、レジスタｒ２に記録することを示す。ここで、ロードキャッシュ命令は、後続の命令と並行して処理を継続し、処理の完了を待たずに後続の命令を実行できることとする。尚、本実施の形態では、ロードキャッシュ命令を単一マシン語としているが、複数のマシン語を組み合わせて同様の機能を実現するように構成しても良い。
【００４５】
出力コード１００２ｂは、第一のキャッシュヒット判定命令であり、ベースアドレスレジスタ値にオフセット値を加算した、メインメモリ４０６のアドレス上のデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、その結果を指定レジスタに記録することを示す。出力コード１００２ｂは、ベースアドレスレジスタであるレジスタｒ０の値に、オフセット値「４」を加えたアドレスのデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、記憶されている場合には「０」を、記憶されていない場合には「１」を、レジスタｒ６に記録することを示す。尚、本実施の形態では、キャッシュヒット判定命令を単一マシン語としているが、複数のマシン語を組み合わせて同様の機能を実現するように構成しても良い。
【００４６】
出力コード１００２ｃは、条件分岐命令であり、条件レジスタの値が「１」である場合には、リターンアドレスレジスタに次の命令のアドレスを記録し、指定アドレスに分岐することを示す。出力コード１００２ｃは、条件レジスタであるレジスタｒ６の値が「１」である場合には、リターンアドレスレジスタであるレジスタｒ０に次の命令のアドレスを記録し、指定アドレスである「ｃａｃｈｅ＿ｍｉｓｓ＿ｈａｎｄｌｅｒ」で示されるアドレスに分岐することを示す。この「ｃａｃｈｅ＿ｍｉｓｓ＿ｈａｎｄｌｅｒ」は、キャッシュミス処理ルーチンのアドレスとする。
【００４７】
次に、ステップＳ８０４における複数のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する処理の手順について説明する。図１３は、複数のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する処理の手順を示すフローチャートである。
【００４８】
出力プログラム生成部３０３は、始めに、対象となる全てのメモリアクセス命令に関し、各メインメモリアドレスを用いて、データアレイ５０６上のデータをレジスタに読み出す命令（ロードキャッシュ命令）を複数生成する（ステップＳ１１０１）。次に、出力プログラム生成部３０３は、対象となる全てのメモリアクセス命令に関し、メインメモリアドレス上のデータがデータアレイ５０６上にあるのかを判定する命令（キャッシュヒット判定命令）を複数生成する（ステップＳ１１０２）。さらに、出力プログラム生成部３０３は、複数の判定結果を１つにまとめる命令を生成する（ステップＳ１１０３）。最後に、出力プログラム生成部３０３は、判定結果がキャッシュミスであった場合にキャッシュミス処理ルーチンへ分岐する条件分岐命令を生成する（ステップＳ１１０４）。
【００４９】
図１４は、ステップＳ８０４の処理の結果生成されたキャッシュメモリアクセス命令を例示する図である。同図に示される部分出力プログラム１２０１は、出力プログラム１０３の一部であり、内部表現コード７０１ｄと７０１ｅとを処理した結果生成したものである。出力コード１２０２ａは、第一のロードキャッシュ命令であり、ベースアドレスレジスタであるレジスタｒ１の値に、オフセット値「４」を加えたアドレスのデータをデータアレイ５０６からロードし、レジスタｒ３に記録することを示す。
【００５０】
出力コード１２０２ｂは、第一のロードキャッシュ命令であり、ベースアドレスレジスタであるレジスタｒ８の値に、オフセット値「８」を加えたアドレスのデータをデータアレイ５０６からロードし、レジスタｒ４に記録することを示す。
【００５１】
出力コード１２０２ｃは、第一のキャッシュヒット判定命令であり、ベースアドレスレジスタであるレジスタｒ１の値に、オフセット値「４」を加えたアドレスのデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、記憶されている場合には「０」を、記憶されていない場合には「１」を、レジスタｒ６に記録することを示す。
【００５２】
出力コード１２０２ｄは、第一のキャッシュヒット判定命令であり、ベースアドレスレジスタであるレジスタｒ８の値に、オフセット値「８」を加えたアドレスのデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、記憶されている場合には「０」を、記憶されていない場合には「１」を、レジスタｒ７に記録することを示す。
【００５３】
出力コード１２０２ｅは、複数の判定結果を１つに融合する融合命令として論理和Ｏｒ命令を使用した例で、レジスタｒ６の値とレジスタｒ７の値の論理和を取り、結果をレジスタｒ９に記録することを示す。
【００５４】
出力コード１２０２ｆは、条件レジスタであるレジスタｒ９の値が「１」である場合には、リターンアドレスレジスタであるｒ０に次の命令のアドレスを記録し、指定アドレスである「ｃａｃｈｅ＿ｍｉｓｓ＿ｈａｎｄｌｅｒ」で示されるアドレスに分岐することを示す。
【００５５】
このようにして、出力プログラム生成部３０３は、同一のキャッシュラインへアクセスする可能性がある複数のメモリアクセス命令（ここでは、出力コード１２０２ａ，１２０２ｂである）に対するキャッシュヒット判定命令（ここでは、出力コード１２０２ｃ，１２０２ｄである）の判定結果を出力コード１２０２ｅにより１つに融合して当該判定結果に応じてキャッシュミス処理を行う命令を１つの部分出力プログラム１２０１に含ませる。
【００５６】
また、ステップＳ８０４の処理の結果生成されたキャッシュメモリアクセス命令の他の例について説明する。図１５は、ステップＳ８０４の処理の結果生成されたキャッシュメモリアクセス命令を例示する図である。同図に示される部分出力プログラム１３０１は、出力プログラム１０３の一部であり、内部表現コード７０１ｉと７０１ｊとを処理した結果生成したものである。
【００５７】
出力コード１３０２ａと出力コード１３０２ｂとは、第二のロードキャッシュ命令であり、ベースアドレスレジスタ値にオフセットレジスタ値を加算した、メインメモリ４０６のアドレスに対応する、データアレイ５０６の対応するキャッシュライン上のデータをロードすることを示す。出力コード１３０２ａは、ベースアドレスレジスタであるレジスタｒ１０の値に、オフセットレジスタであるレジスタｒ１１の値を加えたアドレスのデータをデータアレイ５０６からロードし、レジスタｒ１３に記録することを示す。出力コード１３０２ｂは、ベースアドレスレジスタであるレジスタｒ１８の値に、オフセットレジスタであるレジスタｒ１２の値を加えたアドレスのデータをデータアレイ５０６からロードし、レジスタｒ１４に記録することを示す。
【００５８】
出力コード１３０２ｃと出力コード１３０２ｄは、第二のキャッシュヒット判定命令であり、ベースアドレスレジスタ値にオフセットレジスタ値を加算した、メインメモリ４０６のアドレス上のデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、その結果を指定レジスタに記録することを示す。出力コード１３０２ｃは、ベースアドレスレジスタであるレジスタｒ１０の値に、オフセットレジスタであるレジスタｒ１１の値を加えたアドレスのデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、記憶されている場合には「０」を、記憶されていない場合には「１」を、レジスタｒ６に記録することを示す。出力コード１３０２ｄは、ベースアドレスレジスタであるレジスタｒ１８の値に、オフセットレジスタであるレジスタｒ１２の値を加えたアドレスのデータが、データアレイ５０６の対応するキャッシュライン上に記憶されているか判定し、記憶されている場合には「０」を、記憶されていない場合には「１」を、レジスタｒ７に記録することを示す。
【００５９】
出力コード１３０２ｅは、複数の判定結果を１つに融合する融合命令として論理和Ｏｒ命令を使用した例で、レジスタｒ６の値とレジスタｒ７の値の論理和を取り、結果をレジスタｒ９に記録することを示す。出力コード１３０２ｆは、条件レジスタであるレジスタｒ９の値が「１」である場合には、リターンアドレスレジスタであるｒ０に次の命令のアドレスを記録し、指定アドレスである「ｃａｃｈｅ＿ｍｉｓｓ＿ｈａｎｄｌｅｒ」で示されるアドレスに分岐することを示す。
【００６０】
出力プログラム生成部３０３は、以上のようにして内部表現プログラム３０５を解析し、各種命令を含む出力プログラム１０３を生成することにより、内部表現プログラム３０５から出力プログラム１０３を生成する。この出力プログラム１０３は出力プログラム出力装置２０５を介してターゲット計算機１０２に出力される。ターゲット計算機１０２は、出力プログラム１０３を出力プログラム入力装置４０９を介してローカルメモリ４０３に入力する。そして、ターゲット計算機１０２のプロセッサ４０１は、出力プログラム１０３の実行時にこれをローカルメモリ４０３から読み出す。尚、出力プログラム１０３は、上述したように、メモリアクセス命令に対応するロードキャッシュ命令やキャッシュヒット判定命令の他演算命令を含み、プロセッサ４０１は、出力プログラム１０３に含まれる各種命令に従って、処理を行う。
【００６１】
＜ターゲット計算機１０２の動作＞
次に、ターゲット計算機１０２のプロセッサ４０１が出力プログラム１０３を実行する場合の処理の手順について説明する。プロセッサ４０１は、ローカルメモリ４０３に出力プログラム１０３を実行すると共に、キャッシュデータ制御プログラムを実行する。そして、プロセッサ４０１は、出力プログラム１０３に含まれるメモリアクセス命令に従う際、キャッシュデータ制御プログラムに従い、キャッシュヒット判定処理と、先行ロード処理とを並列に実行する。
【００６２】
ここで、具体的に、上述の出力プログラム１０３のうち図１４に示される部分出力プログラム１２０１に従ったプロセッサ４０１の動作について説明する。例えば、データアレイ５０６のキャッシュライン番号が「０−４」のキャッシュライン上に、メインメモリ４０６のアドレス「０ｘ０００１０４００」のデータが一時的に保持されている場合、プロセッサ４０１は、内部表現コード７０１ｄに対応する第１のロードキャッシュ命令（出力コード１２０２ａ）に従って、データアレイ５０６の対応するキャッシュライン上のデータをレジスタｒ３にロードしたとき、レジスタｒ３には処理対象である正しいデータがロードされたことになる。このため、プロセッサ４０１は、出力コード１２０２ｃによる第１のキャッシュヒット判定命令に従ってキャッシュヒット判定処理を行った結果、キャッシュヒットしたと判定して、レジスタｒ６に「０」を記録する。一方、内部表現コード７０１eに対応する第１のロードキャッシュ命令（出力コード１２０２ｂ）に従って、データアレイ５０６の対応するキャッシュライン上のデータをレジスタｒ４にロードしたとき、レジスタｒ４には処理対象ではない誤ったデータがロードされたことになる。このため、プロセッサ４０１は、出力コード１２０２ｄによる第１のキャッシュヒット判定命令に従ってキャッシュヒット判定処理を行った結果、キャッシュミスが発生したと判定して、レジスタｒ７に「１」を記録する。続いて、プロセッサ４０１は、出力コード１２０２ｅによる融合命令に従って、レジスタｒ６の値「０」とレジスタｒ７の値「１」との論理和を取り、レジスタｒ９に「１」を記録する。最後に、プロセッサ４０１は、出力コード１２０２ｆによる条件分岐命令に従って、指定アドレスである「ｃａｃｈｅ＿ｍｉｓｓ＿ｈａｎｄｌｅｒ」で示されるアドレスに分岐し、キャッシュミスが発生したと判定されたロードキャッシュ命令（出力コード１２０２ｂ）に対応するキャッシュミス処理を行なう。
【００６３】
メインメモリ４０６の異なるキャッシュラインにアクセスするメモリアクセス命令のうち、データアレイ５０６の同一のキャッシュラインへアクセスする可能性がある２つのメモリアクセス命令に対して各々行う２回のキャッシュヒット判定において、従来であれば、キャッシュミスと判定する回数は２回となる恐れがあったが、本実施の形態においては、その回数を１回に低減することができる。この結果、キャッシュミス処理を行う回数を低減することができる。
【００６４】
尚、キャッシュミス処理では、プロセッサ４０１は、データ転送装置４０５を制御し、メインメモリアドレスに指定されるデータをメインメモリ４０６からローカルメモリ４０３へ転送し、そのデータのメインメモリアドレスのライン番号と対応するローカルメモリ４０３上のキャッシュラインのいずれかに複製する。その後、プロセッサ４０１は、ローカルメモリ４０３に複製したデータを、レジスタファイル４０８を構成するレジスタへ複製する処理（ロード処理）を行う。
【００６５】
ここで、キャッシュミスが発生したと判定された第１のロードキャッシュ命令（出力コード１２０２ｂ）のベースアドレスレジスタであるレジスタｒ８の値は「０ｘ０００２０４００」であるので、キャッシュミス処理の結果、データアレイ５０６のキャッシュライン番号「０−４」のキャッシュライン上には、メインメモリ４０６のアドレス「０ｘ０００１０４００」上のデータに代わって、メインメモリ４０６のアドレス「０ｘ０００２０４００」上のデータが一時的に保持される。この結果、部分出力プログラム１２０１を繰り返し実行するループ処理において、次に部分出力プログラム１２０１をプロセッサ４０１が実行するときには、出力コード１２０２ａによる第１のロードキャッシュ命令に従ってデータをロードしたとき、出力コード１２０２ｃによる第１のキャッシュヒット判定命令に従って行うキャッシュヒット判定の結果、キャッシュミスが発生したと判定する。一方、プロセッサ４０１は、出力コード１２０２ｂによる第１のロードキャッシュ命令に従ってデータをロードしたとき、出力コード１２０２ｄによる第１のキャッシュヒット判定命令に従って行う判定の結果、キャッシュヒットと判定する。
【００６６】
この場合も、メインメモリ４０６の異なるキャッシュラインにアクセスするメモリアクセス命令のうち、データアレイ５０６の同一のキャッシュラインへアクセスする可能性がある２つのメモリアクセス命令に対して各々行う２回のキャッシュヒット判定において、従来２回発生する恐れのあったキャッシュミスと判定する回数を１回に低減することができる。
【００６７】
即ち、ループ処理によって、部分出力プログラム１２０１を繰り返し実行する場合、内部表現コード７０１ｄに対応する先行ロード処理及びキャッシュヒット判定処理と、内部表現コード７０１ｅに対応する先行ロード処理及びキャッシュヒット判定処理とを交互に実行しても、各ループ処理においてキャッシュミスが発生したと判定する回数を低減することができる。
【００６８】
尚、プロセッサ４０１が部分出力プログラム１３０１を実行した場合も、部分出力プログラム１２０１を実行した場合と同様に、２つのメモリアクセス命令に対し、キャッシュミスと判定する回数を１回に低減することができる。
【００６９】
以上のようにして、メインメモリの異なるキャッシュラインへのアクセス時に使用されるキャッシュメモリのキャッシュラインが同一である可能性のある複数のメモリアクセス命令に対する各キャッシュ判定処理の判定結果１つに融合することにより、キャッシュミス処理を行うか否かの判定回数を低減させることができる。そして、融合した判定結果に応じてキャッシュミス処理を行うことにより、キャッシュミス処理の回数を低減させることができる。この結果、スラッシングの発生を抑制して、メモリのデータ供給性能の悪化を抑制することができる。
【００７０】
[変形例]
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要
旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示され
ている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【００７１】
＜変形例１＞
上述した実施の形態のホスト計算機１０１で実行されるプログラム変換プログラムやターゲット計算機１０２で実行されるキャッシュデータ制御プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより各々提供するように構成しても良い。また、これらのプログラムをインストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録して各々提供するように構成してもよい。
【００７２】
＜変形例２＞
上述した実施の形態においては、メインメモリ４０６の異なるキャッシュラインへのアクセス時に使用されるローカルメモリ４０３のキャッシュラインが同一である可能性のあるメモリアクセス命令の数として２つを例示したが、本実施の形態においては、この数に限らない。
【００７３】
また、メインメモリ４０６のメインメモリアドレス、メインメモリ４０６のキャッシュライン及びローカルメモリ４０３のキャッシュラインの対応関係は、上述のものに限らない。
【００７４】
＜変形例３＞
上述した実施の形態においては、ホスト計算機１０１とターゲット計算機１０２とを別体で構成するようにした。しかし、ホスト計算機１０１及びターゲット計算機１０２の少なくとも一方が、他方の上述した機能を有するように構成しても良い。
【産業上の利用可能性】
【００７５】
以上のように、本発明は、第１プログラムを、プロセッサが解釈可能なマシン語で記述された第２プログラムに変換する情報処理装置、および、メインメモリに記憶されたデータを一時的に記憶するキャッシュメモリを有する情報処理装置、ならびに情報処理システムに有用である。特に、キャッシュメモリへの複数のアクセスを並行して行う情報処理装置及び情報処理システムに用いて好適である。
【図面の簡単な説明】
【００７６】
【図１】本実施の形態にかかる計算機システムの構成を例示するブロック図である。
【図２】ホスト計算機１０１の構成を例示するブロック図である。
【図３】プロセッサ２０１がプログラム変換プログラムを実行することにより実現される機能的構成を例示するブロック図である。
【図４】ターゲット計算機１０２の構成を例示する図である。
【図５】プロセッサ４０１がプログラムメモリ４０２に記憶されたキャッシュ制御プログラムを実行することにより実現される機能を例示する図である。
【図６】プロセッサ４０１が出力するメインメモリアドレスのデータ構成を例示する図である。
【図７】ローカルメモリ４０３の構成を例示する図である。
【図８】メインメモリ４０６の構成を例示する図である。
【図９】図３に示した入力プログラム解析部３０２が出力する内部表現プログラム３０５を例示する図である。
【図１０】出力プログラム生成部３０３が内部表現プログラム３０５を解析して出力プログラム１０３を生成する生成処理の手順を示すフローチャートである。
【図１１】単一のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する処理の手順を示すフローチャートである。
【図１２】ステップＳ８０６の結果生成されたキャッシュメモリアクセス命令を例示する図である。
【図１３】複数のメモリアクセスを行なうキャッシュメモリアクセス命令を生成する処理の手順を示すフローチャートである。
【図１４】ステップＳ８０４の処理の結果生成されたキャッシュメモリアクセス命令を例示する図である。
【図１５】ステップＳ８０４の処理の結果生成されたキャッシュメモリアクセス命令を例示する図である。
【符号の説明】
【００７７】
１０１  ホスト計算機
１０２  ターゲット計算機
１０３  出力プログラム
２０１  プロセッサ
２０２  プログラムメモリ
２０３  メインメモリ
２０４  入力プログラム入力装置
２０５  出力プログラム出力装置
２０６  バス
３０２  入力プログラム解析部
３０３  出力プログラム生成部（プログラム変換手段、出力手段）
３０４  入力プログラム
３０５  内部表現プログラム
４０１  プロセッサ
４０２  プログラムメモリ
４０３  ローカルメモリ
４０４  内部バス
４０５  データ転送装置
４０６  メインメモリ４０７  外部バス
４０８  レジスタファイル４０９  出力プログラム入力装置
５０２  キャッシュメモリ部
５０４  キャッシュデータ制御部（キャッシュデータ制御手段）
５０５  タグアレイ５０６  データアレイ
５０７  データ転送部
５０８  制御装置５０９  演算装置
【図１】
2009020695.tif 000003
【図２】
2009020695.tif 000004
【図３】
2009020695.tif 000005
【図４】
2009020695.tif 000006
【図５】
2009020695.tif 000007
【図６】
2009020695.tif 000008
【図７】
2009020695.tif 000009
【図８】
2009020695.tif 000010
【図９】
2009020695.tif 000011
【図１０】
2009020695.tif 000012
【図１１】
2009020695.tif 000013
【図１２】
2009020695.tif 000014
【図１３】
2009020695.tif 000015
【図１４】
2009020695.tif 000016
【図１５】
2009020695.tif 000017