JP4680340B2 - プロセッサ - Google Patents
プロセッサ Download PDFInfo
- Publication number
- JP4680340B2 JP4680340B2 JP35420399A JP35420399A JP4680340B2 JP 4680340 B2 JP4680340 B2 JP 4680340B2 JP 35420399 A JP35420399 A JP 35420399A JP 35420399 A JP35420399 A JP 35420399A JP 4680340 B2 JP4680340 B2 JP 4680340B2
- Authority
- JP
- Japan
- Prior art keywords
- prefetch
- cache
- instruction
- data
- address
- 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
Links
Images
Landscapes
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明の属する技術分野】
本発明は、プロセッサに係り、特に、キャッシュプリフェッチ機構を備えたプロセッサに関する。
【0002】
【従来の技術】
キャッシュプリフェッチ機構とは、プロセッサが使用するメモリを前もって、キャッシュに読み込んでおくことにより、メモリアクセスレイテンシ(遅延時間)を削減するための機構である。一般にレジスタにメモリの内容を読み込むロード(load)命令の実行前に、キャッシュに値を読み込むキャッシュプリフェッチ命令を発行することで実現する。
【0003】
以下に、キャッシュプリフェッチおよびメモリアクセス多重発行について説明する。一般に、キャッシュプリフェッチ命令は実行時にプロセッサの内部動作(パイプライン)をほとんど停止させないようにする。なぜなら、データがメモリからキャッシュに読み込まれるまで動作が停止するようであれば、通常のload命令をプリフェッチ命令なしに使用する場合に比べてメリットが存在しないからである。メモリアクセスのレイテンシは最近のプロセッサの命令実行サイクルに比べて大幅に大きな(数倍〜数十倍)時間がかかる。複数のメモリ上のデータに対して同時にプリフェッチを行うことができるように、高性能マイクロプロセッサではルックアップフリーキャッシュ(look-up free cache)およびスプリットフェーズバス(split phase bus)を有している。これらの機構を有しているプロセッサは複数のメモリ読み出しトランザクションを同時に行うことができる。
【0004】
ここで、説明の都合上、具体例を使って説明する。図1に、サンプルプロセッサの構成図を示す。サンプルプロセッサ1は、命令実行ユニット(Execution Unit)11、命令キャッシュ(I-Cache)12、データキャッシュ(D-Cache)13、ライトバッファ(Write Buffer)14、バスインタフェースユニット(Bus Interface Unit)15、ラッチ(Latch)17、18を備える。太線はデータライン、細線はアドレスラインを示す。このような構成のプロセッサを例として以後の説明を行う。
【0005】
ここで、プロセッサの命令発行は1クロックに1命令であり、かけ算(mul)命令のみ3クロックかかり(次の2クロックの間は結果が正しくない)、他の命令はバスの使用を伴わない限り1クロックで終了すると仮定する。簡単のためキャッシュはライトスルー(書き込みは毎回メモリまで書き戻される)方式であり、ライトバッファはライトスルーのバストランザクションに対しても有効であると仮定する。命令キャッシュ12は十分な容量があり、ミスは起こらないものと仮定する。これに対して、メモリを介して周辺のデバイスとデータをやり取りするため、データキャッシュ13に関してはキャッシュヒットが期待できないものとして説明する。なお、プログラムのローカル変数等はキャッシュヒットが期待できるが、本発明で取りあげるload命令は外部デバイスと通信するためのメモリ領域をアクセスするものと仮定する。
【0006】
さらに、簡単のためキャッシュラインサイズもレジスタサイズも演算に使われるデータサイズも1 word(4byte)と仮定し、特に断り書きがない限り、load命令でキャッシュミスが発生した場合は命令実行パイプラインがデータ読み出しまで停止する。図1中に点線で示されるデータキャッシュ13および命令キャッシュ12のアドレスラインとそれに付随したラッチ17及び18は、バスからのデータをキャッシュに書き込む際のアドレスラインである。キャッシュラインサイズは実際にはレジスタサイズやインストラクションサイズよりも大きく、キャッシュラインサイズのデータ転送には複数クロックの時間が必要である。この転送中に必要なデータを先に転送して、パイプラインの動作を再開し、命令実行と並行してデータ転送を行う。この目的のために命令キャッシュ12およびデータキャッシュ13は2ポートメモリとして使用可能な必要があり、点線のアドレスラインおよびラッチ17及び18が必要となる。
【0007】
次に、プログラム例を示す。図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)する。以下同様の処置が実行される。
【0008】
図3に、プリフェッチ機能なしインターロックバスによる実行についての説明図を示す。この図は、図2の命令列をメモリアクセスが多重に実行できないプロセッサで実行した場合のクロック毎の実行状況を示すものである。バスのレイテンシ(多重実行できないので占有時間と同じ)はメモリ読み出しで6サイクル、メモリ書き込みで3サイクルと仮定した。図内で棒グラフ状に示されている部分が、バスの占有時間を示す。プロセッサにライトバッファを仮定しているが、第12クロックや第26クロックにおけるstore命令時にバスが空いているため、すぐにメモリ書き込みにバスを使用(図3の「ST A」や「ST B」)している。このため後続のloadが終了する時刻(mulが開始可能な時刻)が遅延している。結局、サンプルプログラムの実行に54クロックの時間がかかっている。なお、処理の終りに行われるライトバッファによるメモリ書き込みのためのバス使用時間は、プロセッサが並行して他の命令を実行可能なため処理時間に含んでいない。
【0009】
これに対して、ルックアップフリーキャッシュおよびスプリットフェーズバスをプロセッサが有しており、キャッシュプリフェッチ命令が多重に発行できる場合を以下に説明する。
【0010】
図4及び図5に、多重プリフェッチ機能付きスプリットフェーズバスによる実行1、2についての説明図を示す。
図4では、複数のプリフェッチ命令を最前部に挿入してある。ただし、ここでは、load命令の多重発行ができないプロセッサを使用しているものとする。スプリットフェーズバスはメモリ読み出しがメモリのリクエストフェーズとデータ返答フェーズに分かれており、ここではどちらのフェーズもバスを1クロックしか占有しない高性能なバス機構を仮定した。
【0011】
ここで、図4等において、「LOAD A」及び「ST A」などを表した枠の白い部分と網掛け部分について説明する。この区別があるバスは、スプリットフェーズ方式のバスであり、バスを含むメモリシステムがパイプラインとして構成されている。白い部分はバスとプロセッサの直接のインタフェースを占有している時間であり、網掛けの部分はそれ以外のパイプラインのステージで処理されている部分である。よって、白い部分が重ならなければ、複数の処理が同時に行える。
【0012】
「load」は、読み出しアドレスとload命令であることを指示するのに、バスとプロセッサの直接のインタフェースを使い、データがプロセッサに戻る時にもう一度直接のインタフェースを使うので、白い部分が最初と最後の2箇所になる。一方、「store」は、書き込みアドレスとstore命令であることの指示と書き込みデータを一度にバスに指示して、メモリに書き込まれた時点で処理が終了するためバスとプロセッサの直接のインタフェースを一度しか使わない。
【0013】
メモリアクセスのレイテンシ(遅延時間)の仮定は、先ほどと同じくメモリ読み出しで6サイクル、メモリ書き込みで3サイクルと仮定した。図4の第5クロックのload命令は第1クロックのプリフェッチ命令に対応しており、命令発行時にはまだデータがキャッシュまで読み込めていない。このため、第7クロックまでパイプラインがストールして、命令実行の再開は第8クロックから始まっている。他のload命令は対応するプリフェッチ命令が済んだ後に発行されているため結局、この場合は実行に30クロックの時間がかかっている。
【0014】
もし、mul命令がレイテンシは3クロックかかるが、毎クロック新しい演算が投入できるスループットが1クロックであるタイプの演算器を使用している場合は、レジスタを複数使うことで図5のように高性能化を図ることが可能である。mul命令の計算時間に他のデータに対するmul命令を実行することで命令の実行効率を向上させている。この場合の実行時間は22クロックである。
【0015】
図6に、load命令多重発行機能付きスプリットフェーズバスによる実行についての説明図を示す。
高性能マイクロプロセッサがload命令自体をデータ依存関係が乱されない範囲で多重に発行することが可能であれば、サンプルプログラムの処理は図6のようにさらに若干高速化することが可能である。これはプリフェッチ命令自体の実行コストがなくなった効果である。ただし、キャッシュプリフェッチ命令の多重発行よりもload命令の多重発行の方が格納場所のレジスタの管理が必要であり、実装が困難となる。また、ソフトウェア的にもレジスタを前もって予約してしまうため、レジスタの使い回しが困難になる。
【0016】
図4および図5の実行モデルで仮定しているバスおよびメモリシステムは図3で仮定しているものと比べて大幅に高性能である。なぜなら、読み書き共に3倍以上のスループットを持ち、メモリは1クロックのスループットでアクセスできるからである。スーパーコンピュータや高性能ワークステーションであれば、スプリットフェーズバスおよびルックアップフリーキャッシュを含む高速メモリシステムを搭載している製品も存在している。しかし、安価なパーソナルコンピュータや組み込み用のマイクロプロセッサのメモリシステムとしては複雑でありコストが高過ぎる。安価なシステムにはインターロックバス(interlock bus:一つの読み出しや書き込みが終了するまで新しいメモリサイクルを行うことができないバス)を使用する。この場合は、当然ながらキャッシュプリフェッチ命令も外部に向かっては同時に一個しか発行できない。このため従来のシステムではキャッシュプリフェッチ命令を実装するプロセッサは少なかった。また、実装したとしても他のプリフェッチやload/store命令によってバスが使用中である場合には、プリフェッチ命令がストールする(プロセッサのパイプラインが停止する)実装方式を採っていた。
【0017】
次に、インターロックバスを持つプロセッサに採用された多重発行のできないキャッシュプリフェッチ機構について、サンプルプログラムの実行を解析する。
【0018】
図7に、単発プリフェッチ機能付きインターロックバスによる実行1についての説明図を示す。プリフェッチが多重発行可能なシステムに使用される図4と同じ命令列を適用すると、図7のように実行される。キャッシュプリフェッチ命令が多重に発行できないため、連続したプリフェッチ命令列でパイプラインストールが起きてレイテンシ隠蔽の効果が低い。addr_Dのメモリ読み出しのためのバス使用と addr_Aのデータのための演算のみがオーバラップされている。多重プリフェッチ発行用の命令列を使用した場合は処理時間として46クロックが必要である。なお、インターロックバスを使用する安価なプロセッサでは、mul命令はレイテンシおよびスループット共に3クロックであり、パイプライン上で3クロックの時間を占有すると仮定する。この仮定の下では、外部バスにキャッシュプリフェッチ命令が多重発行できる高性能バスを採用しても図4の実行時間30クロックまでしか実行時間は改善しない。
【0019】
図8に、単発プリフェッチ機能付きインターロックバスによる実行2についての説明図を示す。この図は、メモリアクセスと演算のオーバラップの度合を高めるために、キャッシュプリフェッチ命令の位置を分散した場合の実行状況を示す。コード最適化の効果が出て、37クロックで実行が終了する。この実行ではキャッシュプリフェッチ命令によるバス使用に切れ目(バブル)が存在するため、ライトバッファによるメモリ書き込みサイクルが実行途中に挿入されている(図8の第15クロックや第24クロックからのバス使用)。これらのメモリ書き込みは結果的にプリフェッチによるメモリ読み出しを遅らせて、処理全体を遅延させている。
【0020】
そこで、バスの読み出しサイクルの後、1クロックだけ新たな読み出し要求がないか待つ改良を施すものとする。この改良後の実行状況を以下に示す。図9に、単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行1についての説明図を示す。この改良により、サンプルプログラムの実行時間は33クロックとなる。
【0021】
これまで、メモリアクセスレイテンシを読み出し6クロックに固定して議論してきた。しかし、マルチプロセッサシステムやDMAによる機能ブロックを持ったシステムではメモリアクセス競合によりレイテンシが変動する。
【0022】
図10および図11に、単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行2についての説明図を示す。図10は、例えば、一回目(addr_A)と二回目(addr_B)のメモリ読み出しは4クロックで、三回目(addr_C)と四回目(addr_D)の読み出しは8クロックかかると仮定した実行状況を示す。なお、コードは図9で使用したものと同じものを使い、書き込みのレイテンシは3クロックであり、トータルの読み出しのバス使用時間は24クロックで変わっていない。このアクセス時間の変動により、実行時間は38クロックに増加した。実行時間の遅れに関しては少なくとも、図10の「LOAD B」と「ST A」の間のバス未使用区間が無駄である。
【0023】
図11に、単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行3についての説明図を示す。図11は、一回目(addr_A)と二回目(addr_B)のメモリ読み出しはキャッシュヒットでレイテンシ0クロックで、三回目(addr_C)と四回目(addr_D)の読み出しは12クロックかかると仮定した実行状況を示す。なお、コードは図9で使用したものと同じものを使い、書き込みのレイテンシは3クロックであり、トータルの読み出しのバス使用時間は24クロックで変わっていない。このアクセス時間の変動により、実行時間は41クロックに増加した。実行時間の遅れに関しては少なくとも、図11の「ST A」以前のバス未使用区間が無駄である。
【0024】
図10と図11の実行ではキャッシュプリフェッチ命令の挿入位置を変更すると、実行時間が短縮する可能性がある。しかし、メモリアクセスのレイテンシの変動を実行前に予測することはほとんど不可能であり、レイテンシの変動に対処するプリフェッチ命令挿入位置の最適化は不可能である。つまり、このような単発プリフェッチ発行機能を持つプロセッサはプリフェッチ命令の挿入位置の最適化が難しく、メモリアクセスレイテンシの変動によって、実行時間が大きく遅れてしまう。
【0025】
本発明では、主に、インターロック方式の外部メモリバスを持つプロセッサを対象とし、効率の良いキャッシュプリフェッチ機構を提供することを目的とする。本発明は、命令実行パイプラインと独立に動き、複数のキャッシュプリフェッチ要求を保持することができるプリフェッチ機構をプロセッサ内部に実装することにより、インターロックバスに基づくシステムの性能を低ハードウェアコストで向上させることを目的とする。
【0026】
【課題を解決するための手段】
本発明によると、
インターロック方式の外部メモリバスを持つプロセッサおよびメモリを備えたシステムにおける前記プロセッサであって、
各命令で扱うデータを記憶するデータキャッシュと、
外部とのインタフェースのためのバスインタフェースユニットと、
複数のキャッシュプリフェッチアドレスを保持する先入れ先出しの記憶部を有し、前記バスインタフェースユニットを介して外部から該キャッシュプリフェッチアドレスのデータを読み出して前記データキャッシュに登録するプリフェッチ機構と、
各命令に従い、前記データキャッシュに要求を出力して該命令を実行し、及び、キャッシュプリフェッチアドレスを前記プリフェッチ機構に出力する命令実行ユニットと
を備え、
前記命令実行ユニットは、キャッシュプリフェッチ命令を、前記プリフェッチ機構と前記データキャッシュに対して出力し、
前記命令実行ユニットは、キャッシュミスの場合は、キャッシュプリフェッチアドレスを前記プリフェッチ機構に渡すだけで、キャッシュプリフェッチの処理を終了して次の命令の処理を開始し、
前記プリフェッチ機構は、内部に有する前記記憶部により、前記命令実行ユニットから出力された複数のキャッシュプリフェッチアドレスを保持し、前記命令実行ユニットと独立に動き、複数のキャッシュプリフェッチ命令の多重発行を行い、
前記プリフェッチ機構は、前記バスインタフェースユニットを介して外部メモリをアクセスすることにより、前記記憶部で保持しているキャッシュプリフェッチアドレスのデータを登録順に読み出して前記データキャッシュに登録する
ことにより、スプリットフェーズバスを持った多重プリフェッチ発行可能なプロセッサと同様の、複数のプリフェッチ命令を処理の前方に集めたコードを使用可能とするようにしたプロセッサを提供する。
【0027】
本発明では、インターロックバスを持つ安価なプロセッサに採用可能な簡易多重キャッシュプリフェッチ発行機構を提供する。この機構により、プリフェッチ命令の挿入位置の選択が簡単になり、メモリアクセスレイテンシが変動しても、実行時間の変動を最小限度に抑えることができる。
【0028】
【発明の実施の形態】
図12に、本発明に係るサンプルプロセッサの構成図を示す。このプロセッサは、命令実行ユニット(Execution Unit)1、命令キャッシュ(I-Cache)2、データキャッシュ(D-Cache)3、ライトバッファ(Write Buffer)4、バスインタフェースユニット(Bus Interface Unit)5、プリフェッチ機構(Prefetch Mechanism)6、ラッチ(Latch)7及び8を備える。なお、図中、複数矢印が入力され、ひとつの矢印が出力される横棒は、バスセレクタ又はオアゲートを示す。プロセッサの命令実行パイプライン中では多重にキャッシュプリフェッチ命令を発行可能とする。キャッシュミスヒットのプリフェッチ要求に関して、プリフェッチ機構6の中のFIFO(First-In First-Out、 先入れ先出し)記憶部に登録しておく(詳細は後述)。外部バスが使用中(busy)ではなくFIFO記憶部が空の場合は、FIFO記憶部に格納すると同時(又は、ほぼ同時)にバスアクセスを開始する。
【0029】
命令実行ユニット1は、主に、命令を命令キャッシュ2から読み出して、命令を実行するユニットである。命令実行ユニット1は、命令キャッシュがミスヒットの場合はバスインタフェースユニット5を通して外部メモリに命令を読み出しに行く。本実施の形態では、主に、命令キャッシュのキャッシュヒットを前提にしている。
【0030】
load命令およびstore命令については、命令実行ユニット1によりデータキャッシュ3に対して操作要求が出る。load命令時は、命令実行ユニット1からLoad-addrを通してアドレスがデータキャッシュ3に伝えられ、キャッシュヒットであればデータキャッシュ3からデータが読み出され、ミスヒットであればバスインタフェースユニット5を通して外部メモリにデータを読み出しに行く。外部メモリからデータを読み出してくるまでの遅延時間の間は命令実行ユニット1は実行を停止している(パイプラインストールしている)。store命令時は、命令実行ユニット1から、Store-addrを通してアドレス、D-dataを通してデータがデータキャッシュ3に伝えられ、キャッシュヒットであればデータキャッシュ3にデータが書き込まれる。ライトスルーキャッシュを仮定しているので、キャッシュのヒットミスにかかわらず、アドレスとデータはライトバッファ4に保持され、バスインタフェースユニット5が使用可能な時に、FIFO順で外部メモリに書き込みがなされる。ライトバッファ4は有限であるため、ライトバッファ4が満杯でstore命令実行の場合は外部メモリにデータを書き出してライトバッファ4内に余地が出来るまで命令実行ユニット1は実行を停止する(パイプラインストールする)。
【0031】
prefetch命令(キャッシュプリフェッチ命令)はプリフェッチ機構6とデータキャッシュ3に対して操作要求が出る。prefetch命令時はPrefetch-addrを通してプリフェッチ対象アドレスがプリフェッチ機構6に伝えられ、Load-addrを通して同一アドレスがデータキャッシュ3に伝えられる。キャッシュヒットの場合はプリフェッチ機構6およびデータキャッシュ3は何もせず命令処理を終了する。キャッシュミスの場合はプリフェッチ対象アドレスを一時的にプリフェッチ機構6に蓄えておき、命令実行ユニット1の動作とは独立にプリフェッチ機構6がバスインターフェース5を通して外部メモリからデータを読み出してデータキャッシュ3にデータを格納する。プリフェッチ機構6のアドレス記憶能力に十分余裕をもたせることで、命令実行ユニット1はプリフェッチアドレスをプリフェッチ機構6に渡すだけで、キャッシュプリフェッチの処理を終了して次の命令の処理を開始する。
【0032】
命令キャッシュ2は、命令をプロセッサに供給するためのキャッシュである。命令キャッシュ2により、本実施の形態のプロセッサでは、一例として、1クロックに1命令ずつ命令供給が可能であると仮定されているが、これに限られない。また、命令キャッシュ2は、十分な容量を持つと仮定し、以下の説明では、キャッシュミスのケースは、説明の都合上想定しない。キャッシュミスの場合は、例えば、外部からの命令読み込みを優先してバスインタフェースユニット5で実行し、命令キャッシュ2に命令を取り込むことでキャッシュミスを取り扱うことができる。データキャッシュ3は、load命令およびstore命令で扱うデータをキャッシュするための機構である。データキャッシュ3は、本来は基本データサイズより大きなキャッシュラインサイズを持つが、本実施の形態では説明の簡略化のため、基本データサイズ(例、4byte)と等しいサイズのラインサイズを持つと仮定している。データキャッシュ3は、ライトスルー方式のキャッシュであり、store命令の内容はキャッシュのヒット/ミスにかかわらず外部メモリに反映される。
【0033】
ライトバッファ4は、store命令による外部メモリへの書き込み内容をFIFOとして格納し、バスインタフェースユニット5が使用可能な時に命令実行ユニット1と独立して動作して外部メモリへの書き込みを実現する。ライトバッファ4の容量に余裕がある場合は、命令実行ユニット1は、外部メモリへの書き込みが済んでいなくても、ライトバッファ4にstoreの内容が登録できた時点で次の命令の処理に進むことができる。バスインタフェースユニット5は、外部メモリへのインタフェースである。バスインタフェースユニット5は、例えば、低コストのインターロック方式のバスを採用しており、その場合、一つのメモリ(バス)トランザクションが終了しない限り、次のメモリ(バス)トランザクションが開始できない。
【0034】
プリフェッチ機構6は、キャッシュプリフェッチアドレスを保持するFIFO記憶部と論理回路を内部に備える。そのFIFOに空き領域がある場合には、命令実行ユニット1はprefetch命令の実行をプリフェッチ機構6への登録のみで終了させ、すぐに次の命令の実行を開始する。プリフェッチ機構6は、バスインタフェースユニット5を介して外部メモリをアクセスすることにより、保持しているキャッシュプリフェッチアドレスのデータを登録順に読み出してデータキャッシュ3に登録する。
【0035】
図13に、プリフェッチ機構に関する詳細構成図を示す。この図では、図12の一部であり、プリフェッチ機構に関する構成、各構成要素の制御線、データ線を特に詳細に表したものである。プリフェッチ機構6は、プリフェッチアドレスFIFO61、論理回路62、切替器63を備える。
【0036】
(1)命令実行ユニット1は、以下のポートを備える。
a. FIFO-full:FIFO-fullはプリフェッチ機構6からの入力信号で、プリフェッチアドレスの格納場所が満杯である場合に、フラグ、例えば、1を入力する。この入力が1でprefetch命令を実行しようとした場合は、この入力が0になるまで実行が停止する。
b. Prefetch-req:Prefetch-reqはプリフェッチ機構6への出力信号で、prefetch命令が実行された(FIFO-fullは0)場合に、所定期間、例えば1クロックの期間 1が出力される。この時に同時にPrefetch-addr上にキャッシュプリフェッチ対象アドレスが出力される。
c. Prefetch-addr:Prefetch-addrはプリフェッチ機構6への出力信号である。動作は図12の説明箇所及び(1)b.参照。
【0037】
(2) バスインタフェースユニット5は、以下のポートを備える。
a. p-request:p-requestはプリフェッチ機構6からの入力信号で、プリフェッチ機構6がバスを使用したい場合に1が入力される。バスを使用する他のユニットに対しては同様の信号線が別に存在する。
b. p-done:p-doneはプリフェッチ機構6への出力信号で、プリフェッチ機構6から要求されたバスアクセスが終了した時に1クロックの期間 1が出力される。
c. R-data:R-dataは外部メモリから読み出されたデータが通る内部データバス。バスインタフェースユニット5からデータキャッシュ13への出力バス。
d. R-addr:R-addrは外部メモリの読み出しアドレスの入力バス。読み出し要求を出しているユニットからのアドレスのうち、バスインタフェースユニット5が選択したユニットからの出力がR-addrを通して入力される。
【0038】
(3)プリフェッチ機構6は、以下のポートを備える。
a. in:キャッシュプリフェッチアドレスのFIFOへの入力バス。
b. strobe:FIFOへの書き込みストローブ信号。inの内容が書き込まれる。
c. out:FIFOからの出力バス。
d. empty:出力信号。FIFOに有効なエントリが無い場合に1になる。
e. full:出力信号。FIFOのエントリが満杯の場合に1になる。
f. next:FIFOの読み出しストローブ信号。次のエントリがoutに出力される。
【0039】
プリフェッチ機構6は、内部に有するプリフェッチアドレスFIFO61により、複数のprefetch命令のアドレスを保持可能である。このFIFO61が溢れない限り命令実行ユニット1の実行は停止しないため、prefetch命令の命令列中の位置を気にしないで発行することができる。もし、prefetch命令が1個しか同時に発行できないプロセッサでは前に発行したprefetch命令がちょうど終了するタイミングで次のprefetch命令を発行しないと効率が低下してしまう。なぜなら、前のprefetchが終了していない場合は、終了するまで命令実行ユニット1が停止し、終了の数クロック後であればバスの無使用期間が発生してバスの使用効率が低下する。プリフェッチ機構6と命令パイプライン(命令実行ユニット1)は独立に動いており、FIFO61容量を越えるプリフェッチ命令を発行しようとした場合とload命令がキャッシュミスを起こした場合は命令実行パイプラインが停止する。プリフェッチ要求による外部メモリアクセスが終った時点で、プリフェッチ機構6に未処理のプリフェッチ要求が残っている場合は、FIFO順で次のプリフェッチ要求をバスで行う。この機構のハードウェア量はプリフェッチ要求を格納しておくFIFOメモリ程度の増加であり、コストは低い。
【0040】
このようなプリフェッチ機構6をプロセッサに追加することにより、スプリットフェーズバスを持った多重プリフェッチ発行可能なプロセッサと同じコードが使用可能となる。つまり、図2のサンプルプログラムに対して、上述した図4(および図5)のような命令列が使用可能となる。このコードはプリフェッチ命令を処理の前方に集めただけのコードであり、コード生成は難しくない。
【0041】
図14に、プリフェッチ機能付きインターロックバスによる実行1についての説明図を示す。この図では、本発明の機構を持つインターロックバスで多重プリフェッチ発行可能なプロセッサによるサンプルプログラムの実行状況を示す。ただし、読み出しレイテンシが6クロック、書き込みレイテンシが3クロックと仮定している。図14が示すようにハードウェアのプリフェッチ機構6とライトバッファ4がバスを使用するため、無駄な切れ目(バブル)なしにバスを使い切ることが可能である。この例に関しては、実行時間が高性能高コストのスプリットフェーズバスを持つ場合(図4)の実行時間に肩を並べている。
【0042】
以下に、従来の単発プリフェッチ発行機構しか持たないプロセッサに対して調べたように、メモリアクセスレイテンシを変動させた場合の実行時間の変動を述べる。
まず、図15に、プリフェッチ機能付きインターロックバスによる実行2についての説明図を示す。この図では、図10と同じ条件で、一回目(addr_A)と二回目(addr_B)のメモリ読み出しは4クロックで、三回目(addr_C)と四回目(addr_D)の読み出しは8クロックかかると仮定した実行状況を示す。アクセス時間が変動しても、プリフェッチ機構6の独立動作で吸収されて実行時間は30クロックで変わらない。図14と同様、バスは無駄なく使い切られている。
【0043】
次に、図16に、プリフェッチ機能付きインターロックバスによる実行3についての説明図を示す。この図では、図11と同じ条件で、一回目(addr_A)と二回目(addr_B)のメモリ読み出しはキャッシュヒットでレイテンシ0クロックで、三回目(addr_C)と四回目(addr_D)の読み出しは12クロックかかると仮定した実行状況を示す。このアクセス時間の変動により、実行時間は32クロックとなり、2クロック分だけ増加したが、増加分はキャッシュヒットのため無駄になったプリフェッチ命令自体のコストである。バス使用開始後は、バスを無駄なく使い切っている。
【0044】
このように、本発明で述べた簡易キャッシュプリフェッチ機構はメモリアクセスレイテンシの変動に強い(変動しても実行時間の遅れが小さく抑えられる)性質を持っている。スプリットフェーズバスおよびルックアップフリーキャッシュを持つ高性能マイクロプロセッサであっても、外部に多重に発行できるプリフェッチ要求数やload要求数には上限がある。このため、この上限を緩和するために、本発明の機構を利用することが可能である。インターロックバスというのは、他にバスマスタになるデバイスがいなければ、この要求の上限数が1であるスプリットフェーズバスと捉えることもできる。
【0045】
なお、命令の種類、各命令の用いるクロック数、プリフェッチ機構6内部の論理回路、制御線やデータ線の構成等は、一例を示したものであり、適宜の変更、修正を行うことができる。
【0046】
【発明の効果】
本発明によると、キャッシュプリフェッチ機構をプロセッサ内部に実装することにより、複数の外部メモリアクセス要求をバスに発行できない低コストのプロセッサおよびメモリから成るシステムであっても、システムの性能を向上させることができる。本発明のキャッシュプリフェッチ機構は、命令実行パイプライン(命令実行ユニット)と独立に動き、複数のキャッシュプリフェッチ命令の多重発行を可能にすることができる。本発明によると、プリフェッチ命令の多重発行とプリフェッチ機構の独立動作により、プリフェッチ命令の挿入位置に対する自由度が増すと同時に、バスの使用効率を向上させることができる。また、本発明のするプリフェッチ機構によるハードウェアの増加は多重発行するためにプリフェッチアドレスを保持するためのFIFO回路とその周辺の若干量であり、低コストで実現できる。
【図面の簡単な説明】
【図1】サンプルプロセッサの構成図。
【図2】サンプルマシンコード(サンプルプログラム)の図。
【図3】プリフェッチ機能なしインターロックバスによる実行についての説明図。
【図4】多重プリフェッチ機能付きスプリットフェーズバスによる実行1についての説明図。
【図5】多重プリフェッチ機能付きスプリットフェーズバスによる実行2についての説明図。
【図6】 load 多重発行機能付きスプリットフェーズバスによる実行についての説明図。
【図7】単発プリフェッチ機能付きインターロックバスによる実行1についての説明図。
【図8】単発プリフェッチ機能付きインターロックバスによる実行2についての説明図。
【図9】単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行1についての説明図。
【図10】単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行2についての説明図。
【図11】単発プリフェッチ機能およびライトバッファ遅延機能付きインターロックバスによる実行3についての説明図。
【図12】本発明に係るサンプルプロセッサの構成図。
【図13】プリフェッチ機構に関する詳細構成図。
【図14】プリフェッチ機構付きインターロックバスによる実行1についての説明図。
【図15】プリフェッチ機構付きインターロックバスによる実行2についての説明図。
【図16】プリフェッチ機構付きインターロックバスによる実行3についての説明図。
【符号の説明】
1 命令実行ユニット(Execution Unit)
2 命令キャッシュ(I-Cache)
3 データキャッシュ(D-Cache)
4 ライトバッファ(Write Buffer)
5 バスインタフェースユニット(Bus Interface Unit)
6 プリフェッチ機構(Prefetch Mechanism)
7、8 ラッチ(Latch)
Claims (8)
- インターロック方式の外部メモリバスを持つプロセッサおよびメモリを備えたシステムにおける前記プロセッサであって、
各命令で扱うデータを記憶するデータキャッシュと、
外部とのインタフェースのためのバスインタフェースユニットと、
複数のキャッシュプリフェッチアドレスを保持する先入れ先出しの記憶部を有し、前記バスインタフェースユニットを介して外部から該キャッシュプリフェッチアドレスのデータを読み出して前記データキャッシュに登録するプリフェッチ機構と、
各命令に従い、前記データキャッシュに要求を出力して該命令を実行し、及び、キャッシュプリフェッチアドレスを前記プリフェッチ機構に出力する命令実行ユニットと
を備え、
前記命令実行ユニットは、キャッシュプリフェッチ命令を、前記プリフェッチ機構と前記データキャッシュに対して出力し、
前記命令実行ユニットは、キャッシュミスの場合は、キャッシュプリフェッチアドレスを前記プリフェッチ機構に渡すだけで、キャッシュプリフェッチの処理を終了して次の命令の処理を開始し、
前記プリフェッチ機構は、内部に有する前記記憶部により、前記命令実行ユニットから出力された複数のキャッシュプリフェッチアドレスを保持し、前記命令実行ユニットと独立に動き、複数のキャッシュプリフェッチ命令の多重発行を行い、
前記プリフェッチ機構は、前記バスインタフェースユニットを介して外部メモリをアクセスすることにより、前記記憶部で保持しているキャッシュプリフェッチアドレスのデータを登録順に読み出して前記データキャッシュに登録する
ことにより、スプリットフェーズバスを持った多重プリフェッチ発行可能なプロセッサと同様の、複数のプリフェッチ命令を処理の前方に集めたコードを使用可能とするようにしたプロセッサ。 - 各命令をプロセッサに供給するための命令キャッシュをさらに備え、
前記命令実行ユニットは、前記命令キャッシュがミスヒットの場合は前記バスインタフェースユニットを通して外部から命令を読み込むようにした請求項1に記載のプロセッサ。 - 外部への書き込み内容を格納し、前記バスインタフェースユニットが使用可能なときに前記命令実行ユニットと独立して動作して外部への書き込みを実行するライトバッファをさらに備えた請求項1又は2に記載のプロセッサ。
- データをメモリ又はキャッシュから読み出す命令については、前記命令実行ユニットからアドレスが前記データキャッシュに伝えられ、キャッシュヒットであれば前記データキャッシュからデータが読み出され、一方、ミスヒットであれば前記バスインタフェースユニットを通して外部からデータを読み出すようにした請求項1乃至3のいずれかに記載のプロセッサ。
- データをメモリ又はキャッシュへ書き込む命令については、前記命令実行ユニットからアドレス及びデータが前記データキャッシュに伝えられ、キャッシュヒットであれば前記データキャッシュにデータが書き込まれ、該アドレスとデータはライトバッファに保持され、前記バスインタフェースユニットが使用可能なときに外部に書き込みがなされるようにした請求項1乃至4のいずれかに記載のプロセッサ。
- キャッシュプリフェッチ命令については、前記命令実行ユニットからプリフェッチ対象アドレスが前記プリフェッチ機構及び前記データキャッシュに伝えられ、キャッシュヒットの場合は、前記プリフェッチ機構及び前記データキャッシュはそのまま命令処理を終了し、一方、キャッシュミスの場合はプリフェッチ対象アドレスを一時的に前記プリフェッチ機構に蓄えておき、前記命令実行ユニットの動作とは独立に前記プリフェッチ機構が前記バスインタフェースユニットを通して外部からデータを読み出して前記データキャッシュにデータを格納するようにした請求項1乃至5のいずれかに記載のプロセッサ。
- 前記プリフェッチ機構は、
前記記憶部に空き領域がある場合には、前記命令実行ユニットはプリフェッチ命令の実行を登録のみで終了させ、すぐに次の命令の実行を開始するようにした請求項1乃至6のいずれかに記載のプロセッサ。 - 前記プリフェッチ機構は、
前記命令実行ユニットからプリフェッチ対象アドレスが前記記憶部へ入力されるプリフェッチアドレス入力と、
前記記憶部からの出力又は前記キャッシュプリフェッチアドレス入力を選択することにより、外部の読み出しアドレスを出力する読み出しアドレス出力と、
プリフェッチアドレスを格納する前記記憶部が満杯である場合に出力されるフル表示出力と
を備えた請求項7に記載のプロセッサ。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP35420399A JP4680340B2 (ja) | 1999-12-14 | 1999-12-14 | プロセッサ |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP35420399A JP4680340B2 (ja) | 1999-12-14 | 1999-12-14 | プロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001175533A JP2001175533A (ja) | 2001-06-29 |
JP4680340B2 true JP4680340B2 (ja) | 2011-05-11 |
Family
ID=18435983
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP35420399A Expired - Fee Related JP4680340B2 (ja) | 1999-12-14 | 1999-12-14 | プロセッサ |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4680340B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060143401A1 (en) * | 2004-12-27 | 2006-06-29 | Jacob Doweck | Method and apparatus for prefetching based on cache fill buffer hits |
JP2011044072A (ja) * | 2009-08-24 | 2011-03-03 | Panasonic Corp | アイドル状態検出回路、半導体集積回路、信号処理装置、アイドル状態検出方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0798673A (ja) * | 1993-08-05 | 1995-04-11 | Hitachi Ltd | キャッシュメモリを有するデータ処理装置 |
JPH1063574A (ja) * | 1996-08-19 | 1998-03-06 | Matsushita Electron Corp | キャッシュメモリ付プロセッサ |
WO1999023564A1 (en) * | 1997-10-31 | 1999-05-14 | Koninklijke Philips Electronics N.V. | Prefetch management in cache memory |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2522176B2 (ja) * | 1993-08-13 | 1996-08-07 | 日本電気株式会社 | プロセッサの制御方法 |
US5649144A (en) * | 1994-06-13 | 1997-07-15 | Hewlett-Packard Co. | Apparatus, systems and methods for improving data cache hit rates |
JP2001060169A (ja) * | 1999-08-24 | 2001-03-06 | Hitachi Ltd | キャッシュコントローラ及びコンピュータシステム |
-
1999
- 1999-12-14 JP JP35420399A patent/JP4680340B2/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0798673A (ja) * | 1993-08-05 | 1995-04-11 | Hitachi Ltd | キャッシュメモリを有するデータ処理装置 |
JPH1063574A (ja) * | 1996-08-19 | 1998-03-06 | Matsushita Electron Corp | キャッシュメモリ付プロセッサ |
WO1999023564A1 (en) * | 1997-10-31 | 1999-05-14 | Koninklijke Philips Electronics N.V. | Prefetch management in cache memory |
Also Published As
Publication number | Publication date |
---|---|
JP2001175533A (ja) | 2001-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5893165A (en) | System and method for parallel execution of memory transactions using multiple memory models, including SSO, TSO, PSO and RMO | |
US6336154B1 (en) | Method of operating a computer system by identifying source code computational elements in main memory | |
US6895475B2 (en) | Prefetch buffer method and apparatus | |
US6728839B1 (en) | Attribute based memory pre-fetching technique | |
US6681295B1 (en) | Fast lane prefetching | |
US6665749B1 (en) | Bus protocol for efficiently transferring vector data | |
US6813701B1 (en) | Method and apparatus for transferring vector data between memory and a register file | |
EP0514024B1 (en) | Method and apparatus for an improved memory architecture | |
KR101039782B1 (ko) | 능동 메모리 프로세서를 포함하는 네트워크-온-칩 시스템 | |
US7610469B2 (en) | Vector transfer system for packing dis-contiguous vector elements together into a single bus transfer | |
US20060179174A1 (en) | Method and system for preventing cache lines from being flushed until data stored therein is used | |
US20010052060A1 (en) | Buffering system bus for external-memory access | |
US20090132749A1 (en) | Cache memory system | |
EP0439025A2 (en) | A data processor having a deferred cache load | |
US20100250853A1 (en) | Prefetch engine based translation prefetching | |
JPH0612327A (ja) | キャッシュメモリを有するデータプロセッサ | |
US9886278B2 (en) | Computing architecture and method for processing data | |
US6539457B1 (en) | Cache address conflict mechanism without store buffers | |
US6101589A (en) | High performance shared cache | |
EP1039377B1 (en) | System and method supporting multiple outstanding requests to multiple targets of a memory hierarchy | |
US5353416A (en) | CPU lock logic for corrected operation with a posted write array | |
US5924120A (en) | Method and apparatus for maximizing utilization of an internal processor bus in the context of external transactions running at speeds fractionally greater than internal transaction times | |
WO1995022103A1 (en) | Microprocessor access control unit with fetch address queue | |
JPH11272555A (ja) | キャッシュメモリ制御システム | |
US20060179173A1 (en) | Method and system for cache utilization by prefetching for multiple DMA reads |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20031031 |
|
RD03 | Notification of appointment of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7423 Effective date: 20040129 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061003 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20100203 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100209 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100406 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110201 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110203 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140210 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |