(57)【特許請求の範囲】
【請求項１】
インターロック方式の外部メモリバスを持つプロセッサおよびメモリを備えたシステムにおける前記プロセッサであって、
各命令で扱うデータを記憶するデータキャッシュと、
外部とのインタフェースのためのバスインタフェースユニットと、
複数のキャッシュプリフェッチアドレスを保持する先入れ先出しの記憶部を有し、前記バスインタフェースユニットを介して外部から該キャッシュプリフェッチアドレスのデータを読み出して前記データキャッシュに登録するプリフェッチ機構と、
各命令に従い、前記データキャッシュに要求を出力して該命令を実行し、及び、キャッシュプリフェッチアドレスを前記プリフェッチ機構に出力する命令実行ユニットと
を備え、
前記命令実行ユニットは、キャッシュプリフェッチ命令を、前記プリフェッチ機構と前記データキャッシュに対して出力し、
前記命令実行ユニットは、キャッシュミスの場合は、キャッシュプリフェッチアドレスを前記プリフェッチ機構に渡すだけで、キャッシュプリフェッチの処理を終了して次の命令の処理を開始し、
前記プリフェッチ機構は、内部に有する前記記憶部により、前記命令実行ユニットから出力された複数のキャッシュプリフェッチアドレスを保持し、前記命令実行ユニットと独立に動き、複数のキャッシュプリフェッチ命令の多重発行を行い、
前記プリフェッチ機構は、前記バスインタフェースユニットを介して外部メモリをアクセスすることにより、前記記憶部で保持しているキャッシュプリフェッチアドレスのデータを登録順に読み出して前記データキャッシュに登録する
ことにより、スプリットフェーズバスを持った多重プリフェッチ発行可能なプロセッサと同様の、複数のプリフェッチ命令を処理の前方に集めたコードを使用可能とするようにしたプロセッサ。
【請求項２】
各命令をプロセッサに供給するための命令キャッシュをさらに備え、
前記命令実行ユニットは、前記命令キャッシュがミスヒットの場合は前記バスインタフェースユニットを通して外部から命令を読み込むようにした請求項１に記載のプロセッサ。
【請求項３】
外部への書き込み内容を格納し、前記バスインタフェースユニットが使用可能なときに前記命令実行ユニットと独立して動作して外部への書き込みを実行するライトバッファをさらに備えた請求項１又は２に記載のプロセッサ。
【請求項４】
データをメモリ又はキャッシュから読み出す命令については、前記命令実行ユニットからアドレスが前記データキャッシュに伝えられ、キャッシュヒットであれば前記データキャッシュからデータが読み出され、一方、ミスヒットであれば前記バスインタフェースユニットを通して外部からデータを読み出すようにした請求項１乃至３のいずれかに記載のプロセッサ。
【請求項５】
データをメモリ又はキャッシュへ書き込む命令については、前記命令実行ユニットからアドレス及びデータが前記データキャッシュに伝えられ、キャッシュヒットであれば前記データキャッシュにデータが書き込まれ、該アドレスとデータはライトバッファに保持され、前記バスインタフェースユニットが使用可能なときに外部に書き込みがなされるようにした請求項１乃至４のいずれかに記載のプロセッサ。
【請求項６】
キャッシュプリフェッチ命令については、前記命令実行ユニットからプリフェッチ対象アドレスが前記プリフェッチ機構及び前記データキャッシュに伝えられ、キャッシュヒットの場合は、前記プリフェッチ機構及び前記データキャッシュはそのまま命令処理を終了し、一方、キャッシュミスの場合はプリフェッチ対象アドレスを一時的に前記プリフェッチ機構に蓄えておき、前記命令実行ユニットの動作とは独立に前記プリフェッチ機構が前記バスインタフェースユニットを通して外部からデータを読み出して前記データキャッシュにデータを格納するようにした請求項１乃至５のいずれかに記載のプロセッサ。
【請求項７】
前記プリフェッチ機構は、
前記記憶部に空き領域がある場合には、前記命令実行ユニットはプリフェッチ命令の実行を登録のみで終了させ、すぐに次の命令の実行を開始するようにした請求項１乃至６のいずれかに記載のプロセッサ。
【請求項８】
前記プリフェッチ機構は、
前記命令実行ユニットからプリフェッチ対象アドレスが前記記憶部へ入力されるプリフェッチアドレス入力と、
前記記憶部からの出力又は前記キャッシュプリフェッチアドレス入力を選択することにより、外部の読み出しアドレスを出力する読み出しアドレス出力と、
プリフェッチアドレスを格納する前記記憶部が満杯である場合に出力されるフル表示出力と
を備えた請求項７に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサに係り、特に、キャッシュプリフェッチ機構を備えたプロセッサに関する。
【０００２】
【従来の技術】
キャッシュプリフェッチ機構とは、プロセッサが使用するメモリを前もって、キャッシュに読み込んでおくことにより、メモリアクセスレイテンシ（遅延時間）を削減するための機構である。一般にレジスタにメモリの内容を読み込むロード（load）命令の実行前に、キャッシュに値を読み込むキャッシュプリフェッチ命令を発行することで実現する。
【０００３】
以下に、キャッシュプリフェッチおよびメモリアクセス多重発行について説明する。一般に、キャッシュプリフェッチ命令は実行時にプロセッサの内部動作（パイプライン）をほとんど停止させないようにする。なぜなら、データがメモリからキャッシュに読み込まれるまで動作が停止するようであれば、通常のload命令をプリフェッチ命令なしに使用する場合に比べてメリットが存在しないからである。メモリアクセスのレイテンシは最近のプロセッサの命令実行サイクルに比べて大幅に大きな（数倍〜数十倍）時間がかかる。複数のメモリ上のデータに対して同時にプリフェッチを行うことができるように、高性能マイクロプロセッサではルックアップフリーキャッシュ（look-up free cache）およびスプリットフェーズバス（split phase bus）を有している。これらの機構を有しているプロセッサは複数のメモリ読み出しトランザクションを同時に行うことができる。
【０００４】
ここで、説明の都合上、具体例を使って説明する。図１に、サンプルプロセッサの構成図を示す。サンプルプロセッサ１は、命令実行ユニット（Execution Unit）１１、命令キャッシュ（I-Cache）１２、データキャッシュ（D-Cache）１３、ライトバッファ（Write Buffer）１４、バスインタフェースユニット（Bus Interface Unit）１５、ラッチ（Latch）１７、１８を備える。太線はデータライン、細線はアドレスラインを示す。このような構成のプロセッサを例として以後の説明を行う。
【０００５】
ここで、プロセッサの命令発行は1クロックに1命令であり、かけ算（mul）命令のみ3クロックかかり（次の２クロックの間は結果が正しくない）、他の命令はバスの使用を伴わない限り1クロックで終了すると仮定する。簡単のためキャッシュはライトスルー（書き込みは毎回メモリまで書き戻される）方式であり、ライトバッファはライトスルーのバストランザクションに対しても有効であると仮定する。命令キャッシュ１２は十分な容量があり、ミスは起こらないものと仮定する。これに対して、メモリを介して周辺のデバイスとデータをやり取りするため、データキャッシュ１３に関してはキャッシュヒットが期待できないものとして説明する。なお、プログラムのローカル変数等はキャッシュヒットが期待できるが、本発明で取りあげるload命令は外部デバイスと通信するためのメモリ領域をアクセスするものと仮定する。
【０００６】
さらに、簡単のためキャッシュラインサイズもレジスタサイズも演算に使われるデータサイズも1 word（4byte）と仮定し、特に断り書きがない限り、load命令でキャッシュミスが発生した場合は命令実行パイプラインがデータ読み出しまで停止する。図1中に点線で示されるデータキャッシュ１３および命令キャッシュ１２のアドレスラインとそれに付随したラッチ１７及び１８は、バスからのデータをキャッシュに書き込む際のアドレスラインである。キャッシュラインサイズは実際にはレジスタサイズやインストラクションサイズよりも大きく、キャッシュラインサイズのデータ転送には複数クロックの時間が必要である。この転送中に必要なデータを先に転送して、パイプラインの動作を再開し、命令実行と並行してデータ転送を行う。この目的のために命令キャッシュ１２およびデータキャッシュ１３は2ポートメモリとして使用可能な必要があり、点線のアドレスラインおよびラッチ１７及び１８が必要となる。
【０００７】
次に、プログラム例を示す。図２に、サンプルマシンコード（サンプルプログラム）の図を示す。addr_A,addr_B,addr_C,addr_Dで示されるアドレスの各々のデータに対して、レジスタr26に入っている数を掛けて、それぞれ 1, 2, 3, 4を足して元のアドレスに書き戻している。r1は処理中に一時的な作業領域として使われるレジスタである。例えば、「load r1, addr_A」では、アドレスaddr_Aのデータをレジスタr1にロード（load）する。次に、「mul  r1, r1, r26」では、レジスタr26の数とレジスタr1中のアドレスaddr_Aのデータとをかけ算（mul）して、レジスタr1に記憶する。次に、「add  r1, r1, ox1」では、レジスタr1の数に1を加えてレジスタr1に記載する。次に、「store  r1, addr_A」では、レジスタr1のデータをアドレスaddr_Aにストア（store）する。以下同様の処置が実行される。
【０００８】
図３に、プリフェッチ機能なしインターロックバスによる実行についての説明図を示す。この図は、図２の命令列をメモリアクセスが多重に実行できないプロセッサで実行した場合のクロック毎の実行状況を示すものである。バスのレイテンシ（多重実行できないので占有時間と同じ）はメモリ読み出しで6サイクル、メモリ書き込みで3サイクルと仮定した。図内で棒グラフ状に示されている部分が、バスの占有時間を示す。プロセッサにライトバッファを仮定しているが、第12クロックや第26クロックにおけるstore命令時にバスが空いているため、すぐにメモリ書き込みにバスを使用（図３の「ＳＴ  Ａ」や「ＳＴ  Ｂ」）している。このため後続のloadが終了する時刻（mulが開始可能な時刻）が遅延している。結局、サンプルプログラムの実行に54クロックの時間がかかっている。なお、処理の終りに行われるライトバッファによるメモリ書き込みのためのバス使用時間は、プロセッサが並行して他の命令を実行可能なため処理時間に含んでいない。
【０００９】
これに対して、ルックアップフリーキャッシュおよびスプリットフェーズバスをプロセッサが有しており、キャッシュプリフェッチ命令が多重に発行できる場合を以下に説明する。
【００１０】
図４及び図５に、多重プリフェッチ機能付きスプリットフェーズバスによる実行１、２についての説明図を示す。
図４では、複数のプリフェッチ命令を最前部に挿入してある。ただし、ここでは、load命令の多重発行ができないプロセッサを使用しているものとする。スプリットフェーズバスはメモリ読み出しがメモリのリクエストフェーズとデータ返答フェーズに分かれており、ここではどちらのフェーズもバスを１クロックしか占有しない高性能なバス機構を仮定した。
【００１１】
ここで、図４等において、「ＬＯＡＤ  Ａ」及び「ＳＴ  Ａ」などを表した枠の白い部分と網掛け部分について説明する。この区別があるバスは、スプリットフェーズ方式のバスであり、バスを含むメモリシステムがパイプラインとして構成されている。白い部分はバスとプロセッサの直接のインタフェースを占有している時間であり、網掛けの部分はそれ以外のパイプラインのステージで処理されている部分である。よって、白い部分が重ならなければ、複数の処理が同時に行える。
【００１２】
「load」は、読み出しアドレスとload命令であることを指示するのに、バスとプロセッサの直接のインタフェースを使い、データがプロセッサに戻る時にもう一度直接のインタフェースを使うので、白い部分が最初と最後の２箇所になる。一方、「store」は、書き込みアドレスとstore命令であることの指示と書き込みデータを一度にバスに指示して、メモリに書き込まれた時点で処理が終了するためバスとプロセッサの直接のインタフェースを一度しか使わない。
【００１３】
メモリアクセスのレイテンシ（遅延時間）の仮定は、先ほどと同じくメモリ読み出しで6サイクル、メモリ書き込みで3サイクルと仮定した。図４の第5クロックのload命令は第1クロックのプリフェッチ命令に対応しており、命令発行時にはまだデータがキャッシュまで読み込めていない。このため、第7クロックまでパイプラインがストールして、命令実行の再開は第8クロックから始まっている。他のload命令は対応するプリフェッチ命令が済んだ後に発行されているため結局、この場合は実行に30クロックの時間がかかっている。
【００１４】
もし、mul命令がレイテンシは3クロックかかるが、毎クロック新しい演算が投入できるスループットが1クロックであるタイプの演算器を使用している場合は、レジスタを複数使うことで図５のように高性能化を図ることが可能である。mul命令の計算時間に他のデータに対するmul命令を実行することで命令の実行効率を向上させている。この場合の実行時間は22クロックである。
【００１５】
図６に、load命令多重発行機能付きスプリットフェーズバスによる実行についての説明図を示す。
高性能マイクロプロセッサがload命令自体をデータ依存関係が乱されない範囲で多重に発行することが可能であれば、サンプルプログラムの処理は図６のようにさらに若干高速化することが可能である。これはプリフェッチ命令自体の実行コストがなくなった効果である。ただし、キャッシュプリフェッチ命令の多重発行よりもload命令の多重発行の方が格納場所のレジスタの管理が必要であり、実装が困難となる。また、ソフトウェア的にもレジスタを前もって予約してしまうため、レジスタの使い回しが困難になる。
【００１６】
図４および図５の実行モデルで仮定しているバスおよびメモリシステムは図３で仮定しているものと比べて大幅に高性能である。なぜなら、読み書き共に３倍以上のスループットを持ち、メモリは1クロックのスループットでアクセスできるからである。スーパーコンピュータや高性能ワークステーションであれば、スプリットフェーズバスおよびルックアップフリーキャッシュを含む高速メモリシステムを搭載している製品も存在している。しかし、安価なパーソナルコンピュータや組み込み用のマイクロプロセッサのメモリシステムとしては複雑でありコストが高過ぎる。安価なシステムにはインターロックバス（interlock bus:一つの読み出しや書き込みが終了するまで新しいメモリサイクルを行うことができないバス）を使用する。この場合は、当然ながらキャッシュプリフェッチ命令も外部に向かっては同時に一個しか発行できない。このため従来のシステムではキャッシュプリフェッチ命令を実装するプロセッサは少なかった。また、実装したとしても他のプリフェッチやload/store命令によってバスが使用中である場合には、プリフェッチ命令がストールする（プロセッサのパイプラインが停止する）実装方式を採っていた。
【００１７】
次に、インターロックバスを持つプロセッサに採用された多重発行のできないキャッシュプリフェッチ機構について、サンプルプログラムの実行を解析する。
【００１８】
図７に、単発プリフェッチ機能付きインターロックバスによる実行１についての説明図を示す。プリフェッチが多重発行可能なシステムに使用される図４と同じ命令列を適用すると、図７のように実行される。キャッシュプリフェッチ命令が多重に発行できないため、連続したプリフェッチ命令列でパイプラインストールが起きてレイテンシ隠蔽の効果が低い。addr_Dのメモリ読み出しのためのバス使用と addr_Aのデータのための演算のみがオーバラップされている。多重プリフェッチ発行用の命令列を使用した場合は処理時間として46クロックが必要である。なお、インターロックバスを使用する安価なプロセッサでは、mul命令はレイテンシおよびスループット共に３クロックであり、パイプライン上で３クロックの時間を占有すると仮定する。この仮定の下では、外部バスにキャッシュプリフェッチ命令が多重発行できる高性能バスを採用しても図４の実行時間30クロックまでしか実行時間は改善しない。
【００１９】
図８に、単発プリフェッチ機能付きインターロックバスによる実行２についての説明図を示す。この図は、メモリアクセスと演算のオーバラップの度合を高めるために、キャッシュプリフェッチ命令の位置を分散した場合の実行状況を示す。コード最適化の効果が出て、37クロックで実行が終了する。この実行ではキャッシュプリフェッチ命令によるバス使用に切れ目（バブル）が存在するため、ライトバッファによるメモリ書き込みサイクルが実行途中に挿入されている（図８の第15クロックや第24クロックからのバス使用）。これらのメモリ書き込みは結果的にプリフェッチによるメモリ読み出しを遅らせて、処理全体を遅延させている。
【００２０】
そこで、バスの読み出しサイクルの後、1クロックだけ新たな読み出し要求がないか待つ改良を施すものとする。この改良後の実行状況を以下に示す。図９に、単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行１についての説明図を示す。この改良により、サンプルプログラムの実行時間は33クロックとなる。
【００２１】
これまで、メモリアクセスレイテンシを読み出し6クロックに固定して議論してきた。しかし、マルチプロセッサシステムやDMAによる機能ブロックを持ったシステムではメモリアクセス競合によりレイテンシが変動する。
【００２２】
図１０および図１１に、単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行２についての説明図を示す。図１０は、例えば、一回目（addr_A）と二回目（addr_B）のメモリ読み出しは4クロックで、三回目（addr_C）と四回目（addr_D）の読み出しは8クロックかかると仮定した実行状況を示す。なお、コードは図９で使用したものと同じものを使い、書き込みのレイテンシは3クロックであり、トータルの読み出しのバス使用時間は24クロックで変わっていない。このアクセス時間の変動により、実行時間は38クロックに増加した。実行時間の遅れに関しては少なくとも、図１０の「ＬＯＡＤ  Ｂ」と「ＳＴ  Ａ」の間のバス未使用区間が無駄である。
【００２３】
図１１に、単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行３についての説明図を示す。図１１は、一回目（addr_A）と二回目（addr_B）のメモリ読み出しはキャッシュヒットでレイテンシ0クロックで、三回目（addr_C）と四回目（addr_D）の読み出しは12クロックかかると仮定した実行状況を示す。なお、コードは図９で使用したものと同じものを使い、書き込みのレイテンシは3クロックであり、トータルの読み出しのバス使用時間は24クロックで変わっていない。このアクセス時間の変動により、実行時間は41クロックに増加した。実行時間の遅れに関しては少なくとも、図１１の「ＳＴ  Ａ」以前のバス未使用区間が無駄である。
【００２４】
図１０と図１１の実行ではキャッシュプリフェッチ命令の挿入位置を変更すると、実行時間が短縮する可能性がある。しかし、メモリアクセスのレイテンシの変動を実行前に予測することはほとんど不可能であり、レイテンシの変動に対処するプリフェッチ命令挿入位置の最適化は不可能である。つまり、このような単発プリフェッチ発行機能を持つプロセッサはプリフェッチ命令の挿入位置の最適化が難しく、メモリアクセスレイテンシの変動によって、実行時間が大きく遅れてしまう。
【００２５】
本発明では、主に、インターロック方式の外部メモリバスを持つプロセッサを対象とし、効率の良いキャッシュプリフェッチ機構を提供することを目的とする。本発明は、命令実行パイプラインと独立に動き、複数のキャッシュプリフェッチ要求を保持することができるプリフェッチ機構をプロセッサ内部に実装することにより、インターロックバスに基づくシステムの性能を低ハードウェアコストで向上させることを目的とする。
【００２６】
【課題を解決するための手段】
本発明によると、
インターロック方式の外部メモリバスを持つプロセッサおよびメモリを備えたシステムにおける前記プロセッサであって、
各命令で扱うデータを記憶するデータキャッシュと、
外部とのインタフェースのためのバスインタフェースユニットと、
複数のキャッシュプリフェッチアドレスを保持する先入れ先出しの記憶部を有し、前記バスインタフェースユニットを介して外部から該キャッシュプリフェッチアドレスのデータを読み出して前記データキャッシュに登録するプリフェッチ機構と、
各命令に従い、前記データキャッシュに要求を出力して該命令を実行し、及び、キャッシュプリフェッチアドレスを前記プリフェッチ機構に出力する命令実行ユニットと
を備え、
前記命令実行ユニットは、キャッシュプリフェッチ命令を、前記プリフェッチ機構と前記データキャッシュに対して出力し、
前記命令実行ユニットは、キャッシュミスの場合は、キャッシュプリフェッチアドレスを前記プリフェッチ機構に渡すだけで、キャッシュプリフェッチの処理を終了して次の命令の処理を開始し、
前記プリフェッチ機構は、内部に有する前記記憶部により、前記命令実行ユニットから出力された複数のキャッシュプリフェッチアドレスを保持し、前記命令実行ユニットと独立に動き、複数のキャッシュプリフェッチ命令の多重発行を行い、
前記プリフェッチ機構は、前記バスインタフェースユニットを介して外部メモリをアクセスすることにより、前記記憶部で保持しているキャッシュプリフェッチアドレスのデータを登録順に読み出して前記データキャッシュに登録する
ことにより、スプリットフェーズバスを持った多重プリフェッチ発行可能なプロセッサと同様の、複数のプリフェッチ命令を処理の前方に集めたコードを使用可能とするようにしたプロセッサを提供する。
【００２７】
本発明では、インターロックバスを持つ安価なプロセッサに採用可能な簡易多重キャッシュプリフェッチ発行機構を提供する。この機構により、プリフェッチ命令の挿入位置の選択が簡単になり、メモリアクセスレイテンシが変動しても、実行時間の変動を最小限度に抑えることができる。
【００２８】
【発明の実施の形態】
図１２に、本発明に係るサンプルプロセッサの構成図を示す。このプロセッサは、命令実行ユニット（Execution Unit）１、命令キャッシュ（I-Cache）２、データキャッシュ（D-Cache）３、ライトバッファ（Write Buffer）４、バスインタフェースユニット（Bus Interface Unit）５、プリフェッチ機構（Prefetch Mechanism）６、ラッチ（Latch）７及び８を備える。なお、図中、複数矢印が入力され、ひとつの矢印が出力される横棒は、バスセレクタ又はオアゲートを示す。プロセッサの命令実行パイプライン中では多重にキャッシュプリフェッチ命令を発行可能とする。キャッシュミスヒットのプリフェッチ要求に関して、プリフェッチ機構６の中のFIFO（First-In First-Out、  先入れ先出し）記憶部に登録しておく（詳細は後述）。外部バスが使用中（busy）ではなくFIFO記憶部が空の場合は、FIFO記憶部に格納すると同時（又は、ほぼ同時）にバスアクセスを開始する。
【００２９】
命令実行ユニット１は、主に、命令を命令キャッシュ２から読み出して、命令を実行するユニットである。命令実行ユニット１は、命令キャッシュがミスヒットの場合はバスインタフェースユニット５を通して外部メモリに命令を読み出しに行く。本実施の形態では、主に、命令キャッシュのキャッシュヒットを前提にしている。
【００３０】
load命令およびstore命令については、命令実行ユニット１によりデータキャッシュ３に対して操作要求が出る。load命令時は、命令実行ユニット１からLoad-addrを通してアドレスがデータキャッシュ３に伝えられ、キャッシュヒットであればデータキャッシュ３からデータが読み出され、ミスヒットであればバスインタフェースユニット５を通して外部メモリにデータを読み出しに行く。外部メモリからデータを読み出してくるまでの遅延時間の間は命令実行ユニット１は実行を停止している（パイプラインストールしている）。store命令時は、命令実行ユニット１から、Store-addrを通してアドレス、D-dataを通してデータがデータキャッシュ３に伝えられ、キャッシュヒットであればデータキャッシュ３にデータが書き込まれる。ライトスルーキャッシュを仮定しているので、キャッシュのヒットミスにかかわらず、アドレスとデータはライトバッファ４に保持され、バスインタフェースユニット５が使用可能な時に、FIFO順で外部メモリに書き込みがなされる。ライトバッファ４は有限であるため、ライトバッファ４が満杯でstore命令実行の場合は外部メモリにデータを書き出してライトバッファ４内に余地が出来るまで命令実行ユニット１は実行を停止する（パイプラインストールする）。
【００３１】
prefetch命令（キャッシュプリフェッチ命令）はプリフェッチ機構６とデータキャッシュ３に対して操作要求が出る。prefetch命令時はPrefetch-addrを通してプリフェッチ対象アドレスがプリフェッチ機構６に伝えられ、Load-addrを通して同一アドレスがデータキャッシュ３に伝えられる。キャッシュヒットの場合はプリフェッチ機構６およびデータキャッシュ３は何もせず命令処理を終了する。キャッシュミスの場合はプリフェッチ対象アドレスを一時的にプリフェッチ機構６に蓄えておき、命令実行ユニット１の動作とは独立にプリフェッチ機構６がバスインターフェース５を通して外部メモリからデータを読み出してデータキャッシュ３にデータを格納する。プリフェッチ機構６のアドレス記憶能力に十分余裕をもたせることで、命令実行ユニット１はプリフェッチアドレスをプリフェッチ機構６に渡すだけで、キャッシュプリフェッチの処理を終了して次の命令の処理を開始する。
【００３２】
命令キャッシュ２は、命令をプロセッサに供給するためのキャッシュである。命令キャッシュ２により、本実施の形態のプロセッサでは、一例として、1クロックに1命令ずつ命令供給が可能であると仮定されているが、これに限られない。また、命令キャッシュ２は、十分な容量を持つと仮定し、以下の説明では、キャッシュミスのケースは、説明の都合上想定しない。キャッシュミスの場合は、例えば、外部からの命令読み込みを優先してバスインタフェースユニット５で実行し、命令キャッシュ２に命令を取り込むことでキャッシュミスを取り扱うことができる。データキャッシュ３は、load命令およびstore命令で扱うデータをキャッシュするための機構である。データキャッシュ３は、本来は基本データサイズより大きなキャッシュラインサイズを持つが、本実施の形態では説明の簡略化のため、基本データサイズ(例、4byte)と等しいサイズのラインサイズを持つと仮定している。データキャッシュ３は、ライトスルー方式のキャッシュであり、store命令の内容はキャッシュのヒット／ミスにかかわらず外部メモリに反映される。
【００３３】
ライトバッファ４は、store命令による外部メモリへの書き込み内容をFIFOとして格納し、バスインタフェースユニット５が使用可能な時に命令実行ユニット１と独立して動作して外部メモリへの書き込みを実現する。ライトバッファ４の容量に余裕がある場合は、命令実行ユニット１は、外部メモリへの書き込みが済んでいなくても、ライトバッファ４にstoreの内容が登録できた時点で次の命令の処理に進むことができる。バスインタフェースユニット５は、外部メモリへのインタフェースである。バスインタフェースユニット５は、例えば、低コストのインターロック方式のバスを採用しており、その場合、一つのメモリ（バス）トランザクションが終了しない限り、次のメモリ（バス）トランザクションが開始できない。
【００３４】
プリフェッチ機構６は、キャッシュプリフェッチアドレスを保持するFIFO記憶部と論理回路を内部に備える。そのFIFOに空き領域がある場合には、命令実行ユニット１はprefetch命令の実行をプリフェッチ機構６への登録のみで終了させ、すぐに次の命令の実行を開始する。プリフェッチ機構６は、バスインタフェースユニット５を介して外部メモリをアクセスすることにより、保持しているキャッシュプリフェッチアドレスのデータを登録順に読み出してデータキャッシュ３に登録する。
【００３５】
図１３に、プリフェッチ機構に関する詳細構成図を示す。この図では、図１２の一部であり、プリフェッチ機構に関する構成、各構成要素の制御線、データ線を特に詳細に表したものである。プリフェッチ機構６は、プリフェッチアドレスFIFO６１、論理回路６２、切替器６３を備える。
【００３６】
(1)命令実行ユニット１は、以下のポートを備える。
a. FIFO-full：FIFO-fullはプリフェッチ機構６からの入力信号で、プリフェッチアドレスの格納場所が満杯である場合に、フラグ、例えば、1を入力する。この入力が1でprefetch命令を実行しようとした場合は、この入力が0になるまで実行が停止する。
b. Prefetch-req：Prefetch-reqはプリフェッチ機構６への出力信号で、prefetch命令が実行された（FIFO-fullは0）場合に、所定期間、例えば1クロックの期間 1が出力される。この時に同時にPrefetch-addr上にキャッシュプリフェッチ対象アドレスが出力される。
c. Prefetch-addr：Prefetch-addrはプリフェッチ機構６への出力信号である。動作は図１２の説明箇所及び(1)b.参照。
【００３７】
(2) バスインタフェースユニット５は、以下のポートを備える。
a. p-request：p-requestはプリフェッチ機構６からの入力信号で、プリフェッチ機構６がバスを使用したい場合に1が入力される。バスを使用する他のユニットに対しては同様の信号線が別に存在する。
b. p-done：p-doneはプリフェッチ機構６への出力信号で、プリフェッチ機構６から要求されたバスアクセスが終了した時に1クロックの期間 1が出力される。
c. R-data：R-dataは外部メモリから読み出されたデータが通る内部データバス。バスインタフェースユニット５からデータキャッシュ１３への出力バス。
d. R-addr：R-addrは外部メモリの読み出しアドレスの入力バス。読み出し要求を出しているユニットからのアドレスのうち、バスインタフェースユニット５が選択したユニットからの出力がR-addrを通して入力される。
【００３８】
(3)プリフェッチ機構６は、以下のポートを備える。
a. in：キャッシュプリフェッチアドレスのFIFOへの入力バス。
b. strobe：FIFOへの書き込みストローブ信号。inの内容が書き込まれる。
c. out：FIFOからの出力バス。
d. empty：出力信号。FIFOに有効なエントリが無い場合に1になる。
e. full：出力信号。FIFOのエントリが満杯の場合に1になる。
f. next：FIFOの読み出しストローブ信号。次のエントリがoutに出力される。
【００３９】
プリフェッチ機構６は、内部に有するプリフェッチアドレスFIFO６１により、複数のprefetch命令のアドレスを保持可能である。このFIFO６１が溢れない限り命令実行ユニット１の実行は停止しないため、prefetch命令の命令列中の位置を気にしないで発行することができる。もし、prefetch命令が1個しか同時に発行できないプロセッサでは前に発行したprefetch命令がちょうど終了するタイミングで次のprefetch命令を発行しないと効率が低下してしまう。なぜなら、前のprefetchが終了していない場合は、終了するまで命令実行ユニット１が停止し、終了の数クロック後であればバスの無使用期間が発生してバスの使用効率が低下する。プリフェッチ機構６と命令パイプライン（命令実行ユニット１）は独立に動いており、FIFO６１容量を越えるプリフェッチ命令を発行しようとした場合とload命令がキャッシュミスを起こした場合は命令実行パイプラインが停止する。プリフェッチ要求による外部メモリアクセスが終った時点で、プリフェッチ機構６に未処理のプリフェッチ要求が残っている場合は、FIFO順で次のプリフェッチ要求をバスで行う。この機構のハードウェア量はプリフェッチ要求を格納しておくFIFOメモリ程度の増加であり、コストは低い。
【００４０】
このようなプリフェッチ機構６をプロセッサに追加することにより、スプリットフェーズバスを持った多重プリフェッチ発行可能なプロセッサと同じコードが使用可能となる。つまり、図２のサンプルプログラムに対して、上述した図４（および図５）のような命令列が使用可能となる。このコードはプリフェッチ命令を処理の前方に集めただけのコードであり、コード生成は難しくない。
【００４１】
図１４に、プリフェッチ機能付きインターロックバスによる実行１についての説明図を示す。この図では、本発明の機構を持つインターロックバスで多重プリフェッチ発行可能なプロセッサによるサンプルプログラムの実行状況を示す。ただし、読み出しレイテンシが6クロック、書き込みレイテンシが3クロックと仮定している。図１４が示すようにハードウェアのプリフェッチ機構６とライトバッファ４がバスを使用するため、無駄な切れ目（バブル）なしにバスを使い切ることが可能である。この例に関しては、実行時間が高性能高コストのスプリットフェーズバスを持つ場合（図４）の実行時間に肩を並べている。
【００４２】
以下に、従来の単発プリフェッチ発行機構しか持たないプロセッサに対して調べたように、メモリアクセスレイテンシを変動させた場合の実行時間の変動を述べる。
まず、図１５に、プリフェッチ機能付きインターロックバスによる実行２についての説明図を示す。この図では、図１０と同じ条件で、一回目（addr_A）と二回目（addr_B）のメモリ読み出しは4クロックで、三回目（addr_C）と四回目（addr_D）の読み出しは8クロックかかると仮定した実行状況を示す。アクセス時間が変動しても、プリフェッチ機構６の独立動作で吸収されて実行時間は30クロックで変わらない。図１４と同様、バスは無駄なく使い切られている。
【００４３】
次に、図１６に、プリフェッチ機能付きインターロックバスによる実行３についての説明図を示す。この図では、図１１と同じ条件で、一回目（addr_A）と二回目（addr_B）のメモリ読み出しはキャッシュヒットでレイテンシ0クロックで、三回目（addr_C）と四回目（addr_D）の読み出しは12クロックかかると仮定した実行状況を示す。このアクセス時間の変動により、実行時間は32クロックとなり、2クロック分だけ増加したが、増加分はキャッシュヒットのため無駄になったプリフェッチ命令自体のコストである。バス使用開始後は、バスを無駄なく使い切っている。
【００４４】
このように、本発明で述べた簡易キャッシュプリフェッチ機構はメモリアクセスレイテンシの変動に強い（変動しても実行時間の遅れが小さく抑えられる）性質を持っている。スプリットフェーズバスおよびルックアップフリーキャッシュを持つ高性能マイクロプロセッサであっても、外部に多重に発行できるプリフェッチ要求数やload要求数には上限がある。このため、この上限を緩和するために、本発明の機構を利用することが可能である。インターロックバスというのは、他にバスマスタになるデバイスがいなければ、この要求の上限数が1であるスプリットフェーズバスと捉えることもできる。
【００４５】
なお、命令の種類、各命令の用いるクロック数、プリフェッチ機構６内部の論理回路、制御線やデータ線の構成等は、一例を示したものであり、適宜の変更、修正を行うことができる。
【００４６】
【発明の効果】
本発明によると、キャッシュプリフェッチ機構をプロセッサ内部に実装することにより、複数の外部メモリアクセス要求をバスに発行できない低コストのプロセッサおよびメモリから成るシステムであっても、システムの性能を向上させることができる。本発明のキャッシュプリフェッチ機構は、命令実行パイプライン（命令実行ユニット）と独立に動き、複数のキャッシュプリフェッチ命令の多重発行を可能にすることができる。本発明によると、プリフェッチ命令の多重発行とプリフェッチ機構の独立動作により、プリフェッチ命令の挿入位置に対する自由度が増すと同時に、バスの使用効率を向上させることができる。また、本発明のするプリフェッチ機構によるハードウェアの増加は多重発行するためにプリフェッチアドレスを保持するためのFIFO回路とその周辺の若干量であり、低コストで実現できる。
【図面の簡単な説明】
【図１】サンプルプロセッサの構成図。
【図２】サンプルマシンコード（サンプルプログラム）の図。
【図３】プリフェッチ機能なしインターロックバスによる実行についての説明図。
【図４】多重プリフェッチ機能付きスプリットフェーズバスによる実行１についての説明図。
【図５】多重プリフェッチ機能付きスプリットフェーズバスによる実行２についての説明図。
【図６】  load 多重発行機能付きスプリットフェーズバスによる実行についての説明図。
【図７】単発プリフェッチ機能付きインターロックバスによる実行１についての説明図。
【図８】単発プリフェッチ機能付きインターロックバスによる実行２についての説明図。
【図９】単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行１についての説明図。
【図１０】単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行２についての説明図。
【図１１】単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行３についての説明図。
【図１２】本発明に係るサンプルプロセッサの構成図。
【図１３】プリフェッチ機構に関する詳細構成図。
【図１４】プリフェッチ機構付きインターロックバスによる実行１についての説明図。
【図１５】プリフェッチ機構付きインターロックバスによる実行２についての説明図。
【図１６】プリフェッチ機構付きインターロックバスによる実行３についての説明図。
【符号の説明】
１    命令実行ユニット（Execution Unit）
２    命令キャッシュ（I-Cache）
３    データキャッシュ（D-Cache）
４    ライトバッファ（Write Buffer）
５    バスインタフェースユニット（Bus Interface Unit）
６    プリフェッチ機構（Prefetch Mechanism）
７、８    ラッチ（Latch）
【図１】
0004680340.tif 000002
【図２】
0004680340.tif 000003
【図３】
0004680340.tif 000004
【図４】
0004680340.tif 000005
【図５】
0004680340.tif 000006
【図６】
0004680340.tif 000007
【図７】
0004680340.tif 000008
【図８】
0004680340.tif 000009
【図９】
0004680340.tif 000010
【図１０】
0004680340.tif 000011
【図１１】
0004680340.tif 000012
【図１２】
0004680340.tif 000013
【図１３】
0004680340.tif 000014
【図１４】
0004680340.tif 000015
【図１５】
0004680340.tif 000016
【図１６】
0004680340.tif 000017