(57)【要約】【課題】  キャッシュメモリのヒット率を向上させることができるコンパイラ装置を提供する。【解決手段】  ソースプログラムに含まれる変数のうち、時間的に近いタイミングでアクセスされる変数のグループが３つあったとする（変数グループＡ〜Ｃ）。コンパイラ装置では、これら３つの変数グループがキャッシュメモリ３に書込みされる際には、異なるセット番号のブロックに書き込まれるような命令を生成する。例えば、変数グループＡ、ＢおよびＣをキャッシュメモリ３のセット０、１および１５のブロックにそれぞれ配置するものとすると、変数グループＡ、ＢおよびＣは、キャッシュメモリ３に書き込まれた場合にセット０、１および１５のブロックに書き込まれるようなメインメモリ２の記憶領域に記憶される。【選択図】      図４
2005122481.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリを備えるコンピュータをターゲットとし、ソースプログラムをオブジェクトプログラムに変換するコンパイラ装置であって、
ソースプログラムに含まれるオブジェクトをグループ分けするためのグループ分け情報を解析し、当該オブジェクトをグループ分けするグループ分け手段と、
前記グループ分け手段によるグループ分け結果に基づいて、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のブロックに配置されないようなオブジェクトプログラムを作成するオブジェクトプログラム作成手段とを備える
ことを特徴とするコンパイラ装置。
【請求項２】
前記グループ分け手段は、前記ソースプログラムに含まれるコンパイラ装置に対する指示を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
ことを特徴とする請求項１に記載のコンパイラ装置。
【請求項３】
前記指示は、指定されたオブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けするプラグマ指令であり、
前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けする
ことを特徴とする請求項２に記載のコンパイラ装置。
【請求項４】
前記指示は、指定されたオブジェクトを前記キャッシュメモリの指定されたセット番号のブロックに配置させるプラグマ指令であり、
前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、指定された前記セット番号ごとに前記オブジェクトをグループ分けし、
前記オブジェクトプログラム作成手段は、前記グループに属するオブジェクトが前記キャッシュメモリの前記プラグマ指令で指定された前記セット番号のブロックに配置されるようなオブジェクトプログラムを作成する
ことを特徴とする請求項２に記載のコンパイラ装置。
【請求項５】
前記指示は、指定されたオブジェクトを独立したセット番号のブロックに配置させ、かつ、当該ブロックを独占的に使用させるプラグマ指令であり、
前記グループ分け手段は、
前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクトを当該オブジェクトごとにグループ分けするグループ分け処理部と、
グループ分けされたグループごとに異なるセット番号を設定するセット番号設定部とを有し、
前記オブジェクトプログラム作成手段は、各グループに含まれるオブジェクトを前記キャッシュメモリの前記グループに対応するセット番号のブロックに配置し、かつ当該オブジェクトに当該ブロックを独占使用させるオブジェクトプログラムを作成する
ことを特徴とする請求項２に記載のコンパイラ装置。
【請求項６】
前記グループ分け手段は、前記ソースプログラムから生成される機械語命令列を実行した際に生成されるプロファイル情報を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
ことを特徴とする請求項１に記載のコンパイラ装置。
【請求項７】
前記プロファイル情報には、前記オブジェクトのアクセス頻度に関する情報が含まれ、
前記グループ分け手段は、前記アクセス頻度が所定のしきい値以上のオブジェクトをそれぞれ独立したグループに分ける
ことを特徴とする請求項６に記載のコンパイラ装置。
【請求項８】
前記プロファイル情報には、前記オブジェクトの生存区間に関する情報が含まれ、
前記グループ分け手段は、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
ことを特徴とする請求項６に記載のコンパイラ装置。
【請求項９】
前記グループ分け手段は、前記ソースプログラムに基づいて、前記ソースプログラムに含まれるオブジェクトの生存区間の重なりを解析し、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
ことを特徴とする請求項１に記載のコンパイラ装置。
【請求項１０】
請求項１〜９のいずれか１項に記載のコンパイラ装置を用いて生成された１つ以上のオブジェクトプログラムを結合し、実行形式の実行プログラムを作成するリンカ装置であって、
前記キャッシュメモリに配置される際のブロックのセット番号が確定しているオブジェクトに対しては、当該セット番号のブロックに前記オブジェクトが配置されるような前記コンピュータのメインメモリのアドレスを設定する第１のアドレス設定手段と、
前記キャッシュメモリに配置される際のブロックのセット番号が確定していないオブジェクトに対しては、前記セット番号が確定しているオブジェクトの当該セット番号以外のセット番号のブロックに、前記セット番号が確定していないオブジェクトが配置されるような前記メインメモリのアドレスを設定する第２のアドレス設定手段とを備える
ことを特徴とするリンカ装置。
【請求項１１】
キャッシュメモリを備えるコンピュータをターゲットとし、ソースプログラムをオブジェクトプログラムに変換するコンパイル方法であって、
ソースプログラムに含まれるオブジェクトをグループ分けするためのグループ分け情報を解析し、当該オブジェクトをグループ分けするグループ分けステップと、
前記グループ分けステップによるグループ分け結果に基づいて、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のブロックに配置されないようなオブジェクトプログラムを作成するオブジェクトプログラム作成ステップとを含む
ことを特徴とするコンパイル方法。
【請求項１２】
前記グループ分けステップでは、前記ソースプログラムに含まれるコンパイル方法に対する指示を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
ことを特徴とする請求項１１に記載のコンパイル方法。
【請求項１３】
前記指示は、指定されたオブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けするプラグマ指令であり、
前記グループ分けステップでは、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けする
ことを特徴とする請求項１２に記載のコンパイル方法。
【請求項１４】
前記指示は、指定されたオブジェクトを前記キャッシュメモリの指定されたセット番号のブロックに配置させるプラグマ指令であり、
前記グループ分けステップでは、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、指定された前記セット番号ごとに前記オブジェクトをグループ分けし、
前記オブジェクトプログラム作成ステップでは、前記グループに属するオブジェクトが前記キャッシュメモリの前記プラグマ指令で指定された前記セット番号のブロックに配置されるようなオブジェクトプログラムを作成する
ことを特徴とする請求項１２に記載のコンパイル方法。
【請求項１５】
前記指示は、指定されたオブジェクトを独立したセット番号のブロックに配置させ、かつ、当該ブロックを独占的に使用させるプラグマ指令であり、
前記グループ分けステップは、
前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクトを当該オブジェクトごとにグループ分けするグループ分け処理サブステップと、
グループ分けされたグループごとに異なるセット番号を設定するセット番号設定サブステップとを含み、
前記オブジェクトプログラム作成ステップでは、各グループに含まれるオブジェクトを前記キャッシュメモリの前記グループに対応するセット番号のブロックに配置し、かつ当該オブジェクトに当該ブロックを独占使用させるオブジェクトプログラムを作成する
ことを特徴とする請求項１２に記載のコンパイル方法。
【請求項１６】
前記グループ分けステップでは、前記ソースプログラムから生成される機械語命令列を実行した際に生成されるプロファイル情報を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けする
ことを特徴とする請求項１１に記載のコンパイル方法。
【請求項１７】
前記プロファイル情報には、前記オブジェクトのアクセス頻度に関する情報が含まれ、
前記グループ分けステップでは、前記アクセス頻度が所定のしきい値以上のオブジェクトをそれぞれ独立したグループに分ける
ことを特徴とする請求項１６に記載のコンパイル方法。
【請求項１８】
前記プロファイル情報には、前記オブジェクトの生存区間に関する情報が含まれ、
前記グループ分けステップでは、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
ことを特徴とする請求項１６に記載のコンパイル方法。
【請求項１９】
前記グループ分けステップでは、前記ソースプログラムに基づいて、前記ソースプログラムに含まれるオブジェクトの生存区間の重なりを解析し、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする
ことを特徴とする請求項１１に記載のコンパイル方法。
【請求項２０】
請求項１１〜１９のいずれか１項に記載のコンパイル方法を用いて生成された１つ以上のオブジェクトプログラムを結合し、実行形式の実行プログラムを作成するリンク方法であって、
前記キャッシュメモリに配置される際のブロックのセット番号が確定しているオブジェクトに対しては、当該セット番号のブロックに前記オブジェクトが配置されるような前記コンピュータのメインメモリのアドレスを設定する第１のアドレス設定ステップと、
前記キャッシュメモリに配置される際のブロックのセット番号が確定していないオブジェクトに対しては、前記セット番号が確定しているオブジェクトの当該セット番号以外のセット番号のブロックに、前記セット番号が確定していないオブジェクトが配置されるような前記メインメモリのアドレスを設定する第２のアドレス設定ステップとを含む
ことを特徴とするリンク方法。
【請求項２１】
コンピュータに請求項１１〜１９のいずれか１項に記載のコンパイル方法に含まれるステップを実行させる
ことを特徴とするプログラム。
【請求項２２】
コンピュータに請求項２０に記載のリンク方法に含まれるステップを実行させる
ことを特徴とするプログラム。
【請求項２３】
請求項２１または２２に記載のプログラムを記録した
ことを特徴とするコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ＋＋言語等の高級言語で記述されたソースプログラムを機械語で記述された実行プログラムに変換するコンパイラに関し、特に、キャッシュメモリを有するコンピュータ上で実行される実行プログラムに変換するコンパイラに関する。
【背景技術】
【０００２】
従来、キャッシュメモリを有するコンピュータ用のコンパイラは種々提案されている。例えば、時間的に近いタイミングでアクセスされるデータ群（例えば、生存区間が重なり合うデータ群）をメインメモリ上で連続して配置するコンパイラが知られている（例えば、特許文献１参照。）。このように時間的に近いタイミングでアクセスされるデータ群をメインメモリ上で連続配置することにより、これらのデータ群がキャッシュメモリの同一ブロック上に一度に配置される。このため、キャッシュメモリのヒット率を向上させることができる。
【特許文献１】特開平７−１２９４１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、時間的に近いタイミングでアクセスされるデータ群を同一ブロック上に配置されるようにメインメモリ上のアドレスを決定すると、当該データ群のサイズがブロックサイズよりも大きい場合には、データ群に含まれるすべてのデータを１回で同一ブロックに書き込むことができない。このため、データ群に含まれるデータ同士でキャッシュメモリの同一ブロックにおける競合を発生させ、キャッシュミスが頻出する。この問題は、１つのセットに対して１つのブロックのみが対応付けられているダイレクトマッピング方式のキャッシュメモリにおいて顕著である。
【０００４】
本発明は、上述の課題を解決するためになされたもので、同一ブロックにおける競合を回避し、キャッシュメモリのヒット率を向上させることができるコンパイラ装置を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、本発明に係るコンパイラ装置は、キャッシュメモリを備えるコンピュータをターゲットとし、ソースプログラムをオブジェクトプログラムに変換するコンパイラ装置であって、ソースプログラムに含まれるオブジェクトをグループ分けするためのグループ分け情報を解析し、当該オブジェクトをグループ分けするグループ分け手段と、前記グループ分け手段によるグループ分け結果に基づいて、異なるグループに属するオブジェクト同士が前記キャッシュメモリの同じセット番号のブロックに配置されないようなオブジェクトプログラムを作成するオブジェクトプログラム作成手段とを備える。
【０００６】
この構成によると、例えば、グループ分け情報に生存区間が重なり合うオブジェクトを別のグループとするための情報が含まれていれば、その情報に基づいて、生存区間の重なり合うオブジェクトはキャッシュメモリの異なるセット番号に配置されることになる。このため、プログラムを実行した際に、生存区間が重なり合うオブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じなくなる。よって、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。なお、特許請求の範囲および本明細書中では、「オブジェクト」とは変数および配列などのデータを示すものとする。
【０００７】
また、前記グループ分け手段は、前記ソースプログラムに含まれるコンパイラ装置に対する指示を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けするようにしてもよい。好ましくは、前記指示は、指定されたオブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けするプラグマ指令であり、前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクト群を前記キャッシュメモリのラインサイズごとにグループ分けする。
【０００８】
実行プログラムを実行した際、プラグマ指令に従いユーザが時間的に近いタイミングでアクセスされると考えるオブジェクトが、キャッシュメモリの異なるセット番号のブロックに配置される。このため、時間的に近いタイミングでアクセスされると考えられるオブジェクト同士でキャッシュメモリの同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。よって、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
【０００９】
また、前記指示は、指定されたオブジェクトを独立したセット番号のブロックに配置させ、かつ、当該ブロックを独占的に使用させるプラグマ指令であり、前記グループ分け手段は、前記ソースプログラムに含まれる前記プラグマ指令に基づいて、当該プラグマ指令で指定された前記オブジェクトを当該オブジェクトごとにグループ分けするグループ分け処理部と、グループ分けされたグループごとに異なるセット番号を設定するセット番号設定部とを有し、前記オブジェクトプログラム作成手段は、各グループに含まれるオブジェクトを前記キャッシュメモリの前記グループに対応するセット番号のブロックに配置し、かつ当該オブジェクトに当該ブロックを独占使用させるオブジェクトプログラムを作成するようにしてもよい。
【００１０】
プラグマ指令で指定されたオブジェクトにセット番号設定部で設定されたキャッシュのセット番号のブロックを独占させるようなオブジェクトプログラムが作成される。これにより、頻繁に使用されるオブジェクトにキャッシュメモリを独占使用させることができ、当該オブジェクトがキャッシュメモリから追い出されるのを防止し、高速に処理を実行させることが可能になる。
【００１１】
また、前記グループ分け手段は、前記ソースプログラムから生成される機械語命令列を実行した際に生成されるプロファイル情報を解析し、前記ソースプログラムに含まれるオブジェクトをグループ分けするようにしてもよい。好ましくは、前記プロファイル情報には、前記オブジェクトのアクセス頻度に関する情報が含まれ、前記グループ分け手段は、前記アクセス頻度が所定のしきい値以上のオブジェクトをそれぞれ独立したグループに分ける。
【００１２】
実行プログラムを実行した際、アクセス頻度の高いオブジェクトはそれぞれキャッシュメモリの異なるセット番号のブロックに配置される。このため、アクセス頻度の高いオブジェクトにキャッシュメモリのブロックを独占使用させることができ、頻繁に使用されるオブジェクトがキャッシュメモリから追い出されにくくすることにより、キャッシュミスを防止し、キャッシュメモリのヒット率を向上させることができる。
【００１３】
また、前記プロファイル情報には、前記オブジェクトの生存区間に関する情報が含まれ、前記グループ分け手段は、生存区間が重なり合うオブジェクトを異なるグループにグループ分けするようにしてもよい。
生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
【００１４】
さらに好ましくは、前記グループ分け手段は、前記ソースプログラムに基づいて、前記ソースプログラムに含まれるオブジェクトの生存区間の重なりを解析し、生存区間が重なり合うオブジェクトを異なるグループにグループ分けする。
生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
【００１５】
なお、本発明は、このような特徴的なオブジェクトプログラムを生成するコンパイラ装置として実現することができるだけでなく、コンパイラ装置の特徴的な手段をステップとするコンパイル方法として実現したり、当該コンパイラ装置としてコンピュータを機能させるためのプログラムとして実現したりすることもできる。そして、そのようなプログラムは、ＣＤ−ＲＯＭ等の記録媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
【発明の効果】
【００１６】
本発明によるとプログラム実行時にキャッシュメモリのヒット率を向上させることができる。
また、高速に処理を実行させることができる。
【発明を実施するための最良の形態】
【００１７】
（実施の形態１）
（ハードウェア構成）
図１は、本発明の実施の形態１に係るコンパイラシステムがターゲットとするコンピュータのハードウェア構成の一部を示すブロック図である。コンピュータ１０は、プロセッサ１と、メインメモリ２と、キャッシュメモリ３とを備えている。プロセッサ１およびメインメモリ２の構成は、通常のプロセッサ１およびメインメモリ２と同様であるため、その詳細な説明はここでは繰返さない。
【００１８】
図２は、キャッシュメモリ３のハードウェア構成を示すブロック図である。キャッシュメモリ３は、ダイレクトマッピング方式（１ウェイセットアソシアティブ方式）のキャッシュメモリであり、アドレスレジスタ２０と、デコーダ３０と、メモリ部３１と、比較器３２と、アンド回路３３と、制御部３８と、メモリＩ／Ｆ（インタフェース）部２１とを備えている。
【００１９】
アドレスレジスタ２０は、メインメモリ２へのアクセスアドレスを保持するレジスタである。このアクセスアドレスは３２ビットであるものとする。同図に示すように、アクセスアドレスは、最上位ビットから順に、２１ビットのタグアドレス、４ビットのセットインデックス（図中のＳＩ）およびその他の７ビットの値を含む。ここで、タグアドレスはメインメモリ２とキャッシュメモリ３のメモリ部３１との対応付けをするアドレスである。セットインデックス（ＳＩ）は、メモリ部３１のセット（ライン）を指定するアドレスである。
【００２０】
メモリ部３１は、セットインデックス（ＳＩ）のビット数が４ビットであるため、１６個のセット（ここでは、フルアソシアティブ方式であるため１６個のブロック）を有する。図３は、あるブロックにおけるビット構成を示す図である。同図に示すように、１つのブロックには、バリッドフラグＶ、２１ビットのタグ、１２８バイトのラインデータ、およびダーティフラグＤが含まれる。
【００２１】
バリッドフラグＶは、そのブロックが有効か否かを示す。タグは２１ビットのタグアドレスのコピーである。ラインデータは、アドレスレジスタ２０に保持されたアドレスを開始アドレスとするメインメモリ２中の１２８バイトデータのコピーである。ダーティフラグＤは、そのブロックに書き込みがあったか否か、すなわち当該ブロック中にキャッシュされたラインデータが、書き込みによりメインメモリ２中のデータと異なるためメインメモリ２に書き戻す必要があるか否かを示す。
【００２２】
ここで、タグアドレスはメモリ部３１にマッピングされるラインデータの領域（そのサイズは、セット数×ラインデータのサイズである）を示す。この領域のサイズは、タグアドレスよりも下位の１０ビットのアドレスで定まるサイズ、すなわち２ｋバイトである。また、セットインデックス（ＳＩ）は１６個のセットのうちの１つを指す。タグアドレスおよびセットインデックス（ＳＩ）で特定されるセットは、リプレースの単位である。ラインデータのサイズは、セットインデックス（ＳＩ）よりも下位のアドレスビットで定まるサイズ、すなわち１２８バイトである。１ワードを４バイトとすると、１ラインデータは３２ワードである。
【００２３】
図２に示されるデコーダ３０は、セットインデックス（ＳＩ）の４ビットをデコードし、メモリ部３１の１６セット中の１つのセットを選択する。
比較器３２は、アドレスレジスタ２０中のタグアドレスと、セットインデックス（ＳＩ）により選択されたセットに含まれるタグとが一致するか否かを比較する。
アンド回路３３は、バリッドフラグ（Ｖ）と比較器３２の比較結果とが一致するか否かを比較する。比較結果が１である場合は、アドレスレジスタ２０中のタグアドレスおよびセットインデックス（ＳＩ）に対応するラインデータが存在することを意味する。比較結果が０である場合は、ミスヒットしたことを意味する。
制御部３８は、キャッシュメモリ３の全体の制御を行う。
【００２４】
（データの配置方法の概略説明）
図４は、本実施の形態に係るコンパイラシステムによるソースプログラム中のデータの配置方法の概略を説明するための図である。図４（ａ）に示すように、ソースプログラムに含まれる変数のうち、時間的に近いタイミングでアクセスされる変数（オブジェクト）のグループが３つあったとする（変数グループＡ〜Ｃ）。ここで、１つの変数グループに含まれるデータサイズは、キャッシュメモリ３のラインデータのサイズ、すなわち１２８バイトであるものとする。コンパイラシステムでは、これら３つの変数グループがキャッシュメモリ３に書込みされる際には、異なるセット番号のブロックに書き込まれるような機械語命令を生成する。例えば、変数グループＡ、ＢおよびＣをキャッシュメモリ３のセット０、１および１５のブロックにそれぞれ配置するものとすると、図４（ｂ）に示されるように、変数グループＡ、ＢおよびＣは、キャッシュメモリ３に書き込まれた場合にセット０、１および１５のブロックに書き込まれるようなメインメモリ２の記憶領域に記憶される。このため、図４（ｃ）に示されるように、変数グループＡ、ＢおよびＣは、メインメモリ２からキャッシュメモリ３に書き込まれる際には、セット０、１および１５のブロックにそれぞれ書き込まれることとなる。
【００２５】
（コンパイラシステム）
図５は、本実施の形態に係るコンパイラシステムの構成を示す機能ブロック図である。コンパイラシステム４０は、ソースプログラム４４を、図１に示したコンピュータ１０で実行される機械語で記述された実行プログラム５８に変換するシステムであり、コンパイラ部４６と、アセンブラ部５０と、リンカ部５４と、シミュレータ部６０と、プロファイラ部６４とを備えている。各装置は、コンピュータ１０のプロセッサ１上で動作するプログラムとして実現可能である。ただし、コンパイラシステム４０は、コンピュータ１０をターゲットとし、それ以外のコンピュータで実行されるクロスコンパイラシステムであってもよい。
【００２６】
コンパイラ部４６は、Ｃ＋＋言語等の高級言語で記述されたソースプログラム４４と、キャッシュメモリ３に関するパラメータ情報（例えば、セット数や、ラインデータのサイズ等）からなるキャッシュパラメータ４２と、実行プログラム５８実行時の解析結果を示すプロファイルデータ６６とを入力として受け、それらのデータに基づいてソースプログラム４４をアセンブリ言語で記述されたアセンブラファイル４８に変換する。
【００２７】
アセンブラ部５０は、アセンブリ言語で記述されたアセンブラファイル４８を機械語に置き換えたオブジェクトファイル５２を作成する。
リンカ部５４は、１つ以上のオブジェクトファイル５２（図中では１つのオブジェクトファイル５２のみを記述）を結合して実行形式の実行プログラム５８を作成する。なお、リンカ部５４にはアドレス設定部５６が設けられており、時間的に近いタイミングでアクセスされるオブジェクト群（データ群または命令群）がキャッシュメモリ３の異なるセット番号のブロックに配置されるように、オブジェクト群が記憶されるメインメモリ２のアドレスが決定される。
【００２８】
シミュレータ部６０は、実行プログラム５８を仮想的に実行し、実行ログ６２を出力する。
プロファイラ部６４は、実行ログ６２を解析することにより、変数のアクセス頻度や、変数の生存区間など最適な実行プログラム５８を得るためのヒントとなるプロファイルデータ６６を作成する。
【００２９】
（コンパイラ部）
図６は、コンパイラ部４６の構成を示す機能ブロック図である。本実施の形態に係るコンパイラ部４６は、キャッシュパラメータ４２およびソースプログラム４４に基づいて、ソースプログラム４４をアセンブラファイル４８に変換する処理部であり、パーサー部７２と、アセンブラコード変換部７６とを備えている。
【００３０】
パーサー部７２は、コンパイルの対象となるソースプログラム４４に対して、予約語（キーワード）等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、プラグマ指令を解析するプラグマ解析部７４を有する。
なお、「プラグマ（又は、プラグマ指令）」とは、ソースプログラム４４中にユーザが任意に指定（配置）することができるコンパイラ部４６への指示であり、「#pragma」で始まる文字列である。
【００３１】
アセンブラコード変換部７６は、パーサー部７２から渡されたソースプログラム４４の各ステートメントを中間コードに変換した後、アセンブリ言語のコードに変換し、アセンブラファイル４８を出力する処理部であり、通常のコンパイラが備える変換機能に加えて、プラグマ解析部７４で解析されたプラグマに応じて指定されたオブジェクトがキャッシュメモリ３の適切なセット番号のブロックに配置されるようなアセンブラコードを作成する配置セット情報設定部７８を有する。
【００３２】
ここで、プラグマの種類としては、以下に示す３種類のプラグマが存在するものとする。
（１）#pragma  _overlap_access_object  a,b,c
（２）#pragma  _cache_set_number=n  a 
ただし、ｎはセット番号（０〜１５）
（３）#pragma  _cache_set_monopoly  a,b
【００３３】
（１）番目のプラグマは、オブジェクトａ，ｂおよびｃが時間的に近いタイミングでアクセスされることを示す。なお、オブジェクトの数は、１つ以上であればいくつであってもよい。このプラグマの意味については後述する。（２）番目のプラグマは、オブジェクトａをキャッシュメモリ３のｎ番目のセット番号のブロックに配置することを指定するためのものである。（３）番目のプラグマは、オブジェクトａおよびｂをキャッシュメモリ３の別のセット番号のブロックに配置するとともに、かつ、それらのブロックをオブジェクトａおよびｂに独占させる、すなわち、それらのブロックにはオブジェクトａおよびｂ以外のオブジェクトを配置させないことを指示するためのものである。
【００３４】
図７は、図６に示したプラグマ解析部７４および配置セット情報設定部７８が実行する処理のフローチャートである。
プラグマ解析部７４は、ソースプログラム４４に記述されたプラグマの種類を解析する（Ｓ１）。プラグマが上述の（１）番目のプラグマの場合には（Ｓ１で_overlap_access_object）、「#pragma  _overlap_access_object」の次に指定されたオブジェクト群をキャッシュメモリ３の１セットのラインデータのサイズ（すなわち１２８バイト）以下となるように、グループ分けを行なう（Ｓ２）。以下にグループ分け処理（Ｓ２）をより具体的に説明する。
【００３５】
図８は、（１）番目のプラグマが記述されたソースプログラムの一例を示す図である。「#pragma  _overlap_access_object  a,b,c」というプラグマ指定により、整数型配列ａ［３２］、ｂ［３２］およびｃ［３２］が時間的に近いタイミングでアクセスされることがユーザにより明示的に示されている。配置セット情報設定部７８は、このプラグマの指示により、上述のグループ分け処理（Ｓ２）を行なう。すなわち、配列ａ［３２］、ｂ［３２］およびｃ［３２］を１つのオブジェクト群とした場合に、これらを１２８バイトごとにグループ分けする。整数型変数は４バイトであるものとすると、配列ａ［３２］、ｂ［３２］およびｃ［３２］はそれぞれ１２８バイトである。このため、このオブジェクト群は、図９に示されるような３つのグループ（グループｄａｔａ＿ａ、ｄａｔａ＿ｂおよびｄａｔａ＿ｃ）に分割され、グループｄａｔａ＿ａには配列ａ［３２］が含まれ、グループｄａｔａ＿ｂには配列ｂ［３２］が含まれ、グループｄａｔａ＿ｃには配列ｃ［３２］が含まれることとなる。
【００３６】
グループ分け処理（Ｓ２）の後、配置セット情報設定部７８は、それぞれのグループに異なるセット番号が付す（図７のＳ３）。例えば、グループｄａｔａ＿ａ、ｄａｔａ＿ｂおよびｄａｔａ＿ｃにはセット番号０、１および２がそれぞれ付されるものとする。
その後、配置セット情報設定部７８は、グループ番号設定処理（Ｓ３）で設定されたセット番号のキャッシュメモリ３のブロックにそのグループのオブジェクトが配置されるようなアセンブラコードを作成する（Ｓ４）。
【００３７】
図１０は、図８に示したソースコードより作成されたアセンブラコードの一例を示す図である。最初の３行は、グループｄａｔａ＿ａに含まれるオブジェクトがキャッシュメモリ３の０番目のセットに配置されるようなメインメモリ２の記憶領域に、当該オブジェクトを格納することを示しており、次の３行は、グループｄａｔａ＿ｂに含まれるオブジェクトがキャッシュメモリ３の１番目のセットに配置されるようなメインメモリ２の記憶領域に、当該オブジェクトを格納することを示しており、最後の３行はグループｄａｔａ＿ｃに含まれるオブジェクトがキャッシュメモリ３の２番目のセットに配置されるようなメインメモリ２の記憶領域に、当該オブジェクトを格納することを示している。
【００３８】
最初の３行について説明すると、１行目は、コマンド「ＳＥＣＴＩＯＮ」がグループの区切りであることを示しており、グループ名が「ｄａｔａ＿ａ」であることを示している。２行目は、３行目に示されるオブジェクトがキャッシュメモリ３の０番目のセットに配置されるようなメインメモリ２の記憶領域に、当該オブジェクトを格納することを示している。３行目は、そのオブジェクトを示しており、オブジェクトａ（配列ａ）のデータサイズが１２８バイトであることを示している。４行目以降についても同様である。
【００３９】
プラグマが上述の（２）番目のプラグマの場合には（Ｓ１で_cache_set_number）、プラグマの指定に従いオブジェクトのグループ分けを行なうとともに（Ｓ５）、グループにセット番号を設定する（Ｓ６）。例えば、図１１に示すような（２）番目のプラグマが記述されたソースプログラムの場合には、「#pragma  _cache_set_number=0  i」というプラグマ指定により配列ｉ［３２］にはキャッシュメモリ３のセット番号として「０」が設定される。「#pragma  _cache_set_number=1  j」および「#pragma  _cache_set_number=2  k」についても同様である。
【００４０】
その後、配置セット情報設定部７８は、グループ番号設定処理（Ｓ６）で設定されたセット番号のキャッシュメモリ３のブロックにそのグループのオブジェクトが配置されるようなアセンブラコードを作成する（Ｓ４）。
【００４１】
プラグマが上述の（３）番目のプラグマの場合には（Ｓ１で_cache_set_monopoly）、配置セット情報設定部７８は、プラグマにより指定された複数のオブジェクトをそれぞれ独立したグループとする（Ｓ７）。その後、各グループに異なるセット番号を設定する（Ｓ８）。例えば、図１２に示すような（３）番目のプラグマが記述されたソースプログラムの場合には、「#pragma  _cache_set_monopoly  x,y」というプラグマ指定により配列ｘ［３２］および配列ｙ［３２］にはキャッシュメモリ３の異なるセット番号が設定される。
【００４２】
その後、配置セット情報設定部７８は、グループ番号設定処理（Ｓ８）で設定されたセット番号のキャッシュメモリ３のブロックにそのグループのオブジェクトが配置されるようなアセンブラコードを作成する（Ｓ４）。なお、（３）番目のプラグマが指定された場合には、プラグマ指定されたオブジェクトにグループ番号設定処理（Ｓ７）で設定されたキャッシュのセット番号のブロックを独占させるようなアセンブラコードが作成される。これにより、頻繁に使用されるオブジェクトにキャッシュメモリ３を独占使用させることができ、当該オブジェクトがキャッシュメモリ３から追い出されるのを防止し、高速に処理を実行させることが可能になる。
【００４３】
以上の処理（Ｓ１〜Ｓ８）をすべてのプラグマについて実行し（ループＡ）、アセンブラコードを作成する。なお、同一のオブジェクトに対して、（２）番目のプラグマ「#pragma  _cache_set_number」と（３）番目のプラグマ「#pragma  _cache_set_monopoly」とを同時に設定することも可能である。
【００４４】
（リンカ部）
図１３は、図５に示したリンカ部５４のアドレス設定部５６が実行する処理のフローチャートである。図１４は、当該処理を説明するための図である。以下、図１３および図１４を参照しながら、リンカ部５４のアドレス設定部５６が実行する処理について説明する。
【００４５】
アドレス設定部５６は、１つ以上のオブジェクトファイル５２を読み込み、オブジェクトファイル５２に含まれるオブジェクトを、キャッシュメモリ３に配置するセット番号が確定しているオブジェクトと確定していないオブジェクトとに分割する（Ｓ１１）。例えば、１４（ａ）に示すようなセット番号が確定しているオブジェクトと、図１４（ｂ）に示すようなセット番号が未確定のオブジェクトとに分割される。
【００４６】
次に、アドレス設定部５６は、オブジェクトをメインメモリ２に割り当てる（Ｓ１２）。より詳細に説明すると、セット番号が確定しているオブジェクトを、キャッシュメモリ３のセット番号のブロックに配置されるようなメインメモリ２の領域に１つずつ配置していく。また、セット番号が未確定の領域を、オブジェクトに対してセット番号が設定されていない当該セット番号に対応するキャッシュメモリ３の領域に配置していく。この時点では、図１４（ｃ）に示すようにメインメモリ２の０ｘ９００００００００番地から０ｘ９００００ＦＦＦ番地までにオブジェクトが記憶されている。すなわち、図１４（ａ）に示した２つのセット番号４のオブジェクトについては、そのうちの１つのみが設定されることになる。
【００４７】
次に、アドレス設定部５６は、セット番号が確定しているオブジェクトをすべてメインメモリ２に配置したか否かを調べる（Ｓ１３）。すべて配置していれば（Ｓ１３でＹＥＳ）、処理を終了する。未配置のものがあれば（Ｓ１３でＮＯ）、上述のオブジェクト配置処理（Ｓ１２）と同様に、２つ目以降のオブジェクトについても同様にメインメモリ２に配置を行なっていく。その際、一度でもセット番号が確定しているオブジェクトを配置したセット番号に対応する領域は、空き領域として何も配置しないようにする（Ｓ１４）。これにより、図１４（ｃ）に示すように、未配置のセット番号４のオブジェクトがメモリに配置され、０ｘ９０００１０００番地以降のセット番号０、１および４に対応する領域は空き領域とされる。
【００４８】
以上説明したように、本実施の形態によると、実行プログラムを実行した際、プラグマの指定に従いユーザが時間的に近いタイミングでアクセスされると考えるオブジェクトが、キャッシュメモリ３の異なるセット番号のブロックに配置される。このため、時間的に近いタイミングでアクセスされると考えられるオブジェクト同士でキャッシュメモリの同一セット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。よって、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
【００４９】
（実施の形態２）
本発明の実施の形態２に係るコンパイラシステムがターゲットするコンピュータのハードウェア構成の一部は、図１〜図３に示したものと同様である。また、本実施の形態に係るコンパイラシステムの構成は、図５に示したものと同様である。このため、それらの詳細な説明はここでは繰返さない。
【００５０】
図１５は、本実施の形態に係るコンパイラ部４６の構成を示す機能ブロック図である。本実施の形態に係るコンパイラ部４６は、キャッシュパラメータ４２、ソースプログラム４４およびプロファイルデータ６６に基づいて、ソースプログラム４４をアセンブラファイル４８に変換する処理部であり、パーサー部８２と、アセンブラコード変換部８６とを備えている。
【００５１】
パーサー部８２は、コンパイルの対象となるソースプログラム４４に対して、予約語（キーワード）等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、プロファイルデータ６６を解析するプロファイルデータ解析部８４を有する。プロファイルデータ６６とは、実施の形態１で説明したように、オブジェクト（変数等）のアクセス頻度や、オブジェクトの生存区間など最適な実行プログラム５８を得るためのヒントとなる情報のことである。
【００５２】
アセンブラコード変換部８６は、パーサー部８２から渡されたソースプログラム４４の各ステートメントを中間コードに変換した後、アセンブリ言語のコードに変換し、アセンブラファイル４８を出力する処理部であり、通常のコンパイラが備える変換機能に加えて、プロファイルデータ解析部８４での解析結果に従い、オブジェクトがキャッシュメモリ３の適切なセット番号のブロックに配置されるようなアセンブラコードを作成する配置セット情報設定部８８を有する。
【００５３】
図１６は、図１５に示したプロファイルデータ解析部８４および配置セット情報設定部８８が実行する処理のフローチャートである。
プロファイルデータ解析部８４は、プロファイルデータ６６に記述されたプロファイル情報の種類を解析する（Ｓ２１）。プロファイルデータ６６に記述された情報がオブジェクトのアクセス頻度に関する情報である場合には（Ｓ２１でアクセス頻度情報）、配置セット情報設定部８８は、所定のしきい値以上のアクセス頻度を有するオブジェクトをそれぞれ独立したグループとする（Ｓ２２）。また、配置セット情報設定部８８は、当該しきい値未満のアクセス頻度を有するオブジェクトを１つのグループとする（Ｓ２３）。次に、配置セット情報設定部８８は、グループ分け処理（Ｓ２２およびＳ２３）で求められたグループに対して、キャッシュメモリ３のそれぞれ異なるセット番号を設定する（Ｓ２４）。その後、配置セット情報設定部８８は、セット番号設定処理（Ｓ２４）で設定されたセット番号のキャッシュメモリ３のブロックにそのグループのオブジェクトが配置されるようなメインメモリ２の領域に、当該オブジェクトを格納するアセンブラコードを作成する（Ｓ２５）。
【００５４】
次に、アクセス頻度情報に基づくアセンブラコード作成処理（Ｓ２２〜Ｓ２５）について具体例を挙げながらより詳細に説明する。図１７は、アクセス頻度情報に基づくアセンブラコード作成処理を説明するための図である。図１７（ａ）に示されるようなアクセス頻度を有するプロファイル情報が与えられたものとする。ここでは、アクセス頻度として、全オブジェクトのアクセス回数に対する各オブジェクトのアクセス回数の割合を用いることとするが、例えば、総アクセス回数や、単位時間当たりのアクセス回数をアクセス頻度としてもよい。図１７（ｂ）は、図１７（ａ）のグラフを数値化したものであり、オブジェクトａ〜ｅ（配列ａ［３２］〜ｅ［３２］）は、それぞれ７０％、２５％、２％、２％および１％のアクセス頻度を有することを示している。ここで、例えばしきい値を１０％と設定すると、図１７（ｃ）に示されるように１０％以上のアクセス頻度を有するオブジェクトａおよびｂがそれぞれグループＡおよびＢに分類され（図１６のＳ２２）、１０％未満のアクセス頻度を有するオブジェクトｃ〜ｅが１つのグループＣに分類される（図１６のＳ２３）。また、グループＡ〜Ｃに対してそれぞれセット番号０〜２が設定される（図１６のＳ２４）。最終的には、オブジェクトａがキャッシュメモリ３のセット番号０のブロックに、オブジェクトｂがキャッシュメモリ３のセット番号１のブロックに、オブジェクトｃ〜ｅがキャッシュメモリ３のセット番号２のブロックにそれぞれ配置されるようなメインメモリ２の領域に、オブジェクトａ〜ｅを格納するアセンブラコードが生成される（図１６のＳ２５）。
【００５５】
プロファイルデータ６６に記述された情報がオブジェクトの生存区間に関する情報である場合には（Ｓ２１で生存区間情報）、配置セット情報設定部８８は、オブジェクトの生存区間の重なりを調べる（Ｓ２６）。次に、配置セット情報設定部８８は、生存区間が重なり合いを有するオブジェクトが異なるグループとなるようなグループ分けを行なう（Ｓ２７）。その後、配置セット情報設定部８８は、グループ分け処理（Ｓ２６およびＳ２７）で求められたグループに対して、キャッシュメモリ３のそれぞれ異なるセット番号を設定する（Ｓ２８）。その後、配置セット情報設定部８８は、上述のアセンブラコード作成処理（Ｓ２５）を実行する。
【００５６】
次に、生存区間情報に基づくアセンブラコード作成処理（Ｓ２６〜Ｓ２８およびＳ２５）について具体例を挙げながらより詳細に説明する。図１８は、生存区間に関するプロファイルデータ６６の一例を示す図である。図１８には、５つのオブジェクトａ〜ｅに関する生存区間が示されており、例えば、１行目はオブジェクトａに関する生存区間を示しており、生存区間の開始タイミングを表すデータが「０ｘ８０００００１０」であり、生存区間の終了タイミングを表すデータが「０ｘ８００００１ｆｆ」である。２行目以降も同様である。
【００５７】
この生存区間に関する情報を図示すると図１９（ａ）のようになる。したがって、生存区間の重なりを、オブジェクトを節点とし、オブジェクト間の生存区間の重なりを枝で示した無向グラフで表すと、図１９（ｂ）および図１９（ｃ）のようになる。すなわち、オブジェクトａ，ｂおよびｄは相互に重なり合いを有し、オブジェクトｃおよびｅは相互に重なり合いを有することを示している（図１６のＳ２６）。
【００５８】
このような生存区間の重なりより、図２０に示されるようなグループ分けが行なわれる（図１６のＳ２７）。すなわち、相互に重なり合いを有するオブジェクトａ、ｂおよびｄが異なるグループＡ、ＢおよびＣにそれぞれ分類され、同様にオブジェクトｃおよびｅが異なるグループＢおよびＣにそれぞれ分類される。また、グループＡ〜Ｃに対してそれぞれセット番号０〜２が設定される（図１６のＳ２４）。最終的には、図２１に示すように、オブジェクトａがキャッシュメモリ３のセット番号０のブロックに、オブジェクトｂおよびｃがキャッシュメモリ３のセット番号１のブロックに、オブジェクトｄおよびｅがキャッシュメモリ３のセット番号２のブロックにそれぞれ配置されるようなメインメモリ２の領域に、オブジェクトａ〜ｅを格納するアセンブラコードが生成される（図１６のＳ２５）。なお、ここではオブジェクトｂおよびｃを同一グループとし、オブジェクトｃおよびｅを同一グループとしているが、それぞれ、別のグループにオブジェクトを配置してもよい。
【００５９】
以上説明したように本実施の形態によると、実行プログラムを実行した際、アクセス頻度の高いオブジェクトはそれぞれキャッシュメモリの異なるセット番号のブロックに配置される。また、アクセス頻度の低いオブジェクトはそれらとは別のセット番号のブロックに配置される。このため、アクセス頻度の高いオブジェクトにキャッシュメモリのブロックを独占使用させることができる。このため、頻繁に使用されるオブジェクトがキャッシュメモリから追い出されにくくなることにより、キャッシュミスを防止し、キャッシュメモリのヒット率を向上させることができる。
【００６０】
また、生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
【００６１】
（実施の形態３）
本発明の実施の形態３に係るコンパイラシステムがターゲットするコンピュータのハードウェア構成の一部は、図１〜図３に示したものと同様である。また、本実施の形態に係るコンパイラシステムの構成は、図５に示したものと同様である。このため、それらの詳細な説明はここでは繰返さない。
【００６２】
図２２は、本実施の形態に係るコンパイラ部４６の構成を示す機能ブロック図である。本実施の形態に係るコンパイラ部４６は、キャッシュパラメータ４２およびソースプログラム４４に基づいて、ソースプログラム４４をアセンブラファイル４８に変換する処理部であり、パーサー部９２と、アセンブラコード変換部８６とを備えている。
パーサー部９２は、コンパイルの対象となるソースプログラム４４に対して、予約語（キーワード）等を抽出して字句解析する前置処理部であり、通常のコンパイラが備える解析機能に加えて、オブジェクト（変数等）の生存区間の重なりを解析する生存区間重なり解析部９４を有する。アセンブラコード変換部８６の構成は、実施の形態２と同様であるため、その詳細な説明はここでは繰返さない。
【００６３】
生存区間重なり解析部９４は、ソースプログラム４４を解析し、オブジェクトの生存区間の重なりを解析する。例えば、図２３（ａ）に示すようなソースプログラム４４が与えられた場合に、オブジェクトａ〜ｆの生存区間を解析すると、図２３（ｂ）に示すようなグラフが生成される。生存区間重なり解析部９４は、図２３（ｂ）に示されたグラフより、生存区間の重なりを、オブジェクトを節点とし、オブジェクト間の生存区間の重なりを枝で示した無向グラフで表すと、図２３（ｃ）のようになる。すなわち、オブジェクトａ、ｂ、ｅおよびｆは相互に重なり合いを有し、オブジェクトａ、ｃおよびｄは相互に重なり合いを有することを示している。このようなオブジェクト間の生存区間の重なりに関する情報に基づいて、実施の形態２と同様の処理を実行することにより、図２４に示すように、オブジェクトのグループ分けおよびキャッシュメモリ３のセット番号の設定が行われる。最終的には、図２５に示されるようなアセンブラコードが生成される。
【００６４】
以上説明したように本実施の形態によると、生存区間の重なり合いを有するオブジェクトはそれぞれ異なるセット番号のブロックに配置される。このため、同時期にアクセスされるオブジェクト同士で、同一のセット番号のブロックを奪い合い、互いにオブジェクトを追い出しあう競合状態が生じない。このため、キャッシュミスが起こりにくくなり、キャッシュメモリのヒット率を向上させることができる。
【００６５】
以上、本発明について実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではない。
例えば、キャッシュメモリとして、ｎウェイセットアソシアティブ方式のキャッシュメモリを用いてもよい。
【産業上の利用可能性】
【００６６】
本発明は、コンパイラに適用でき、特に、キャッシュメモリを有するコンピュータをターゲットとするコンパイラ等に適用できる。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施の形態に係るコンパイラシステムがターゲットとするコンピュータのハードウェア構成の一部を示すブロック図である。
【図２】キャッシュメモリのハードウェア構成を示すブロック図である。
【図３】キャッシュメモリに含まれるあるブロックにおけるビット構成を示す図である。
【図４】コンパイラシステムによるソースプログラム中のデータの配置方法の概略を説明するための図である。
【図５】コンパイラシステムの構成を示す機能ブロック図である。
【図６】実施の形態１に係るコンパイラ部の構成を示す機能ブロック図である。
【図７】図６に示したプラグマ解析部および配置セット情報設定部が実行する処理のフローチャートである。
【図８】プラグマ「#pragma  _overlap_access_object」が記述されたソースプログラムの一例を示す図である。
【図９】グループ分けされたオブジェクトの図である。
【図１０】図８に示したソースコードより作成されたアセンブラコードの一例を示す図である。
【図１１】プラグマ「#pragma  _cache_set_number」が記述されたソースプログラムの一例を示す図である。
【図１２】プラグマ「#pragma  _cache_set_monopoly」が記述されたソースプログラムの一例を示す図である。
【図１３】図５に示したリンカ部のアドレス設定部が実行する処理のフローチャートである。
【図１４】図５に示したリンカ部のアドレス設定部が実行する処理を説明するための図である。
【図１５】実施の形態２に係るコンパイラ部の構成を示す機能ブロック図である。
【図１６】図１５に示したプロファイルデータ解析部および配置セット情報設定部が実行する処理のフローチャートである。
【図１７】アクセス頻度情報に基づくアセンブラコード作成処理を説明するための図である。
【図１８】オブジェクトの生存区間に関するプロファイルデータの一例を示す図である。
【図１９】オブジェクトの生存区間を表すグラフである。
【図２０】オブジェクトをグループ分けした結果の図である。
【図２１】図１８に示したプロファイルデータより作成されたアセンブラコードの一例を示す図である。
【図２２】実施の形態３に係るコンパイラ部の構成を示す機能ブロック図である。
【図２３】オブジェクトの生存区間の重なりを説明するための図である。
【図２４】オブジェクトのグループ分けおよびキャッシュメモリのセット番号の設定が行われた結果を説明するための図である。
【図２５】図２３に示したオブジェクトの生存区間の重なりに基づいて作成されたアセンブラコードの一例を示す図である。
【符号の説明】
【００６８】
１  プロセッサ
２  メインメモリ
３  キャッシュメモリ
１０  コンピュータ
２０  アドレスレジスタ
３１  メモリ部
４０  コンパイラシステム
４２  キャッシュパラメータ
４４  ソースプログラム
４６  コンパイラ部
４８  アセンブラファイル
５０  アセンブラ部
５２  オブジェクトファイル
５４  リンカ部
５６  アドレス設定部
５８  実行プログラム
６６  プロファイルデータ
７２、８２、９２  パーサー部
７４  プラグマ解析部
７６、８６  アセンブラコード変換部
７８、８８  配置セット情報設定部
８４  プロファイルデータ解析部
９４  生存区間重なり解析部
【図１】
2005122481.tif 000003
【図２】
2005122481.tif 000004
【図３】
2005122481.tif 000005
【図４】
2005122481.tif 000006
【図５】
2005122481.tif 000007
【図６】
2005122481.tif 000008
【図７】
2005122481.tif 000009
【図８】
2005122481.tif 000010
【図９】
2005122481.tif 000011
【図１０】
2005122481.tif 000012
【図１１】
2005122481.tif 000013
【図１２】
2005122481.tif 000014
【図１３】
2005122481.tif 000015
【図１４】
2005122481.tif 000016
【図１５】
2005122481.tif 000017
【図１６】
2005122481.tif 000018
【図１７】
2005122481.tif 000019
【図１８】
2005122481.tif 000020
【図１９】
2005122481.tif 000021
【図２０】
2005122481.tif 000022
【図２１】
2005122481.tif 000023
【図２２】
2005122481.tif 000024
【図２３】
2005122481.tif 000025
【図２４】
2005122481.tif 000026
【図２５】
2005122481.tif 000027