JPH10207772A - キャッシュミス予測方法 - Google Patents

キャッシュミス予測方法

Info

Publication number
JPH10207772A
JPH10207772A JP9024327A JP2432797A JPH10207772A JP H10207772 A JPH10207772 A JP H10207772A JP 9024327 A JP9024327 A JP 9024327A JP 2432797 A JP2432797 A JP 2432797A JP H10207772 A JPH10207772 A JP H10207772A
Authority
JP
Japan
Prior art keywords
cache miss
loop
code
cache
execution
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.)
Pending
Application number
JP9024327A
Other languages
English (en)
Inventor
Takayoshi Iizuka
孝好 飯塚
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 JP9024327A priority Critical patent/JPH10207772A/ja
Publication of JPH10207772A publication Critical patent/JPH10207772A/ja
Pending legal-status Critical Current

Links

Abstract

(57)【要約】 【課題】 プログラムを予め実行することなしに、プロ
グラムの実際の実行に際して、ループが実行される度毎
のキャッシュミスを正確に予測すること、及びプリフェ
ッチングによって性能が低下する場合があるという問題
を回避すること。 【解決手段】 キャッシュメモリを有する計算機システ
ムで実行されるプログラムに対して、プリフェッチング
の単位であるループを単位として、該ループのキャッシ
ュミス率がある閾値以上であるかを、該プログラムの実
行時に予測するループ内キャッシュミス実行時予測コー
ドを付加する。更に、該ループのキャッシュミス率が閾
値以上であると予測された場合は、該ループにプリフェ
ッチング実施済みのコードを実行し、そうでない場合は
該ループにプリフェッチングを実施していないコードを
実行するプリフェッチング実行制御コードを付加する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】キャッシュを有する計算機で
実行されるプログラムに対して、ループ内でのキャッシ
ュミスの発生を予測するキャッシュミス予測方法に関す
る。
【0002】
【従来の技術】今日、計算機システムのCPUの性能
は、クロック周波数の高速化に伴って急激に向上してい
るが、主メモリのアクセス速度は十分に追随していな
い。そのため、CPUと主メモリの速度比は非常に大き
くなっており、今後もますます大きくなる傾向にある。
そこで、現在の殆どの高性能計算機では、CPUと主メ
モリの間に、主メモリ上のデータのコピーを保持する高
速なキャッシュを置き、CPUの速度に合わせたアクセ
ス速度を達成している。しかし、キャッシュの容量は、
主メモリに較べて数十分の1から数百分の1程度と小さ
いので、全てのデータがキャッシュに置かれるわけでは
ない。CPUから要求されたデータがキャッシュに無い
場合は、主メモリからキャッシュに転送する必要があ
る。この転送では、主メモリからデータを読み出す必要
があるので、CPUと主メモリの速度比がそのまま反映
され、CPUのマシンサイクルで計測すると数十サイク
ル程度と、大きなメモリ遅延を生じる。
【0003】そこで、このメモリ遅延を隠蔽するため
に、データが必要になる前に、予め、データをキャッシ
ュに転送する方法(プリフェッチング)が考案されてい
る。このような方法の例は、文献1「Todd C. Mowry, M
onica S. Lam, AnoopGupta, "Design and Evaluation o
f a Compiler Algorithm forPrefetching," ASPLOSV, p
p.62-73, 1992」に示されている。該文献のアルゴリズ
ムでは、ループ内のデータ参照を対象として、データの
参照よりも「メモリ遅延のサイクル数」分だけ前にプリ
フェッチ命令を発行し、メモリ上にあるデータをキャッ
シュへ転送する。なお、プリフェッチ命令以降の命令
は、プリフェッチ命令によるデータ転送の完了を待たず
に実行される。これにより、データ参照時には該データ
がキャッシュ上にあることが保証され、また、データ転
送の間は他の命令を実行できるので、メモリ遅延を隠蔽
することができる。なお、生成されるコードはプリフェ
ッチ命令を含んでいるので、実行命令数自体は増加す
る。しかし、ループの実行時間に対するメモリ遅延時間
の占める割合が大きな場合は、ループ実行時間の大幅な
削減が可能である。
【0004】プリフェッチが有効であるためには、プリ
フェッチ命令の追加による命令数の増加をなるべく抑え
る必要がある。そこで、メモリとキャッシュの転送単位
であるキャッシュラインを共有する複数のデータに対し
て、プリフェッチを1度のみに限定することによってプ
リフェッチ命令数を削減する方法が、文献1に書かれて
いる。また、一度キャッシュに載ったデータが後で再び
参照される場合、後者の参照ではプリフェッチが不要な
場合がある。そこで、これらの参照の間で参照されるデ
ータの量がキャッシュの容量よりも大きい場合に限定し
てプリフェッチすることによって、プリフェッチ命令数
を削減する方法が、文献2「David Callahan,Ken Kenne
dy, Allen Porterfield, "SoftwarePrefetching," PLD
I'92, pp.40-52, 1991」に述べられている。
【0005】プリフェッチが有効に働くためのもう一つ
の条件として、実行時間に対するメモリ遅延時間の占め
る割合が十分に大きいことが重要である。メモリ遅延時
間の占める割合が大きいためには、ループ内のメモリ参
照命令のキャッシュミス率が大きい必要がある。キャッ
シュミス率を求めるための方法としては、文献3「Sant
osh G. Abraham, Rabin A. Sugumar, B. R. Rau, Rajav
i Gupta ,"Predictability of Load/Store Instruction
Lagencies," MICRO-26,pp.139-152, 1993」では、プロ
グラム内の各メモリ参照の直前にキャッシュのシュミレ
ーションを行うコードを挿入し、コード挿入後のプログ
ラムを1度実行することにより、各メモリ参照命令のキ
ャッシュミス率を実測する方法が記述されている。
【0006】なお、キャッシュミスの予測とは別の分野
であるが、プログラム内の分岐命令での分岐の発生を予
測する方法が、文献4「T.-Y. Yeh, Yale N. Patt,"Alt
ernative Implementations of Two-level Adaptive Bra
nch Prediction,"19th Annual International Symposiu
m on Computer Architecture, May1992, pp.124-134」
に記述されている。文献4では、各分岐命令で、分岐の
発生履歴と、分岐発生履歴のパターンをテーブルに記録
し、直前までの分岐発生履歴とパターンテーブルから次
の分岐の発生を予測する2レベル分岐予測について書か
れている。なお、分岐のパターンはプログラムの実行中
に変化するため、各パターン毎に2ビットのカウンタを
設けている。具体的には、直前までの分岐のパターンに
対して次の分岐が発生したかどうか応じてこの2ビット
カウンタを増減させることにより、直前までの分岐パタ
ーンに対する次回の分岐の発生予測を動的に更新してい
る。このような動的な分岐パターン解析により、高い精
度で分岐予測を行う。
【0007】
【発明が解決しようとする課題】プリフェッチングは、
主メモリからキャッシュへのデータ転送に伴うメモリ遅
延を隠蔽するために有効な技術であり、実行時間に対す
るメモリ遅延時間の占める割合が十分に大きいループに
対しては性能が向上する。しかし、プリフェッチ命令の
追加によって実行命令数が増加するために、メモリ遅延
時間の割合が小さいループに対しては、性能が低下する
という欠点がある。プリフェッチ命令の追加による命令
数増加をなるべく少なくすることを目的とした従来技術
があるが、これによってプリフェッチ命令が無くなるわ
けではない。文献2によると、プリフェッチ命令の追加
によって、実行命令数が12%程度増加すると述べられ
ている。つまり、これらの方法では、プリフェッチング
によって性能が低下する場合、これを回避することが出
来ないと言う欠点がある。メモリ遅延時間の割合が小さ
いループに対して性能が低下しないようにするために
は、ループ内のメモリ参照命令のキャッシュミス率を知
る必要がある。キャッシュミス率を求めるための従来技
術としては、プログラム内の各メモリ参照の直前にキャ
ッシュのシュミレーションを行うコードを挿入して実行
するという方法がある。しかし、この方法は、キャッシ
ュミス率測定のために、予めプログラムを1度実行する
必要があるという欠点がある。加えて、この方法では、
キャッシュミス率の平均値しか求められないため、ルー
プが実行される度にキャッシュミス率が変わる場合に
は、正確な予測が出来ないという欠点もある。さらに、
キャッシュのシュミレーションでは、全てのメモリ参照
命令で付加的な処理を行うので、実行時間が大きくなる
という欠点もある。予測という意味では、分岐に対する
予測方法である2レベル分岐予測が関連する。しかし、
2レベル分岐予測の適用範囲は、分岐の予測に限られて
いる。また、分岐予測の発生は、分岐が発生するか、発
生しないかという1ビットの情報であり、そのままで
は、キャッシュミス率の予測に用いることが出来ないと
言う欠点がある。
【0008】本発明の目的の1つは、プログラムを予め
実行することなしに、プログラムの実際の実行に際し
て、ループが実行される度毎のキャッシュミスを正確に
予測すると共に、プログラムの実行時間に影響しない程
度の少ないオーバーヘッドで、上記の予測を行う方法を
提供することである。本発明のもう1つの目的は、プリ
フェッチングによって性能が低下する場合があるという
問題を回避することである。
【0009】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、キャッシュを有する計算機システムで実
行されるプログラムに対してキャッシュミスの発生を予
測する方法であり、該プログラム内のあるループを実行
した場合のキャッシュミス率がある閾値以上であるかを
該プログラムの実行時に予測するループ内キャッシュミ
ス実行時予測コードを該プログラムに付加し、該コード
付加後のプログラムの実行時にキャッシュミス予測を行
うようにしている。
【0010】また、ループ内キャッシュミス実行時予測
コードとして、該ループ内で発生するキャッシュミス回
数測定コードと、該ループ内で発生するメモリ参照回数
測定コードと、該キャッシュミス回数と該メモリ参照回
数から該ループのキャッシュミス率が該閾値以上である
か否かを判定し、この判定結果をキャッシュミス履歴と
キャッシュミスパターンテーブルに記録するキャッシュ
ミス記録コードと、該キャッシュミス履歴と該キャッシ
ュミスパターンテーブルから、該ループの次回の実行で
のキャッシュミス率が該閾値以上であるかを予測するキ
ャッシュミス予測コードとを付加するようにしている。
【0011】また、前記キャッシュミス回数測定コード
は、キャッシュミス回数をカウントするハードウェアカ
ウンタを用いてループ内で発生するキャッシュミスの回
数を測定するようにしている。
【0012】また、前記メモリ参照回数測定コードは、
メモリ参照回数をカウントするハードウェアカウンタを
用いてループ内で発生するメモリ参照の回数を測定する
ようにしている。
【0013】また、前記メモリ参照回数測定コードは、
静的に算出したループ1回当たりのメモリ参照に実行時
のループ回数を乗ずることによってループ内で発生する
メモリ参照の回数を測定するようにしている。
【0014】また、キャッシュを有する計算機で実行さ
れるプログラムに対するコンパイル方法であり、該プロ
グラム内のあるループに対して前記ループ内キャッシュ
ミス実行時予測コードを付加し、かつ該ループのキャッ
シュミス率が閾値以上であると予測された場合は該ルー
プにプリフェッチング実施済みのコードを実行し、そう
でない場合は該ループにプリフェッチングを実施してい
ないコードを実行するプリフェッチング実行制御コード
を付加するようにしている。
【0015】
【発明の実施の形態】本発明は、キャッシュを有する計
算機で実行されるプログラムに対して、ループ内でのキ
ャッシュミスの発生を予測するキャッシュミス予測方法
に関するものである。以下では、本発明の1実施形態を
図面を用いて説明する。図1は、本発明が実施されたプ
ログラムが実行される計算機システムの1構成図であ
る。計算機システムは、CPU10、キャッシュメモリ
20、主メモリ30から構成される。CPU10には、
キャッシュミス回数カウンタ11とメモリ参照回数カウ
ンタ15が含まれる。キャッシュミス回数カウンタ11
は、プログラムの実行に際して、キャッシュミスが1回
起こる度に1増えるよう構成されているものとする。ま
た、メモリ参照回数カウンタは、メモリ参照命令が1つ
実行される度に1増えるよう構成されているものとす
る。更に、これらのカウンタの値を0にリセットする命
令、及び、これらのカウンタの値をレジスタに読み出す
命令があるものとする。これらのカウンタ及びその操作
命令を実現するハードウェアの詳細は、本発明の実施に
大きな影響を与えないので、省略する。主メモリ30に
は、本発明が実施されたプログラム40が置かれ、CP
U10によって実行される。
【0016】本発明が実施されたプログラム40は、ル
ープに対して本発明が実施されたコード(命令列を意味
する)50を含んでおり、該コード50は、ループ内キ
ャッシュミス実行時予測コード60、プリフェッチング
実行制御コード70、プリフェッチング実施済みコード
80、プリフェッチング未実施コード90、および、ル
ープ内キャッシュミス実行時予測コード60で用いるデ
ータであるキャッシュミス履歴64とキャッシュミスパ
ターンテーブル66から構成される。ループ内キャッシ
ュミス実行時予測コード60は、キャッシュミス回数カ
ウンタ11、メモリ参照回数カウンタ15、キャッシュ
ミス履歴64、キャッシュミスパターンテーブル66を
用いて、ループ内でのキャッシュミスのミス率が閾値以
上であるかを実行時に予測する。ここで、ミス率は、
(キャッシュミス回数)/(メモリ参照回数) であ
る。プリフェッチング実行制御コード70では、ループ
内キャッシュミス実行時予測コード60での予測に応じ
て、次回のループ実行におけるキャッシュミス率がある
閾値以上であると予測された場合はプリフェッチング実
施済みコード80を実行し、そうでない場合はプリフェ
ッチング未実施コード90を実行することにより、プリ
フェッチング実施済みコード80の実行を制御する。
【0017】図2は、本発明のループ内キャッシュミス
実行時予測コード60とプリフェッチング実行制御コー
ド70の付加を行うコンパイラ100が動作する計算機
システムの1構成図である。本システムは、CPU1
0、キャッシュメモリ20、主メモリ30、外部記憶装
置35から構成される。主メモリ30には、コンパイラ
100が置かれ、コンパイラ100はCPU10によっ
て実行されることにより、外部記憶装置35にあるソー
スプログラム37から本発明が実施されたプログラム4
0を生成する。ソースプログラム37には、本発明実施
前のループ45が含まれており、コンパイラ100にお
けるループ内キャッシュミス実行時予測コード付加11
0、プリフェッチング実行制御コード付加120が実施
された後に実行コードに変換されることにより、本発明
が実施されたループコード50に変換される。
【0018】図3は、本実施例のコンパイラ100の処
理手順を示す。コンパイラ100は、ソースプログラム
37を入力として構文解析102を行った後、ステップ
104とステップ130〜160とステップ120とス
テップ180で、プログラム内の全てのループに対し
て、ループ内キャッシュミス実行時予測コード付加11
0、プリフェッチング実行制御コード付加120と、プ
リフェッチング180を実施し、最後にコード生成10
6を実施して、本発明が実施されたプログラム40を生
成する。ステップ104では、未処理ループLが有るか
判定し、無い場合はコード生成106に進む。有る場合
は、ステップ130にすすみ、ループLに対して、ステ
ップ130〜160とステップ120とステップ180
の処理を行う。ステップ130では、ループLのキャッ
シュミス回数測定コードをプログラムに付加し、ステッ
プ140では、ループLのメモリ参照回数測定コードを
プログラムに付加する。これらのステップの詳細は、後
述する。ステップ150では、ループLのキャッシュミ
ス回数とメモリ参照回数の比率が閾値TC以上であるか
判定し、この結果をキャッシュミス履歴64とキャッシ
ュミスパターンテーブル66に記録するキャッシュミス
記録コードをプログラムに付加する。この、キャッシュ
ミス記録コードの詳細は、後述する。ステップ160で
は、ループLのキャッシュミス履歴64とキャッシュミ
スパターンテーブル66から、次回のループLの実行に
おけるキャッシュミス率が閾値TC以上であるかを予測
するキャッシュミス予測コードを付加する。この、キャ
ッシュミス予測コードについては、後述する。ステップ
120では、ループLのコピーを作り(このコピーをL
Pと呼ぶ)、ステップ160で付加されたキャッシュミ
ス予測コードにより、次回のループLの実行におけるキ
ャッシュミス率が閾値TC以上であると予測された場合
は、LPに分岐し、そうでない場合はLに分岐するコー
ドをプログラムに付加する。ステップ180では、上記
のループLPにプリフェッチングを実施し、プリフェッ
チング実施済みコードが生成される。
【0019】なお、本実施例で使われている閾値TCの
値としては、任意の値を用いることが出来る。しかし、
キャッシュミス率がTC未満の場合は、キャッシュミス
が無いと仮定したコード(プリフェッチング未実施コー
ド90)を実行するので、余りTCが大きいと、該実行
においてキャッシュミスによって実行性能が大きく低下
する可能性がある。よって、TCとしては、十分に小さ
な値を用いる必要がある。例えば、メモリを連続アクセ
スをした場合には、キャッシュが有効に使われる場合に
おいてもプリフェッチ効果は高いが、この場合のキャッ
シュミス率は「アクセスデータの要素長/キャッシュラ
インの大きさ」であり、データの要素長が4バイト、キ
ャッシュラインの大きさが32バイトと標準的な構成で
も、1/8、即ち、12.5%に過ぎない。つまり、キ
ャッシュラインの最初の要素に対するアクセスでキャッ
シュミスが生じれば、メモリからキャッシュラインのフ
ェッチを行うことにより以後のキャッシュミスは起こら
ず、キャッシュラインに対して最初の要素だけがキャッ
シュ未ストなるため、すなわち、8要素のうち1要素だ
けがキャッシュミスとなるため、キャッシュミス率は、
1/8=12.5%となる。また、連続アクセスの場合
にも上記のようにプリフェッチの効果は大きいので、連
続アクセスの場合にもプリフェッチを出来るようにした
い。目安としては、プリフェッチング未実施コード90
の実行に際してミス率TCでキャッシュミスが発生した
ときの実行時間が、プリフェッチング実施済みコード8
0の実行時間よりも小さくなる様にすべきである。即
ち、ループ1回当たりのメモリ参照の数をM,プリフェ
ッチング未実施コード90のループ1回当たりの実行時
間をTN(キャッシュミスはないとしたときの実行時
間)、プリフェッチング実施済みコード80のループ1
回当たりの実行時間をTP、メモリ遅延時間をTMとし
たとき、 TN+TC*TM*M<TP とすべきである。この式から、 TC<(TP−TN)/(TM*M) となるようにTCの値を選べばよい。
【0020】図4は、ループに対する本発明が実施され
たコード50の詳細を示す。具体的には、ループに対し
て図3におけるステップ130〜160とステップ12
0とステップ180の処理を実施した後のコードの詳細
を示す。以下、図3でのステップと、付加される処理の
対応を示す。図3のステップ130では、キャッシュミ
ス回数測定コード(ループ直前部分)610と、キャッ
シュミス回数測定コード(ループ直後部分)640が付
加される。図3のステップ140では、メモリ参照回数
測定コード(ループ直前部分)620と、メモリ参照回
数測定コード(ループ直後部分)650が付加される。
図3のステップ150では、キャッシュミス記録コード
660が付加される。図3のステップ160では、キャ
ッシュミス予測コード630が付加される。図3のステ
ップ120では、プリフェッチングの対象となるループ
のコピーLP(該コピーにプリフェッチングを実施した
コードがコード80になる)が作成されると共に、プリ
フェッチング実行制御コード70を付加される。更に、
コード70、コード80、コード90、コード640の
間の制御フローも付加される。図3のステップ180で
は、ステップ120で作成されたループのコピーLPに
プリフェッチングが実施され、プリフェッチング実施済
みコード80が生成される。
【0021】図5は、図3のステップ130キャッシュ
ミス回数測定コード付加の1実施形態−1を示す。この
実施形態−1は、キャッシュミス回数をカウントするハ
ードウェアカウンタ11が実装されていることを前提と
している。ステップ1311では、キャッシュミス回数
カウンタ11を0にリセットするコードを、ループLの
直前に付加する。付加されるコードは、図4のコード6
10となる。ステップ1312では、キャッシュミス回
数カウンタ11の値を得て、ループLのキャッシュミス
回数とするコードを、ループLの直後に付加する。付加
されるコードは、図4のコード640となる。本実施形
態では、ステップ1312でキャッシュミス回数を直接
得られるという利点がある。しかし、ループの直前でカ
ウンタをリセットするため、ループがネストしているプ
ログラムに対しては適用できないという欠点もある。た
だし、この欠点は、ネストしたループに対してはネスト
内の1つのループに対してのみキャッシュミス予測を行
うように限定することにより回避出来る。
【0022】図6は、図3のステップ130のキャッシ
ュミス回数測定コード付加の別の実施形態−2を示す。
この実施形態−2は、キャッシュミス回数をカウントす
るハードウェアカウンタ11が実装されていることを前
提としている。ステップ1321では、キャッシュミス
回数カウンタ11の値を得て、ループL実行直前のキャ
ッシュミス回数とするコードを、ループLの直前に付加
する。付加されるコードは、図4のコード610とな
る。ステップ1322では、キャッシュミス回数カウン
タ11の値を得て、この値から、ステップ1321の付
加コードで求められるループL実行直前のキャッシュミ
ス回数を、引いた結果をループLのキャッシュミス回数
とするコードを、ループLの直後に付加する。付加され
るコードは、図4のコード640となる。本実施形態で
は、ネストしたループに対しても、各ループに対して同
時にキャッシュミス予測が出来るという利点がある。し
かし、ステップ1321で求めてループL実行直前のキ
ャッシュミス回数を保持する必要があり、また、ステッ
プ1322では、ループL実行直後と直前のキャッシュ
ミス回数の差を計算する必要があるので、処理量は大き
くなるという欠点がある。
【0023】図7は、図3のステップ140メモリ参照
回数測定コード付加の1実施形態−1を示す。この実施
形態−1は、メモリ参照回数をカウントするハードウェ
アカウンタ15が実装されていることを前提としてい
る。ステップ1411では、メモリ参照回数カウンタ1
5を0にリセットするコードを、ループLの直前に付加
する。付加されるコードは、図4のコード620とな
る。ステップ1412では、メモリ参照回数カウンタ1
5の値を得て、ループLのメモリ参照回数とするコード
を、ループLの直後に付加する。付加されるコードは、
図4のコード650となる。本実施形態では、ステップ
1412で、メモリ参照回数を直接得られるという利点
がある。しかし、ループの直前でカウンタをリセットす
るため、ループがネストしているプログラムに対しては
適用できないという欠点もある。ただし、この欠点は、
ネストしたループに対しては、ネスト内の1つのループ
に対してのみキャッシュミス予測を行うように限定する
ことにより回避出来る。
【0024】図8は、図3のステップ140のメモリ参
照回数測定コード付加の別の実施形態−2を示す。この
実施形態−2は、メモリ参照回数をカウントするハード
ウェアカウンタ15が実装されていることを前提として
いる。ステップ1421では、メモリ参照回数カウンタ
15の値を得て、ループL実行直前のメモリ参照回数と
するコードを、ループLの直前に付加する。付加される
コードは、図4のコード620となる。ステップ142
2では、メモリ参照回数カウンタ15の値を得て、この
値から、ステップ1421の付加コードで求められるル
ープL実行直前のメモリ参照回数を、引いた結果をルー
プLのメモリ参照回数とするコードを、ループLの直後
に付加する。付加されるコードは、図4のコード650
となる。本実施形態では、ネストしたループに対して
も、各ループに対して同時にキャッシュミス予測が出来
るという利点がある。しかし、ステップ1421で求め
てループL実行直前のメモリ参照回数を保持する必要が
あり、また、ステップ1422では、ループL実行直後
と直前のメモリ参照回数の差を計算する必要があるの
で、処理量は大きくなるという欠点がある。
【0025】図9は、図3のステップ140のメモリ参
照回数測定コード付加の別の実施形態−3を示す。この
実施形態−3は、メモリ参照回数をカウントするハード
ウェアカウンタ15を必要としない。本実施例では、図
4のコード620は、空とする。ステップ1431で
は、ループLの1イタレーション(繰り返し)当たりの
メモリ参照点の数Mを求める。ステップ1432では、
MにループLのループ回数を乗じた結果をループLのメ
モリ参照回数とするコードを、ループLの直後に付加す
る。付加されるコードは、図4のコード650となる。
本実施形態では、特別なハードウェアを付加せずにメモ
リ参照回数がカウントできるという利点がある。しか
し、この計算に際して乗算が必要である、ループ内に分
岐があるためにメモリ参照命令が実行されない場合に正
確なカウントが出来ない、などの欠点がある。
【0026】図10は、キャッシュミス履歴64の構造
を示す。キャッシュミス履歴64は、nh個のビットか
ら構成され、それぞれには、番号がついている。キャッ
シュミス履歴64の値は、hで参照され、それぞれのビ
ットはh(nh−1)からh(0)で参照される。ま
た、任意のi,j(0≦i≦j≦nh−1)に対して、
h(i:j)で、h(i)からh(j)までの部分ビッ
ト列を表す。任意のk(0≦k≦nh−1)に対して、
h(k)は、現在のループLの実行よりk+1回前のル
ープLの実行におけるキャッシュミス率が閾値TC以上
であるとき1であり、それ以外では0となるように設定
される。なお、hの値は、キャッシュミス実行時予測コ
ード60内で更新されるが、初期値としては、全てのビ
ットを1に設定する。即ち、初期状態としては、過去n
h回の実行でキャッシュミス率が閾値TC以上であった
ことにしておく。nhを大きくするほど予測精度が高ま
るが、ループLの最初のnh回の実行はスタートアップ
処理に過ぎず、キャッシュミス予測が行われないので、
余り大きくすべきではない。nhの値としては、6程度
で十分である。なお、後述するように、キャッシュミス
パターンテーブル66の大きさは、2**nh(2のnh
乗)に比例する。そこで、キャッシュミスパターンテー
ブルが、CPUの1本の整数レジスタに収まるように、
本実施形態では、nhの値が4であるとする。
【0027】図11は、キャッシュミスパターンテーブ
ル66の構造を示す。キャッシュミスパターンテーブル
66は、2**nh(2のnh乗)個の要素から構成され
る。本実施形態では、各要素は1ビットとする。別の実
施形態として、分岐の予測における2レベル分岐予測で
の最善の実施形態と同様に各要素に2ビット割り当てる
ことも考えられるが、要素の値を更新する処理が大きく
なるので、本実施形態では採用しなかった。要素の更新
を行うハードウェアを用意するのであれば、要素を2ビ
ットにすることも考えられるが、詳細は省略する。キャ
ッシュミスパターンテーブル66の値は、pで参照さ
れ、それぞれの要素はp(2**nh−1)からp
(0)で参照される。pの各要素の初期値としては、1
を設定し、キャッシュミス実行時予測コード60内での
更新に際しては、次のようにする。即ち、任意のk(0
≦k≦2**nh−1)に対して、次のようにp(k)
を更新する。ループLのキャッシュミス履歴64の値が
kで、該ループLの直前の実行でのキャッシュミス率が
閾値TC以上であれば、p(k)の値を1に更新する。
ループLのキャッシュミス履歴64の値がkで、該ルー
プLの直前の実行でのキャッシュミス率が閾値TC未満
であれば、p(k)の値を0に更新する。それ以外のk
に対しては、p(k)の値は不変とする。また、キャッ
シュミス履歴も更新する。例えば、後述する図17の例
を用いて説明すると、例えば、S=6の場合、キャッシ
ュミス履歴の値は“0101”であり、キャッシュミス
パターンテーブルの値は“0101111111111
111”である。このときのループLの実行でのキャッ
シュミス率が閾値TC未満であれば、キャッシュミス履
歴の値の最下位桁が“0”に更新され、すなわち、S=
6の“0101”の上位3桁の値が下位3桁の値に入れ
替えられ、最下位桁の値が“0”に更新されて、S=7
の場合のキャッシュミス履歴の値“1010”が得ら
れ、また、S=6の“0101”を10進数の値“5”
に変換し、キャッシュミスパターンテーブルの値“01
01111111111111”の下から6桁目の値を
“0”に更新し、S=7の場合のキャッシュミスパター
ンテーブルの値は“010111111101111
1”となる。
【0028】図12では、キャッシュミス履歴をhと
し、キャッシュミスパターンテーブルをpとして、キャ
ッシュミス記録コード660の詳細フローを記述してあ
る。ステップ661では、コード640で求めたキャッ
シュミス回数とコード650で求めたメモリ参照回数か
ら、「キャッシュミス回数*UB2(1/TC)≧メモ
リ参照回数」であるか判定する。ここで、UB2(x)
は、値がx以上の2ベキ数の中で一番値が小さいものを
表す。これにより、1/TCの値を2ベキ数で近似して
いる。この条件は、条件「キャッシュミス回数/メモリ
参照回数≧TC」に対する近似になっている。このよう
な判定方法を用いるのは、計算機上でシフト命令で実現
できる2ベキの掛け算を用いることにより、判定処理の
処理量を小さくするためである。ステップ661の判定
結果が真の場合は、ステップ662へ分岐し、ミス判定
ビットの値を1にする。偽の場合は、ステップ663に
分岐し、ミス判定ビットの値を0にする。ステップ66
1からステップ663では、ミス判定ビットの設定のた
めに分岐を用いているが、上記比較を行った場合に条件
が真ならばキャリービットが1になるという性質と、キ
ャリーの値を含めた加算命令を用いることにより、分岐
は無くすことが出来る。ステップ664では、p(h)
にミス判定ビットの値を設定する。ステップ666で
は、h(nh−1:1)にh(nh−2:0)の値を設定
する。ステップ668では、h(0)ににミス判定ビッ
トの値を設定する。ステップ664、666、668で
は、ビット操作を行っている。ビット操作のマシン命令
での実現方法は、計算機の命令アーキテクチャに依存す
るが、例えば、HP社のPA−RISCアーキテクチャ
では、ビット操作のための命令が豊富であり、1命令で
実現可能である。ビット操作の実現例は、例題プログラ
ムを用いた説明で示す。
【0029】図13では、キャッシュミス履歴をhと
し、キャッシュミスパターンテーブルをpとして、キャ
ッシュミス予測コード630の詳細フローを記述してあ
る。ステップ635では、「p(h)=1」であるか判
定し、これが真の場合は、ステップ636でループLの
次回の実行でのキャッシュミス率はTC以上であると予
測し、偽の場合は、ステップ637で、ループLの次回
の実行でのキャッシュミス率はTC未満であると予測す
る。ステップ635では、ビット操作を行っている。ビ
ット操作のマシン命令での実現方法は、計算機の命令ア
ーキテクチャに依存するが、例えば、HP社のPA−R
ISCアーキテクチャでは、ビット操作のための命令が
豊富であり、1命令で実現可能である。ビット操作の実
現例は、例題プログラムを用いた説明で示す。 図14
は、本発明のプログラムへの適用効果を説明するための
例題プログラムである。このプログラムの、行1〜9は
メインプログラムであり、行10〜16はメインプログ
ラムから呼び出されるサブルーチンである。行2〜8
と、行13〜15はループである。以下では、本発明実
施前のループ45である行13〜15のループに本実施
例を適用した場合の適用効果を示す。以下、このループ
をループLと呼ぶ。本例題プログラムの特徴としては、
行4でのサブルーチン呼び出しと行6でのサブルーチン
呼び出しに対して、呼び出し先のサブルーチンのループ
Lでのキャッシュミス率が大きく異なる点である。行4
でのサブルーチン呼び出しでは、毎回同じ配列領域A
(1:200)とB(1:200)が参照され、2回目
以降のサブルーチン呼び出しではキャッシュミスが殆ど
起こらないのに対して、行6のサブルーチン呼び出しで
は、配列領域A(1:200)とC(1:200、K)
が参照され、C(1:200、K)については、毎回キ
ャッシュミスが起こる点である。即ち、キャッシュミス
率が実行時に大きく変化する。具体的には、Kの値が奇
数の場合は、キャッシュミス率が小さく、Kの値が偶数
の場合はキャッシュミス率が大きい。よって、Kが奇数
の場合は、プリフェッチングを行わない方が良く、Kが
偶数の場合は、プリフェッチングを行った方が良い。し
かし、従来のキャッシュミス予測では、プログラム全体
を実行した後の平均キャッシュミス率しか求められな
い。そのため、本プログラムに対しては、プリフェッチ
ングを毎回必ず行うことになる。これに対して本発明で
は、最適なプリフェッチングを行うことを、以下で示
す。なお、以下では、キャッシュラインの大きさが32
バイトとする。また、メモリ遅延は20サイクルとす
る。配列A、Bの要素長は8バイトなので、1つのキャ
ッシュラインには4個の連続した要素が入る。
【0030】図15は、ループLにプリフェッチングを
実施した後のコード80を、ソースプログラム形式で示
す。行1〜4、及び、行6〜7がプリフェッチ命令であ
る。行1では、A(1)をプリフェッチする事により、
A(1)を含むキャッシュラインを主メモリ30からキ
ャッシュメモリ20へ転送する。これにより、A(1)
〜A(4)がキャッシュに転送される。行2〜4も同
様。行6は、ループの2回先の繰り返しでアクセスする
配列要素A(J+8)〜A(J+11)をプリフェッチ
する。行5〜12のループには、プリフェッチ命令を含
めて10個のメモリ参照と、5個の浮動小数点加算と、
5個の浮動小数点乗算が含まれる。近年の計算機では、
整数命令と浮動小数点命令は並列に実行されることが多
く、また、浮動小数点加算と浮動小数点乗算も同時に処
理されることが多いので、このループの処理は、メモリ
参照がネックとなる。メモリ参照命令が1サイクルに1
つ実行できるとすると、ループ1回当たりの処理時間は
10サイクル以上となる。そこで、以下では、ループプ
リフェッチング実施後コード80の実行においては、ル
ープ1回当たり10サイクルの時間が掛かるものと仮定
する。行13〜15のループも同様に、ループ1回当た
り2サイクルの時間が掛かるものと仮定する。行1〜4
のプリフェッチングには4サイクル掛かる。また、Nの
実際の値は200であることから、行5〜12のループ
は192/4回、即ち、48回まわり、行13〜15の
ループは8回まわる。よって、行1〜15の実行時間
は、4+10*48+2*8サイクル、即ち、500サ
イクルとなる。上記と同様の手法で、プリフェッチング
未実施コード90の実行時間を図14のループLから計
算すると、ループは200回まわり、メモリ参照が2個
あることから、400サイクルとなる。よって、ループ
内でキャッシュミスが起こらない場合は、プリフェッチ
ング未実施の場合の方が処理時間が短い。
【0031】図16は、ループLに本発明実施後のコー
ド50の例を示す。なお、閾値TCの値は、図3での説
明におけるTCの計算方法と、図14、図15での説明
における数字から、(10−8)/(8*20)よりも
小さな値として、0.0124(=1.24%)とし
た。これにより、図12のステップ661において、U
B2(1/TC)の値は、128となる。命令番号16
10は、説明で参照するために付けた一連番号である。
命令1620は、ループLに対する本発明実施後のコー
ド50をアセンブラ命令形式で表現したものである。た
だし、ループLのプリフェッチング実施済みコード80
と、ループLのプリフェッチング未実施コード90につ
いては、詳細を省略した。コード番号1630は、図4
内での対応するコードの番号である。例えば命令番号1
の命令は、キャッシュミス回数測定コード(ループ直前
部分)610を実現する命令である。ただし、命令番号
12〜19については、キャッシュミス記録コード66
0の詳細を示す図12で付加した、詳細なステップ番号
を付加してある。r1〜r5、及び、r31はレジスタ
を表現する。また、#付きの数字は即値を、CMCはキ
ャッシュミス回数カウンタ11を、MMCはメモリ参照
回数カウンタ15を、hはキャッシュミス履歴64を、
pはキャッシュミスパターンテーブル66を、$付きの
数字はラベルを表現する。
【0032】load命令、store命令、copy
命令、subtract命令、branch命令につい
ては、説明を省略する。addcは、2つの入力オペラ
ンドの和にキャリーの値を加えてターゲットレジスタに
格納する命令である。命令番号5、12のextrac
t命令、及び、命令番号15、17のdeposit命
令、命令番号16のzdeposit命令はレジスタ内
でのビット操作命令であり、以下の動作をする。「ex
tract s,p,len,t」は、レジスタsの下
からpビット目から上の長さlenビットのビット列を
取り出し、これをレジスタtに格納する命令である。た
だし、ビット位置は、最下位ビットが0番目とする。
「deposit s,p,len,t」は、レジスタ
tの下からpビット目から上の長さlenビットのビッ
ト列を、レジスタsの下から0ビット目からの上の長さ
lenのビット列によって置き換える命令である。「z
deposit s,p,len,t」は、レジスタt
の下からpビット目から上の長さlenビットのビット
列を、レジスタsの下から0ビット目から上の長さle
nのビット列によって置き換え、レジスタtの残りのビ
ットは0にする命令である。
【0033】上記の命令仕様の説明と、各命令1620
に対応したコードのコード番号1630から、それぞれ
の命令の命令毎の処理内容は明らかなので、1命令毎の
実行の詳細は省略する。
【0034】図17に、ループLに本発明を実施後のコ
ード50の実行状況を示す。1710は、図14の例題
プログラムの主プログラムのループ(行2〜4)におけ
るSの値を示し、該ループの実行順に並べられている。
各Sでの値に応じて、1720はS番目イタレーション
実行直後でのキャッシュミス履歴64の値を示し、17
30はS番目イタレーション実行直後でのキャッシュミ
スパターンテーブル66の値を示し、1740は実行さ
れたコードがプリフェッチング実施済みコード80であ
ったか(Prefetchingと表記)、プリフェッチング未実
施コード90であったか(Non-Prefetchingと表記)を
示し、1750は本発明を実施後のコード50の実行時
間(サイクル数)を示す。
【0035】図17の内容について、概略説明する。最
初のS=1では、キャッシュミス履歴、キャッシュミス
パターンテーブルともに全てビットは“1”に初期化さ
れ、実行コードはPrefetchingにされる。S
=1でのループLの実行におけるキャッシュミス率が閾
値TC以上であれば、S=2でのキャッシュミス履歴
は、図12のステップ666、668により“111
1”になり、また、S=1でのループLの実行における
キャッシュミス率が閾値TC以上であれば、図12のス
テップ664に従い、S=1での“1111”を10進
数の値“15”に変換し、キャッシュミスパターンテー
ブルの値“1111111111111111”の下か
ら16桁目の値を“1”に更新し、S=2の場合のキャ
ッシュミスパターンテーブルの値は“11111111
11111111”となり、また、図13のフローに従
い、S=1での“1111”を10進数の値“15”に
変換し、キャッシュミスパターンテーブルの値“111
1111111111111”の下から16桁目の値を
求めると“1”であるので、S=2での実行コードはP
refetchingにされる。また、S=6でのルー
プLの実行におけるキャッシュミス率が閾値TC未満で
あれば、S=7でのキャッシュミス履歴は、図12のス
テップ666、668により“1010”になり、ま
た、S=6でのループLの実行におけるキャッシュミス
率が閾値TC未満であれば、図12のステップ664に
従い、S=6での“0101”を10進数の値“5”に
変換し、キャッシュミスパターンテーブルの値“111
1111111111111”の下から6桁目の値を
“0”に更新し、S=7の場合のキャッシュミスパター
ンテーブルの値は“111111111101111
1”となり、また、図13のフローに従い、S=6での
“0101”を10進数の値“5”に変換し、キャッシ
ュミスパターンテーブルの値“11111111111
11111”の下から6桁目の値を求めると“1”であ
るので、S=7での実行コードはPrefetchin
gにされる。
【0036】本発明を実施後のコード50の実行時間
は、ループLのプリフェッチング実施済みコード80、
或いは、ループLのプリフェッチング未実施コード90
の実行時間に、本発明の実施によって付加されるキャッ
シュミス実行時予測コード60とプリフェッチング実行
制御コードの実行時間を加えた値である。図15での説
明から、ループLのプリフェッチング実施済みコード8
0の実行時間は500サイクルであり、ループLのプリ
フェッチング未実施コード90の実行時間は400サイ
クルである。図16では、本発明の実施によって付加さ
れたコードが17命令であることが分かる。それぞれは
単純な整数命令なので、1サイクルで実行できると考え
られる。よって、本発明の実施によって付加されたコー
ドの実行時間は、17サイクルとする。よって、プリフ
ェッチング実施済みコード80が実行される場合の実行
時間1750は517サイクルであり、プリフェッチン
グ未実施コード90が実行される場合の実行時間175
0は417サイクルである。よって、ループLに本発明
実施後のコード50の実行時間1750の合計は、93
800サイクルである。
【0037】図18に、ループLに本発明を実施する前
のループコード45の実行状況を示す。1810は、図
14の例題プログラムの主プログラムのループ(行2〜
4)におけるSの値を示し、該ループの実行順に並べら
れている。各Sでの値に応じて、1840は実行された
コードがプリフェッチング実施済みコード80であった
か(Prefetchingと表記)、プリフェッチング未実施コ
ード90であったか(Non-Prefetchingと表記)を示
し、1850は実行時間(サイクル数)を示す。本発明
を実施しない場合、常にプリフェッチング実施済みコー
ド80が実行されるので、実行時間1850の合計は1
00000サイクルである。
【0038】図17と図18から、本発明の実施によ
り、実行時間が6200サイクル(100000−93
800)削減されており、常にプリフェッチング実施済
みコード80を実行する場合に較べて、実行時間が6.
3%削減されていることが分かる。なお、本実施形態で
は、ハードウェアの追加を少なくするために、単純はハ
ードウェアであるキャッシュミスカウンタ11とメモリ
参照回数カウンタ15のみを設けて、ループ内キャッシ
ュミス実行時予測コード60の大部分はソフトウェアで
実現した。しかし、本発明は、キャッシュミス実行時予
測コード60の実現をソフトウェアでの実現に制限する
ものではない。更なるハードウェアを追加すれば、キャ
ッシュミス実行時予測コード60の処理を高速化でき、
本発明の実施効果は更に高まる。以上述べてきたよう
に、本発明によるキャッシュミス予測方法は、プログラ
ムを予め実行することなしに、プログラムの実際の実行
に際して、ループが実行される度毎のキャッシュミスを
正確に予測することが可能である。更に、プログラムの
実行時間に影響しない程度の少ないオーバーヘッドで、
上記の予測を行うことが可能である。また、プリフェッ
チングによって性能が低下する場合があるという問題を
回避することが出来る。
【0039】
【発明の効果】本発明の効果の一つは、プログラムを予
め実行することなしに、プログラムの実際の実行に際し
て、ループが実行される度毎のキャッシュミスを正確に
予測出来ることである。これにより、プリフェッチング
実施済みのコードとプリフェッチング未実施コードのど
ちらを実行するかを、実行時に正確に制御できるので、
プリフェッチングによって性能が低下する場合があると
いう問題を回避することが出来、プリフェッチング実施
済みのコードが必ず実行される場合に較べて、実行時間
を短縮できる。
【図面の簡単な説明】
【図1】本発明が実施されたプログラムが実行されるシ
ステムの構成を示す図である。
【図2】コンパイラが動作するシステムの構成を示す図
である。
【図3】コンパイラの処理手順を示す図である。
【図4】ループに対する本発明が実施されたコードの詳
細を示す図である。
【図5】キャッシュミス回数測定コード付加の実施形態
−1を示す図である。
【図6】キャッシュミス回数測定コード付加の実施形態
−2を示す図である。
【図7】メモリ参照回数測定コード付加の実施形態−1
を示す図である。
【図8】メモリ参照回数測定コード付加の実施形態−2
を示す図である。
【図9】メモリ参照回数測定コード付加の実施形態−3
を示す図である。
【図10】キャッシュミス履歴の構造を示す図である。
【図11】キャッシュミスパターンテーブルの構造を示
す図である。
【図12】キャッシュミス記録コードの詳細を示す図で
ある。
【図13】キャッシュミス予測コードの詳細を示す図で
ある。
【図14】例題プログラムを示す図である。
【図15】プリフェッチング実施済みのコードを示す図
である。
【図16】本発明が実施されたコードの例を示す図であ
る。
【図17】本発明が実施されたコードの実行状況を示す
図である。
【図18】本発明が実施されないコードの実行状況を示
す図である。
【符号の説明】
10 CPU 11 キャッシュミス回数カウンタ 15 メモリ参照回数カウンタ 20 キャッシュメモリ 30 主メモリ 40 本発明実施後のプログラム 50 ループに対する本発明実施後のコード 60 ループ内キャッシュミス実行時予測コード 64 キャッシュミス履歴 66 キャッシュミスパターンテーブル 70 プリフェッチング実行時制御コード 80 プリフェッチング実施済みコード 90 プリフェッチング未実施コード

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 キャッシュを有する計算機システムで実
    行されるプログラムに対してキャッシュミスの発生を予
    測する方法であって、 該プログラム内のあるループを実行した場合のキャッシ
    ュミス率がある閾値以上であるかを該プログラムの実行
    時に予測するループ内キャッシュミス実行時予測コード
    を該プログラムに付加し、該コード付加後のプログラム
    の実行時にキャッシュミス予測を行うことを特徴とする
    キャッシュミス予測方法。
  2. 【請求項2】 請求項1記載のキャッシュミス予測方法
    において、 ループ内キャッシュミス実行時予測コードとして、 該ループ内で発生するキャッシュミス回数測定コード
    と、 該ループ内で発生するメモリ参照回数測定コードと、 該キャッシュミス回数と該メモリ参照回数から該ループ
    のキャッシュミス率が該閾値以上であるか否かを判定
    し、この判定結果をキャッシュミス履歴とキャッシュミ
    スパターンテーブルに記録するキャッシュミス記録コー
    ドと、 該キャッシュミス履歴と該キャッシュミスパターンテー
    ブルから、該ループの次回の実行でのキャッシュミス率
    が該閾値以上であるかを予測するキャッシュミス予測コ
    ードとを付加することを特徴とするキャッシュミス予測
    方法。
  3. 【請求項3】 請求項2記載のキャッシュミス予測方法
    において、 前記キャッシュミス回数測定コードは、キャッシュミス
    回数をカウントするハードウェアカウンタを用いてルー
    プ内で発生するキャッシュミスの回数を測定することを
    特徴とするキャッシュミス予測方法。
  4. 【請求項4】 請求項2記載のキャッシュミス予測方法
    において、 前記メモリ参照回数測定コードは、メモリ参照回数をカ
    ウントするハードウェアカウンタを用いてループ内で発
    生するメモリ参照の回数を測定することを特徴とするキ
    ャッシュミス予測方法。
  5. 【請求項5】 請求項2記載のキャッシュミス予測方法
    において、 前記メモリ参照回数測定コードは、静的に算出したルー
    プ1回当たりのメモリ参照の回数に実行時のループ回数
    を乗ずることによってループ内で発生するメモリ参照の
    回数を測定することを特徴とするキャッシュミス予測方
    法。
  6. 【請求項6】 キャッシュを有する計算機で実行される
    プログラムに対するコンパイル方法であって、 該プログラム内のあるループに対して請求項1記載のル
    ープ内キャッシュミス実行時予測コードを付加し、かつ
    該ループのキャッシュミス率が閾値以上であると予測さ
    れた場合は該ループにプリフェッチング実施済みのコー
    ドを実行し、そうでない場合は該ループにプリフェッチ
    ングを実施していないコードを実行するプリフェッチン
    グ実行制御コードを付加することを特徴とするコンパイ
    ル方法。
JP9024327A 1997-01-23 1997-01-23 キャッシュミス予測方法 Pending JPH10207772A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9024327A JPH10207772A (ja) 1997-01-23 1997-01-23 キャッシュミス予測方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9024327A JPH10207772A (ja) 1997-01-23 1997-01-23 キャッシュミス予測方法

Publications (1)

Publication Number Publication Date
JPH10207772A true JPH10207772A (ja) 1998-08-07

Family

ID=12135095

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9024327A Pending JPH10207772A (ja) 1997-01-23 1997-01-23 キャッシュミス予測方法

Country Status (1)

Country Link
JP (1) JPH10207772A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005242527A (ja) * 2004-02-25 2005-09-08 Hitachi Ltd プロセッサ、および、プリフェッチ制御方法
JP2010055458A (ja) * 2008-08-29 2010-03-11 Fujitsu Ltd キャッシュ制御方法及びキャッシュ制御装置
JPWO2008093399A1 (ja) * 2007-01-30 2010-05-20 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
EP3035196A2 (en) 2014-12-16 2016-06-22 Fujitsu Limited Data processing method, information processing device, and data processing program
US10452368B2 (en) 2017-06-07 2019-10-22 Fujitsu Limited Recording medium having compiling program recorded therein, information processing apparatus, and compiling method

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005242527A (ja) * 2004-02-25 2005-09-08 Hitachi Ltd プロセッサ、および、プリフェッチ制御方法
JPWO2008093399A1 (ja) * 2007-01-30 2010-05-20 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
JP4491500B2 (ja) * 2007-01-30 2010-06-30 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
US8671246B2 (en) 2007-01-30 2014-03-11 Fujitsu Limited Information processing system and information processing method
JP2010055458A (ja) * 2008-08-29 2010-03-11 Fujitsu Ltd キャッシュ制御方法及びキャッシュ制御装置
EP3035196A2 (en) 2014-12-16 2016-06-22 Fujitsu Limited Data processing method, information processing device, and data processing program
US9864693B2 (en) 2014-12-16 2018-01-09 Fujitsu Limited Data processing method, information processing device, and recording medium
US10452368B2 (en) 2017-06-07 2019-10-22 Fujitsu Limited Recording medium having compiling program recorded therein, information processing apparatus, and compiling method

Similar Documents

Publication Publication Date Title
US10209993B2 (en) Branch predictor that uses multiple byte offsets in hash of instruction block fetch address and branch pattern to generate conditional branch predictor indexes
US7437537B2 (en) Methods and apparatus for predicting unaligned memory access
JP4027620B2 (ja) 分岐予測装置、プロセッサ、及び分岐予測方法
US6988190B1 (en) Method of an address trace cache storing loop control information to conserve trace cache area
US5687349A (en) Data processor with branch target address cache and subroutine return address cache and method of operation
JP5612148B2 (ja) ゼロ述語分岐予測ミスにおける分岐予測ミス振舞い抑制
US20050268076A1 (en) Variable group associativity branch target address cache delivering multiple target addresses per cache line
US5581721A (en) Data processing unit which can access more registers than the registers indicated by the register fields in an instruction
US20110035551A1 (en) Microprocessor with repeat prefetch indirect instruction
JP2004533695A (ja) 分岐目標を予測する方法、プロセッサ、及びコンパイラ
JP5579694B2 (ja) 復帰スタックを管理する方法および装置
CN104657285B (zh) 一种数据缓存系统和方法
EP0655679B1 (en) Method and apparatus for controlling instruction in pipeline processor
Kim et al. VPC prediction: reducing the cost of indirect branches via hardware-based dynamic devirtualization
US6691080B1 (en) Task execution time estimating method
US7290255B2 (en) Autonomic method and apparatus for local program code reorganization using branch count per instruction hardware
JP4134179B2 (ja) ソフトウエアによる動的予測方法および装置
JPH08221272A (ja) 命令キャッシュに命令をロードする方法
US11126556B1 (en) History table management for a correlated prefetcher
JPH10207772A (ja) キャッシュミス予測方法
Mutlu et al. Understanding the effects of wrong-path memory references on processor performance
Sazeides Modeling value speculation
CN116302099A (zh) 加载数据到向量寄存器的方法、处理器、设备、介质
Birari et al. A risc-v isa compatible processor ip
US8438003B2 (en) Methods for improved simulation of integrated circuit designs

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20040316

A072 Dismissal of procedure

Free format text: JAPANESE INTERMEDIATE CODE: A072

Effective date: 20040713