JP3417984B2 - キャッシュ競合削減コンパイル方法 - Google Patents

キャッシュ競合削減コンパイル方法

Info

Publication number
JP3417984B2
JP3417984B2 JP25001493A JP25001493A JP3417984B2 JP 3417984 B2 JP3417984 B2 JP 3417984B2 JP 25001493 A JP25001493 A JP 25001493A JP 25001493 A JP25001493 A JP 25001493A JP 3417984 B2 JP3417984 B2 JP 3417984B2
Authority
JP
Japan
Prior art keywords
cache
memory
contention
reference group
loop
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP25001493A
Other languages
English (en)
Other versions
JPH0784799A (ja
Inventor
孝好 飯塚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP25001493A priority Critical patent/JP3417984B2/ja
Publication of JPH0784799A publication Critical patent/JPH0784799A/ja
Priority to US08/861,187 priority patent/US5862385A/en
Application granted granted Critical
Publication of JP3417984B2 publication Critical patent/JP3417984B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、キャッシュメモリを有
するコンピュータで動作させるプログラムをコンパイル
する方法に関し、特に、動作時にキャッシュのアクセス
競合によって生じるキャッシュ競合をできる限り削減す
るようなコードを生成できるコンパイル方法に関する。
【0002】
【従来の技術】キャッシュメモリおよびキャッシュ競合
については、例えば、「J. Hennessy,D. Patterson, "C
omupter Architecture: A Quantitive Approach", Morg
an Kaufmann Publisher, Palo Alto, California, 199
0, pp.408-425 」などの文献に述べられている。
【0003】キャッシュメモリ(以下、単にキャッシュ
と呼ぶ)は、高速アクセス可能なメモリの一種である。
キャッシュに主メモリ上のデータのコピーを置くことに
より、データ参照を高速化することができる。キャッシ
ュと主メモリ間の転送単位はブロックと呼ばれ、キャッ
シュ上のブロックはキャッシュブロック、主メモリ上の
ブロックはメモリブロックと呼ばれる。
【0004】キャッシュの実現方式としては、メモリブ
ロックのコピーが置かれるキャッシュブロックのマッピ
ング方法に応じて、フル・アソシアティブ方式、セット
・アソシアティブ方式、およびダイレクト・マップ方式
の3種類がある。近年、キャッシュの大容量化および高
速化のため、構成が簡単なダイレクトマップ方式が主流
になりつつある。
【0005】ダイレクトマップ方式では、各メモリブロ
ックがマッピングされるキャッシュブロックは一意に決
定される。なお、一般にキャッシュの容量は主メモリの
容量より小さいため、複数のメモリブロックが1つのキ
ャッシュブロックにマッピングされる。そのため、一度
キャッシュブロックに転送されたデータであっても、同
一のキャッシュブロックにマッピングされる別のメモリ
ブロックの参照によりキャッシュブロックから追い出さ
れ、次の参照ではキャッシュミスを生じる。
【0006】このような現象をキャッシュ競合といい、
これによって生じるキャッシュミスを競合性キャッシュ
ミスという。プログラムによってはキャッシュ競合が多
発し性能が大きく低下するのがダイレクト・マップ方式
の欠点である。
【0007】図2〜図7を用いて、キャッシュ競合につ
いてより詳細に説明する。なお、以下では、ブロック長
が16バイト、容量256Kバイトのダイレクトマップ方式の
キャッシュを仮定する。
【0008】以下、図2はソースプログラム、図3は主
メモリのキャッシュへのマッピング状況の概要、図4、
5は主メモリのキャッシュへのマッピング状況の詳細、
図6は図2のソースプログラムに対するオブジェクトプ
ログラムの例、図7はキャッシュ競合の発生状況を示
す。
【0009】まず、図2は、キャッシュ競合が多発する
プログラムの例をソースプログラムで示したものであ
る。このソースプログラム3では、COMMON宣言により、
配列A、B、Cはこの順番で連続したメモリ領域に配置
される。また、それぞれの配列は実数型で要素長4バイ
トであり、宣言寸法は A(256,128) 、 B(256,128,3) 、
C(256,128) である。実行部分は2重ループであり、最
内側ループでは、I=1 から255 に対してA(I,J)、 B(I,
J,2) 、 A(I+1,J) 、 B(I,J,3) 、 B(I,J,1) の値を用
いてC(I,J)の値を計算している。
【0010】図3は、主メモリ120内の各配列のどの
部分がキャッシュ110のどの部分に対応するか、その
対応関係を示している。各配列の部分領域 A(1:256,1:1
28)、 B(1:256,1:128,1) 、 B(1:256,1:128,2) 、 B(1:
256,1:128,3) 、 C(1:256,1:128) の大きさは、それぞ
れ、128Kバイト(=256*128*4)である。したがって、A(1:
256,1:128)とB(1:256,1:128,2)とC(1:256,1:128)はキャ
ッシュ110内の同一領域にマッピングされ、B(1:256,
1:128,1)とB(1:256,1:128,3)もキャッシュ110内の同
一領域にマッピングされる。
【0011】なお、上記の表現「m:n」は、下限mか
ら上限nまでの添え字範囲を表すものとする。
【0012】図4および図5は、キャッシュ110の構
造および主メモリ120とのマッピングを詳細に示した
ものである。
【0013】キャッシュ110は、16バイトのキャッシ
ュブロックの集まりである。111〜116はキャッシ
ュブロックの例である。主メモリ120もメモリブロッ
クを単位として示してある。メモリブロックのキャッシ
ュブロックへのマッピングは矢印で示してある。
【0014】例えば、図4では、3つのメモリブロック
A(1:4,J) 、B(1:4,J,2)、C(1:4,J)が1つのキャッシュ
ブロック111にマッピングされ、キャッシュブロック
111上にはこれらのメモリブロックのデータのうち何
れか1つだけが置かれる。そのため、これらのメモリブ
ロック内のデータの参照に際しては、キャッシュ競合が
発生する。キャッシュブロック112、113でも同様
にキャッシュ競合が発生する。
【0015】図5では、2つのメモリブロックが1つの
キャッシュブロックにマッピングされるため、同様にキ
ャッシュ競合が発生する。なお、図5に示したように、
キャッシュ競合は同一配列内でも発生する。
【0016】図6は、図2のソースプログラムに対応し
たオブジェクトプログラムの例である。ただし、一般に
プログラムの実行においては、最内側ループが処理時間
の大部分を占め、他の部分は余り重要ではないので、図
2の最内側ループのオブジェクトプログラムのみを示し
てある。
【0017】図6において、各命令には識別のため最左
側に命令番号を付加してある。ラベルは分岐命令の分岐
先として用いられる。各命令の処理内容は、図の最右側
に示してある。これらのうち、命令番号1、2、4、
5、8、10の命令がメモリ参照命令であり、それぞ
れ、A(I,J)、B(I,J,2)、A(I+1,J)、B(I,J,3)、B(I,J,
1)、C(I,J)が参照される。
【0018】図7では、図6に示したオブジェクトプロ
グラム内のメモリ参照命令によって発生するキャッシュ
競合の発生状況を、メモリ参照命令の実行順に示してい
る。なお、各行は左から、最内側ループでの制御変数I
の値、命令番号、命令での参照配列要素、キャッシュの
ヒット状況(参照されたデータがキャッシュ上に存在す
るか否かを示す)、主メモリ120から転送されてキャ
ッシュ110に置かれるメモリブロック、キャッシュ1
10から追い出されるメモリブロック、およびキャッシ
ュ競合を原因とするキャッシュミス(競合性キャッシュ
ミス)であるか否かを示している。
【0019】図7から分かるように、すべてのメモリ参
照でキャッシュミスが発生するが、このうち大半は競合
性キャッシュミスである。例えば、I=1 での命令1と命
令4では同一のメモリブロックA(1:4,J)を参照している
が、A(1:4,J)と同一のキャッシュブロックにマッピング
されるB(1,J,2)が命令2で参照されるため、A(1:4,J)は
キャッシュから追い出される。そのため、命令4ではキ
ャッシュミスが発生している。
【0020】図7のキャッシュミスのうち、同一のメモ
リブロックに対する2回目以降の参照で生じるキャッシ
ュミスは、全て競合性キャッシュミスである。I=1 から
I=4までの24回のキャッシュミスのうち、18回は競合性
キャッシュミスなので、キャッシュ競合がキャッシュミ
スの主要な原因であることが分かる。
【0021】
【発明が解決しようとする課題】キャッシュ競合を削減
する方法の1つは、上記従来技術に示されているよう
に、フル・アソシアティブ方式またはセット・アソシア
ティブ方式のキャッシュを用いることである。しかし、
これらはハードウェアが複雑になるので、キャッシュの
参照速度が低下し、大容量化も困難である。
【0022】更に、セット・アソシアティブ方式のキャ
ッシュであっても、メモリブロックがマッピングされる
キャッシュブロック候補の数(連想度)が小さい場合
は、キャッシュ競合を十分に回避できない。即ち、セッ
ト・アソシアティブ方式のキャッシュでも、連想度が小
さい場合には、更なるキャッシュ競合削減方法が必要で
ある。
【0023】また、上記従来技術に示された別の方法
は、ダイレクト・マップ方式のままで単にキャッシュの
容量を増やすことである。しかし、キャッシュのコスト
は容量の同じ主メモリのコストと比較してかなり高価な
ので、キャッシュ容量増大には限度がある。そのため、
この方法は実用的でない。
【0024】上記のように、ダイレクト・マップ方式の
キャッシュは構成が簡単なため、高速化および大容量化
が容易であるという利点があるが、プログラムによって
はキャッシュ競合が発生し性能が大幅に低下するという
欠点がある。しかし、従来、ダイレクト・マップ方式キ
ャッシュのキャッシュ競合を削減する十分な手段は無か
った。
【0025】更に、キャッシュ競合の発生が比較的少な
いセット・アソシアティブ方式のキャッシュでも、連想
度が小さい場合には、キャッシュ競合が発生し性能が大
幅に低下する。連想度を十分に大きくすればキャッシュ
競合はすべて回避できるが、ハードウェアの構成が複雑
になるため、キャッシュの参照速度の低下および大容量
化の困難を招く。このような理由により、現在、市場で
使われているセット・アソシアティブ方式キャッシュの
連想度は2〜4程度であり、キャッシュ競合の多発する
プログラムに対してはキャッシュ競合を十分に回避でき
ない。
【0026】本発明の目的は、キャッシュ競合により大
幅な性能低下を引き起こすプログラムに対して、キャッ
シュ競合の発生を削減する方法を提供することである。
【0027】
【課題を解決するための手段】上記目的を達成するため
に、本発明は、キャッシュメモリを有するコンピュータ
に対するオブジェクトプログラムを生成するコンパイル
方法において、入力プログラム内のメモリ参照間で生じ
るキャッシュ競合の発生を検出することを特徴とする。
また、プログラム内のどのメモリ参照とどのメモリ参照
の間でキャッシュ競合が発生しているかを解析するキャ
ッシュ競合解析を行うことを特徴とする。
【0028】さらに、そのようなキャッシュ競合解析の
結果に基づいて、キャッシュ競合が発生する場合は、一
度キャッシュブロックに転送されたメモリブロックへの
すべての参照が完了する前にそのブロックをキャッシュ
から追い出すことのないように、プログラム内のメモリ
参照の順番を並び替えるメモリ参照順序制御を行うこと
を特徴とする。
【0029】メモリ参照順序制御は、コンパイラの中間
コード、あるいはコンパイラが生成したオブジェクトプ
ログラムに対して実施する。また、メモリ参照順序制御
をコンパイラの中間コードに対して実施し、その結果の
中間コードに対して生成されたオブジェクトプログラム
に対してもメモリ参照順序制御を実施するようにしても
よい。さらに、メモリ参照順序制御を、プログラムの中
間コードに対して実施し、この結果の中間コードをソー
スプログラムに逆変換して外部に出力するようにしても
よい。
【0030】さらに、本発明は、キャッシュメモリを有
するコンピュータに対するオブジェクトプログラムを生
成するコンパイル方法において、入力プログラム中のメ
モリ参照に関するキャッシュ競合の発生を検出し、その
発生状況を解析してキャッシュ競合情報として出力する
キャッシュ競合解析ステップと、該キャッシュ競合情報
に基づいて、一度キャッシュブロックに転送されたメモ
リブロックへのすべての参照が完了する前にそのブロッ
クをキャッシュから追い出すことがないように、プログ
ラム内のメモリ参照の順番を並び替えるメモリ参照順序
制御ステップとを備えたことを特徴とする。
【0031】前記キャッシュ競合解析ステップは、前記
入力プログラム中のメモリ参照を抽出して、同一のメモ
リブロックへのメモリ参照をキャッシュ参照群としてま
とめるとともに、これらのキャッシュ参照群を分類して
キャッシュ参照群情報を作成し、該キャッシュ参照群情
報をキャッシュ競合情報として出力するキャッシュ参照
群解析ステップと、該キャッシュ参照群情報に基づい
て、キャッシュ参照群どうしの間でのキャッシュ競合状
況を表すキャッシュ競合グラフを作成し、該キャッシュ
競合グラフをキャッシュ競合情報として出力するキャッ
シュ競合グラフ解析ステップとを備えるようにするとよ
い。
【0032】前記キャッシュ参照群解析ステップは、前
記入力プログラム中のメモリ参照どうしの主メモリ上の
距離が所定値以下のとき、それらのメモリ参照が同一の
メモリブロックを参照するものと判定して、それらのメ
モリ参照を同じキャッシュ参照群に登録するようにする
とよい。
【0033】また、前記キャッシュ参照群解析ステップ
は、前記入力プログラム中のメモリ参照の主メモリ上の
位置から参照するメモリブロックを求め、同じメモリブ
ロックを参照するメモリ参照を同じキャッシュ参照群に
登録するようにしてもよい。
【0034】前記キャッシュ競合グラフ解析ステップ
は、前記キャッシュ参照群情報に含まれる任意の第1お
よび第2のキャッシュ参照群について、第1のキャッシ
ュ参照群に含まれるすべてのメモリ参照と第2のキャッ
シュ参照群に含まれるすべてのメモリ参照との間のキャ
ッシュ上の距離の最小値を求め、該最小値が所定値以下
のとき、上記第1のキャッシュ参照群のメモリ参照と第
2のキャッシュ参照群のメモリ参照との間にキャッシュ
競合が発生すると判定するようにするとよい。
【0035】また、前記キャッシュ競合グラフ解析ステ
ップは、前記キャッシュ参照群情報に含まれる任意の第
1および第2のキャッシュ参照群について、第1のキャ
ッシュ参照群に含まれるすべてのメモリ参照の主メモリ
上の位置からマッピングされるキャッシュブロックを求
め、同様に第2のキャッシュ参照群に含まれるすべての
メモリ参照の主メモリ上の位置からマッピングされるキ
ャッシュブロックを求め、同じキャッシュブロックにマ
ッピングされるメモリ参照がある場合に、これら第1の
キャッシュ参照群のメモリ参照と第2のキャッシュ参照
群のメモリ参照との間にキャッシュ競合が発生すると判
定するようにしてもよい。
【0036】前記メモリ参照順序制御ステップは、前記
入力プログラム中のループに対しループ展開を行った後
に、前記メモリ参照の順番の並び替えを行うようにする
とよい。特に、ループ展開後の各メモリ参照範囲の長さ
がキャッシュのブロック長にほぼ一致する展開対象ルー
プとループ展開数を選んでループ展開するとよい。
【0037】
【作用】上記構成により、キャッシュ競合の多発により
性能が低下しているプログラムに対して、キャッシュ競
合を削減したオブジェクトプログラムあるいはソースプ
ログラムを生成することができる。
【0038】キャッシュ競合の発生を検出することによ
り、キャッシュ競合削除を主体とした処理を集中的に行
える。一般にキャッシュ競合が発生すると大幅な性能低
下が生じる。そこで、キャッシュ競合の発生部分の検出
により特定された対象に対しては、キャッシュ競合削減
を最優先した処理を行うよう判断できる。
【0039】キャッシュ競合解析を行うことにより、後
続するメモリ参照順序制御で、どのメモリ参照とどのメ
モリ参照がキャッシュ競合を起こしているか判断するこ
とができる。
【0040】メモリ参照順序制御を行うことにより、キ
ャッシュ競合を起こしている部分に対して、キャッシュ
競合を回避するようにできる。例えば、一度キャッシュ
ブロックに転送されたメモリブロックへのすべての参照
が完了する前にそのブロックをキャッシュから追い出さ
ない並び方にプログラム内のメモリ参照の順番を並び替
えるようにすれば、結果として、競合性キャッシュミス
はすべて回避することができる。
【0041】メモリ参照順序制御を中間コードに対して
実施することにより、少数のレジスタをメモリ参照命令
に割り当ることによって生じる余分なデータ依存関係が
無いので、メモリ参照の並び替えの自由度が増す。その
ため、メモリ参照を最適な位置に移動可能となり、キャ
ッシュ競合の削減率が向上する。
【0042】メモリ参照順序制御をオブジェクトプログ
ラムに対して実施することにより、中間コードの段階で
は生成を予期できなかった命令語を含めたすべての命令
語を対象として命令語の並び替えが実施できるので、よ
り精密な並び替えを行える。
【0043】メモリ参照順序制御をプログラムの中間コ
ードとオブジェクトプログラムの両方に行うことによ
り、最適なキャッシュ競合削減が行える。
【0044】メモリ参照順序制御をプログラムの中間コ
ードに対して実施し、この結果をソースプログラムに再
変換して外部に出力することにより、キャッシュ競合削
減の効果をどのコンパイラでも利用できるので、キャッ
シュ競合削減の汎用性が増大する。
【0045】メモリ参照順序制御においてループ展開も
実施すれば、複数のループ繰り返しにまたがったキャッ
シュ競合も削除できるので、キャッシュ競合の削減率が
向上する。特に、ループ展開における展開対象ループと
ループ展開数を選ぶことにより、ループ展開の効果が高
いループに対して必要最小限のループ展開数でループ展
開するので、ループ展開数が多すぎる場合に発生するレ
ジスタの不足を回避できる。
【0046】
【実施例】以下、本発明の一実施例を図面を参照しなが
ら説明する。
【0047】図1に、本発明の一実施例に係るコンパイ
ル方法を適用したコンパイラの構成を示す。まず、この
図を参照して、本実施例の処理の概要を説明する。
【0048】コンパイラ1は、ソースプログラム3を入
力して、最終的にオブジェクトプログラム7を生成す
る。コンパイラ1の処理では、構文解析10、キャッシ
ュ競合削減20、およびコード生成60を、順に実行す
る。構文解析10は、ソースプログラム3をコンパイラ
1の中間コード5に変換する。キャッシュ競合削減20
は、中間コード5に対してキャッシュ競合の削減を行
う。コード生成60は、キャッシュ競合削減20により
変更された中間コード5からオブジェクトプログラム7
を生成する。
【0049】以上により、入力したソースプログラム2
に対してキャッシュ競合削減20を実施したオブジェク
トプログラム7を生成する。
【0050】次に、キャッシュ競合削減20の処理内容
を説明する。キャッシュ競合削減20の処理は、大きく
3つのステップより構成され、これら3つのステップよ
りなる処理を中間コード5内の各最内側ループ内中間コ
ードに対して適用する。
【0051】なお、本実施例では処理対象を各最内側ル
ープ内中間コードに限定したが、それ以外の中間コード
も処理対象とできるようにすることも容易である。しか
しながら、最内側ループは実行時間が大きいため、ほと
んどの場合、最内側ループを処理対象とすれば十分であ
る。
【0052】以下では、キャッシュ競合削減20の3つ
のステップの各処理内容を説明する。
【0053】まず、キャッシュ競合解析30では、中間
コード5に対してキャッシュ競合の発生を検出すると共
にキャッシュ競合の発生状況を解析する。キャッシュ競
合発生の検出結果は、次のステップ40で使われる。ま
た、キャッシュ競合の発生状況は、キャッシュ競合情報
9として出力され、メモリ参照順序制御50で使われ
る。
【0054】次に、ステップ40では、キャッシュ競合
解析30の結果に基づき、次のメモリ参照順序制御50
を実施するか否かを判定する。キャッシュ競合解析30
でキャッシュ競合の発生が検出された場合は、キャッシ
ュ競合有りと判断し、次のメモリ参照順序制御50に処
理を進める。そうでない場合は、次のメモリ参照順序制
御50をスキップして処理を終える。
【0055】メモリ参照順序制御50では、キャッシュ
競合情報9に基づきメモリ参照の順番の入れ替えを行
い、キャッシュ競合を削減する。メモリ参照の順番の入
れ替えに際しては、一度キャッシュブロックに転送され
たメモリブロックへのすべての参照が完了する前にその
ブロックをキャッシュから追い出さないように制御す
る。
【0056】次に、各処理で入出力されるデータの構造
について説明する。ただし、ソースプログラム3および
オブジェクトプログラム7の構造は、キャッシュ競合削
減20と無関係なので説明を省略し、中間コード5とキ
ャッシュ競合情報9の構造を説明する。
【0057】中間コード5は、図2に示したようなソー
スプログラムを表現するコンパイラ1の内部表現であ
る。この実施例では、中間コード5の形式として、3番
地文と呼ばれる構造を用いる。3番地文については、
「A.V.エイホ・J.D.ウルマン著/土居範久訳”コンパイ
ラ”、倍風館、情報処理シリーズ7、昭和61年3月発
行、231 頁〜233 頁」に記載されている。ただし、キャ
ッシュ競合削減20で用いる情報の欄が必要なので、3
番地文に対して文番号(後述の図16の305)の欄と
参照群番号(後述の図16の330)の欄を付加してあ
る。
【0058】図16に、中間コード5の例を示す。図1
6は、図2のソースプログラム3に対応する中間コード
5である。中間コード5内の各文は、実行順に並んでい
る。各文は、1から始まり1ずつ増える文番号305
と、分岐先を示すためのラベル310と、処理の内容を
示す3番地文320と、キャッシュ競合削減20で作業
領域として用いる参照群番号330とから構成される。
【0059】ただし、ラベル310は分岐先になる文以
外には付かない。また、参照群番号330は、メモリ参
照にのみ付加され、更に、キャッシュ競合削減20の入
力段階では何も付加されていない。
【0060】中間コード5の形式として3番地文を用い
ると、各メモリ参照が別々の文に分離されるので、番号
付けやメモリ参照文の並び替えが容易である。なお、処
理が多少複雑になるが、中間コード5の形式として他の
形式を用いて本発明を実施することも可能である。
【0061】また、3番地文への変換はキャッシュ競合
削減20の直前で実施すれば十分なので、構文解析10
からキャッシュ競合削減20までの間で最適化処理を行
う場合は、その最適化処理では別の形式を使用すること
も可能である。更に、3番地文は、最適化処理で一般的
に用いられる構文木の一例として表現可能なので、中間
コード5の形式を構文木に統一することも可能である。
【0062】キャッシュ競合情報9は、中間コード5内
の文のメモリ参照どうしの間でのキャッシュ競合の発生
状況を表す情報である。図17を用いて、キャッシュ競
合情報9の構造について説明する。
【0063】キャッシュ競合情報9は、キャッシュ参照
群情報9900およびキャッシュ競合グラフ9500よ
り構成される。キャッシュ参照群情報9900は、同一
のメモリブロックへのメモリ参照を要約してキャッシュ
参照群9010としてまとめ、これらを分類した情報で
ある。キャッシュ競合グラフ9500は、キャッシュ参
照群9010どうしの間でのキャッシュ競合状況を表
す。
【0064】すなわち、キャッシュ参照群情報9900
は、キャッシュ参照群9010の集まりであり、各キャ
ッシュ参照群9010は、中間コード5内で同一メモリ
ブロックへのメモリ参照を行う文の集まりである。
【0065】具体的には、各キャッシュ参照群9010
は、1つのキャッシュ参照群番号9020、メモリ参照
文ごとの文番号9040、参照配列要素9060、およ
び参照配列要素9060のアドレス計算式9090から
構成される。
【0066】また、キャッシュ競合グラフ9500は、
キャッシュ参照群9010の番号をノードとし、キャッ
シュ競合を発生するキャッシュ参照群9010どうしの
間ではエッジが張られている。2つのキャッシュ参照群
9010どうしの間にキャッシュ競合が発生するとは、
各キャッシュ競合群9010内のメモリ参照文が参照す
るメモリブロックどうしが同一のキャッシュブロックに
マッピングされることである。図17において、951
0、9520はキャッシュ競合グラフ9500のノード
であり、9590はエッジである。
【0067】以上で、図1のコンパイラの概要説明を終
える。以下では、図1のキャッシュ競合削減20の処理
ステップであるキャッシュ競合解析30とメモリ参照順
序制御50の処理内容を適用例を交えながら順に詳しく
説明する。
【0068】まず、キャッシュ競合解析30について詳
しく説明する。キャッシュ競合解析30では、図16に
示したような中間コード5内のメモリ参照を解析して、
図17に示したキャッシュ競合情報9を作成する。
【0069】図8は、キャッシュ競合解析30の処理手
順の概要を示す。
【0070】まず、キャッシュ参照群解析32で、中間
コード5(図16)内のメモリ参照文を解析することに
より、同一のメモリブロックへの参照をキャッシュ参照
群9010(図17)として要約し、キャッシュ参照群
情報9900を作成する。次に、キャッシュ競合グラフ
解析34では、キャッシュ参照群情報9900に基づい
て、キャッシュ参照群9010間のキャッシュ競合状況
を解析し、この結果を表現するキャッシュ競合グラフ9
500を作成する。
【0071】ステップ36では、作成したキャッシュ競
合グラフ9500内にエッジがあるか否か判定する。こ
れが真の場合はステップ38に進んでキャッシュ競合有
りと判定して処理を終え、偽の場合はステップ39に進
んでキャッシュ競合無しと判定して処理を終える。この
判定結果は、図1のステップ40で用いる。
【0072】次に、図9〜図12を参照して、キャッシ
ュ参照群解析32およびキャッシュ競合グラフ解析34
の処理の詳細を説明する。
【0073】図9は、キャッシュ参照群解析32の詳細
な処理手順を示すフローチャートである。上述したよう
に、キャッシュ参照群解析32は、中間コード5からキ
ャッシュ参照群情報9900を作成する。
【0074】まず、ステップ3202で、キャッシュ参
照群番号nの初期値として0を設定する。ステップ32
04〜3234は繰り返し処理であり、中間コード5の
先頭の文から最後の文まで順に処理する。ただし、処理
対象の文をSiとする。
【0075】ステップ3206では処理対象の文Siがメ
モリ参照文であるか否か判定する。判定結果が真の場合
はステップ3208に進み、偽の場合は以下の処理をス
キップしてステップ3234に進む。ステップ3208
では、処理対象の文Siが何れかのキャッシュ参照群90
10に登録済みであるか否か判定する。判定結果が偽の
場合はステップ3210に進み、真の場合は以下の処理
をスキップしてステップ3234に進む。
【0076】ステップ3210では、nの値を1増やす
と共に、nの値をmに代入する。mは以下のステップで
処理対象となるキャッシュ参照群9010の番号の初期
値であり、処理の途中で変わる場合もある。
【0077】ステップ3212では、キャッシュ参照群
番号がmのキャッシュ参照群CAG(m)を作成し、このキャ
ッシュ参照群CAG(m)に処理対象の文Siを登録する。登録
に際しては、図17に示したように、文番号9040、
参照配列要素9060、およびアドレス計算式9090
を書き込む。なお、参照配列要素9060からそのアド
レス計算式9090を求める方法は公知なので省略す
る。
【0078】次に、ステップ3214からステップ32
32までの繰り返し処理を実行する。この繰り返し処理
は、処理対象の文Siの次の文から最後の文までを対象と
して実施する。その処理対象の文をSjとする。
【0079】まず、ステップ3216では、処理対象の
文Sjがメモリ参照文であるか否か判定する。判定結果が
真の場合はステップ3218に進み、偽の場合は以下の
処理をスキップしてステップ3232に進む。
【0080】ステップ3218では、処理対象の文Sjで
のメモリ参照とキャッシュ参照群CAG(m)との距離dを計
算する。メモリ参照xとキャッシュ参照群yとの距離と
は、キャッシュ参照群y内に登録されている全メモリ参
照とメモリ参照xとの間の主メモリ120上での距離の
最小値である。この距離の計算方法については、後に図
10を用いて、詳しく説明する。
【0081】次に、ステップ3220では、距離dが所
定値Dmax 以下であるか否か判定する。判定結果が真の
場合はステップ3222に進み、偽の場合は以下の処理
をスキップしてステップ3232に進む。
【0082】所定値Dmax は、メモリ参照の主メモリ上
での距離をもとにメモリ参照どうしが同一のメモリブロ
ックを参照するか否かを判定するための「しきい値」で
ある。その値は、0〜「メモリブロック長/2」程度が
適当である。距離dが、0〜「メモリブロック長/2」
程度のしきい値Dmax 以下なら、ほぼ同一のメモリブロ
ックを参照するといえるからである。以下、本実施例で
は、Dmax が4であると仮定する。ただし、これに限ら
ず、しきい値Dmax の値は、同一のメモリブロックを参
照するか否かを判定できるような値であればよい。
【0083】本実施例では、このステップ3220の判
定により、処理対象の文Sjでのメモリ参照とキャッシュ
参照群CAG(m)内のメモリ参照とが同一のメモリブロック
を参照するか否か判定している。
【0084】なお、メモリ参照が同一のメモリブロック
を参照するか否かを判定する他の方法として、参照配列
要素の主メモリ上での位置から、参照するメモリブロッ
クを直接求めるようにしてもよい。ただし、この場合、
ループの繰り返し回によって配列要素のアドレスが変わ
るため、参照するメモリブロックも変化することを十分
に考慮する必要があり、処理は多少複雑になる。本実施
例での判定方法を、そのように拡張することも可能であ
る。
【0085】ステップ3222では、処理対象の文Sjが
何れかのキャッシュ参照群9010に登録済みであるか
否かを判定する。判定結果が偽の場合はステップ322
4に進み、真の場合はステップ3226に進む。ステッ
プ3224では、処理対象の文Sjをキャッシュ参照群CA
G(m)に登録し、ステップ3232に進む。
【0086】ステップ3226からステップ3230で
は、キャッシュ参照群CAG(m)内の参照を既存のキャッシ
ュ参照群にマージする。まず、ステップ3226では、
キャッシュ参照群CAG(m)に登録されたすべてのメモリ参
照を、処理対象の文Sjの属するキャッシュ参照群901
0に再登録する。ステップ3228では、nを1減らし
て、キャッシュ参照群CAG(m)を削除する。ステップ32
30では、処理対象の文Sjの属するキャッシュ参照群9
010のキャッシュ参照群番号9020をmに再設定す
る。
【0087】ステップ3232とステップ3234は、
繰り返し処理の終端であり、ステップ3236はキャッ
シュ参照群解析32の終端である。
【0088】次に、上記のステップ3218の処理、す
なわち処理対象の文Sjのメモリ参照とキャッシュ参照群
CAG(m)との距離dの計算処理について、説明する。
【0089】図10は、このステップ3218の処理の
詳細な手順を示すフローチャートである。まず、ステッ
プ3252で、処理対象の文Sjでのメモリ参照のアドレ
ス計算式AEj を求める。アドレス計算式AEj は、メモリ
参照で参照される配列要素から容易に求められる。この
方法は公知なので詳細は省略する。
【0090】次に、ステップ3254では、dの初期値
としてDmax +1を設定する。その後、ステップ325
6〜ステップ3268の繰り返し処理を行う。ここで
は、キャッシュ参照群9010の1つであるCAG(m)に登
録されたすべてのメモリ参照Aiについて、順にステップ
3256〜ステップ3268の繰り返し処理を行う。
【0091】ステップ3258では、キャッシュ参照群
9010からメモリ参照Aiのアドレス計算式9090を
取り出し、これをAEi とする。ステップ3260では、
アドレス計算式AEi とAEj との差を計算し、diffに設定
する。ここの処理では簡単な数式処理が必要となるが、
詳細は省略する。要するにメモリ参照するアドレスの差
を求めるということである。
【0092】ステップ3262では、差diffが定数であ
るか否かを判定する。判定結果が真の場合はステップ3
264に進み、偽の場合はステップ3256〜ステップ
3268の繰り返し処理を終え、ステップ3272で距
離dに差diffの値を設定した後、終端ステップ3270
に進む。
【0093】ステップ3264では、差diffの絶対値が
距離dより小さいか判定する。判定結果が真の場合は、
ステップ3266に進み、距離dの新たな値として差di
ffの絶対値を設定する。ステップ3264の判定結果が
偽の場合は、ステップ3266の処理をスキップして、
ステップ3268に進む。
【0094】以上の処理により、処理対象の文Sjのメモ
リ参照とキャッシュ参照群CAG(m)内の全メモリ参照との
メモリ上での距離の最小値がdに設定される。ただし、
距離が定数にならない場合は、ステップ3272によっ
て距離を表す式がそのままdに設定される。
【0095】なお、距離dが式の場合は、dとDmax と
の大小関係が不明になるので、ここで設定された距離d
の値を用いる図9のステップ3220での判定結果は偽
となり、処理対象の文Sjでのメモリ参照はキャッシュ参
照群CAG(m)内のメモリ参照と同一のキャッシュブロック
にマッピングされないと判定される。
【0096】以上で、キャッシュ参照群解析32の説明
を終える。ここまでで、キャッシュ参照群情報9900
が作成されたことになる。
【0097】次に、キャッシュ競合グラフ解析34の処
理の詳細を説明する。
【0098】図11は、キャッシュ競合グラフ解析34
の詳細な処理手順を示すフローチャートである。キャッ
シュ競合グラフ解析34は、キャッシュ参照群情報99
00に基づいてキャッシュ競合グラフ9500(図1
7)を作成する。
【0099】まず、ステップ3402で、キャッシュ競
合グラフ9500のノードを作成する。ノードは、各キ
ャッシュ参照群9010に対応して作られ、キャッシュ
参照群9010のキャッシュ参照群番号9020が付加
される。
【0100】ステップ3404からステップ3418で
は、上記で作成されたノード間のエッジを設定する。エ
ッジは、キャッシュ競合を発生するキャッシュ参照群9
010の間で張られる。ステップ3404からステップ
3418は繰り返し処理であり、iについて1から「キ
ャッシュ参照群の個数」まで処理する。ステップ340
6〜ステップ3416も繰り返し処理であり、jについ
てi+1から「キャッシュ参照群の個数」まで処理す
る。
【0101】ステップ3408では、キャッシュ参照群
CAG(i)とCAG(j)のキャッシュ110上の距離dcを求め
る。距離dcの求め方については、後に図12を用いて詳
細に説明する。
【0102】ステップ3410では、距離dcが所定値D
Cmax 以下であるか否かを判定する。判定結果が真の場
合はステップ3412に進み、偽の場合は以下の処理を
スキップしてステップ3416に進む。
【0103】所定値DCmax は、メモリ参照のキャッシ
ュ上での距離をもとにキャッシュ競合が発生するか否か
を判定するための「しきい値」である。その値は、0〜
「キャッシュブロック長」程度の値が適当である。以下
では、DCmax が4であると仮定する。ただし、これに
限らず、しきい値DCmax の値は、キャッシュ競合が発
生するか否かを判定できるような値であればよい。本実
施例では、ここでの判定により、CAG(i)内のメモリ参照
のメモリブロックとCAG(j)内のメモリ参照のメモリブロ
ックとが同一のキャッシュブロックにマッピングされる
か否か、すなわち、これらのメモリ参照どうしがキャッ
シュ競合を起こすか否かを判定している。
【0104】なお、同一のキャッシュブロックにマッピ
ングされるか否かを判定する他の方法として、参照配列
要素の主メモリ上での位置からマッピングされるキャッ
シュブロックを直接求めるようにしてもよい。ただし、
この場合、ループの繰り返し回によって配列要素のアド
レスが変化するので、マッピングされるキャッシュブロ
ックも変化することを十分に考慮する必要があり、処理
は多少複雑になる。本実施例での判定方法をそのように
拡張することも可能である。
【0105】ステップ3412では、キャッシュ競合グ
ラフ9500内のノードiとjの間に既にエッジがある
か否かを判定する。判定結果が偽の場合は、ステップ3
414に進んで、ノードiとjの間に新たなエッジを張
る。判定結果が真の場合は、ステップ3414をスキッ
プして、ステップ3416に進む。
【0106】次に、上記のステップ3408の処理、す
なわちキャッシュ参照群CAG(i)とCAG(j)のキャッシュ1
10上の距離dcを求める処理について説明する。
【0107】図12は、このステップ3408の処理の
詳細な手順を示すフローチャートである。まず、ステッ
プ3452で、距離dcの初期値としてDCmax +1を設
定する。ステップ3454からステップ3466は繰り
返し処理であり、キャッシュ参照群CAG(i)に登録された
すべてのメモリ参照Aiについて処理する。
【0108】ステップ3456では、メモリ参照Aiとキ
ャッシュ参照群CAG(j)の距離diffcを求める。この処理
方法は、図10で説明したステップ3218の処理とほ
ぼ同じなので、詳細は省略する。ステップ3458で
は、距離diffc が定数であるか否かを判定する。判定結
果が真の場合はステップ3460に進み、偽の場合はス
テップ3470に進む。
【0109】ステップ3460では、距離diffc をキャ
ッシュサイズで割った余りを計算し、結果をdiffc に再
設定する。この計算により、キャッシュ110上での距
離を求めている。ステップ3462では、距離diffc の
絶対値がdc未満か判定する。判定結果が真の場合はステ
ップ3464に進んで、diffc の絶対値をdcに再設定す
る。偽の場合は、ステップ3464をスキップして、ス
テップ3466に進む。ステップ3470では、diffc
を式のままdcに代入する。
【0110】以上で、キャッシュ競合グラフ解析34が
終了し、キャッシュ競合グラフ9500が作成されたこ
とになる。そして、図8で説明したように、ステップ3
6の判定を経て、キャッシュ競合解析30が終了する。
【0111】図18に、図2のソースプログラム3の中
間コード5(図9)に対してキャッシュ競合解析30
(図8〜図12)を行った場合に出力されるキャッシュ
競合情報9の内容を示す。図18において、950はキ
ャッシュ競合グラフ9500であり、990はキャッシ
ュ参照群情報9900である。901、911、92
1、931、941は、それぞれ1つのキャッシュ参照
群9010である。また、951〜955はキャッシュ
競合グラフ950のノードであり、各キャッシュ参照群
9010のキャッシュ参照群番号9020が付加されて
いる。
【0112】図18のキャッシュ競合グラフ950によ
り、番号が1と2と5のキャッシュ参照群901と91
1と941は、互いにキャッシュ競合を起こすことが分
かる。また、番号が3と4のキャッシュ参照群921と
931は、互いにキャッシュ競合を起こすことが分か
る。
【0113】さらに、キャッシュ参照群901は、A(I,
J)とA(I+1,J)の2つのメモリ参照から成り、他は、単独
のメモリ参照から成ることが分かる。A(I,J)とA(I+1,J)
が同じキャッシュ参照群901に入るのは、キャッシュ
参照群解析32において、これらのアドレス計算式「A
の先頭+ 4*(I-1+256*(J-1))」と「Aの先頭+ 4*(I+1-
1+256*(J-1))」の差が−4になり、絶対値がDmax (こ
こではDmax =4)以下になるからである。
【0114】また、キャッシュ競合グラフ950におい
て、ノード952とノード951の間にエッジがあるの
は、キャッシュ競合グラフ解析34において、これらの
ノードの番号に対応したキャッシュ参照群911とキャ
ッシュ参照群901内のメモリ参照B(I,J,2)とA(I,J)の
アドレス計算式「Bの先頭+ 4*(I-1+256*(J-1)+256*12
8*(2-1))」と「Aの先頭+ 4*(I-1+256*(J-1))」との差
が「4*256*128 +Bの先頭−Aの先頭」となり、また、
図3に示したように配列Bの先頭が配列Aの先頭から12
8Kバイト後にあることから、上記の差が256Kバイトにな
り、キャッシュサイズ(256Kバイト)で割った余りが0
となり、絶対値がDCmax (ここでは、DCmax =4)
以下になるためである。
【0115】図18の他の部分については、説明を省略
する。
【0116】以上のようにして、キャッシュ競合情報を
作成したら、次に図1のステップ40の判定を介してメ
モリ参照順序制御50を行う。以下、メモリ参照順序制
御50の処理について詳細に説明する。メモリ参照順序
制御50では、一度キャッシュブロックに転送されたメ
モリブロックへのすべての参照が完了する前にそのブロ
ックをキャッシュ110から追い出さすことがないよう
に、メモリ参照の順序を並び替え、キャッシュ競合を削
減する。
【0117】図13は、メモリ参照順序制御50の処理
手順の概略を示すフローチャートである。
【0118】まず、ステップ51では、キャッシュ競合
情報9に基づき、キャッシュ競合を起こすキャッシュ参
照群9010のみを対象として、これに含まれるメモリ
参照の文の中間コード5の参照群番号330の部分にキ
ャッシュ参照群番号9020を書き込む。
【0119】例えば、図18のキャッシュ競合情報9に
基づき図16の中間コード5にこの処理を行うと、図1
9に示される中間コード5になる。参照群番号330の
欄に、対応するキャッシュ参照群番号が書き込まれてい
る。
【0120】次に、ステップ52では、キャッシュ競合
情報9に基づき、次のステップ53で行うループ展開の
方法を決定する。メモリ参照順序制御50でループ展開
53を行うのは、同一メモリブロックへのメモリ参照が
複数のループ繰り返しにまたがって起こるためである。
ループ展開53によって、メモリ参照の並び替えを複数
のループ繰り返しにまたがって実施できるので、キャッ
シュ競合削減20の効果を増大することができる。ステ
ップ52では、そのために最適なループ展開方法を決定
する。なお、このステップ52のループ展開方法決定に
ついては、後に詳細に説明する。
【0121】例えば、図18のキャッシュ競合情報に基
づき図19の中間コード5のループ展開方法を決定する
と、I についての最内側ループに対して4倍展開すると
良いことが分かる。
【0122】次に、ステップ53では、ステップ52で
決められたループ展開方法に従ってループ展開を行う。
なお、ループ展開53の処理方法は公知なので、処理の
詳細は省略する。
【0123】次に、ステップ54では、ステップ53の
ループ展開によって生成された中間コード5内におい
て、同一の変数への代入文を探し、その変数名のリネー
ミングが可能であればリネームする。この処理により、
必要な場合以外は代入先変数が異なるようになるので、
中間コード並び替えの自由度が増し、より最適な並び替
えが行える。逆に、同一の変数への代入文がそのまま残
っていると、それらの代入文どうしは順序を入れ替えら
れないので、中間コード並び替えが困難になる。このス
テップ54の変数名リネーミングの処理も公知技術なの
で、処理の詳細は省略する。
【0124】例えば、図19の中間コード5に対してス
テップ53のループ展開とステップ54の変数名リネー
ミングとを行うと、図20のような中間コード5にな
る。上述したように、ステップ52のループ展開方法決
定で、Iについての最内側ループに対して4倍展開する
と良いことが分かっているので、図20ではそのように
Iについて4倍に展開されている。また、リネーミング
が可能な変数についてはリネームが成されている。
【0125】次に、ステップ55で、中間コード5内の
同一配列要素への参照を削除する。これにより、冗長な
メモリ参照が削除される。このステップ55の配列共通
式削除の処理も公知技術なので、処理の詳細は省略す
る。
【0126】例えば、図20の中間コード5に対してス
テップ55の配列共通式削除を行うと、図21のような
中間コード5になる。ここでは、図20のコード番号3
05が11と21と31の文が削除されている。ループ
展開を実施するとこのような冗長な配列参照が多数発生
するので、本ステップが必要となる。
【0127】次に、ステップ57で、キャッシュ競合情
報9と中間コード5に書き込まれた参照群番号330に
基づき、中間コード5を並び替えてキャッシュ競合を削
減する。具体的には、一度キャッシュブロックに転送さ
れたメモリブロックへのすべての参照が完了する前にそ
のブロックをキャッシュ110から追い出すことがない
ように、メモリ参照の順序を並び替える。
【0128】以上で、メモリ参照順序制御50の処理の
概要を説明した。
【0129】本実施例では、本発明の最良の構成を示し
ているので、メモリ参照順序制御50は多くの処理ステ
ップを含んでいるが、上記の処理うち、ループ展開方法
決定52、ループ展開53、変数名リネーミング54、
および配列共通式削除55については、一部のみ実施し
てもある程度の効果が得られる。
【0130】例えば、ループが十分にループ展開されて
いるソースプログラム3に対しては、ループ展開方法決
定52およびループ展開53は無くてもよい。逆に、ル
ープ本体が全く展開されていないソースプログラムに対
しては、これら2つのステップは不可欠である。このよ
うな部分的な実施例も種々に考えられるが、詳細は省略
する。
【0131】また、ループ展開52から配列共通式削除
55の処理によって中間コード5は種々の変更を受ける
ため、ステップ57の直前で再びキャッシュ競合解析3
0とキャッシュ参照群番号9010の中間コード5への
書き込み51を実施するようにしてもよいが、キャッシ
ュ競合削減20の効果は余り変わらないので、詳細は省
略する。
【0132】次に、図13のメモリ参照順序制御のう
ち、ステップ52のループ展開方法決定の処理、および
ステップ57の中間コード並び替えによるキャッシュ競
合削減の処理について詳細に説明する。まず、ループ展
開方法決定の処理の詳細について説明する。
【0133】図14は、図13のステップ52のループ
展開方法決定処理の詳細なフローチャートである。ま
ず、ステップ521で、キャッシュ競合情報9を用い
て、ループ展開方法の候補の一覧であるループ展開候補
表8を作成する。
【0134】図22(a)に、ループ展開候補表8の構
造を示す。ループ展開候補表8は、キャッシュ競合を起
こす各キャッシュ参照群9010ごとに、そのキャッシ
ュ参照群番号82、最適な展開対象ループ候補84、お
よびループ展開数候補86を保持する。
【0135】ステップ521でループ展開候補表8を作
成したら、ステップ536で、ループ展開候補表8に一
番多く現われる展開対象ループ候補84を探し、これを
展開対象ループとする。次に、ステップ538では、展
開対象ループのループ展開数候補のうち最大のものをル
ープ展開数とする。
【0136】以上により、キャッシュ競合削減20に最
適なループ展開方法が決定される。
【0137】次に、ステップ521のループ展開候補表
作成の処理について詳細に説明する。ループ展開候補表
作成521では、各キャッシュ参照群CAG(i)について、
ステップ522〜ステップ534の処理を繰り返す。
【0138】まず、ステップ524では、キャッシュ競
合情報9を用いて、キャッシュ参照群CAG(i)が他のキャ
ッシュ参照群9010とキャッシュ競合するか否かを判
定する。判定結果が真の場合はステップ526に進み、
偽の場合は以下の処理をスキップしてステップ534に
進む。
【0139】ステップ526では、キャッシュ参照群CA
G(i)内のメモリ参照の1つを選んで、そのアドレス計算
式9090をAEとする。ステップ528では、展開対象
ループ候補84を決定する。展開対象ループ候補84と
しては、ループ展開可能なループのうち、ループ制御変
数をii、その増分をinc としたとき、abs(AE[ii+inc]−
AE[ii])が最小となるループとする。abs(AE[ii+inc]−
AE[ii])は、メモリ参照のストライドとよばれ、メモリ
参照のメモリ上での間隔を表わしている。
【0140】次に、ステップ530では、展開対象ルー
プ候補84に対するループ展開数候補86を求める。ル
ープ展開数候補86としては、キャッシュ参照群CAG(i)
内のすべてのメモリ参照がループ展開後も1つのメモリ
ブロックに収まるようなループ展開数のうち最大のもの
とする。ステップ532では、キャッシュ参照群番号8
2、最適な展開対象ループ候補84、およびループ展開
数候補86を、ループ展開候補表8に書き込む。
【0141】図22(b)は、図18のキャッシュ参照
競合情報9に対して上述の手順で作成されたループ展開
候補表8を示す。展開対象ループ候補84として「DO
20I=1,255 」が多く現れており、ループ展開数候補86
の最大が「4」になっている。したがって、ステップ5
36,538では、これらがループ展開の対象および展
開数として選択される。
【0142】次に、図13のステップ57の中間コード
並び替えによるキャッシュ競合削減57について詳細に
説明する。
【0143】図15は、中間コード並び替えによるキャ
ッシュ競合削減57の詳細なフローチャートである。こ
こでの処理は、プログラム高速化のための一般的な命令
並び替え処理であるリストスケジューリングをベースに
している。リストスケジューリングについては、例えば
「日経エレクトロニクス 1991.3.4 (no. 521), pp.165
- 185 」に示されている。
【0144】なお、命令並び替えの方法は、ここで示す
方法以外にも種々の方法が適用できる。キャッシュ競合
を削減するために必要なことは、一度キャッシュブロッ
クに転送されたメモリブロックへのすべての参照が完了
する前にそのブロックをキャッシュから追い出すことが
ないように、メモリ参照の順序を調整することである。
本実施例では、そのために、スケジューリングする命令
を途中で篩い分ける処理を追加している。後述のステッ
プ584がこのための処理である。これに加え、メモリ
参照の並び替えができない部分があっても正しく動作す
るように、ステップ582、ステップ586、ステップ
590の処理を付け加えてある。
【0145】中間コード並び替えによるキャッシュ競合
削減57での処理は、大きく分けて2つのステップより
なる。まず、ステップ570では、中間コード5の各文
をスケジュール表26に割り当てる。ス
【0146】スケジュール表26は、プログラム実行の
各時刻(タイムスロット)毎の実行文を示す表であり、
図24のような形式を有する。各行は、タイムスロット
値303、文番号305、3番地文320、および参照
群番号330より成る。なお、1つのタイムスロットで
複数の文が実行可能な場合は、305、320、330
の欄が複数回繰り返された構造となる。
【0147】ステップ570で中間コード5の各文をス
ケジュール表26に割り当てた後、ステップ592で、
スケジュール表26内での文の順番に従って、中間コー
ド5を並び替える。これにより、中間コードの並び替え
が実現される。
【0148】次に、上記ステップ570の中間コード5
の各文をスケジュール表26に割り当てる処理について
詳細に説明する。
【0149】まず、ステップ572では、中間コード5
に対するデータ依存グラフ24を作成する。データ依存
グラフ24は、中間コード5内の各文間での実行の順序
関係を示すグラフである。次に、ステップ574では、
データ依存グラフ24内の各ノードに対してクリティカ
ルパス法による優先順位を付ける。
【0150】図23に、図21の中間コード5に対する
データ依存グラフ24を示す。データ依存グラフ24
は、中間コード5の各文をノードとして、文間での実行
順序関係をノードを接続するアークで表現している。各
ノードおよびアークには、付加的な情報が付けられてい
る。例えば、ノード242内の、左側の数字はコード番
号305であり、右側の文はコード番号305での3番
地文である。ノードの右側に付加された数字は、文を実
行する際の優先度と参照群番号330である。ただし、
参照群番号330はキャッシュ競合を起こすメモリ参照
にのみ付加されている。
【0151】アーク244は、ノード242の文がノー
ド246の文に先行して実行しなければならないことを
表わす。アークについた数字は、先行する文の実行の所
要時間を表わす。なお、クリティカルパス法による優先
順位は、各ノードから終端ノードへ至る最長パスの所要
時間である。
【0152】ステップ574で優先順位を決定した後、
ステップ576で、現在タイムスロットを表わす変数t
に1を設定する。ステップ578では、まだスケジュー
ル表に割り当てられていない文のうち、タイムスロット
tで実行可能なものの集まりSRを検出する。ただし、
文がタイムスロットtで実行可能とは、直接の先行文が
すべてスケジュール表に割り当てられていて、タイムス
ロットt以前にそれらの実行が完了していることを示
す。
【0153】次に、ステップ580ではSRが空か判定
する。判定結果が真の場合はステップ592へ進み、偽
の場合はステップ582に進む。ステップ582では、
SRの内容をSRorigに保存する。
【0154】ステップ584では、「一部のメモリ参照
のみがスケジュール表に割り当て済みのキャッシュ参照
群」とキャッシュ競合するキャッシュ参照群に属するメ
モリ参照の文をSRから除く。このステップにより、一
度キャッシュブロックに転送されたメモリブロックへの
すべての参照が完了する前にそのブロックをキャッシュ
から追い出さないように制御している。
【0155】なお、ここでSRから除かれたメモリ参照
文は、スケジュール表への割り当てを中止したわけでは
なく、延期するだけである。各メモリ参照文は、その文
でのメモリ参照がキャッシュ競合するメモリ参照を含む
キャッシュ参照群内の文がすべてスケジュール表に割り
当てられた後に、スケジュール表に割り当てられる。
【0156】次に、ステップ586では、SRが空か否
か判定し、真の場合はステップ590に進み、偽の場合
はステップ588に進む。ここでの判定により、キャッ
シュ競合を生じるメモリ参照文以外にタイムスロットt
で実行可能な文が無いかどうかを判定している。すなわ
ち、SRが空の場合は、そのようなメモリ参照文以外に
タイムスロットtで実行可能な文が無い場合であり、ス
テップ590に進む。SRが空でない場合は、キャッシ
ュ競合を生じない文がタイムスロットtで実行可能な場
合であり、ステップ588に進む。
【0157】ステップ590は、キャッシュ競合を生じ
るメモリ参照文以外にタイムスロットtで実行可能な文
が無い場合の処理であり、それらのメモリ参照文の中か
らスロットtに割り当てる文が選ばれるように、SRの
値が再設定される。すなわち、ステップ578で求めら
れた時点でのSRの内容であるSRorigをSRに再設定
している。この場合、キャッシュ競合が必ず発生する
が、このように実行可能な文がメモリ参照文のみで、し
かも、キャッシュ競合を生じる文だけである状況は希で
あり、大きな問題は無い。
【0158】また、このような場合、別法として、タイ
ムスロットtに文を割り当てるのを諦め、tの値を1増
やしてステップ578からの処理を続けるようにしても
よい。ただし、この方法では、何も割り当てないタイム
スロットをいくつまで許すか判定しないと、処理が終了
しないことがあるので注意が必要である。この様な種々
の別法を用いることも本発明の範囲である。
【0159】次に、ステップ588では、SR内で優先
度が一番高い文の1つをスケジュール表のタイムスロッ
トtの部分に割り当て、ステップ578に進んで、ルー
プ処理を繰り返す。なお、ステップ588がステップ5
86の直後に実行される場合は、タイムスロットtで実
行可能な文の内、キャッシュ競合を生じず、かつ、優先
度が一番高い文がスケジュール表に割り当てられる。ま
た、ステップ590の直後に実行される場合は、キャッ
シュ競合を生じる文がスケジュール表に割り当てられる
が、優先度が一番高い文が選ばれる。ステップ588で
優先度が一番高い文が複数ある場合の選択法については
種々の従来技術があるが、本発明には大きく影響しない
ので、詳細は省略する。
【0160】ステップ592では、スケジュール表にま
だ割り当てていない文が残っているか否か判定し、これ
が真の場合はステップ596で現在タイムスロットtを
1増やして、ステップ578に進んでループする。偽の
場合は処理を終える。
【0161】図24は、上述の手順で割り当てたスケジ
ュール表の例を示す。これは、図23のデータ依存グラ
フ24に対するスケジュール表である。ステップ584
の処理の効果として、互いにキャッシュ競合を起こすキ
ャッシュ参照群番号9020が1、2、5のキャッシュ
競合群9010に属するメモリ参照文は互いに混じらず
に並んでいる。3、4のキャッシュ競合群9010も同
様である。これにより、一度キャッシュブロックに転送
されたメモリブロックへのすべての参照が完了する前に
そのブロックをキャッシュから追い出されることを防い
でいる。
【0162】図25は、図24のスケジュール表26に
従って並び替えた後の中間コード5である。この後、図
1に示したようにコンパイラ1の処理のうちキャッシュ
競合削減20に引き続くステップであるコード生成60
を実行することにより、最終的には図26に示すオブジ
ェクトプログラム7が生成される。
【0163】図27に、図26のオブジェクトプログラ
ム7に対するキャッシュ競合発生状況を示す。従来技術
の欄で説明したように、図7に、キャッシュ競合削減2
0を適用しない場合のキャッシュ競合発生状況を示す。
図27では、図7の場合に較べて、キャッシュ競合によ
って発生する競合性キャッシュミスが全く無くなってい
ることが分かる。
【0164】本実施例の効果について定量的に評価して
みる。現在市場に出ているコンピュータでは、通常は1
命令当り1サイクルで実行を終えるが、キャッシュミス
を起こすと10サイクル程度の時間がかかるので、その
ような尺度で計算する。
【0165】まず、本実施例によるキャッシュ競合削減
を行う前の図6のオブジェクトプログラム5を実行した
ときの図7のキャッシュ競合発生状況から、ループ4回
分の実行サイクルを求める。1ループに対しキャッシュ
ミスが6回(各キャッシュミスに対し10サイクルかか
るとする)発生しており、キャッシュミスが発生した命
令以外の命令の数は7つであるから、4ループ*(キャ
ッシュミス6回*10サイクル+その他の命令実行7
回)=268サイクルである。
【0166】一方、本実施例によりキャッシュ競合削減
を行った結果の図26のオブジェクトプログラム5を実
行したときの図27のキャッシュ競合発生状況から、ル
ープ4回分の実行サイクルを求めると、キャッシュミス
6回*10サイクル+その他の命令実行33=93サイ
クルとなる。したがって、約2.9倍高速化されたこと
になる。
【0167】本実施例によれば、メモリ参照順序制御5
0をプログラムの中間コード5に対して実施するため、
少数のレジスタをメモリ参照命令に割り当ることによっ
て生じる余分な依存関係が生じず、メモリ参照の並び替
えの自由度が増す。そのため、メモリ参照を最適な位置
に移動することが可能となり、キャッシュ競合の削減率
が向上する。
【0168】なお、本実施例ではメモリ参照順序制御5
0をプログラムの中間コード5に対して実施したが、オ
ブジェクトプログラム7に対して実施することも可能で
ある。その場合、中間コード5の段階では生成を予期で
きなかった命令語を含めたすべての命令語を対象として
命令語の並び替えが実施できるので、より精密な並び替
えを行える。
【0169】また、メモリ参照順序制御50をプログラ
ムの中間コード5とオブジェクトプログラム7の両方で
行うことも可能である。この場合、上記の2つの実施例
の両者の利点を同時に生かせるので、最適なキャッシュ
競合削減が行える。
【0170】また、メモリ参照順序制御50をプログラ
ムの中間コード5に対して実施した後で、この結果をソ
ースプログラム5に再変換して外部に出力することも可
能である。この場合、キャッシュ競合削減20の効果を
何れのコンパイラ1でも利用できるので、キャッシュ競
合削減20の汎用性が増大する。
【0171】なお、上記実施例では、ダイレクトマップ
方式のキャッシュに対して本発明を適用した例を示した
が、本発明は、これに限らず、セット・アソシアティブ
方式のキャッシュに対しても適用できる。
【0172】
【発明の効果】以上説明したように、本発明によれば、
キャッシュ競合により大幅な性能低下を引き起こすプロ
グラムに対して、キャッシュ競合の発生を削減すること
ができ、その実行を高速化することができる。特に、ダ
イレクトマップ方式のキャッシュを備えたコンピュータ
で動作するプログラムをコンパイルする際に用いて好適
である。
【図面の簡単な説明】
【図1】本発明の一実施例に係るコンパイル方法を適用
したコンパイラの構成図。
【図2】キャッシュ競合削減の例題ソースプログラムを
示す図。
【図3】主メモリのキャッシュへのマッピング状況の概
況を示す図。
【図4】主メモリのキャッシュへのマッピング状況の詳
細(その1)を示す図。
【図5】主メモリのキャッシュへのマッピング状況の詳
細(その2)を示す図。
【図6】実施例によるキャッシュ競合削減を行う前のオ
ブジェクトプログラムを示す図。
【図7】実施例によるキャッシュ競合削減を行う前のキ
ャッシュ競合状況を示す図。
【図8】キャッシュ競合解析のフローチャート図。
【図9】キャッシュ参照群解析の詳細フローチャート
図。
【図10】キャッシュ参照群解析における距離計算の詳
細フローチャート図。
【図11】キャッシュ競合グラフ解析の詳細フローチャ
ート図。
【図12】キャッシュ競合グラフ解析における距離計算
の詳細フローチャート図。
【図13】メモリ参照順序制御の概略フローチャート
図。
【図14】ループ展開方法決定の詳細フローチャート
図。
【図15】中間コード並び替えによるキャッシュ競合削
除の詳細フローチャート図。
【図16】キャッシュ競合削減実施前の中間コードを示
す図。
【図17】キャッシュ競合情報の構造を示す図。
【図18】例題プログラムのキャッシュ競合情報を示す
図。
【図19】キャッシュ参照群番号書き込み後の中間コー
ドを示す図。
【図20】ループ展開および変数リネーミング完了後の
中間コードを示す図。
【図21】配列共通式削除後の中間コードを示す図。
【図22】ループ展開候補表の構造、および例題プログ
ラムに対するループ展開候補表を示す図。
【図23】データ依存グラフを示す図。
【図24】スケジュール表を示す図。
【図25】キャッシュ競合削減実施後の中間コードを示
す図。
【図26】キャッシュ競合削減実施後のオブジェクトプ
ログラムを示す図。
【図27】キャッシュ競合削減実施後のキャッシュ競合
状況を示す図。
【符号の説明】
1…コンパイラ、3…ソースプログラム、5…中間コー
ド、7…オブジェクトプログラム、8…ループ展開候補
表、9…キャッシュ競合情報、10…構文解析、20…
キャッシュ競合削減、24…データ依存グラフ、30…
キャッシュ参照群解析、32〜39…キャッシュ競合解
析の処理ステップ、50…メモリ参照順序制御、51…
キャッシュ参照番号の中間コードへの書き込みステッ
プ、52…ループ展開方法決定、53…ループ展開、5
4…変数名リネーミング、55…配列共通式削除、57
…中間コード並び替えによるキャッシュ競合削除ステッ
プ、60…コード生成、82…キャッシュ参照番号、8
4…展開ループ候補、86…ループ展開数候補。110
…キャッシュ、112〜116…キャッシュブロック、
120…主メモリ、242…データ依存グラフのノー
ド、244…データ依存グラフのアーク、303…タイ
ムスロッット値、305…文番号、310…ラベル、3
20…3番地文、330…参照群番号、521〜538
…ループ展開候補表作成の処理ステップ、570〜59
2…中間コード並び替えによるキャッシュ競合削減の詳
細ステップ、950…例題プログラムのキャッシュ競合
グラフ、901, 911, 921, 931, 941…例
題プログラムのキャッシュ参照群、951〜955…例
題プログラムでのキャッシュ競合グラフのノード、99
0…例題プログラムのキャッシュ参照群情報、3202
〜3236…キャッシュ参照群解析の処理ステップ、3
252〜3272…ステップ3218の詳細ステップ、
3402〜3418…キャッシュ競合グラフ解析の処理
ステップ、3452〜3470…3408の詳細ステッ
プ、9500…キャッシュ競合グラフ、9510, 95
20…キャッシュ競合グラフのノード、9590…キャ
ッシュ競合グラフのエッジ、9010…キャッシュ参照
群、9020…キャッシュ参照群番号、9040…文番
号、9060…参照配列要素、9090…アドレス計算
式、9900…キャッシュ参照群情報。

Claims (8)

    (57)【特許請求の範囲】
  1. 【請求項1】データキャッシュメモリを有するコンピュ
    ータに対するオブジェクトプログラムを生成するコンパ
    イル方法において、 入力されたソースプログラムを中間コードに変換する構
    文解析ステップと、 該中間コード 中の複数のメモリ参照命令でそれぞれ参照
    するデータのアドレス計算式どうしを比較して参照デー
    タのデータキャッシュ上での位置どうしの間の距離を求
    めることによりメモリ参照命令間でのキャッシュ競合発
    生状況を解析してキャッシュ競合情報として出力するキ
    ャッシュ競合解析ステップと、 該キャッシュ競合情報に基づいて、メモリ参照命令の実
    行によって一度キャッシュブロックに転送されたメモリ
    ブロックを参照するすべてのメモリ参照命令の実行が完
    了するまで該メモリ参照命令のいずれかとキャッシュ競
    合するメモリ参照命令の実行開始を遅延させるように、
    前記中間コード内のメモリ参照命令の順番を並び替える
    メモリ参照順序制御ステップと 前記中間コードからオブジェクトプログラムを生成する
    コード生成ステップと を備えたことを特徴とするコンパ
    イル方法。
  2. 【請求項2】請求項1に記載のコンパイル方法におい
    て、 前記キャッシュ競合解析ステップは、 前記中間コード中のメモリ参照命令を抽出して同一のメ
    モリブロックへのメモリ参照命令をキャッシュ参照群と
    してまとめた情報であるキャッシュ参照群情報を作成
    し、該キャッシュ参照群情報を出力するキャッシュ参照
    群解析ステップと、 該キャッシュ参照群情報に基づいて、任意の2つのキャ
    ッシュ参照群のペアがキャッシュ競合するメモリ参照命
    令のペアを含むときそれらのキャッシュ参照群間が競合
    すると判定し、そのような判定を各2つのキャッシュ参
    照群のペアに対して行なうことにより、キャッシュ参照
    群どうしの間でのキャッシュ競合状況を表すキャッシュ
    競合グラフを作成し、該キャッシュ競合グラフをキャッ
    シュ競合情報として出力するキャッシュ競合グラフ解析
    ステップとを備えたことを特徴とするコンパイル方法。
  3. 【請求項3】請求項2に記載のコンパイル方法におい
    て、 前記キャッシュ参照群解析ステップは、前記中間コード
    中のメモリ参照命令で参照するデータどうしの主メモリ
    上の距離が所定値以下のとき、それらのメモリ参照命令
    が同一のメモリブロックを参照するものと判定して、そ
    れらのメモリ参照命令を同じキャッシュ参照群に登録す
    ることを特徴とするコンパイル方法。
  4. 【請求項4】請求項2に記載のコンパイル方法におい
    て、 前記キャッシュ参照群解析ステップは、前記中間コード
    中のメモリ参照命令で参照する主メモリ上の位置から
    そのメモリ参照命令で参照するメモリブロックを求め、
    同じメモリブロックを参照するメモリ参照命令を同じキ
    ャッシュ参照群に登録することを特徴とするコンパイル
    方法。
  5. 【請求項5】請求項2に記載のコンパイル方法におい
    て、 前記キャッシュ競合グラフ解析ステップは、前記キャッ
    シュ参照群情報に含まれる任意の第1および第2のキャ
    ッシュ参照群について、第1のキャッシュ参照群に含ま
    れるすべてのメモリ参照命令で参照するデータと第2の
    キャッシュ参照群に含まれるすべてのメモリ参照命令で
    参照するデータとの間のキャッシュ上の距離の最小値を
    求め、該最小値が所定値以下のとき、上記第1のキャッ
    シュ参照群と第2のキャッシュ参照群との間にキャッシ
    ュ競合が発生すると判定することを特徴とするコンパイ
    ル方法。
  6. 【請求項6】請求項2に記載のコンパイル方法におい
    て、 前記キャッシュ競合グラフ解析ステップは、前記キャッ
    シュ参照群情報に含まれる任意の第1および第2のキャ
    ッシュ参照群について、第1のキャッシュ参照群に含ま
    れるすべてのメモリ参照命令で参照する主メモリ上の位
    置からマッピングされるキャッシュブロックを求め、同
    様に第2のキャッシュ参照群に含まれるすべてのメモリ
    参照命令で参照する主メモリ上の位置からマッピングさ
    れるキャッシュブロックを求め、同じキャッシュブロッ
    クにマッピングされるメモリ参照命令がある場合に、こ
    れら第1のキャッシュ参照群と第2のキャッシュ参照
    の間にキャッシュ競合が発生すると判定することを特
    徴とするコンパイル方法。
  7. 【請求項7】請求項1に記載のコンパイル方法におい
    て、 前記メモリ参照順序制御ステップは、前記中間コード
    のループに対しループ展開を行った後に、前記メモリ参
    命令の順番の並び替えを行うことを特徴とするコンパ
    イル方法。
  8. 【請求項8】請求項7に記載のコンパイル方法におい
    て、 前記ループ展開は、ループ展開可能なループのうち、そ
    のループ内のメモリ参照命令が参照するメモリ上での間
    隔が最小となるループを展開対象ループとし、ループ展
    開後の各メモリ参照命令が参照する範囲が1つのメモリ
    ブロックに収まるようなループ展開数のうち最大のもの
    をループ展開数として、ループ展開することを特徴とす
    るコンパイル方法。
JP25001493A 1993-09-10 1993-09-10 キャッシュ競合削減コンパイル方法 Expired - Fee Related JP3417984B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP25001493A JP3417984B2 (ja) 1993-09-10 1993-09-10 キャッシュ競合削減コンパイル方法
US08/861,187 US5862385A (en) 1993-09-10 1997-05-21 Compile method for reducing cache conflict

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP25001493A JP3417984B2 (ja) 1993-09-10 1993-09-10 キャッシュ競合削減コンパイル方法

Publications (2)

Publication Number Publication Date
JPH0784799A JPH0784799A (ja) 1995-03-31
JP3417984B2 true JP3417984B2 (ja) 2003-06-16

Family

ID=17201567

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25001493A Expired - Fee Related JP3417984B2 (ja) 1993-09-10 1993-09-10 キャッシュ競合削減コンパイル方法

Country Status (2)

Country Link
US (1) US5862385A (ja)
JP (1) JP3417984B2 (ja)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10124327A (ja) * 1996-10-16 1998-05-15 Nec Corp インストラクションキャッシュミス率削減方法
DE69727465T2 (de) 1997-01-09 2004-12-23 Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto Rechnersystem mit Speichersteuerung für Stossbetrieb-Übertragung
JP3539613B2 (ja) * 1997-12-03 2004-07-07 株式会社日立製作所 ループ飛び出し文を含むループに対する配列サマリ解析方法
JP3141836B2 (ja) 1998-01-26 2001-03-07 日本電気株式会社 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体
JP3178403B2 (ja) * 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6341370B1 (en) * 1998-04-24 2002-01-22 Sun Microsystems, Inc. Integration of data prefetching and modulo scheduling using postpass prefetch insertion
US6367069B1 (en) * 1999-02-01 2002-04-02 Sun Microsystems, Inc. Efficient array descriptors for variable-sized, dynamically allocated arrays
US6421826B1 (en) 1999-11-05 2002-07-16 Sun Microsystems, Inc. Method and apparatus for performing prefetching at the function level
US6427235B1 (en) 1999-11-05 2002-07-30 Sun Microsystems, Inc. Method and apparatus for performing prefetching at the critical section level
US7383424B1 (en) 2000-06-15 2008-06-03 Hewlett-Packard Development Company, L.P. Computer architecture containing processor and decoupled coprocessor
US7107583B2 (en) * 2001-02-16 2006-09-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reducing cache thrashing
JP2003173262A (ja) * 2001-12-06 2003-06-20 Hitachi Ltd プログラムチューニングシステムとプログラムチューニング方法およびプログラムと記録媒体
US6883067B2 (en) * 2002-02-08 2005-04-19 Stmicroelectronics Limited Evaluation and optimization of code
US20040025151A1 (en) * 2002-07-31 2004-02-05 Shan-Chyun Ku Method for improving instruction selection efficiency in a DSP/RISC compiler
US7100157B2 (en) * 2002-09-24 2006-08-29 Intel Corporation Methods and apparatus to avoid dynamic micro-architectural penalties in an in-order processor
US20050044538A1 (en) * 2003-08-18 2005-02-24 Srinivas Mantripragada Interprocedural computing code optimization method and system
US7120907B2 (en) * 2003-08-28 2006-10-10 International Business Machines Corporation Unrolling loops with partial hot traces
JP4047788B2 (ja) * 2003-10-16 2008-02-13 松下電器産業株式会社 コンパイラ装置およびリンカ装置
JP4934267B2 (ja) * 2003-10-17 2012-05-16 パナソニック株式会社 コンパイラ装置
JP4554241B2 (ja) 2004-03-16 2010-09-29 富士通セミコンダクター株式会社 キャッシュカラーリング方法
US7761474B2 (en) * 2004-06-30 2010-07-20 Sap Ag Indexing stored data
US7469404B2 (en) * 2004-06-30 2008-12-23 Intel Corporation Bank assignment for partitioned register banks
JP4680546B2 (ja) * 2004-07-21 2011-05-11 株式会社日立製作所 実行条件設定支援方法および装置
JP2006065462A (ja) * 2004-08-25 2006-03-09 Canon Inc ソフトウェア・システム、ソフトウェア停止方法、プログラム、及び、記憶媒体
WO2006061767A1 (en) * 2004-12-10 2006-06-15 Koninklijke Philips Electronics N.V. Data processing system and method for cache replacement
US7356545B2 (en) * 2004-12-22 2008-04-08 Oracle International Corporation Enabling relational databases to incorporate customized intrusion prevention policies
US7712081B2 (en) * 2005-01-19 2010-05-04 International Business Machines Corporation Using code motion and write and read delays to increase the probability of bug detection in concurrent systems
WO2007020735A1 (ja) * 2005-08-18 2007-02-22 Matsushita Electric Industrial Co., Ltd. 競合解決装置
US8661102B1 (en) * 2005-11-28 2014-02-25 Mcafee, Inc. System, method and computer program product for detecting patterns among information from a distributed honey pot system
US20070260856A1 (en) * 2006-05-05 2007-11-08 Tran Thang M Methods and apparatus to detect data dependencies in an instruction pipeline
US8549496B2 (en) 2009-02-27 2013-10-01 Texas Tech University System Method, apparatus and computer program product for automatically generating a computer program using consume, simplify and produce semantics with normalize, transpose and distribute operations
US8195858B1 (en) 2009-07-28 2012-06-05 Nvidia Corporation Managing conflicts on shared L2 bus
US8321618B1 (en) * 2009-07-28 2012-11-27 Nvidia Corporation Managing conflicts on shared L2 bus
KR101636521B1 (ko) * 2010-03-26 2016-07-06 삼성전자주식회사 코드 오버레이 생성 장치 및 방법
US9696973B1 (en) 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
US10078505B2 (en) 2016-07-20 2018-09-18 International Business Machines Corporation Partial connection of iterations during loop unrolling
US12020029B2 (en) 2019-06-14 2024-06-25 Nec Corporation Program conversion device, program conversion method, and program conversion program

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142634A (en) * 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
EP0459232B1 (en) * 1990-05-29 1998-12-09 National Semiconductor Corporation Partially decoded instruction cache and method therefor
US5488729A (en) * 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
CA2109799A1 (en) * 1991-05-24 1992-12-10 Daniel Mark Nosenchuck Optimizing compiler for computers
JP3730252B2 (ja) * 1992-03-31 2005-12-21 トランスメタ コーポレイション レジスタ名称変更方法及び名称変更システム
US5337415A (en) * 1992-12-04 1994-08-09 Hewlett-Packard Company Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency

Also Published As

Publication number Publication date
US5862385A (en) 1999-01-19
JPH0784799A (ja) 1995-03-31

Similar Documents

Publication Publication Date Title
JP3417984B2 (ja) キャッシュ競合削減コンパイル方法
US5930507A (en) Compiling processing apparatus
US6675374B2 (en) Insertion of prefetch instructions into computer program code
US6721943B2 (en) Compile-time memory coalescing for dynamic arrays
US20020013938A1 (en) Fast runtime scheme for removing dead code across linked fragments
EP1039382B1 (en) Memory access optimizing method
US20100095271A1 (en) Fine-Grained Software-Directed Data Prefetching Using Integrated High-Level and Low-Level Code Analysis Optimizations
JPH04225431A (ja) 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法
US8806138B1 (en) Dynamic dependencies and parameterizations for execution and caching
JPH04215133A (ja) コード最適化方法およびコンパイラ・システム
JP2001195304A (ja) キャッシュ記憶装置
US7530063B2 (en) Method and system for code modification based on cache structure
US7313787B2 (en) Compiler and method for optimizing object codes for hierarchical memories
Bodik et al. Array data flow analysis for load-store optimizations in fine-grain architectures
CN114995832A (zh) 一种动静结合的二进制程序翻译方法
CN114546401A (zh) 基于循环折叠的二进制程序体积优化器
JPH08212081A (ja) メモリ割り付け方法、並びにコンパイル方法およびコンパイラ
JPH03132828A (ja) 共通の部分式を除去する方法
JP6442967B2 (ja) 情報処理プログラム、情報処理装置、情報処理方法
JP3186867B2 (ja) キャッシュメモリ構成判別方法および計算機システム
JPH08278894A (ja) ハッシュ法による情報処理方法および情報処理装置
JPH10275088A (ja) リンク最適化方法
JP2000020318A (ja) メモリアクセス命令削減装置および記録媒体
JPH07306790A (ja) ループ最適化方式
JP2000155689A (ja) ループ展開方法及び装置

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090411

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090411

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100411

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110411

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees