(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024140222
(43)【公開日】2024-10-10
(54)【発明の名称】キャッシュ設定プログラム、キャッシュ設定方法および情報処理装置
(51)【国際特許分類】
G06F 12/0871 20160101AFI20241003BHJP
G06F 12/0864 20160101ALI20241003BHJP
G06F 12/0895 20160101ALI20241003BHJP
G06F 8/41 20180101ALI20241003BHJP
G06F 12/0862 20160101ALI20241003BHJP
【FI】
G06F12/0871 100
G06F12/0864
G06F12/0895 106
G06F8/41 130
G06F12/0862 110
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2023051260
(22)【出願日】2023-03-28
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】新井 正樹
【テーマコード(参考)】
5B081
5B205
【Fターム(参考)】
5B081CC27
5B205JJ13
5B205PP03
5B205TT02
5B205UU45
(57)【要約】
【課題】パラメータ変数の値に応じた動的なキャッシュ制御を可能にする。
【解決手段】情報処理装置10は、プログラム13から、パラメータ変数14と、参照回数がパラメータ変数14の値に依存するデータ変数15a,15bとを検出する。情報処理装置10は、パラメータ変数14の値とデータ変数15a,15bそれぞれの参照回数との関係に基づいて、パラメータ変数14の値に対する条件17a,17b,17cと、特定のデータ変数のためにキャッシュメモリの中から一部のメモリ領域を分割するキャッシュ制御に対する制御方法18a,18b,18cとを対応付けた状況情報16を生成する。情報処理装置10は、実行時のパラメータ変数14の値が条件17a,17b,17cのうちの何れの条件に該当するか判定して、該当する条件に対応する制御方法を実行するプログラム19を、プログラム13に付加する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
第1のプログラムから、パラメータ変数と、参照回数が前記パラメータ変数の値に依存する1以上のデータ変数とを検出し、
前記パラメータ変数の値と前記1以上のデータ変数それぞれの前記参照回数との関係に基づいて、前記パラメータ変数の値に対する異なる複数の条件と、特定のデータ変数のためにキャッシュメモリの中から一部のメモリ領域を分割するキャッシュ制御に対する異なる複数の制御方法とを対応付けた状況情報を生成し、
実行時の前記パラメータ変数の値が前記複数の条件のうちの何れの条件に該当するか判定して、前記複数の制御方法のうち前記該当する条件に対応する制御方法を実行する第2のプログラムを、前記第1のプログラムに付加する、
処理をコンピュータに実行させるキャッシュ設定プログラム。
【請求項2】
前記複数の制御方法のうちの少なくとも1つの制御方法は、前記1以上のデータ変数のうちの少なくとも1つのデータ変数を前記一部のメモリ領域に割り当てることを含む、
請求項1記載のキャッシュ設定プログラム。
【請求項3】
前記複数の条件のうち前記少なくとも1つの制御方法に対応する条件は、前記少なくとも1つのデータ変数の前記参照回数に基づく指標値が閾値を超えることを示す、
請求項2記載のキャッシュ設定プログラム。
【請求項4】
前記1以上のデータ変数は配列変数であり、前記指標値は、前記配列変数が示す配列データに含まれる要素1つ当たりの平均参照回数である、
請求項3記載のキャッシュ設定プログラム。
【請求項5】
前記少なくとも1つの制御方法は、前記一部のメモリ領域のウェイ数を、前記少なくとも1つのデータ変数のデータサイズに基づいて設定することを含む、
請求項2記載のキャッシュ設定プログラム。
【請求項6】
前記複数の制御方法のうちの少なくとも1つの制御方法は、前記一部のメモリ領域のウェイ数を、実行時の前記パラメータ変数の値に基づいて設定することを含む、
請求項1記載のキャッシュ設定プログラム。
【請求項7】
前記1以上のデータ変数は、ループの中で参照される配列変数であり、前記パラメータ変数は、前記ループの反復回数を制御する変数である、
請求項1記載のキャッシュ設定プログラム。
【請求項8】
第1のプログラムから、パラメータ変数と、参照回数が前記パラメータ変数の値に依存する1以上のデータ変数とを検出し、
前記パラメータ変数の値と前記1以上のデータ変数それぞれの前記参照回数との関係に基づいて、前記パラメータ変数の値に対する異なる複数の条件と、特定のデータ変数のためにキャッシュメモリの中から一部のメモリ領域を分割するキャッシュ制御に対する異なる複数の制御方法とを対応付けた状況情報を生成し、
実行時の前記パラメータ変数の値が前記複数の条件のうちの何れの条件に該当するか判定して、前記複数の制御方法のうち前記該当する条件に対応する制御方法を実行する第2のプログラムを、前記第1のプログラムに付加する、
処理をコンピュータが実行するキャッシュ設定方法。
【請求項9】
パラメータ変数と、参照回数が前記パラメータ変数の値に依存する1以上のデータ変数とを含む第1のプログラムを記憶する記憶部と、
前記パラメータ変数の値と前記1以上のデータ変数それぞれの前記参照回数との関係に基づいて、前記パラメータ変数の値に対する異なる複数の条件と、特定のデータ変数のためにキャッシュメモリの中から一部のメモリ領域を分割するキャッシュ制御に対する異なる複数の制御方法とを対応付けた状況情報を生成し、実行時の前記パラメータ変数の値が前記複数の条件のうちの何れの条件に該当するか判定して、前記複数の制御方法のうち前記該当する条件に対応する制御方法を実行する第2のプログラムを、前記第1のプログラムに付加する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はキャッシュ設定プログラム、キャッシュ設定方法および情報処理装置に関する。
【背景技術】
【0002】
多くのコンピュータは、メインメモリと比べて高速かつ小容量のキャッシュメモリを有する。プロセッサから要求されたデータがキャッシュメモリにあるキャッシュヒットの場合、メインメモリに代えてキャッシュメモリから当該データが読み出される。一方、要求されたデータがキャッシュメモリにないキャッシュミスの場合、メインメモリからキャッシュメモリに当該データがロードされる。このとき、キャッシュメモリの空き容量が不足している場合、何れかの他のデータがキャッシュメモリから削除される。
【0003】
上記の性質上、様々なデータを異なる参照頻度で参照するプログラムを実行する場合、コンピュータは、参照頻度が高いデータについてキャッシュメモリ上でロードと削除を繰り返すおそれがあり、キャッシュヒット率が低下することがある。そこで、コンピュータは、プログラムからの指示に応じて、キャッシュメモリの中の一部のメモリ領域を一部のデータのために確保するキャッシュ制御を行うことがある。参照頻度が高いデータを特定のメモリ領域に割り当てることで、キャッシュヒット率が向上することがある。このようなキャッシュ制御機構は、セクタキャッシュと呼ばれることがある。
【0004】
なお、データをグループ化し、nウェイセットアソシアティブのキャッシュメモリに含まれる1つのウェイに1つのデータグループを割り当てるウェイ固定方法が提案されている。また、ソースコードに記載された変数および配列のアクセス状況を解析し、キャッシュメモリの利用の有無と利用するメモリ領域とを決定し、決定に従ってキャッシュメモリの設定を変更するオブジェクトコードを生成するコンパイラが提案されている。
【0005】
また、複数のフィールド変数それぞれのアクセス回数を静的解析によって計数し、アクセス回数に基づいて複数のフィールド変数を整列することで、キャッシュメモリのデータ配置を最適化する方法が提案されている。また、入れ替えないデータを記憶する配列キャッシュ領域と、配列キャッシュ領域よりも出現頻度が低いデータを記憶する入れ替え可能領域とを含むハイブリッドキャッシュが提案されている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2009-98933号公報
【特許文献2】特開2011-170439号公報
【特許文献3】米国特許第9092558号明細書
【特許文献4】米国特許出願公開第2017/0161193号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のように、コンピュータは、プログラムからの指示に応じてキャッシュメモリのメモリ領域を分割することがある。このようなキャッシュ制御に関する従来技術は、プログラムの実行前にキャッシュメモリの利用方法を静的に決定する。
【0008】
しかし、プログラムによっては、実行時のパラメータ変数の値に応じて各データの参照状況が変化することがある。このため、静的に決定された利用方法では、キャッシュメモリが効率的に利用されない場合がある。そこで、1つの側面では、本発明は、パラメータ変数の値に応じた動的なキャッシュ制御を可能にすることを目的とする。
【課題を解決するための手段】
【0009】
1つの態様では、コンピュータに以下の処理を実行させるキャッシュ設定プログラムが提供される。第1のプログラムから、パラメータ変数と、参照回数がパラメータ変数の値に依存する1以上のデータ変数とを検出する。パラメータ変数の値と1以上のデータ変数それぞれの参照回数との関係に基づいて、パラメータ変数の値に対する異なる複数の条件と、特定のデータ変数のためにキャッシュメモリの中から一部のメモリ領域を分割するキャッシュ制御に対する異なる複数の制御方法とを対応付けた状況情報を生成する。実行時のパラメータ変数の値が複数の条件のうちの何れの条件に該当するか判定して、複数の制御方法のうち該当する条件に対応する制御方法を実行する第2のプログラムを、第1のプログラムに付加する。
【0010】
また、1つの態様では、コンピュータが実行するキャッシュ設定方法が提供される。また、1つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【0011】
1つの側面では、パラメータ変数の値に応じた動的なキャッシュ制御が可能になる。
【図面の簡単な説明】
【0012】
【
図1】第1の実施の形態の情報処理装置を説明するための図である。
【
図2】第2の実施の形態の情報処理装置のハードウェア例を示す図である。
【
図4】ソースコードへのセクタ利用命令の挿入例を示す図である。
【
図5】セクタキャッシュを動的に制御するセクタ利用命令の例を示す図である。
【
図6】セクタキャッシュ利用の流れの例を示す図である。
【
図7】ソースコードからのSCoPテキストの生成例を示す図である。
【
図8】ソースコード変換で生成されるテーブルの例を示す図である。
【
図9】ソースコード変換で生成されるテーブルの例を示す図(続き1)である。
【
図10】ソースコード変換で生成されるテーブルの例を示す図(続き2)である。
【
図11】変換後のソースコードの例を示す図である。
【
図12】情報処理装置の機能例を示すブロック図である。
【
図13】ソースコード変換の手順例を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0014】
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、プログラム13を解析し、キャッシュメモリの利用方法を指示するプログラム19を生成してプログラム13に付加する。情報処理装置10は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置10が、コンピュータまたはキャッシュ設定装置と呼ばれてもよい。
【0015】
情報処理装置10は、記憶部11および処理部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージでもよい。
【0016】
処理部12は、例えば、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)などのプロセッサである。ただし、処理部12が、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの電子回路を含んでもよい。プロセッサは、例えば、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。
【0017】
記憶部11は、プログラム13を記憶する。また、記憶部11は、後述する方法によって生成される状況情報16を記憶する。また、記憶部11は、後述する方法によってプログラム13から生成されるプログラム19を記憶する。
【0018】
プログラム13,19は、C言語などの高水準プログラミング言語で記述されたソースコードであってもよい。また、プログラム13,19は、コンパイラがソースコードから生成する中間コード、アセンブリ言語で記述されたアセンブリコード、または、機械語で記述されたオブジェクトコードであってもよい。後述するプログラム19の生成は、コンパイラの前段としてのプリプロセッサの中で実行されてもよい。また、後述するプログラム19の生成は、コンパイラの中で実行されてもよい。
【0019】
処理部12は、プログラム13から、パラメータ変数14と、参照回数がパラメータ変数14の値に依存する1個以上のデータ変数(以降では、1個以上のデータ変数を「1以上のデータ変数」と記載する場合がある)とを検出する。
図1の例では、プログラム13からデータ変数15a,15bが検出されている。パラメータ変数14は、例えば、実行時に値が決まるため静的解析では値が確定しない数値変数である。パラメータ変数14は、ループの反復回数を制御する制御変数であってもよい。データ変数15a,15bは、配列変数であってもよく、ループに含まれていてもよい。
【0020】
処理部12は、パラメータ変数14の値と1以上のデータ変数それぞれの参照回数との関係に基づいて、状況情報16を生成する。例えば、データ変数15a,15bそれぞれの参照回数が、パラメータ変数14を含む式で表現される。
【0021】
状況情報16は、パラメータ変数14の値に関する異なる複数の条件と、キャッシュ制御に関する異なる複数の制御方法とを対応付ける。キャッシュ制御は、特定のデータ変数のために実行時にキャッシュメモリの中から一部のメモリ領域を分割する。このようなキャッシュ制御機構がセクタキャッシュと呼ばれてもよく、分割されたメモリ領域がセクタと呼ばれてもよい。分割数は2であってもよい。
図1の例では、状況情報16は、条件17aと制御方法18aとを対応付け、条件17bと制御方法18bとを対応付け、条件17cと制御方法18cとを対応付ける。
【0022】
ある制御方法は、少なくとも1つのデータ変数を、一部のメモリ領域に割り当てることを含んでもよい。その場合、例えば、当該一部のメモリ領域は、割り当てられたデータ変数のデータのみを記憶し、他のデータ変数のデータを記憶しない。また、ある制御方法は、分割される一部のメモリ領域のサイズを指定してもよい。サイズは、ウェイ数によって指定されてもよい。また、ある条件は、少なくとも1つのデータ変数について、参照回数に関する指標値が閾値を超えるためのパラメータ変数14の範囲を示してもよい。また、ある制御方法は、キャッシュメモリの分割を行わないことを示してもよい。
【0023】
一例として、条件17aは、パラメータ変数14の値が2000以上であることを規定する。制御方法18aは、キャッシュメモリの中からウェイ数が8のメモリ領域を確保し、そのメモリ領域にデータ変数15a,15bを割り当てる。条件17bは、パラメータ変数14の値が1000以上かつ2000未満であることを規定する。制御方法18bは、キャッシュメモリの中からウェイ数が4のメモリ領域を確保し、そのメモリ領域にデータ変数15aを割り当てる。条件17cは、パラメータ変数14の値が1000未満であることを規定する。制御方法18cは、固定のメモリ領域を確保しない。
【0024】
処理部12は、状況情報16に基づいてプログラム19を生成し、プログラム19をプログラム13に付加する。処理部12は、プログラム13の先頭、または、データ変数15a,15bが参照されるブロックの先頭に、プログラム19を挿入してもよい。プログラム19は、実行時のパラメータ変数14の値が、条件17a,17b,17cのうちの何れの条件に該当するか判定する。プログラム19は、制御方法18a,18b,18cのうち、該当する条件に対応する制御方法を実行する。
【0025】
処理部12は、プログラム19が付加されたプログラム13を出力する。処理部12は、プログラム19が付加されたプログラム13を不揮発性ストレージに保存してもよいし、表示装置に表示してもよいし、他の情報処理装置に送信してもよい。
【0026】
以上説明したように、第1の実施の形態の情報処理装置10は、プログラム13から、パラメータ変数14と、参照回数がパラメータ変数14の値に依存する1以上のデータ変数とを検出する。情報処理装置10は、パラメータ変数14の値と各データ変数の参照回数との関係に基づいて、状況情報16を生成する。状況情報16は、パラメータ変数14の値に対する異なる複数の条件と、キャッシュ制御に対する異なる複数の制御方法とを対応付ける。情報処理装置10は、プログラム19をプログラム13に付加する。プログラム19は、実行時のパラメータ変数14の値が何れの条件に該当するか判定し、該当する条件に対応する制御方法を実行する。
【0027】
これにより、プログラム13の解析を通じてキャッシュメモリの制御方法が決定され、ユーザが制御方法を明示的に記述しなくてもよい。よって、プログラム13を作成するユーザの負担が軽減される。また、実行時のパラメータ変数14の値に応じて、キャッシュメモリの制御方法が動的に選択される。よって、静的に決定された1つの制御方法のみが実行される場合と比べて、キャッシュメモリの利用効率が向上する。このように、パラメータ変数14の値に応じた動的なキャッシュ制御が可能となる。
【0028】
なお、ある制御方法は、少なくとも1つのデータ変数を、キャッシュメモリの中から分割される一部のメモリ領域に割り当てることを含んでもよい。これにより、割り当てるデータ変数のデータについてキャッシュヒット率が向上する。
【0029】
また、ある条件は、割り当てるデータ変数の参照回数に基づく指標値が閾値を超えることを示してもよい。これにより、参照頻度の高いデータ変数が一部のメモリ領域に割り当てられる。また、指標値は、データ変数が示す配列データに含まれる要素1つ当たりの平均参照回数であってもよい。これにより、データ変数が配列変数である場合において、キャッシュメモリ上の参照頻度が適切に評価される。
【0030】
また、ある制御方法は、一部のメモリ領域のウェイ数を、割り当てるデータ変数のデータサイズに基づいて設定してもよい。これにより、全体のキャッシュヒット率が向上するように、当該一部のメモリ領域のサイズが調整される。また、ある制御方法は、一部のメモリ領域のウェイ数を、実行時のパラメータ変数14の値に基づいて設定してもよい。これにより、当該一部のメモリ領域のサイズが動的に調整される。
【0031】
また、少なくとも1つのデータ変数は、ループの中で参照される配列変数であってもよく、パラメータ変数14は、ループの反復回数を制御する制御変数であってもよい。これにより、特に参照頻度の高いデータのキャッシュヒット率が向上する。
【0032】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
第2の実施の形態の情報処理装置100は、コンパイル前にソースコードを変換し、変換されたソースコードをコンパイルし、コンパイル済みのプログラムを実行する。ただし、ソースコード変換とコンパイルとプログラム実行とが、異なる情報処理装置によって行われてもよい。第2の実施の形態のソースコードは、例えば、科学技術計算などのHPC(High Performance Computing)用のソースコードである。
【0033】
情報処理装置100は、クライアント装置でもよいしサーバ装置でもよい。情報処理装置100が、コンピュータ、コンパイル装置またはキャッシュ設定装置と呼ばれてもよい。情報処理装置100は、第1の実施の形態の情報処理装置10に対応する。
【0034】
図2は、第2の実施の形態の情報処理装置のハードウェア例を示す図である。
情報処理装置100は、バスに接続されたCPU101、RAM102、HDD103、GPU104、入力インタフェース105、媒体リーダ106および通信インタフェース107を有する。CPU101は、第1の実施の形態の処理部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。
【0035】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、HDD103に記憶されたプログラムおよびデータをRAM102にロードし、プログラムを実行する。情報処理装置100は、複数のプロセッサを有してもよい。
【0036】
RAM102は、CPU101で実行されるプログラムおよびCPU101で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。情報処理装置100は、RAM以外の種類の揮発性メモリを有してもよい。
【0037】
HDD103は、オペレーティングシステム(OS:Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラムと、データとを記憶する不揮発性ストレージである。情報処理装置100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
【0038】
GPU104は、CPU101と連携して画像処理を行い、情報処理装置100に接続された表示装置111に画像を出力する。表示装置111は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイまたはプロジェクタである。情報処理装置100に、プリンタなどの他の種類の出力デバイスが接続されてもよい。
【0039】
また、GPU104は、GPGPU(General Purpose Computing on Graphics Processing Unit)として使用されてもよい。GPU104は、CPU101からの指示に応じてプログラムを実行し得る。情報処理装置100は、RAM102以外の揮発性半導体メモリをGPUメモリとして有してもよい。
【0040】
入力インタフェース105は、情報処理装置100に接続された入力デバイス112から入力信号を受け付ける。入力デバイス112は、例えば、マウス、タッチパネルまたはキーボードである。情報処理装置100に複数の入力デバイスが接続されてもよい。
【0041】
媒体リーダ106は、記録媒体113に記録されたプログラムおよびデータを読み取る読み取り装置である。記録媒体113は、例えば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD(Compact Disc)およびDVD(Digital Versatile Disc)が含まれる。媒体リーダ106は、記録媒体113から読み取られたプログラムおよびデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、CPU101によって実行されることがある。
【0042】
記録媒体113は、可搬型記録媒体であってもよい。記録媒体113は、プログラムおよびデータの配布に用いられることがある。また、記録媒体113およびHDD103が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
【0043】
通信インタフェース107は、ネットワーク114を介して他の情報処理装置と通信する。通信インタフェース107は、スイッチやルータなどの有線通信装置に接続される有線通信インタフェースでもよいし、基地局やアクセスポイントなどの無線通信装置に接続される無線通信インタフェースでもよい。
【0044】
図3は、CPUの構造例を示すブロック図である。
CPUは、CPUコア121a,121b,121c,121dなどの複数のCPUコアと、キャッシュ制御部122と、キャッシュメモリ123とを有する。このCPUは、情報処理装置100が有するCPU101であってもよいし、情報処理装置100以外の他の情報処理装置が有するCPUであってもよい。
【0045】
複数のCPUコアは、キャッシュメモリ123を共有する。例えば、13個のCPUコアがキャッシュメモリ123を共有する。キャッシュ制御部122は、RAMからキャッシュメモリ123へのデータのロードや、キャッシュメモリ123からのデータの削除を制御する。データのロードや削除は、CPUコアからのデータの要求に応じて行われる。キャッシュメモリ123は、RAMにあるデータの一部のコピーを記憶する。キャッシュメモリ123は、例えば、L2(Level 2)キャッシュメモリである。
【0046】
キャッシュメモリ123は、セットアソシアティブ方式のキャッシュメモリである。キャッシュメモリ123は、複数のラインを含む。ラインは、セットと呼ばれることがある。例えば、キャッシュメモリ123は、2048個のラインを含む。ロードすべきデータのメモリアドレスから、複数のラインのうちの何れか1つのラインが一意に選択される。
【0047】
各ラインは、ウェイ123a,123b,123cなどの複数のウェイによって識別される複数のブロックを含む。例えば、キャッシュメモリ123は、16個のウェイを含む。この場合、各ラインは16個のブロックを含む。CPUコアから要求されたデータは、そのデータのメモリアドレスに対応するラインの中で、何れか1つの空いているブロックに記憶される。空いているブロックが無い場合、LRU(Least Recently Used)などの置換アルゴリズムに従って、何れか1つのブロックからデータが削除される。
【0048】
各ブロックのサイズは、例えば、256バイトである。一例として、キャッシュメモリ123のサイズは、256バイト×2048ライン×16ウェイ=8Mバイトである。この場合、キャッシュメモリ123は、256バイト×2048ライン=524288バイトのウェイを、16個有しているとみなすこともできる。
【0049】
このCPUは、セクタキャッシュ機能を有する。キャッシュ制御部122は、CPUコアで実行中のプログラムからの指示に応じて、キャッシュメモリ123に含まれる複数のウェイを、セクタ0とセクタ1とに分割する。セクタ1のウェイ数は、プログラムから指定される。セクタ1は、プログラムから指定された特定のアドレス範囲に属するデータのみを記憶する。セクタ0は、他のデータを記憶する。よって、特定のアドレス範囲に属するデータが、キャッシュメモリ123から削除されにくくなる。
【0050】
次に、セクタキャッシュを利用するプログラムのソースコードについて説明する。
図4は、ソースコードへのセクタ利用命令の挿入例を示す図である。
情報処理装置100は、情報処理装置100のCPUまたは他の情報処理装置のCPUをターゲットとして、ソースコードをコンパイルする。このとき、情報処理装置100は、ターゲットCPUでの実行効率が向上するように、コンパイル前に、ソースコードを解析して最適化指示命令を付加する。最適化指示命令の付加は、プリプロセッサによって行われてもよい。第2の実施の形態では、最適化指示命令として、前述のセクタキャッシュを利用するためのセクタ利用命令が付加される。
【0051】
第2の実施の形態のソースコードは、例えば、HPC(High Performance Computing)用のソースコードである。HPC用ソースコードは、実行頻度が高いプログラム範囲であるホットスポットが絞られており、計算時間が特に長いループであるカーネルループをもつ。カーネルループは、大きいサイズの配列データを参照することがある。そこで、情報処理装置100は、ソースコードに含まれるカーネルループを分析し、セクタキャッシュを利用してカーネルループの実行効率を改善させる。
【0052】
ソースコード141は、セクタ利用命令を含まないソースコードである。ソースコード142は、セクタ利用命令を含むソースコードである。例えば、コンパイル前に、ソースコード141がソースコード142に変換される。
【0053】
ソースコード141は、実行時に値が決まるパラメータM,Nを含む。また、ソースコード141は、配列A,Bを含む。配列Aは、サイズがNの一次元配列である。配列Bは、サイズがN×Mの二次元配列である。また、ソースコード141は、二重ループを含む。外側ループは、M回繰り返される。内側ループは、N回繰り返される。
【0054】
外側ループの中かつ内側ループの外で、文S1が実行される。文S1は、要素A[0]を初期化する代入文である。内側ループ中で、文S2が実行される。文S2は、要素A[j]と要素B[j][i]とに基づいて要素A[j]を更新する代入文である。iは外側ループのループ変数であり、jは内側ループのループ変数である。よって、配列A,Bの参照回数は、パラメータM,Nに依存する。
【0055】
ソースコード142は、ソースコード141の前後にセクタ利用命令が付加されたものに相当する。ここでは、配列Aの参照回数が多く、配列Aのキャッシュミスを減らしたいと仮定する。ソースコード142は、二重ループの実行直前に、ウェイ数が14のセクタ1を設定し、セクタ1に配列Aを割り当てることを指示する。また、ソースコード142は、二重ループの実行直後に、セクタ1を解除することを指示する。
【0056】
これにより、配列Aの要素はセクタ1に記憶され、配列Bの要素などの他のデータはセクタ0に記憶される。これにより、配列Aの要素が配列Bの参照によってキャッシュメモリから追い出されることが抑制され、配列Aのキャッシュミスが減少する。
【0057】
しかし、上記のように、配列A,Bの参照回数は、実行時に値が決まるパラメータM,Nに依存する。このため、固定的なセクタ利用命令では、プログラムの実行効率が実際に向上するとは限らない。セクタ1のウェイ数やセクタ1に割り当てる配列が不適切であると、セクタ1のサイズが過大または過小であるために、かえってセクタ0側またはセクタ1側のキャッシュミスが著しく増加するおそれがある。
【0058】
また、セクタキャッシュの利用の有無、セクタ1のウェイ数、セクタ1に割り当てる配列などのキャッシュ利用方法をユーザに検討させることは、ユーザの負担が大きい。そこで、第2の実施の形態の情報処理装置100は、パラメータの値によってキャッシュ利用方法を場合分けし、実行時のパラメータの値に応じて適切なキャッシュ利用方法が自動的に選択されるようにセクタ利用命令を生成する。
【0059】
図5は、セクタキャッシュを動的に制御するセクタ利用命令の例を示す図である。
ソースコード143は、セクタ利用命令を含むソースコードの例である。コンパイル前に、ソースコード141がソースコード143に変換される。ソースコード143は、ソースコード141の前後にセクタ利用命令が付加されたものに相当する。
【0060】
ソースコード143は、二重ループの実行直前に、パラメータM,Nの値が一定条件を満たすか判定する。一定条件を満たす場合、ソースコード143は、配列Aのサイズに応じて、16を上限としてウェイ数を決定する。そして、ソースコード143は、決定したウェイ数のセクタ1を設定し、セクタ1に配列Aを割り当てることを指示する。また、ソースコード143は、二重ループの実行直後に、パラメータM,Nの値が一定条件を満たすか判定する。一定条件を満たす場合、ソースコード143は、セクタ1を解除することを指示する。一定条件を満たさない場合、セクタキャッシュは利用されない。
【0061】
これにより、参照回数が多い配列がある場合のみ、セクタキャッシュが利用される。また、参照回数が多い配列のみ、セクタ1に割り当てられる。また、セクタ1に割り当てられた配列の実行時のサイズに応じて、セクタ1のウェイ数が決定される。よって、セクタキャッシュが効率的に利用され、キャッシュミスが減少する。
【0062】
図6は、セクタキャッシュ利用の流れの例を示す図である。
情報処理装置100は、ソースコード161を、ソースコード変換166を通じてソースコード162に変換する。ソースコード162は、ソースコード161に対し、セクタキャッシュの利用方法を規定した最適化指示命令が付加されたものである。情報処理装置100は、ソースコード162を、コンパイル167を通じてオブジェクトコード163に変換する。情報処理装置100は、オブジェクトコード163と、境界値ライブラリ164と、パラメータ値165とを用いて、プログラム実行168を行う。
【0063】
境界値ライブラリ164は、オブジェクトコード163を実行するCPUの種類を判定し、CPUの種類に応じた境界値を出力するライブラリプログラムである。CPUの種類は、例えば、CPUの世代番号である。境界値は、配列の参照頻度に関する閾値であり、セクタ1を利用するための条件に用いられる。
【0064】
パラメータ値165は、ソースコード161に規定されたパラメータの実行時の値である。パラメータ値165は、オブジェクトコード163の外部から与えられることもあるし、オブジェクトコード163の中で算出されることもある。ただし、パラメータによっては、コンパイル167の中で値が静的に1つに決まることもある。プログラム実行168は、境界値ライブラリ164が出力する境界値とパラメータ値165とに基づいて、キャッシュ利用方法を動的に選択する。
【0065】
次に、ソースコード141とは別のソースコードの例を用いて、セクタ利用命令を生成するソースコード変換166の手順を説明する。
図7は、ソースコードからのSCoPテキストの生成例を示す図である。
【0066】
ソースコード144は、セクタ利用命令を含まないソースコードである。ソースコード144は、実行時に値が決まるパラメータM,N,Pを含む。また、ソースコード144は、配列A,B,C,Dを含む。配列Aは、サイズがNの一次元配列である。配列B,C,Dは、サイズがN×Mの二次元配列である。また、ソースコード144は、二重ループを含む。外側ループは、M回繰り返される。内側ループは、N回繰り返される。
【0067】
外側ループの中かつ内側ループの外で、文S1が実行される。文S1は、要素A[0]を初期化する代入文である。内側ループ中で、文S2,S3が実行される。文S2は、要素A[j]と要素B[j][i]とに基づいて要素A[j]を更新する代入文である。iは外側ループのループ変数であり、jは内側ループのループ変数である。
【0068】
文S3は、要素C[j/2][i]と要素D[j/P][i]とに基づいて要素C[j/2][i]を更新する代入文である。C[j/2][i]は、配列CがもつN個の行のうち1/2部分の行のみを参照することを示す。D[j/P][i]は、配列DがもつN個の行のうち、1/Pの部分の行のみを参照することを示す。
【0069】
情報処理装置100は、ソースコード144を解析し、SCoP(Static Control Parts of Program)テキスト145を生成する。SCoPテキスト145は、定数や演算子などの具体的な計算手順を省略し、変数定義や変数参照やプログラム制御構造(ループ構造など)を表現する。SCoPテキスト145は、パラメータM,N,Pおよび配列A,B,C,Dの定義を示す。また、SCoPテキスト145は、二重ループと、文S1,S2,S3における変数参照とを示す。なお、情報処理装置100は、SCoPテキスト145に相当する情報を、他の方法を用いて抽出してもよい。
【0070】
図8は、ソースコード変換で生成されるテーブルの例を示す図である。
情報処理装置100は、SCoPテキスト145から実行回数テーブル151を生成する。実行回数テーブル151は、複数の文それぞれの実行回数を示す。文S1は、外側ループに含まれ内側ループに含まれない。よって、文S1の実行回数はMである。文S2,S3は、内側ループに含まれる。よって、文S2,S3の実行回数はM×Nである。
【0071】
次に、情報処理装置100は、SCoPテキスト145から参照範囲テーブル152を生成する。参照範囲テーブル152は、参照位置と配列と参照範囲とを対応付ける。参照位置は、文を識別する文IDと、文の中で左から何番目の配列参照であるかを示す序数とによって特定される。参照範囲は、配列の中で参照される要素の範囲を示す。
【0072】
文S1の配列Aについては、要素A[0]のみが参照される。文S2の左辺の配列Aについては、要素A[0]から要素A[N-1]までが参照される。文S2の右辺の配列Aについては、要素A[0]から要素A[N-1]までが参照される。文S2の配列Bについては、要素B[0][0]から要素B[N-1][M-1]までが参照される。
【0073】
文S3の左辺の配列Cについては、要素C[0][0]から要素C[N-1][M-1]までのうち、第1添字が偶数である要素が参照される。文S3の右辺の配列Cについては、要素C[0][0]から要素C[N-1][M-1]までのうち、1/2部分の要素が参照される。文S3の配列Dについては、要素D[0][0]から要素D[N-1][M-1]までのうち、1/P部分の要素が参照される。
【0074】
図9は、ソースコード変換で生成されるテーブルの例を示す図(続き1)である。
次に、情報処理装置100は、実行回数テーブル151および参照範囲テーブル152から、参照回数テーブル153を生成する。参照回数テーブル153は、複数の配列それぞれの参照範囲と参照回数とを対応付ける。
【0075】
配列Aの参照範囲は、要素A[0]と、要素A[1]から要素A[N-1]である。要素A[0]の参照回数は、3×Mである。要素A[1]から要素A[N-1]の参照回数は、合計で2×M×(N-1)である。配列Bの参照範囲は、要素B[0][0]から要素B[N-1][M-1]であり、その参照回数は合計でM×Nである。
【0076】
配列Cの参照範囲は、要素C[0][0]から要素C[N-1][M-1]のうち、第1添字が偶数のものであり、その参照回数は合計で2×M×Nである。配列Dの参照範囲は、要素D[0][0]から要素D[N-1][M-1]のうち、第1添字がPで割り切れるのものであり、その参照回数は合計でM×Nである。
【0077】
次に、情報処理装置100は、参照回数テーブル153から参照密度テーブル154を生成する。参照密度テーブル154は、複数の配列それぞれの参照密度を示す。参照密度は、同じ要素が繰り返し参照される程度を示す指標である。一例として、第2の実施の形態の参照密度は、1回以上参照される参照要素の数に対する合計参照回数の比であり、参照要素1つ当たりの平均参照回数を示す。
【0078】
配列Aの合計参照回数は、要素A[0]の参照回数3×Mと他の要素の参照回数2×M×(N-1)の和であり、M×(2×N+1)である。1回以上参照される配列Aの要素はN個ある。よって、配列Aの参照密度は(M×(2×N+1))/Nである。配列Bの合計参照回数はM×Nであり、配列Bの参照要素はM×N個ある。よって、配列Bの参照密度は1である。配列Cの参照密度は、数式(1)に示すように概ね4である。配列Dの参照密度は、数式(2)に示すように概ねPである。
【0079】
【0080】
【0081】
次に、情報処理装置100は、参照密度テーブル154から利用条件テーブル155を生成する。利用条件テーブル155は、複数の配列それぞれについて、セクタ0を利用するための利用条件とセクタ1を利用するための利用条件とを示す。セクタ0の利用条件は、参照密度が境界値(BOUNDARY)未満であることである。セクタ1の利用条件は、参照密度が境界値以上であることである。
【0082】
配列Aについては、セクタ0の利用条件は(M×(2×N+1))/Nが境界値未満であることであり、セクタ1の利用条件は(M×(2×N+1))/Nが境界値以上であることである。配列B,Cについては、参照密度が十分に小さく常に境界値未満であることが想定される。よって、配列B,Cについては、セクタ0の利用条件は常に真であり、セクタ1の利用条件は常に偽である。
【0083】
なお、HPC用プログラムでは、ループの繰り返し回数が数十万回から数百万回に及ぶことが多いため、境界値は配列B,Cの参照密度よりも十分に大きい。配列Dについては、セクタ0の利用条件はPが境界値未満であることであり、セクタ1の利用条件はPが境界値以上であることである。
【0084】
図10は、ソースコード変換で生成されるテーブルの例を示す図(続き2)である。
次に、情報処理装置100は、利用条件テーブル155から状況テーブル156を生成する。状況テーブル156は、パラメータM,N,Pの値で場合分けされた複数の状況を示す。状況テーブル156は、状況を識別する状況IDと、セクタ1に割り当てられる配列と、その状況が成立するためのパラメータM,N,Pの値の条件とを対応付ける。
【0085】
情報処理装置100は、利用条件テーブル155の中から、セクタ1の利用条件が真になる可能性がある配列A,Bを選択する。情報処理装置100は、配列A,Bのべき集合を算出することで、状況X1,X2,X3,X4を生成する。
【0086】
状況X1は、配列A,Dの両方についてセクタ1の利用条件が真になる状況である。この場合、配列A,Dがセクタ1に割り当てられる。状況X2は、配列A,Dのうち配列Aのみについてセクタ1の利用条件が真になる状況である。この場合、配列Aがセクタ1に割り当てられる。状況X3は、配列A,Dのうち配列Dのみについてセクタ1の利用条件が真になる状況である。この場合、配列Dがセクタ1に割り当てられる。状況X4は、状況X1,X2,X3が成立しない状況である。この場合、セクタ1は利用されない。
【0087】
次に、情報処理装置100は、参照回数テーブル153および状況テーブル156から、ウェイ数テーブル157を生成する。ウェイ数テーブル157は、状況テーブル156が示す各状況のもとで、セクタ1に割り当てられるウェイ数を示す。
図10の例では、配列A,Dの各要素のサイズは8バイトである。
【0088】
情報処理装置100は、各状況について、セクタ1に割り当てられる配列の中の参照要素の合計サイズを算出する。情報処理装置100は、合計サイズをウェイ1つ当たりのキャッシュメモリ容量で割ることで、全ての参照要素を記憶するためのウェイ数を算出する。ただし、ここで算出されたウェイ数が、キャッシュメモリが有するウェイ数を超える場合、キャッシュメモリが有するウェイ数を上限とする。
【0089】
図11は、変換後のソースコードの例を示す図である。
情報処理装置100は、状況テーブル156およびウェイ数テーブル157を用いて、ソースコード144にセクタ利用命令を付加する。ソースコード146は、セクタ利用命令が付加されたソースコードである。
【0090】
ソースコード146は、境界値ライブラリを呼び出して境界値を取得する。また、ソースコード146は、実行時におけるパラメータM,N,Pの値から、配列Aの参照要素の合計サイズと配列Dの参照要素の合計サイズとを算出する。
【0091】
ソースコード146は、取得した境界値と実行時におけるパラメータM,N,Pの値とから、状況X1の条件が満たされるか判断する。状況X1の条件が満たされる場合、ソースコード146は、配列A,Dの参照要素の合計サイズからセクタ1のウェイ数を決定し、配列A,Dをセクタ1に割り当てる。
【0092】
状況X1の条件が満たされない場合、ソースコード146は、状況X2の条件が満たされるか判断する。状況X2の条件が満たされる場合、ソースコード146は、配列Aの参照要素の合計サイズからセクタ1のウェイ数を決定し、配列Aをセクタ1に割り当てる。状況X2の条件が満たされない場合、ソースコード146は、状況X3の条件が満たされるか判断する。状況X3の条件が満たされる場合、ソースコード146は、配列Dの参照要素の合計サイズからセクタ1のウェイ数を決定し、配列Dをセクタ1に割り当てる。
【0093】
状況X3の条件が満たされない場合、ソースコード146は、セクタキャッシュの設定を行わない。二重ループの後、ソースコード146は、状況X1,X2,X3の条件の何れかが満たされるか判断する。状況X1,X2,X3の条件の何れかが満たされる場合、ソースコード146は、セクタキャッシュの設定を解除する。このようにして、実行時のパラメータM,N,Pの値に応じて動的にセクタキャッシュが設定される。
【0094】
次に、情報処理装置100の機能および処理手順について説明する。
図12は、情報処理装置の機能例を示すブロック図である。
情報処理装置100は、ソースコード記憶部131、オブジェクトコード記憶部132、ライブラリ記憶部133、ソースコード変換部134、コンパイラ135およびプログラム実行部136を有する。ソースコード記憶部131、オブジェクトコード記憶部132およびライブラリ記憶部133は、例えば、RAM102またはHDD103を用いて実装される。ソースコード変換部134、コンパイラ135およびプログラム実行部136は、例えば、CPU101およびプログラムを用いて実装される。
【0095】
ソースコード記憶部131は、ユーザが作成したソースコードを記憶する。ソースコードは、C言語などの一定の高水準プログラミング言語で記述されている。オブジェクトコード記憶部132は、コンパイル済みのオブジェクトコードを記憶する。オブジェクトコードは、ターゲットCPUの機械語で記述されている。
【0096】
ライブラリ記憶部133は、境界値ライブラリを記憶する。境界値ライブラリは、オブジェクトコードから呼び出される。境界値ライブラリは、オブジェクトコードを実行するCPUの種類を判定し、CPUの種類に応じた境界値を出力する。
【0097】
ソースコード変換部134は、ソースコード記憶部131からソースコードを読み出し、ソースコードに含まれるカーネルループを分析する。ソースコード変換部134は、キャッシュメモリを効率的に利用するためのセクタ利用命令を生成し、セクタ利用命令を付加したソースコードをコンパイラ135に出力する。
【0098】
コンパイラ135は、ソースコード変換部134から受け付けるソースコードをコンパイルする。コンパイラ135は、字句解析や構文解析や意味解析を通じてソースコードを中間コードに変換し、コンパイラ最適化によって中間コードを最適化し、中間コードをオブジェクトコードに変換する。コンパイラ135は、生成されたオブジェクトコードをオブジェクトコード記憶部132に保存する。
【0099】
プログラム実行部136は、オブジェクトコード記憶部132からオブジェクトコードを読み出し、読み出したオブジェクトコードを実行する。このとき、プログラム実行部136は、ライブラリ記憶部133に記憶された境界値ライブラリも使用する。
【0100】
図13は、ソースコード変換の手順例を示すフローチャートである。
(S10)ソースコード変換部134は、ソースコードからSCoP表現を生成する。
(S11)ソースコード変換部134は、SCoP表現のテキストから、配列集合、パラメータ集合および文集合を抽出する。
【0101】
(S12)ソースコード変換部134は、SCoP表現のテキストから文毎の実行回数を算出し、実行回数テーブル151を生成する。
(S13)ソースコード変換部134は、SCoP表現のテキストから参照位置毎の配列参照範囲を算出し、参照範囲テーブル152を生成する。
【0102】
(S14)ソースコード変換部134は、実行回数テーブル151と参照範囲テーブル152とから配列要素毎の参照回数を算出し、参照回数テーブル153を生成する。
(S15)ソースコード変換部134は、参照回数テーブル153から配列毎の参照密度を算出し、参照密度テーブル154を生成する。
【0103】
(S16)ソースコード変換部134は、参照密度テーブル154から配列毎のセクタ1利用条件を判定し、利用条件テーブル155を生成する。セクタ1利用条件は、参照密度が境界値以上になるためのパラメータ値の条件である。
【0104】
(S17)ソースコード変換部134は、利用条件テーブル155から、セクタ1利用条件が満たされる可能性がある配列のべき集合を算出することで、複数の状況を特定する。ソースコード変換部134は、状況毎のセクタ1利用配列とパラメータ値の条件とを決定し、状況テーブル156を生成する。
【0105】
(S18)ソースコード変換部134は、参照回数テーブル153および状況テーブル156から状況毎のセクタ1サイズを算出し、ウェイ数テーブル157を生成する。セクタ1サイズは、セクタ1利用配列の合計サイズから算出される。セクタ1サイズは、パラメータ変数を含む式で表現されることがある。
【0106】
(S19)ソースコード変換部134は、状況テーブル156およびウェイ数テーブル157から、実行時のパラメータ値に応じて条件分岐するセクタ利用命令を生成する。ソースコード変換部134は、ソースコードにセクタ利用命令を挿入して出力する。ソースコード変換部134は、変換されたソースコードを不揮発性ストレージに保存してもよいし、表示装置111に表示してもよいし、他の情報処理装置に送信してもよい。
【0107】
以上説明したように、第2の実施の形態の情報処理装置100は、ソースコードを解析して、セクタキャッシュを利用するための最適化指示命令をソースコードに付加する。これにより、ユーザが手作業で最適化指示命令を記述する場合と比べて、ユーザの負担が軽減される。また、情報処理装置100は、セクタキャッシュの利用の有無、セクタ1に割り当てる配列およびセクタ1のウェイ数を、自動的に調整する。これにより、キャッシュメモリが効率的に利用され、キャッシュミスが減少する。
【0108】
また、情報処理装置100は、実行時のパラメータ変数の値に応じてセクタキャッシュ利用方法が自動的に選択されるように、最適化指示命令を生成する。これにより、静的に決定された1つのセクタキャッシュ利用方法のみを実行する場合と比べて、様々なパラメータ値のもとでキャッシュメモリが効率的に利用される。
【0109】
また、情報処理装置100は、プログラムを実行するCPUの種類に応じた境界値を用いてセクタキャッシュ利用方法を選択するように、最適化指示命令を生成する。これにより、様々なCPUのもとでキャッシュメモリが効率的に利用される。また、情報処理装置100は、参照密度が境界値以上となる配列をセクタ1に割り当てる。これにより、参照回数が多い配列要素のキャッシュミスが減少する。
【符号の説明】
【0110】
10 情報処理装置
11 記憶部
12 処理部
13,19 プログラム
14 パラメータ変数
15a,15b データ変数
16 状況情報
17a,17b,17c 条件
18a,18b,18c 制御方法