JPH10232775A - プリフェッチ機構 - Google Patents

プリフェッチ機構

Info

Publication number
JPH10232775A
JPH10232775A JP5243097A JP5243097A JPH10232775A JP H10232775 A JPH10232775 A JP H10232775A JP 5243097 A JP5243097 A JP 5243097A JP 5243097 A JP5243097 A JP 5243097A JP H10232775 A JPH10232775 A JP H10232775A
Authority
JP
Japan
Prior art keywords
prefetch
array
address
loop
register
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
JP5243097A
Other languages
English (en)
Inventor
Masanao Ito
昌尚 伊藤
Naonobu Sukegawa
直伸 助川
Yoshiko Tamaoki
由子 玉置
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 JP5243097A priority Critical patent/JPH10232775A/ja
Publication of JPH10232775A publication Critical patent/JPH10232775A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)

Abstract

(57)【要約】 【課題】 μPが持つ演算能力を最大限に発揮させるプ
リフェッチ機構の提供。 【解決手段】 ループ実行のための制御命令を有し、主
記憶またはキャッシュへのデータアクセス命令を実行可
能なμPにおいて、プリフェッチリクエスト生成回路11
と、プリフェッチ制御回路12と、プリフェッチ一時停止
回路13を設ける。回路11にはループで繰り返しアクセス
される各配列要素のデータアドレス及びアドレス増分を
格納するプリフェッチアドレスアレイ20が設けられ、回
路12はアレイ20に対するアドレス読み出しを順次指示す
る信号L20を作成し、また各配列要素の読み出しが一巡
したことを示す信号L21を出力する。回路11は信号L20に
応じてアドレスを読み出しプリフェッチを発行する。回
路13は信号L21と信号2のループカウント値を引き算し、
結果が設定値を越えた場合に前記プリフェッチ制御回路
12の動作を中止し、プリフェッチ発行を一時停止する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、半導体集積回路を
用いて構成する情報処理装置に係り、特に、情報処理装
置において主記憶アクセスを効率的に行うための機構で
あるプリフェッチ機構に関する。
【0002】
【従来の技術】近年、半導体加工技術の進歩などによっ
て、マイクロプロセッサの動作周波数は向上を続けてお
り、最高速のマイクロプロセッサでは400MHz以上
にも達している。これに対して、主記憶を構成する半導
体に関しては、その動作周波数が向上はしているもの
の、マイクロプロセッサの動作周波数の向上よりもゆる
やかであるため、主記憶のマイクロプロセッサに対する
相対的な動作周波数はむしろ低下する傾向にある。これ
を補うために、これまではキャッシュと呼ばれる、小容
量ではあるが高速の記憶素子を付加して主記憶による性
能低下を抑える工夫が行われている。
【0003】しかし、キャッシュは主記憶よりも容量が
小さいため、キャッシュの容量を越えるようなデータサ
イズのプログラムにおいては、キャッシュを単純に付加
しただけでは主記憶の動作周波数によって、マイクロプ
ロセッサの処理能力が制限されるという問題点が発生す
ることが知られている。これを回避するたの技術とし
て、プリフェッチと呼ばれる方法がある。一般に科学技
術計算においては、演算に用いるデータのアドレスを演
算開始よりもかなり早期に知ることができるため、演算
を行う以前に主記憶からキャッシュにデータを移動する
ことができる。これによって主記憶による制限を回避す
る技術がプリフェッチである。前もって主記憶からキャ
ッシュにデータを移動する動作を、一般にプリフェッチ
と呼ぶ。
【0004】近年のマイクロプロセッサは、プリフェッ
チのための機能を命令として持つことが多い。例えば、
IBM社とMotorola社が共同開発したマイクロプロセッサ
であるPowerPC601にはプリフェッチを行う命令として、
dcbt命令等、数種の命令が存在する。これらの命令は、
指定されたアドレスの内容を主記憶からキャッシュに格
納する働きを持つ(Motorola社発行の「PowerPC601 RIS
C Microprocessor User's Manual」参照)。このよう
に、プリフェッチ動作を直接に命令で実行する方式を、
ソフトウエアプリフェッチ方式と呼ぶ。
【0005】プリフェッチは科学技術計算で多数出現す
るDOループ内部の配列のアクセスに特に効果を発揮す
る。DOループ内部の配列のアドレスは規則的に変化する
ことが多いため、配列の先頭アドレス、アドレス増分値
などのアドレス情報を用いて、DOループ内部の配列のア
ドレスをハードウエアが生成することで、自動的に主記
憶からキャッシュにデータを移動するプリフェッチ方式
も数多く提案されている。このように、プリフェッチの
動作を演算などの命令動作とは別個にハードウエアが行
う方式をハードウエアプリフェッチ方式と呼ぶ。ハード
ウエアプリフェッチ方式において、プリフェッチの動作
を行うためのアドレス情報を設定する方法としては、ソ
フトウエアが指示する方式と、ハードウエアが実行中の
命令から自動的に検知する方式の2種類がある。前者の
例として、Gschwind,M.K. and Pietsch,T.J.: "Vector
Prefetching",Computer Architecture News, Special I
ntereset Group on Computer Architecture, Vol. 23,
No.5, December 1995 ACM, pp.1-7 が挙げられる。
【0006】
【発明が解決しようとする課題】プリフェッチ方式にお
いて、プロセッサが持つ演算能力を最大限に発揮させる
ためには、プロセッサが演算命令を停止することなく動
作させるだけの演算データを供給しなければならない。
このためには、ループ中の全ての配列について、その配
列データが演算に使用されるタイミングよりも一定時間
(主記憶のデータを読み出して、キャッシュに格納する
ために要する時間)だけ前に、プリフェッチ動作を開始
する必要がある。これに対して、従来のハードウエアプ
リフェッチ方式においては、キャッシュのミス率を低減
することを主眼としており、必ずしもプロセッサが持つ
演算能力を最大限に発揮させることができない。ソフト
ウエアプリフェッチ方式の場合には、前記dcbt命令など
のプリフェッチ命令をループ中に余分に実行する必要が
あるために、若干のオーバーヘッドを余儀なくされる。
また、前記dcbt命令などのプリフェッチ命令を適切にル
ープ中に配置することはコンパイラが行うが、これがコ
ンパイラの他の最適化と整合的に行えるかは一般的には
必ずしも両立しないため、やはり、プロセッサが持つ演
算能力を最大限に発揮させることは困難である。本発明
の目的は、科学技術計算で多数出現するDOループ内部の
配列のアクセスに最適なハードウエアプリフェッチ方式
を提供し、プロセッサが持つ演算能力を最大限に発揮さ
せることにある。
【0007】
【課題を解決するための手段】上記目的を達成するた
め、本発明は、ループ実行のための制御命令を有し、主
記憶またはキャッシュへのデータアクセス命令を実行可
能なマイクロプロセッサにおいて、該データアクセス命
令を効率的に行うためのプリフェッチ発行のために、プ
リフェッチ用のデータアドレス、および、アドレス増分
を、それぞれ複数組設定可能なレジスタアレイを備え、
該レジスタアレイに設定されたアドレス情報に基づい
て、該マイクロプロセッサの命令実行とは非同期にプリ
フェッチのためのアドレスを生成し、前記主メモリにプ
リフェッチ発行を行う手段と、プリフェッチ発行回数と
前記マイクロプロセッサの命令実行に伴うループ制御の
ためのループカウント値を引き算し、該引き算結果を予
め設定した値と比較し、該引き算結果が予め設定した値
を越えた場合に前記プリフェッチ発行を行う手段の動作
を中止し、プリフェッチ発行を一時停止する手段とを備
えるようにしている。
【0008】また、前記プリフェッチ用のレジスタアレ
イは、プリフェッチ用のデータアドレス1つにつき、ア
ドレス増分を2種類以上設定可能とし、前記プリフェッ
チ発行を行う手段は、プリフェッチ発行回数を計数する
2種類以上のカウントレジスタを設け、該カウントレジ
スタの計数値に依存して、該2種類以上設定されたアド
レス増分を選択してプリフェッチのためのアドレス生成
を行うようにしている。
【0009】また、前記レジスタアレイに設定されたプ
リフェッチのためのアドレス情報をグループ化して扱う
ためのプリフェッチ配列アレイを備え、該プリフェッチ
配列アレイは該各グループ化されたプリフェッチのため
のアドレス情報に対応して、プリフェッチ回数を設定す
るためのループ長指示フィールドを有し、前記プリフェ
ッチ発行を行う手段は、前記プリフェッチ配列アレイに
おいてグループ化された個々のグループの示す前記レジ
スタアレイのアドレス情報に基づいて、該グループに対
応する前記ループ長指示フィールドの示すプリフェッチ
回数だけプリフェッチ発行を行い、該プリフェッチのプ
リフェッチ発行の実行の後、前記プリフェッチ配列アレ
イに設定された次のグループに関して同様のプリフェッ
チ発行を行うようにしている。
【0010】また、プリフェッチ発行に際し主記憶から
読み出したデータを、プリフェッチ専用データを格納す
るためのプリフェッチバッファへ格納するようにしてい
る。
【0011】プリフェッチ発行に際し前記マイクロプロ
セッサは、プリフェッチを行うループに関し、ループ制
御のための命令またはループカウントを行うレジスタの
いずれかを、プリフェッチ専用として設けるようにして
いる。
【0012】
【発明の実施の形態】
<実施例1>以下、本発明の一実施例を詳細に説明す
る。図1は、本発明の一実施例であるプリフェッチ機構
の構成図である。図1において、1はプロセッサ(P
E)であり、2は命令制御、3はプログラムカウンタ
(PC)、4は命令レジスタ(IR)、5は汎用レジス
タ(GR)、6は命令デコーダ、7はループカウントレ
ジスタ、8は減算器、9はデータ書込制御回路、10は
プリフェッチ情報設定回路である。11はプリフェッチ
リクエスト生成回路、12はプリフェッチ制御回路、1
3はプリフェッチ一時停止回路である。20はプリフェ
ッチアドレスアレイ(レジスタアレイで構成してもよ
い)、21は書込制御回路、22は加算器、23は比較
器、24はセレクタ、25は論理和回路、26は書込制
御回路である。30はプリフェッチポインタレジスタ、
31はプリフェッチ配列数レジスタ、32はプリフェッ
チカウントレジスタ、33はプリフェッチ起動レジス
タ、34は加算器、35はセレクタ、36は比較器、3
7は減算器、38は比較器、39は論理積回路である。
50はプリフェッチ先行サイクル数カウントレジスタ、
51はループサイクル数レジスタ、52はプリフェッチ
先行サイクル数指定レジスタ、53は加算器、54は減
算器、55はセレクタ、56はプリフェッチ先行サイク
ル数更新回路、57は比較器、L1からL21は信号線
である。
【0013】図ではプロセッサ1内部に命令レジスタ
(IR)4、命令デコーダ6がプロセッサ1につき各々
1台のみ図示してあるが、複数でもかまわない。すなわ
ち、1サイクルに複数命令を実行可能なスーパースカラ
方式のプロセッサでもかまわない。
【0014】次に、このように構成された本システムの
動作について、図1を用いて説明する。該プロセッサ
(PE)1において、命令制御2内のプログラムカウン
タ(PC)3の指定するアドレスの命令を、命令読み出
し回路(図示せず)によって命令レジスタ(IR)4に
格納する。命令レジスタ(IR)4の命令コードフィー
ルドの内容は、それぞれデコーダ6によって解読され各
種命令実行制御回路(図示せず)に指令が行われる。ま
た命令レジスタ(IR)4のレジスタフィールドの内容
が指し示す汎用レジスタ(GR)5の内容を読み出し
て、必要な各種命令実行制御回路(図示せず)に伝達が
行われる。このような動作は、従来のマイクロプロセッ
サの動作と全く同様である。
【0015】以下ではプロセッサ1が主記憶(図示せ
ず)に対してプリフェッチ動作を行う場合について、そ
の処理の経過をプリフェッチリクエスト生成回路11、
プリフェッチ制御回路12、プリフェッチ一時停止回路
13について説明する。プリフェッチ動作の初期状態の
設定は、プロセッサ1が命令によりプリフェッチ情報を
格納する資源である、プリフェッチアドレスアレイ2
0、プリフェッチ配列数レジスタ31(後述の図2、図
3の実例では“3”がセットされる)、プリフェッチカ
ウントレジスタ32(上記の実例では“100”がセッ
トされる)、プリフェッチ起動レジスタ33(プリフェ
ッチ起動時に“1”がセットされる)、ループサイクル
数レジスタ51(上記の実例では“3”がセットされ
る)、プリフェッチ先行サイクル数指定レジスタ52に
値を設定(上記の実例では“6”がセットされる)する
ことで行う。すなわち、プリフェッチの初期状態の設定
を行う命令が命令レジスタ(IR)4に読み込まれる
と、デコーダ6によって解読されプリフェッチ情報設定
回路10に指示を行い、汎用レジスタ(GR)5の内容
を読み出して、命令レジスタ(IR)4中のPR#フィ
ールドで特定されるプリフェッチ情報を格納する資源に
対して、値の格納が行われる。また、プリフェッチ動作
に関連する資源であるループカウントレジスタ7に対し
ても、プロセッサ1が命令により値(上記の実例では
“100”)を設定する。すなわち、ループカウントレ
ジスタ7の値の設定を行う命令が命令レジスタ(IR)
4に読み込まれると、デコーダ6によって解読されデー
タ書込制御回路9に指示を行い、汎用レジスタ(GR)
5の内容を読み出して、ループカウントレジスタ7に対
して、値の格納が行われる。なお、プロセッサ1の初期
状態においては、プリフェッチポインタレジスタ30、
プリフェッチ先行サイクル数カウントレジスタ50には
値0が格納される。それ以外の部分の初期状態における
値は、従来のマイクロプロセッサと同様な値が格納され
る。図1においてはプリフェッチ制御のみを示し、それ
以外のプロセッサ制御は図示していないが、従来のマイ
クロプロセッサと同様に処理が行われる。
【0016】プリフェッチのために必要なプリフェッチ
の初期状態の設定を行う命令が全て実行されると、プリ
フェッチ動作が開始される。プリフェッチ動作はプリフ
ェッチのためのハードウエア機構であるプリフェッチリ
クエスト生成回路11、プリフェッチ制御回路12、プ
リフェッチ一時停止回路13が行い、ループ制御を除く
プロセッサ命令の実行とは非同期に行われる。
【0017】プリフェッチのために必要なプリフェッチ
の初期情報を以下に解説する。第1に、プリフェッチの
対象となる配列全てについて、その先頭アドレスとアド
レス増分をプリフェッチアドレスアレイ20に設定す
る。先頭アドレスとはループの最初の繰り返しでアクセ
スされる各々の配列要素(後述の図2の実例の場合、A
(1)、B(1)、C(1))のアドレスであり、アド
レス増分とは各々の配列についてのループ繰り返し1回
分における配列要素のアドレス変化の大きさ(上記実例
では“8”)である。
【0018】プリフェッチアドレスアレイ20の内部構
成は図2に示されている。プリフェッチアドレスアレイ
20は複数のエントリから成り、各々のエントリは、初
回用フィールド、先頭アドレスフィールド、アドレス増
分フィールドの3つのフィールドから成る。配列の先頭
アドレスは先頭アドレスフィールドに格納され、アドレ
ス増分はアドレス増分フィールドに格納される。初回用
フィールドには、先頭アドレスとアドレス増分が格納さ
れる際に、値「1」が格納される。第2に、プリフェッ
チアドレスアレイ20に設定された配列の種類の数をプ
リフェッチ配列数レジスタ31に格納する(この場合
“3”)。第3に、プリフェッチの対象となるループの
繰り返しの回数をプリフェッチカウントレジスタ32に
格納する。この値は、プロセッサ1がループ実行を行う
際に使用するループカウントレジスタ7に設定される値
と同一である(図3の場合“100”)。第4にプリフ
ェッチの対象となるループ1回分の静的な実行サイクル
数をループサイクル数レジスタ51に格納する(図3の
場合“3”)。静的な実行サイクル数とは、ループ1回
分に含まれる命令数を、プロセッサ1が1サイクル当た
りに実行可能な命令数で割った値であり、すなわち、主
記憶アクセスや分岐命令の実行など、動的な要因が理想
的であった場合のループ1回分に要する実行サイクル数
である。第5に、プロセッサ1におけるデータ使用に、
最大何サイクル先行してプリフェッチを発行するか、そ
のサイクル数をプリフェッチ先行サイクル数指定レジス
タ52に格納する(図3の場合“6”)。最後に、プリ
フェッチ起動レジスタ33に値「1」を格納すると、以
上で設定したプリフェッチ情報に基づいてプリフェッチ
が起動される。
【0019】これらのプリフェッチ情報の詳細について
は、下記のプリフェッチ動作の解説において説明され
る。プリフェッチ動作は3つの回路、プリフェッチリク
エスト生成回路11、プリフェッチ制御回路12、プリ
フェッチ一時停止回路13によって行われる。プリフェ
ッチリクエスト生成回路11は、プリフェッチ対象とな
る配列のアドレス情報を持ち、プリフェッチのためのア
ドレスを生成し、プリフェッチリクエストの発行を行
う。プリフェッチ制御回路12は、プリフェッチの回
数、プリフェッチの発行タイミングなどを制御する。プ
リフェッチ一時停止回路13は、プロセッサ1における
プログラム実行とプリフェッチ発行を監視し、プリフェ
ッチの発行し過ぎを抑制する。
【0020】以下、3つの回路、プリフェッチリクエス
ト生成回路11、プリフェッチ制御回路12、プリフェ
ッチ一時停止回路13について詳細な説明を行う。プリ
フェッチリクエスト生成回路11において、プリフェッ
チの対象となる配列の情報は前述のごとく、プリフェッ
チに先立ってプリフェッチアドレスアレイ20に格納さ
れる。プリフェッチアドレスアレイ20に格納されてい
るどのエントリについてプリフェッチを発行するかは、
信号線L20を介してプリフェッチ制御回路12より指
定される。該指定されたエントリにおいて、初回用フィ
ールドの値が「1」であった場合には、以下のようにプ
リフェッチが発行される。プリフェッチアドレスアレイ
20から読み出された初回用フィールドの値は論理和回
路25に入力される。論理和回路25は書込制御回路2
6を制御して、セレクタ24の出力であるプリフェッチ
アドレスについて信号線L10を介して主記憶(図示せ
ず)に対してプリフェッチを発行する。この際、セレク
タ24においては初回用フィールドの値が「1」である
ため、信号線L11の信号、すなわち、プリフェッチア
ドレスアレイ20の先頭アドレスフィールドに格納され
るアドレスそのままについてプリフェッチが発行され
る。 また、読み出された配列要素の初回用フィールド
はOR回路25の出力が“1”のとき“0”に変更され
る。初回用フィールドの値が「0」であった場合には、
以下のようにプリフェッチが発行される。
【0021】プリフェッチアドレスアレイ20から読み
出された先頭アドレスフィールドの値とアドレス増分フ
ィールドの値が加算器22で加えられ、元のアドレスフ
ィールドの値と比較器23において比較される。この
際、比較の対象となる2つの値は、アドレスの上位部分
のみが比較される。ここでアドレスの上位部分とは、プ
ロセッサ1のキャッシュ(図示せず)の1ラインを指定
するためのアドレス範囲を指し示す。比較の結果、値が
異なる場合には値「1」が論理和回路25に入力され
る。論理和回路25は書込制御回路26を制御して、セ
レクタ24の出力であるプリフェッチアドレスについて
信号線L10を介して主記憶(図示せず)に対してプリ
フェッチを発行する。この際、セレクタ24においては
初回用フィールドの値が「0」であるため、信号線L1
2の信号、すなわち、先頭アドレスフィールドの値とア
ドレス増分フィールドの値が加算器22で加えられたア
ドレスについてプリフェッチが発行される。初回用フィ
ールドの値が「0」であって、かつ、比較器23におい
て行われた比較の結果が等しかった場合にはプリフェッ
チの発行は行われない。
【0022】なお、初回用フィールドの値およびプリフ
ェッチの発行の有無に関わらず、プリフェッチ制御回路
12より指定されたエントリについては、先頭アドレス
フィールドの値とアドレス増分フィールドの値の加算値
が先頭アドレスフィールドに格納される。これにより、
プリフェッチアドレスアレイ20の先頭アドレスフィー
ルドは、プリフェッチ対象となる配列について、実際に
プロセッサ1が行う命令と同一のアドレス変化を模擬す
る。プリフェッチの発行はこの模擬の過程で、配列が新
たなキャッシュラインをアクセスするタイミングを検出
することで行っている。以上のようにして、プリフェッ
チリクエスト生成回路11において、プリフェッチリク
エストが生成される。
【0023】プリフェッチ制御回路12において、プリ
フェッチのための情報は前述のごとく、プリフェッチに
先立ってプリフェッチ配列数レジスタ31、プリフェッ
チカウントレジスタ32に格納される。プリフェッチ配
列数レジスタ31には、プリフェッチを行う配列の個数
が、プリフェッチカウントレジスタ32にはプリフェッ
チの対象となるループの長さが格納される。また、プリ
フェッチ動作の開始前には、プリフェッチポインタレジ
スタ30は値「0」である。プリフェッチポインタレジ
スタ30の初期値「0」の格納は、プロセッサ1の初期
化時およびプリフェッチ動作の終了時に行われる。全て
のプリフェッチ情報が設定された後、プリフェッチ起動
レジスタ33に値「1」を設定することでプリフェッチ
が起動される。
【0024】プリフェッチが起動されるとプリフェッチ
制御回路12は以下のように動作を行う。プリフェッチ
起動レジスタ33の値が「1」であり、かつ信号線L2
2を介してプリフェッチ一時停止回路13から伝達され
る信号値が「1」であるとき、すなわち、後述のように
一時停止をしなくてよい状態を示すとき、論理積回路3
9の出力は値「1」となる。加算器34は論理積回路3
9の出力が「1」の場合、プロセッサ1の信号クロック
(図示せず)に同期して、プリフェッチポインタレジス
タ30の値に「1」を加え、その結果をプリフェッチ配
列数レジスタ31の値と比較器36において比較する。
比較結果が等しくない場合には、セレクタ35は加算器
34の加算結果をそのまま出力し、比較結果が等しい場
合には、値「0」を出力する。セレクタ35の出力は、
プリフェッチポインタレジスタ30に格納される。ま
た、加算器34の加算結果は信号線L20を介してプリ
フェッチリクエスト生成回路11に伝達され、前述のご
とく、プリフェッチリクエストの生成を行う。また、論
理積回路39の出力はプリフェッチリクエスト生成回路
11に送られ、もし、論理積回路39の出力が値「0」
であった場合には、プリフェッチリクエスト生成回路1
1に対して、プリフェッチリクエストの生成を行わない
よう制御が行われる(制御のための構成は図示省略)。
【0025】本実施例ではプロセッサ1内部に命令レジ
スタ(IR)4、命令デコーダ6がプロセッサ1につき
各々1台の例で解説を行っているが、これらが複数でも
かまわない。複数の場合には、プロセッサ1の信号クロ
ック(図示せず)1サイクルにつき、複数命令を実行可
能なスーパースカラ方式のプロセッサとなるが、このよ
うな場合、すなわち、1サイクルにつき、複数の主記憶
アクセス命令をプロセッサ1が実行する場合には、上記
信号線L20を介して行うプリフェッチリクエスト生成
回路11へのプリフェッチの指示も同様に複数回行い、
プリフェッチリクエスト生成回路11において、1サイ
クルにつき複数のプリフェッチリクエスト生成を行う。
【0026】さて、上記比較器36での比較結果が等し
い場合には、信号線L21を介してプリフェッチ一時停
止回路13に対し、信号「1」が伝達され、等しくない
場合には信号「0」が伝達される。また、比較器36で
の比較結果が等しい場合には、減算器37においてプリ
フェッチカウントレジスタ32の値から「1」を引く演
算が行われ、その結果はプリフェッチカウントレジスタ
32に格納される。また、減算器37の演算結果は比較
器38において値「0」と比較され、等しい場合、つま
りあらかじめ設定したループ長の分だけのプリフェッチ
動作が行われた場合には、値「0」がプリフェッチ起動
レジスタ33に格納され、プリフェッチ動作が完了す
る。以上のようにして、プリフェッチ制御回路12にお
いて、プリフェッチ制御が行われる。
【0027】プリフェッチ一時停止回路13において、
プリフェッチのための情報は前述のごとく、プリフェッ
チに先立ってループサイクル数レジスタ51、プリフェ
ッチ先行サイクル数指定レジスタ52に格納される。ル
ープサイクル数レジスタ51には、プリフェッチの対象
となるループに要する静的な実行サイクル数が、プリフ
ェッチ先行サイクル数指定レジスタ52には、プロセッ
サ1におけるデータ使用に最大何サイクル先行してプリ
フェッチを発行するか、そのサイクル数が格納される。
また、プリフェッチ動作の開始前には、プリフェッチ先
行サイクル数カウントレジスタ50は値「0」である。
プリフェッチ先行サイクル数カウントレジスタ50の初
期値「0」の格納は、プロセッサ1の初期化時およびプ
リフェッチ動作の終了時に行われる。
【0028】これらの情報が設定された後、プリフェッ
チ一時停止回路13は以下のように動作を行う。プリフ
ェッチ一時停止回路13は、信号線L2および信号線L
21から情報の伝達を受ける。信号線L2は次のような
情報を伝達する。命令レジスタ(IR)4にループカウ
ント命令(プログラムにおいてループ単位の終わりに存
在する)が格納されこれがデコーダ6によって解読され
ると信号線L2を介して減算器8に指令が行われ、ルー
プカウントレジスタ7の値が「1」だけ減じられる。こ
のように、信号線L2は、ループカウント命令の実行が
1回行われた情報を示す。なお、減算器8の演算結果が
「0」であった場合には、命令制御2に対して命令アド
レスの指示が行われ、ループ制御が実行される(図示せ
ず)。以下では、信号線L2の値が「1」であった場
合、ループカウント命令の実行が行われたものとする。
また、前述のように、信号線L21からはプリフェッチ
制御回路12より比較器36における比較結果が等しい
か否かの情報を伝達される。比較結果が等しい場合には
信号「1」が伝達され、等しくない場合には信号「0」
が伝達される。信号線L21が値「1」であることは、
プリフェッチポインタレジスタ30の内容がプリフェッ
チカウントレジスタ32に設定された回数だけ加算器3
4において加算を行われたことを示す。これは、プリフ
ェッチ対象となる配列について、ループ1回分のアドレ
ス変化を模擬したことに等しい。
【0029】さて、このような情報を信号線L2および
信号線L21から伝達されて、プリフェッチ一時停止回
路13は以下のように動作を行う。セレクタ55に対し
て、次の3つの値が入力される。それらは、プリフェッ
チ先行サイクル数カウントレジスタ50の値、加算器5
3によってプリフェッチ先行サイクル数カウントレジス
タ50の値とループサイクル数レジスタ51の値を加算
した値、減算器54によってプリフェッチ先行サイクル
数カウントレジスタ50の値からループサイクル数レジ
スタ51の値を減算した値である。これらの値に対し
て、セレクタ55はプリフェッチ先行サイクル数更新回
路56の制御によって値の選択を行う。プリフェッチ先
行サイクル数更新回路56には、前述の信号線L2およ
び信号線L21が入力されており、信号線L2が「0」
で信号線L21が「1」の場合には、加算器53の出力
を選択し、信号線L2が「1」で信号線L21が「0」
の場合には、減算器54の出力を選択し、信号線L2、
信号線L21がともに「1」の場合、および、信号線L
2、信号線L21がともに「0」の場合には、プリフェ
ッチ先行サイクル数カウントレジスタ50の値を選択す
る。セレクタ55の出力はプリフェッチ先行サイクル数
指定レジスタ52と比較器57において比較され、セレ
クタ55の出力のほうが大きい場合には、値「0」が信
号線L22を介してプリフェッチ制御回路12に伝達さ
れ、そうでない場合には値「1」が伝達される。値
「0」は一時停止を意味し、信号線L22が値「0」の
間はプリフェッチ制御回路12において論理積回路39
の出力が「0」となって、これにより、プリフェッチリ
クエスト生成回路11におけるプリフェッチリクエスト
生成が一時停止する。
【0030】この一時停止はプリフェッチリクエストの
過剰な生成を抑止するために行われる。この目的は、何
らかの要因でプロセッサ1においてループ実行が滞った
場合に、プロセッサ1のループ実行に同期してプリフェ
ッチリクエストの生成の一時停止をさせることにある。
このような制御を行わない場合、プリフェッチリクエス
トの過剰な生成のために、プロセッサ1の性能がかえっ
て低下する可能性がある。例えば、プリフェッチリクエ
ストが過剰に生成されたためにプロセッサ1のキャッシ
ュ(図示せず)がプリフェッチされたデータの書込に占
有されてしまい、プロセッサ1自身のデータアクセスが
阻害される可能性や、プリフェッチリクエストが過剰な
ために、プロセッサ1がデータアクセスを行う以前に過
剰なプリフェッチデータが必要なプリフェッチデータを
リプレースしてしまう可能性がある。このような状態に
陥るのを防ぐために、プリフェッチ一時停止回路13は
信号線L2および信号線L21によって、プロセッサ1
が実行するループの進み具合と、プリフェッチ機構にお
けるループの進み具合を比較して、一時停止制御を行
う。
【0031】プリフェッチ先行サイクル数カウントレジ
スタ50はプリフェッチ機構におけるループの進み具合
をプロセッサ1のサイクル数(図3の場合、プロセッサ
クロック数と同等)で管理しており、この値をあらかじ
め設定した基準値であるプリフェッチ先行サイクル数指
定レジスタ52と比較して一時停止制御を行う。プリフ
ェッチ先行サイクル数指定レジスタ52には、プロセッ
サ1が主記憶(図示せず)に対してプリフェッチリクエ
ストを発行してプリフェッチにより得られる主記憶の内
容がキャッシュ(図示せず)に格納されるまでのサイク
ル数に、余裕分のサイクル数を加えた値を設定すること
が推奨される。プロセッサ1が主記憶(図示せず)に対
してプリフェッチリクエストを発行してプリフェッチに
より得られる主記憶の内容がキャッシュ(図示せず)に
格納されるまでのサイクル数よりも小さい値を設定した
場合には、プリフェッチを充分に発行できないためにプ
ロセッサ1の性能が低下する。大きすぎる値を設定した
場合には、前述のとおり、プロセッサ1がキャッシュ
(図示せず)へのアクセスを阻害される、あるいは、キ
ャッシュ(図示せず)上の必要なデータのリプレースが
発生するなどの可能性が生ずる。
【0032】なお、本実施例では主記憶(図示せず)か
ら読み出したデータをキャッシュ(図示せず)に格納す
ると仮定したが、キャッシュ以外のプリフェッチデータ
を格納するための、キャッシュに類似したバッファであ
っても構わない。また、プリフェッチ一時停止回路13
が一時停止制御に用いるループカウントレジスタ7を、
プロセッサ1がループ制御に用いるレジスタとは別個に
プリフェッチ動作専用に設けても問題ない。さらに、信
号線L2のための情報を生成する命令は、プロセッサ1
がループ制御に用いる命令とは別個にプリフェッチ動作
専用に設けても問題ない。
【0033】さて、このようにして構成されたプリフェ
ッチ機構の動作の1例を図3を用いて説明する。ここで
は、ループ内でA(N)、B(N)、C(N)の3つの
配列をN=1から順にアクセスすると仮定しており、ル
ープ長は100を仮定している。これは、プリフェッチ
アドレスアレイ20を図2に示した状態を設定し、プリ
フェッチ配列数レジスタ31に値「3」を設定し、プリ
フェッチカウントレジスタ32に「100」を設定した
状態に等価である。図3において縦方向は時間の進みを
示し、時刻は左端の「プロセッサクロック」の値で表示
される。左から第2列の「プリフェッチ対象配列」は、
信号線L20によって指示され、プリフェッチリクエス
ト生成回路11が生成を行ったプリフェッチリクエスト
を配列要素名(A(1)、B(1)……)で示してい
る。ここでは、キャッシュのラインサイズは配列の1要
素の大きさに等しいと仮定した。第3列の「プロセッサ
使用配列」は、プロセッサ1が使用した配列要素を示し
ている。主記憶からキャッシュへのレイテンシは6サイ
クルであると仮定している。これに呼応して、プリフェ
ッチ先行サイクル数指定レジスタ52の値も「6」を設
定している。また、プロセッサ1は1サイクルに1命令
を実行すると仮定して、ループサイクル数レジスタ51
には、値「3」を設定している。これは、ループ内で使
用する配列が3種類であることに対応している。第4列
の「L20」は、信号線L20の値を、第5列の「DI
FF」は、プリフェッチ先行サイクル数カウントレジス
タ50の値を、第6列の「PCTR」はプリフェッチカ
ウントレジスタ32の値を、第7列の「CTR」はルー
プカウントレジスタ7の値を、それぞれ示している。
【0034】「プロセッサクロック」の値が「1」から
「6」の範囲では、1サイクルに1配列要素の順でプリ
フェッチが行われている。これは、プリフェッチポイン
タレジスタ30の値が、毎サイクル加算器34でインク
リメントされ、信号線L20からプリフェッチリクエス
ト生成回路11内部のプリフェッチアドレスアレイ20
に指示が伝達されることで行われる。この際、項目「D
IFF」で示されるとおり、プリフェッチ先行サイクル
数カウントレジスタ50の値は、プリフェッチ先行サイ
クル数指定レジスタ52に設定された値「6」を下回っ
ていることが確認できる。また、DIFF=(CTR−
PCTR)×3という関係が成り立っていることもわか
る。ここに、値「3」はループサイクル数レジスタ51
の設定値に対応する。このように、プリフェッチ一時停
止回路13においては、信号線L2および信号線L21
から、ループカウントレジスタ7およびプリフェッチカ
ウントレジスタ32の情報を得て、該関係に基づいてプ
リフェッチ先行サイクル数カウントレジスタ50の値を
計数し、一時停止制御を行う。
【0035】「プロセッサクロック」の値が「7」から
「12」の範囲では、プリフェッチしたデータがプロセ
ッサ1において使用可能となるため、「プロセッサ使用
配列」で1サイクルに1配列要素の割合で、プリフェッ
チした順に使用している(より正しくは、プロセッサ1
が使用する順番にプリフェッチを発行し、プリフェッチ
がその通り行われた結果、プロセッサ1が予定通り順番
に使用を行う)。この範囲では、プロセッサ1における
配列の使用と、プリフェッチの発行が釣り合っているた
め、プリフェッチ先行サイクル数カウントレジスタ50
の値は一定値「6」となっている。
【0036】「プロセッサクロック」の値が「13」か
ら「15」の範囲では、仮想的にプロセッサ1の実行が
ストールし、配列の使用が3サイクルの間行われない状
況になったものと仮定している。その結果、「プロセッ
サクロック」が「16」から「18」の範囲ではプリフ
ェッチ先行サイクル数カウントレジスタ50の値が
「9」となり、プリフェッチ先行サイクル数指定レジス
タ52に設定された値「6」を越える、この結果、プリ
フェッチ一時停止回路13は信号線L22にプリフェッ
チを一時停止する信号を出力し、この「プロセッサクロ
ック」の範囲ではプリフェッチが一時停止される。ただ
し、該範囲においてプロセッサ1ストールは解除され、
配列の使用が再開されたとしているために、「プロセッ
サクロック」の値が「19」以降の範囲では、プリフェ
ッチ先行サイクル数カウントレジスタ50の値は「6」
となり、プリフェッチ先行サイクル数指定レジスタ52
に設定された値「6」を越えない。この結果、プリフェ
ッチ一時停止回路13は信号線L22にプリフェッチを
一時停止する信号を出力するのを取りやめ、プリフェッ
チ動作が再開される。以上示したようにプリフェッチ動
作は、プログラム1のループ実行に同期して発行制御を
行うことができ、これによりプリフェッチリクエストの
過剰な発行を抑止し、プログラム1にとって最適なプリ
フェッチを達成する。
【0037】<実施例2>次に、本発明の第2の実施例
を説明する。本実施例は第1の実施例の変形であり、よ
り複雑なループに対しても効率よくプリフェッチを行う
ためにプリフェッチ機構を提供することを目的とする。
具体的には科学技術計算に頻発する2重ループに対して
効率よくプリフェッチを行わせることを目的とする。
【0038】図4は本発明の第2の実施例であるプリフ
ェッチ機構のシステム構成図である。図4中、図1と同
一の参照番号を持つ構成要素は第1の実施例の場合と同
じ機能を持つ。ここでは図1と異なる構成要素について
のみ説明を行う。図4中、14はプロセッサ(PE)、
70はプリフェッチリクエスト生成回路、71はプリフ
ェッチアドレス増分選択回路である。図ではプロセッサ
14内部に命令レジスタ(IR)4、命令デコーダ6が
プロセッサ1について各々1台のみ図示してあるが、複
数でもかまわない。すなわち、1サイクルに複数命令を
実行可能なスーパースカラ方式のプロセッサでもかまわ
ない。
【0039】次に、このように構成された本システムの
動作について、図4を用いて説明する。命令の読み出し
等の動作は第1の実施例と同様であるので省略し、ここ
では第1の実施例との相違点である、2重ループに対す
るプリフェッチ動作を行う場合について、その処理の経
過をプリフェッチリクエスト生成回路70、プリフェッ
チアドレス増分選択回路71、プリフェッチ制御回路1
2、プリフェッチ一時停止回路13について説明する。
【0040】図5はプリフェッチリクエスト生成回路7
0の構成図である。図5中、27はプリフェッチアドレ
スアレイ、28はセレクタであり、それ以外の構成要素
は図1と同一の参照番号を持ち、第1の実施例の場合と
同じ機能を持つ。図7はプリフェッチアドレスアレイ2
7の構成を示している。プリフェッチアドレスアレイ2
7は、第1の実施例のプリフェッチアドレスアレイ20
の各エントリにアドレス増分フィールドが1つ付け加え
られた点が異なっている。以前から存在するアドレス増
分フィールドと区別するため、各々、アドレス増分フィ
ールド1、アドレス増分フィールド2と呼んで区別す
る。これらは、2次元配列の各々の次元に対するアドレ
ス増分を指定するフィールドである。詳細については以
下の解説内で述べる。図6はプリフェッチアドレス増分
選択回路71の構成図である。図6中、80は内側ルー
プ長レジスタ、81は内側ループカウントレジスタ、8
2は減算器、83は比較器、84はセレクタである。
【0041】以下、図5から図7もあわせて説明を行
う。本実施例における2重ループのプリフェッチのため
に必要なプリフェッチの初期情報を以下に解説する。ま
ず、プリフェッチの対象となる配列全てについて、その
先頭アドレスとアドレス増分をプリフェッチアドレスア
レイ27に設定する。先頭アドレスは2重ループのそれ
ぞれのインデックスの最初の繰り返しでアクセスされる
配列要素のアドレスであり、これを各々の配列について
先頭アドレスフィールドに格納する。アドレス増分は2
重ループの内側および外側について2種類を設定する。
内側ループのループ繰り返し1回分における配列要素の
アドレス変化の大きさを、アドレス増分フィールド1に
格納する。アドレス増分フィールド2には、外側ループ
のインデックスが変化したときのアドレス変化の大き
さ、つまり、ある外側インデックスにおける内側インデ
ックスの最後の配列アクセスのアドレスと、次の外側イ
ンデックスにおける内側インデックスの最初の配列アク
セスのアドレスとの差を格納する。例えば、以下のよう
な2重ループであれば、配列要素B(11,1)と配列
要素B(1,2)のアドレスの差をアドレス増分フィー
ルド2に格納する(もちろん、B(11,2)とB
(1,3)の差でも構わない)。
【0042】DO N=1,11 DO K=1,11 S=S+B(K,N) CONTINUE CONTINUE プリフェッチアドレスアレイ27のアドレス増分フィー
ルド2に格納する値は、本実施例に挙げた以外にも様々
なアドレスがあり得る。指定の要点は、外側インデック
スの変化に対応したアドレス変化に追随できる情報を与
えることであり、そのような情報を有していればプリフ
ェッチリクエスト生成回路70において2重ループに対
応したアドレス変化を行わせることが可能であり、した
がってそのような情報を有しているのであれば、どのよ
うなアドレスでも構わない。プリフェッチアドレスアレ
イ27の初回用フィールドについては、実施例1と同様
である。
【0043】プリフェッチアドレス増分選択回路71内
の内側ループ長レジスタ80には、内側ループ長が格納
される。内側ループ長は通例、プロセッサ1が内側ルー
プ実行を行う際に、ループカウントレジスタ7に設定さ
れる値と同一である。内側ループカウントレジスタ81
にも内側ループ長が、内側ループ長レジスタ80設定時
に設定される。
【0044】プリフェッチ制御回路12内のプリフェッ
チ配列数レジスタ31に関しては実施例1と同様であ
り、プリフェッチアドレスアレイ27に設定された配列
の種類の数を格納する。プリフェッチカウントレジスタ
32に格納する値は2重ループの総実行回数、すなわ
ち、内側ループ長×外側ループ長の値を格納する。プリ
フェッチ一時停止回路13内のループサイクル数レジス
タ51に格納する値も実施例1と同様であり、プリフェ
ッチの対象となるループ1回分の静的な実行サイクル数
を格納する。プリフェッチ先行サイクル数指定レジスタ
52に関しても実施例1と同様である。そして、プリフ
ェッチ制御回路12内のプリフェッチ起動レジスタ33
に値「1」を格納すると、以上で設定したプリフェッチ
情報に基づいてプリフェッチが起動される点も実施例1
と同様である。
【0045】本実施例においては、プリフェッチリクエ
ストの生成方法のみが第1の実施例と異なり、プリフェ
ッチ制御回路12、プリフェッチ一時停止回路13の構
成、動作については第1の実施例と同様であるのでこれ
らの説明は省略し、以下ではプリフェッチリクエスト生
成回路70とプリフェッチアドレス増分選択回路71の
動作についてのみ説明を行う。プリフェッチリクエスト
生成回路70において、プリフェッチの対象となる配列
の情報は前述のごとく、プリフェッチに先立ってプリフ
ェッチアドレスアレイ27に格納される。プリフェッチ
アドレスアレイ27に格納されているどのエントリにつ
いてプリフェッチを発行するかは、信号線L20を介し
てプリフェッチ制御回路12より指定される。これは実
施例1と同様である。該指定されたエントリから読み出
されたアドレス増分フィールド1とアドレス増分フィー
ルド2の値はセレクタ28に入力され、プリフェッチア
ドレス増分選択回路71からの信号線L23の値によっ
て選択されて加算器22に入力される。加算器22に入
力されて以降は、実施例1と同様の動作である。
【0046】信号線L23はプリフェッチアドレス増分
選択回路71から以下のように生成される。プリフェッ
チアドレス増分選択回路71には、プリフェッチ制御回
路12から信号線L21が入力される。信号線L21は
実施例1で解説したように、内側ループ1回分のプリフ
ェッチリクエスト生成を信号線L20を介してプリフェ
ッチリクエスト生成回路70に指示する度に値「1」が
出力される。信号線L21が値「1」を取ると、減算器
82は内側ループカウントレジスタ81に格納された値
をデクリメントする。該デクリメントされた値は比較器
83に入力され、値「0」と比較される。比較結果が等
しい場合には、セレクタ84は内側ループ長レジスタ8
0の値を選択し、等しくない場合には、該デクリメント
された値を選択し、選択された値を内側ループカウント
レジスタ81に格納する。該比較結果が等しい場合に
は、信号線L23を介して、プリフェッチリクエスト生
成回路70においてアドレス増分フィールド2の値がセ
レクタ28によって選択され、該比較結果が等しくない
場合には、アドレス増分フィールド1の値がセレクタ2
8によって選択される。このように信号線L23は内側
ループ長に相当する回数の内側ループの実行完了を示し
ており、この情報によってプリフェッチリクエスト生成
回路70は、アドレス増分を切り換える。
【0047】以上のようにして、本実施例では2重ルー
プに対応したプリフェッチアドレスを自動的に生成する
ことができ、したがって2重ループの実行においてもプ
ロセッサ1はループ実行の初回のメモリレイテンシ以外
のレイテンシを隠蔽することができる。なお、本実施例
では主記憶(図示せず)から読み出したデータをキャッ
シュ(図示せず)に格納すると仮定したが、キャッシュ
以外のプリフェッチデータを格納するための、キャッシ
ュに類似したバッファであっても構わない。また、プリ
フェッチ一時停止回路13が一時停止制御に用いるルー
プカウントレジスタ7を、プロセッサ1がループ制御に
用いるレジスタとは別個にプリフェッチ動作専用に設け
ても問題ない。さらに、信号線L2のための情報を生成
する命令は、プロセッサ1がループ制御に用いる命令と
は別個にプリフェッチ動作専用に設けても問題ない。
【0048】<実施例3>次に、本発明の第3の実施例
を説明する。本実施例は第1の実施例の変形であり、第
2の実施例とは別の形の複雑なループに対しても効率よ
くプリフェッチを行うためにプリフェッチ機構を提供す
ることを目的とする。具体的には異なる複数の1重ルー
プが連続して実行される場合に対して効率よくプリフェ
ッチを行わせることを目的とする。
【0049】図8は本発明の第3の実施例であるプリフ
ェッチ機構のシステム構成図である。図8中、図1と同
一の参照番号を持つ構成要素は第1の実施例の場合と同
じ機能を持つ。ここでは図1と異なる構成要素について
のみ説明を行う。図8中、15はプロセッサ(PE)、
72はプリフェッチ制御回路、73はプリフェッチ上位
制御回路、L25からL29は信号線である。図ではプ
ロセッサ15内部に命令レジスタ(IR)4、命令デコ
ーダ6がプロセッサ1各々1台のみ図示してあるが、複
数でもかまわない。すなわち、1サイクルに複数命令を
実行可能なスーパースカラ方式のプロセッサでもかまわ
ない。
【0050】次に、このように構成された本システムの
動作について、図8を用いて説明する。命令の読み出し
等の動作は第1の実施例と同様であるので省略し、ここ
では第1の実施例との相違点である、連続する1重ルー
プに対するプリフェッチ動作を行う場合について、その
処理の経過をプリフェッチリクエスト生成回路11、プ
リフェッチ制御回路72、プリフェッチ上位制御回路7
3、プリフェッチ一時停止回路74について説明する。
【0051】図9はプリフェッチ制御回路72の構成図
である。図9中、90はプリフェッチアドレスアレイ先
頭エントリ指定レジスタ、91は加算器であり、それ以
外の構成要素は図1と同一の参照番号を持ち、第1の実
施例の場合と同じ機能を持つ。図10はプリフェッチ上
位制御回路73の構成図である。図10中、100はプ
リフェッチ配列アレイ、101はプリフェッチ起動レジ
スタ、102は減算器、103は論理和回路、L40は
信号線である。図11はプリフェッチ配列アレイ100
の構成を示している。プリフェッチ配列アレイ100は
複数のエントリから成り、各々のエントリは、有効フィ
ールド、先頭エントリ指示フィールド、末尾エントリ指
示フィールド、ループ長指示フィールド、ループサイク
ル数指示フィールドの5つのフィールドから成る。図1
4はプリフェッチ一時停止回路74の構成図である。図
14中、L30は信号線であり、それ以外の構成要素は
図1と同一の参照番号を持ち、第1の実施例の場合と同
じ機能を持つ。
【0052】本実施例における、連続する1重ループの
プリフェッチのために必要なプリフェッチの初期情報を
以下に解説する。まず、プリフェッチの対象となるルー
プに関して、それらループ内の配列について、その先頭
アドレスとアドレス増分をプリフェッチアドレスアレイ
20に設定する。設定は、連続する複数のループについ
てまとめて行ってよい。このとき、同じループ内の配列
については、プリフェッチアドレスアレイ20の連続し
たエントリに設定を行う。さらに、各々のループについ
て、ループ内の配列のアドレス情報をセットしたプリフ
ェッチアドレスアレイ20のエントリの先頭と末尾を、
プリフェッチ上位制御回路73内のプリフェッチ配列ア
レイ100の先頭エントリ指示フィールドと末尾エント
リ指示フィールドに設定する。また、そのループのルー
プ長をループ長指示フィールドに、ループ1回分の静的
な実行サイクル数をループサイクル数指示フィールドに
設定する。プリフェッチ配列アレイにおいて配列情報が
設定されたエントリの有効フィールドには値「1」が設
定される。なお、プロセッサ1の初期状態においては、
全ての有効フィールドには値「0」が設定される。残る
ループに関しては、プロセッサ1がループ実行を行っ
て、設定されたプリフェッチを終了した後、プリフェッ
チアドレスアレイ20の開放されたエントリ、および、
プリフェッチ配列アレイ100に対して上記と同様行
う。詳しくは、後述する。なお、プリフェッチアドレス
アレイ20の初回用フィールド、プリフェッチポインタ
レジスタ30、プリフェッチ先行サイクル数指定レジス
タ52については、実施例1と同様である。
【0053】上記初期設定が終了した後、プリフェッチ
起動レジスタ101に値「1」を格納すると、以上で設
定したプリフェッチ情報に基づいてプリフェッチが起動
される。起動されると、まず、プリフェッチ配列アレイ
100において最も過去に設定された有効なエントリの
内容が読み出され、先頭エントリ指示フィールドの値は
−1され(図示せず)、この−1された値は信号線L2
5を介してプリフェッチ制御回路72内のプリフェッチ
アドレスアレイ先頭エントリ指定レジスタレジスタ90
に格納される。末尾エントリ指示フィールドの値は減算
器102によって先頭エントリ指示フィールドの値から
−1した値が減ぜられた後、信号線L26を介してプリ
フェッチ制御回路72内の、プリフェッチ配列数レジス
タ31に格納される。ループ長指示フィールドの値は信
号線L27を介してプリフェッチ制御回路72内のプリ
フェッチカウントレジスタ32に格納される。ループサ
イクル数指示フィールドの値は信号線L30を介してプ
リフェッチ一時停止回路74内のループサイクル数レジ
スタ51に格納される。
【0054】プリフェッチリクエスト生成回路11の動
作は実施例1と同様であり、プリフェッチ一時停止回路
74の動作も実施例1のプリフェッチ一時停止回路13
と同様であるので、以下では、プリフェッチ上位制御回
路73、プリフェッチ制御回路72について説明を行
う。プリフェッチ制御回路72の動作も大部分が実施例
1のプリフェッチ制御回路12と同様であり、以下では
異なる部分についてのみ説明を行う。本実施例では、信
号線L20の出力が加算器34の出力にプリフェッチア
ドレスアレイ先頭エントリ指定レジスタレジスタ90の
値を加算器91で加算している。ただし、加算器91に
おける加算においては、加算の結果がプリフェッチアド
レスアレイ20のエントリ数の値を超えた場合には、該
結果から該プリフェッチアドレスアレイ20のエントリ
数を減じるものとする。
【0055】また、比較器38の出力結果は信号線L2
9を介してプリフェッチ上位制御回路73内のプリフェ
ッチ起動レジスタ101に入力される。比較器38にお
ける比較が値「0」と等しい場合、つまりあらかじめ設
定したループ長の分だけのプリフェッチ動作が行われた
場合には、プリフェッチ配列アレイ100の1つのエン
トリにおけるプリフェッチ動作が完了したことを示す。
この場合、フェッチ配列アレイ100において最も古い
エントリ、すなわち、プリフェッチ動作の完了したエン
トリの有効フィールドに値「0」が格納され、次に古い
有効なエントリの内容が読み出され、先頭エントリ指示
フィールドの値から−1された値は信号線L25を介し
てプリフェッチ制御回路72内のプリフェッチアドレス
アレイ先頭エントリ指定レジスタレジスタ90に格納さ
れ、末尾エントリ指示フィールドの値は減算器102に
よって先頭エントリ指示フィールドの値から−1した値
が減ぜられた後、信号線L26を介してプリフェッチ制
御回路72内の、プリフェッチ配列数レジスタ31に格
納され、ループ長指示フィールドの値は信号線L27を
介してプリフェッチ制御回路72内のプリフェッチカウ
ントレジスタ32に格納され、ループサイクル数指示フ
ィールドの値は信号線L30を介してプリフェッチ一時
停止回路74内のループサイクル数レジスタ51に格納
される。そして、プリフェッチ動作がこれらのプリフェ
ッチ情報に基づいて継続される。
【0056】さて、このようにして、プリフェッチ動作
を行って全てのエントリのプリフェッチが完了した場
合、各有効フィールドの値が信号線L40を介して論理
和回路103に入力されており、この結果、該論理和回
路103の出力が値「0」となり、これがプリフェッチ
起動レジスタ101に設定されて、一連のプリフェッチ
動作が終了する。
【0057】さて、このようにして構成されたプリフェ
ッチ機構の動作の1例を図12および図13を用いて説
明する。図12の左側に動作例のためのプログラムが示
されており、右側にはこのプログラムにプリフェッチ情
報の設定を行う命令を挿入した結果が示されている。プ
リフェッチ情報の設定は、「prefetch」という
オペコードにプリフェッチ対象となる配列名をオペラン
ドとして、発行タイミングのみを示している。図12
中、(1)から(6)まで番号を付加した文について、
その文を実行後のプリフェッチ配列アレイ100および
プリフェッチアドレスアレイ20の状態を図13に示し
ている。ここで、プリフェッチ配列アレイ100のエン
トリ数は3であり、プリフェッチアドレスアレイ20の
エントリ数は8であると仮定している。また、プリフェ
ッチ配列アレイ100において、ループサイクル数指示
フィールドは省略して図示していない。
【0058】 において、最初のループのために配列
A、B、Cのプリフェッチ情報を設定している。すなわ
ち、プリフェッチ配列アレイ100の先頭エントリに、
プリフェッチアドレスアレイ20のエントリ1番から3
番を使用し、ループ長が100であることを登録してい
る。そして、プリフェッチアドレスアレイ20のエント
リ1番には配列Aの先頭アドレスと、そのアドレス増分
「8」を、エントリ2番には配列Bの先頭アドレスと、
そのアドレス増分「8」を、エントリ3番には配列Cの
先頭アドレスと、そのアドレス増分「8」を登録してい
る。
【0059】引き続いて行われる において、次のル
ープのための配列D、E、Fのプリフェッチ情報を、最
初のループの実行に先立って設定している。プリフェッ
チ配列アレイ100の2番目のエントリに、プリフェッ
チアドレスアレイ20のエントリ4番から6番を使用
し、ループ長が150であることを登録している。そし
て、プリフェッチアドレスアレイ20の対応するエント
リに配列D、E、Fのプリフェッチ情報を登録してい
る。
【0060】 では最初のループの実行が終了し、
(2)においてはプリフェッチ配列アレイ100の先頭
エントリに登録されていた配列A、B、Cのプリフェッ
チ情報が完了/抹消され、代わって配列D、E、Fのプ
リフェッチ情報が先頭エントリに移動している。配列
A、B、Cのプリフェッチ情報が完了に引き続いて、配
列D、E、Fのプリフェッチ動作が起動される。これに
より、 の後に配列D、E、Fのプリフェッチ情報の
設定/起動を行うよりも早期に配列D、E、Fのプリフ
ェッチ動作を開始できる。このようにして、ループが連
続している場合の性能向上を達成できる。
【0061】 において、配列U、V、Wのプリフェ
ッチ情報の設定が行われる。このとき、プリフェッチ配
列アレイ100のエントリ7番、8番、1番に登録を行
っている。このように、プリフェッチ配列アレイ100
のエントリの8番から1番は連続したエントリとして用
いられる。また、エントリ1番は において配列Aの
プリフェッチ情報を格納していたが、 の段階では既
に配列Aのプリフェッチ動作を完了しているため、
では再利用することが可能な状態となっている。同様
に、 においてはプリフェッチアドレスアレイ20の
エントリ4番から6番に登録されていた配列D、E、F
のプリフェッチは完了してしており、 で配列X、
Y、Zを登録する際にエントリ4番の再利用を行ってい
る。
【0062】このように、プリフェッチ配列アレイ10
0、プリフェッチアドレスアレイ20のエントリの再利
用を行うことができるため、プリフェッチアドレスアレ
イ20のエントリ数を越える配列を使用するループに対
しても、本実施例であればプリフェッチ動作を行うこと
が可能となる。すなわち、該エントリ数を越える配列を
使用するループを、小ループに分割してプリフェッチを
行えばよい。このとき、連続する2個のループで使用す
る配列数をプリフェッチアドレスアレイ20のエントリ
数以内とすれば、図12、図13で説明した例のように
プリフェッチを使用することが可能となる。
【0063】以上示したように、本実施例によって複数
のループ実行に対して複数のプリフェッチ情報の設定
を、プリフェッチ配列アレイ100およびプリフェッチ
アドレスアレイ20のエントリ数の範囲内で前もって行
うことが可能になる。これにより、該複数のプリフェッ
チ情報は各々が終了する毎に連続して動作を行うことが
可能になり、複数のループ実行を切れ目無く動作させる
ことが可能になる。また、プリフェッチアドレスアレイ
20のエントリ数を越える配列を使用するループに対し
ても、小ループに分割してプリフェッチを行うことで、
効率よくプリフェッチ動作を使用することが可能とな
る。
【0064】なお、本実施例では主記憶(図示せず)か
ら読み出したデータをキャッシュ(図示せず)に格納す
ると仮定したが、キャッシュ以外のプリフェッチデータ
を格納するための、キャッシュに類似したバッファであ
っても構わない。また、プリフェッチ一時停止回路74
が一時停止制御に用いるループカウントレジスタ7を、
プロセッサ1がループ制御に用いるレジスタとは別個に
プリフェッチ動作専用に設けても問題ない。さらに、信
号線L2のための情報を生成する命令は、プロセッサ1
がループ制御に用いる命令とは別個にプリフェッチ動作
専用に設けても問題ない。また、本実施例と実施例2を
組み合わせて、連続する2重ループ、または連続する2
重ループと1重ループに対してプリフェッチを行う機構
を構築することが出来ることは云うまでもない。
【0065】
【発明の効果】本発明によれば、マイクロプロセッサに
組み込んだプリフェッチ機構によって、マイクロプロセ
ッサが必要とするデータを主記憶からタイミングよくキ
ャッシュに格納することが可能となり、マイクロプロセ
ッサが演算命令を停止することなく動作することができ
る。また、マイクロプロセッサの実行に同期して過剰な
プリフェッチを抑制することができるため、プリフェッ
チ動作とマイクロプロセッサの命令実行の競合を抑止
し、マイクロプロセッサが持つ演算能力を最大限に発揮
させることができる。さらに、2重ループや連続する1
重ループなど多様なパターンのループに対して最適なプ
リフェッチが可能となる。
【図面の簡単な説明】
【図1】本発明の第1の実施例に係るプリフェッチ機構
の構成を示す図である。
【図2】本発明の第1の実施例に係るプリフェッチ機構
におけるプリフェッチアドレスアレイの構成を示す図で
ある。
【図3】本発明の第1の実施例に係るプリフェッチ機構
の動作例を示す図である。
【図4】本発明の第2の実施例に係るプリフェッチ機構
の構成を示す図である。
【図5】本発明の第2の実施例に係るプリフェッチ機構
におけるプリフェッチリクエスト生成回路の構成を示す
図である。
【図6】本発明の第2の実施例に係るプリフェッチ機構
におけるプリフェッチアドレス増分選択回路の構成を示
す図である。
【図7】本発明の第2の実施例に係るプリフェッチ機構
におけるプリフェッチアドレスアレイの構成を示す図で
ある。
【図8】本発明の第3の実施例に係るプリフェッチ機構
の構成を示す図である。
【図9】本発明の第3の実施例に係るプリフェッチ機構
におけるプリフェッチ制御回路の構成を示す図である。
【図10】本発明の第3の実施例に係るプリフェッチ機
構におけるプリフェッチ上位制御回路の構成を示す図で
ある。
【図11】本発明の第3の実施例に係るプリフェッチ機
構におけるプリフェッチ配列アレイの構成を示す図であ
る。
【図12】本発明の第3の実施例に係るプリフェッチ機
構の動作例の対象となるサンプルプログラムを示す図で
ある。
【図13】本発明の第3の実施例に係るプリフェッチ機
構の動作例を示す図である。
【図14】本発明の第3の実施例に係るプリフェッチ機
構におけるプリフェッチ一時停止回路の構成を示す図で
ある。
【符号の説明】
1 プロセッサ(PE) 2 命令制御 3 プログラムカウンタ(PC) 4 命令レジスタ(IR) 5 汎用レジスタ(GR) 6 命令でコーダ 7 ループカウントレジスタ 8 減算器 9 データ書き込み制御回路 10 プリフェッチ情報設定回路 11、70 プリフェッチリクエスト生成回路 12、72 プリフェッチ制御回路 13、74 プリフェッチ一時停止回路 71 プリフェッチアドレス増分選択回路 73 プリフェッチ上位制御回路

Claims (5)

    【特許請求の範囲】
  1. 【請求項1】 ループ実行のための制御命令を有し、主
    記憶またはキャッシュへのデータアクセス命令を実行可
    能なマイクロプロセッサにおいて、 該データアクセス命令を効率的に行うためのプリフェッ
    チ発行のために、プリフェッチ用のデータアドレス、お
    よび、アドレス増分を、それぞれ複数組設定可能なレジ
    スタアレイを備え、 該レジスタアレイに設定されたアドレス情報に基づい
    て、該マイクロプロセッサの命令実行とは非同期にプリ
    フェッチのためのアドレスを生成し、前記主メモリにプ
    リフェッチ発行を行う手段と、 プリフェッチ発行回数と前記マイクロプロセッサの命令
    実行に伴うループ制御のためのループカウント値を引き
    算し、該引き算結果を予め設定した値と比較し、該引き
    算結果が予め設定した値を越えた場合に前記プリフェッ
    チ発行を行う手段の動作を中止し、プリフェッチ発行を
    一時停止する手段とを備えることを特徴とするプリフェ
    ッチ機構。
  2. 【請求項2】 請求項1記載のプリフェッチ機構におい
    て、 前記プリフェッチ用のレジスタアレイは、プリフェッチ
    用のデータアドレス1つにつき、アドレス増分を2種類
    以上設定可能とし、 前記プリフェッチ発行を行う手段は、プリフェッチ発行
    回数を計数する2種類以上のカウントレジスタを設け、
    該カウントレジスタの計数値に依存して、該2種類以上
    設定されたアドレス増分を選択してプリフェッチのため
    のアドレス生成を行うことを特徴とするプリフェッチ機
    構。
  3. 【請求項3】 請求項1記載のプリフェッチ機構におい
    て、 前記レジスタアレイに設定されたプリフェッチのための
    アドレス情報をグループ化して扱うためのプリフェッチ
    配列アレイを備え、該プリフェッチ配列アレイは該各グ
    ループ化されたプリフェッチのためのアドレス情報に対
    応して、プリフェッチ回数を設定するためのループ長指
    示フィールドを有し、 前記プリフェッチ発行を行う手段は、前記プリフェッチ
    配列アレイにおいてグループ化された個々のグループの
    示す前記レジスタアレイのアドレス情報に基づいて、該
    グループに対応する前記ループ長指示フィールドの示す
    プリフェッチ回数だけプリフェッチ発行を行い、該プリ
    フェッチのプリフェッチ発行の実行の後、前記プリフェ
    ッチ配列アレイに設定された次のグループに関して同様
    のプリフェッチ発行を行うことを特徴とするプリフェッ
    チ機構。
  4. 【請求項4】 請求項1乃至請求項3のいずれかの請求
    項記載のプリフェッチ機構であって、 プリフェッチ発行に際し主記憶から読み出したデータ
    を、プリフェッチ専用データを格納するためのプリフェ
    ッチバッファへ格納することを特徴とするプリフェッチ
    機構。
  5. 【請求項5】 請求項1乃至請求項4のいずれかの請求
    項記載のプリフェッチ機構であって、 プリフェッチ発行に際し前記マイクロプロセッサは、プ
    リフェッチを行うループに関し、ループ制御のための命
    令またはループカウントを行うレジスタのいずれかを、
    プリフェッチ専用として設けることを特徴とするプリフ
    ェッチ機構。
JP5243097A 1997-02-20 1997-02-20 プリフェッチ機構 Pending JPH10232775A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5243097A JPH10232775A (ja) 1997-02-20 1997-02-20 プリフェッチ機構

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5243097A JPH10232775A (ja) 1997-02-20 1997-02-20 プリフェッチ機構

Publications (1)

Publication Number Publication Date
JPH10232775A true JPH10232775A (ja) 1998-09-02

Family

ID=12914555

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5243097A Pending JPH10232775A (ja) 1997-02-20 1997-02-20 プリフェッチ機構

Country Status (1)

Country Link
JP (1) JPH10232775A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2375852A (en) * 2001-05-24 2002-11-27 Samsung Electronics Co Ltd Loop instruction processing using a loop buffer and inhibiting instruction fetch.
JP2011204208A (ja) * 2010-03-26 2011-10-13 Fujitsu Ltd マルチコアプロセッサ
CN105074655A (zh) * 2013-01-21 2015-11-18 高通股份有限公司 用于取消对循环的数据预取请求的方法和设备
US10684857B2 (en) 2018-02-01 2020-06-16 International Business Machines Corporation Data prefetching that stores memory addresses in a first table and responsive to the occurrence of loads corresponding to the memory addresses stores the memory addresses in a second table

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2375852A (en) * 2001-05-24 2002-11-27 Samsung Electronics Co Ltd Loop instruction processing using a loop buffer and inhibiting instruction fetch.
GB2375852B (en) * 2001-05-24 2003-05-14 Samsung Electronics Co Ltd Loop instruction processing using loop buffer in a data processing device
US6950929B2 (en) 2001-05-24 2005-09-27 Samsung Electronics Co., Ltd. Loop instruction processing using loop buffer in a data processing device having a coprocessor
JP2011204208A (ja) * 2010-03-26 2011-10-13 Fujitsu Ltd マルチコアプロセッサ
CN105074655A (zh) * 2013-01-21 2015-11-18 高通股份有限公司 用于取消对循环的数据预取请求的方法和设备
JP2016507836A (ja) * 2013-01-21 2016-03-10 クアルコム,インコーポレイテッド ループのデータプリフェッチ要求をキャンセルするための方法および装置
US10684857B2 (en) 2018-02-01 2020-06-16 International Business Machines Corporation Data prefetching that stores memory addresses in a first table and responsive to the occurrence of loads corresponding to the memory addresses stores the memory addresses in a second table

Similar Documents

Publication Publication Date Title
EP0895163B1 (en) A data processor having a cache memory
Colwell et al. A VLIW architecture for a trace scheduling compiler
JP3120152B2 (ja) コンピューターシステム
US4879646A (en) Data processing system with a pipelined structure for editing trace memory contents and tracing operations during system debugging
US6944718B2 (en) Apparatus and method for speculative prefetching after data cache misses
US5941983A (en) Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
EP1031919B1 (en) Method for prefetching structured data
EP0933698B1 (en) Probing computer memory latency
US5689653A (en) Vector memory operations
JPH10232827A (ja) 先取りキャッシュ書戻しの方法と装置
IE990754A1 (en) An apparatus for software initiated prefetch and method therefor
KR100682635B1 (ko) 동일한 논리 공간을 점유하는 다중 레지스터 파일을 포함하는 마이크로프로세서
JP2002251321A (ja) キャッシュメモリシステム装置
KR100931460B1 (ko) 단일 스레드 응용을 지원하기 위한 시간-멀티플렉스된스펙큘레이티브 멀티 스레딩
US6260191B1 (en) User controlled relaxation of optimization constraints related to volatile memory references
EP1316015A2 (en) Method and apparatus for using an assist processor to prefetch instructions for a primary processor
Vander Wiel et al. A compiler-assisted data prefetch controller
EP1444571B1 (en) Hidden job start preparation in an instruction-parallel processor system
US5434986A (en) Interdependency control of pipelined instruction processor using comparing result of two index registers of skip instruction and next sequential instruction
JPH08221272A (ja) 命令キャッシュに命令をロードする方法
US20050102659A1 (en) Methods and apparatus for setting up hardware loops in a deeply pipelined processor
JPH10232775A (ja) プリフェッチ機構
Dorozhevets et al. The El'brus-3 and MARS-M: Recent advances in Russian high-performance computing
US5363490A (en) Apparatus for and method of conditionally aborting an instruction within a pipelined architecture
Topham et al. Performance of the decoupled ACRI-1 architecture: The perfect club