JP3548616B2 - 情報処理装置 - Google Patents
情報処理装置 Download PDFInfo
- Publication number
- JP3548616B2 JP3548616B2 JP00738895A JP738895A JP3548616B2 JP 3548616 B2 JP3548616 B2 JP 3548616B2 JP 00738895 A JP00738895 A JP 00738895A JP 738895 A JP738895 A JP 738895A JP 3548616 B2 JP3548616 B2 JP 3548616B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- prefetch
- circuit
- group
- request
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30047—Prefetch instructions; cache control instructions
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Memory System (AREA)
Description
【産業上の利用分野】
本発明は、主記憶装置等の記憶装置から配列データ等の特定の構造を有する一群のデータを先読みする情報処理装置に関する。
【0002】
【従来の技術】
従来の高性能情報処理装置は一般的に命令処理装置とキャッシュ及びメモリ装置を有する。該情報処理装置はメモリにプログラムとデータを格納し、プログラムに記述された命令に従いメモリ中のデータを処理する。キャッシュは命令処理装置からの参照時間の短かい比較的小容量の記憶手段であり、該プログラム及びデータの一部を一時的に格納する。命令実行にあたり必要なデータはメモリから読みだされるが、同時に該データを含むデータブロックはキャッシュを構成するラインにコピーされ、以後当該ブロック内のデータに対する参照が指定されたときは該キャッシュのラインからデータを参照する。このメモリからキャッシュラインへのデータブロックの転送をブロックもしくはライン転送と呼ぶ。命令実行にあたり必要データがキャッシュにない場合、これをキャッシュミスと呼ぶ。キャッシュミスが発生するとライン転送が実行される。従来の情報処理装置では命令実行に伴いこのライン転送が発生するとその完了までは当該命令の実行が待ち合わされる。従って、キャッシュミスが多発するとライン転送に伴う待ち合わせにより該プログラムの実行時間が増大し、該情報処理装置の処理性能が劣化するという問題があった。特に大規模データを扱う技術計算やデータベース処理において深刻であった。
【0003】
これに対し、最近では予めプログラムにおいて、キャッシュミスを引き起こす可能性のある命令に先だってデータの先読みを指示する特殊な命令を実行させることで上記ライン転送に伴う性能劣化を回避する試みがなされている。このデータ先読みをデータプリフェッチあるいは単にプリフェッチとも呼ぶ。例えば米国ヒューレットパッカード社のマイクロプロセッサPA7100では汎用レジスタ0番へのメモリ参照命令(以後ロードGR0型プリフェッチ命令と呼ぶ)はこのプリフェッチを実現する一つの手段として定義されている(以下第1の従来技術と呼ぶことがある)。このロードGR0型プリフェッチ命令は指定したオペランドアドレスに位置するデータの読みだしを行なうがその結果は読み捨てる。この動作において、キャッシュミスを発生した場合当該命令を待ち合わせることなくライン転送を行なう。従って後刻に上記データを参照する命令を実行する時には該データがキャッシュに入っているために上記性能劣化が回避される。
【0004】
しかしながら、該プリフェッチ命令を用いた場合、以下に記すような4つの問題がある。第1の問題は、該プリフェッチを用いて、例えば、ベクトルデータを順次参照するループ構造のプログラムを実行すると、一つのベクトル要素に対して、演算数を格納するレジスタへデータをロードするためのメモリ参照命令と当該プリフェッチ命令の計2命令を実行する必要があるため、これに伴う命令処理時間が増大する点である。もし多くのデータがキャッシュに入っているプログラムに対し該プリフェッチ命令を加えたコードを実行したとすると、加えないプログラムに比べ命令処理時間が増大し、返って性能が劣化する可能性がある。
【0005】
第2の問題は、該プリフェッチ命令はプログラム中に記述されるためなんらかの原因で当該プログラムの実行が待ち合わされた場合、該プリフェッチ命令自身の実行も待ち合わされるため早期にデータ読み出しを開始すると言うプリフェッチの効果が減少する点である。これを避けるためには該プリフェッチ命令を対応するメモリ参照命令に対して極めて早期に発行する必要があるが、これは当該プログラムの構造を複雑にし、またプログラムサイズを大きくするという問題点を引き起こす。
【0006】
第3の問題は、該ロードGR0型プリフェッチ命令によると大規模なベクトルデータを順次キャッシュに取り込むため、キャッシュに既に格納されている他のデータを追い出すことになりこのためのキャッシュミスを増大させ、結果として該処理装置の性能を低下させる可能性のある点である。
【0007】
第4の問題はロードGR0型プリフェッチによるとデータ参照はキャッシュのライン単位となるため、非連続なベクトルデータの参照に適用した場合、参照しないデータまで読みだすための性能劣化が生じうる。
【0008】
他の従来技術として、プロセッサにて初期設定され、以後プロセッサとは非同期にデータ読みだしを行なうプリフェッチユニットを設ける技術が提案されている。例えば、「お茶の水1号の構成と評価」、情報処理学会研究報告、計算機アーキテクチャ101−8、1993.8.20、pp.57−64参照。以下、この文献記載の技術を第2の従来技術と呼ぶことがある。この従来技術では、複数のプロセッサを有するシステムにおいて、各プロセッサごとに配列データをプリフェッチする技術が開示されている。すなわち、各プロセッサにより指示された、プリフェッチすべき配列データのアドレス、ストライド、レングスに従って、そのプロセッサ用に設けたプリフェッチ制御部がこの配列データの複数の要素をプリフェッチし、そのプロセッサに対応して設けたプリフェッチバッファに格納する技術が示されている。
【0009】
【発明が解決しようとする課題】
この第2の従来技術によれば、上記第1の従来技術に関して述べた問題は軽減される。しかし、この第2の従来技術を実現するに当たり次の問題もある。
【0010】
この第2の従来技術では、各プロセッサに対応して主記憶のデータを保持するキャッシュメモリが開示されているが、このキャッシュメモリをプリフェッチユニットによるデータのプリフェッチ時にどのように使用するかに関する記載はない。
【0011】
さらに、この第2の従来技術では、一つの配列に属する複数のデータのプリフェッチのみを行なえる技術しか記載がない。しかし、実際のプログラムには、複数の配列を使用するのが通常である。
【0012】
さらに、この第2の従来技術では、上記の配列内の複数のデータのごとく、互いに一定のアドレス間隔で隔たったアドレスを有する複数のデータのプリフェッチを実行する技術が開示されているのみである。しかするに、プログラムで処理される一群のデータの中には、インデックス付きベクトルのごとく、他の一群のデータによりアドレスが決まるデータもある。
【0013】
上記第2の従来技術を実用化するには、その他いろいろの解決すべき問題がある。
【0014】
本発明は上記第2の従来技術の問題点を解決し、より機能の高いプリフェッチ回路を有する情報処理装置を提供することを目的とする。
【0015】
本発明のより具体的な目的は、主記憶等の記憶装置に対するキャッシュメモリをプリフェッチ時に上手く利用することにより、プリフェッチの高速化を図る情報処理装置を提供することである。
【0016】
本発明の他の目的は、複数群のデータをプリフェッチ可能な情報処理装置を提供することである。
【0017】
本発明のさらに他の目的は、インデックス付きのベクトルを構成する一群のデータをプリフェッチ可能な情報処理装置を提供することである。
【0018】
本発明のさらに他の目的は、上記第2の従来技術が有する他の実用上の問題点を解決した情報処理装置を提供することである。
【0019】
【課題を解決するための手段】
上記目的を達成するため、本願第1の発明では、処理装置から要求された先読みすべき一群のデータをプリフェッチする回路内には、それらのデータのプリフェッチのために動作する回路として、その一群のデータに対する一群の読み出し要求をキャッシュメモリに対するアクセスを制御するキャッシュ制御回路に順次出力し、この一群の読み出し要求に対する応答として供給される一群のデータをプリフェッチ回路内に設けた一群の順序付けられた記憶領域に順次格納する先読みデータ要求回路を設ける。
【0020】
さらに、キャッシュ制御回路には、それらの一群のデータのプリフェッチ時に動作する回路として、
これらの一群のデータ読み出し要求で指定される一群のデータのいずれかがキャッシュメモリにあるときには、そのデータをキャッシュメモリからプリフェッチ回路に転送する回路と、
該一群の先読みデータ読み出し要求のいずれかが指定するデータが該キャッシュメモリに保持されていない場合、少なくともそのデータを該記憶装置から読み出すことを該記憶制御回路に要求する先読みデータ要求回路を設ける。
【0021】
この記憶装置制御回路には、この先読みデータ要求回路からの要求が指定するデータをプリフェッチ回路に供給する記憶装置アクセス回路を設ける。
【0022】
さらに、プリフェッチ回路内には、すでにプリフェッチされた一群のデータを処理装置が利用するときに動作する回路として、
該処理装置から発行されたデータ読み出し要求が指定するデータが該一群の記憶領域に保持されているか否かを検出し、該指定されたデータが該一群の記憶領域に保持されている場合、該保持されたデータを該処理装置に転送する先読みデータ供給回路を設ける。
【0023】
これにより、上記一群のデータのプリフェッチ時に、キャッシュメモリ内にあるデータをプリフェッチ回路が要求したときには、そのデータをキャッシュメモリからプリフェッチ回路に供給することが出来、そのデータのプリフェッチを高速に実行できる。
【0024】
本発明のより望ましい態様では、プリフェッチ回路内には、該指定されたデータが該一群の記憶領域に保持されている場合、該キャッシュ制御回路がそのデータを該キャッシュメモリから該処理装置に転送するのを禁止するデータ転送禁止回路とを設ける。
【0025】
本願第2の発明により、同じデータがキャッシュメモリにも、プリフェッチ回路内にも保持されることになるが、後に処理装置がプリフェッチされたデータを使用する場合、プリフェッチ回路からそのデータを処理装置に提供し、上記禁止回路によりキャッシュメモリからそのデータを提供するのを禁止することにより、誤って同じデータが2重に処理装置に供給されるのを防ぐとともに、プリフェッチ回路では、プリフェッチされたデータが処理装置に読み出されたか否かをの管理を正しく行ない得る。
【0026】
本発明の他の望ましい態様では、プリフェッチ要求された一群のデータのいずれかがキャッシュメモリにないに存在しない場合、そのデータを含むブロックを、キャッシュメモリに転送することを要求する回路をキャッシュ制御回路内に設けた。これにより、処理装置が要求した一群のデータ内に、そのブロックに属する他のデータが複数存在する場合には、それらの他のデータのプリフェッチは、この転送されたブロック内のデータを使用して高速に行ない得る。しかし、先読みする一群のデータを構成する複数のデータの内、同一のブロックに同時に属するデータがゼロもしくは少ない場合もあり得る。この場合には、上記第1の従来技術で述べた第3、第4の問題が発生し得る。従って、本願発明のより望ましい態様では、このブロック転送をするか否かを、処理装置が先読み要求の一部として指定した情報に依存して制御する回路を設ける。
【0027】
さらに、本願第2の発明では、複数群のデータのプリフェッチを実行可能にするために、処理装置内に、先読み要求の一部として、先読みすべき一群のデータのアドレスの算出に使用するベースレジスタの番号を指定する複数の先読み要求をプリフェッチ回路に供給する回路を設ける。
【0028】
プリフェッチ回路内には、
先読みされたデータ用の複数群の順序付けられた記憶領域と、
処理装置が発行した複数の先読み要求に対して、これらの複数群の記憶領域のいずれか一群の記憶領域を割り当てる回路と、
各群の記憶領域に対応して、その一群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を記憶する回路と、
各群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を記憶する回路とを設ける。
【0029】
これにより、これらの複数群の記憶領域を異なる先読み要求が指定する異なるベースレジスタ番号に関連付ける。
【0030】
さらに、処理装置内に、記憶装置からデータを読み出すことを要求するデータ読み出し命令に応答して、データ読み出し要求を上記プリフェッチ回路に供給する際に、その命令が指定するベースレジスタ番号をそのデータ読み出し要求の一部としてプリフェッチ回路に供給する回路を設ける。
【0031】
プリフェッチ回路内には、
処理装置から発行されたデータ読み出し要求に応答して、そのデータ読み出し要求が指定するベースレジスタ番号を指定した先読み要求に割り当てられた一群の記憶領域があるか否かを、各群の記憶領域に対応して記憶されたベースレジスタ番号に基づいて検出する回路と、
上記データ読み出し要求が指定するベースレジスタに割り当てられた一群の記憶領域がある場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを設ける。
【0032】
これにより、複数群のデータを先読みしてプリフェッチ回路内に保持した上で、処理装置で実行される異なるデータ読み出し要求が指定する異なるベースレジスタ番号により、これらの複数群の記憶領域を利用可能にする。
【0033】
さらに、本願第3の発明によれば、インデックス付きベクトルを構成する一群のデータをプリフェッチするために、そのベクトルのインデックスとして使用される他のデータ群をまずプリフェッチし、プリフェッチ回路内に保持し、この他のデータ群を使用して上記一群のデータ群をプリフェッチする回路がプリフェッチ回路に設けられる。これにより、インデックス付きベクトルをプリフェッチ回路を使用してプリフェッチ可能になる。
【0034】
さらに本願の他の発明によれば、他の問題を解決した情報処理装置が与えられる。
【0035】
【実施例】
以下、本発明に係るディスクアレイを図面に示した実施例を参照してさらに詳細に説明する。
【0036】
<装置の概略>
図1は本発明による情報処理装置の実施例の全体構成を示す。但し、入出力装置等周辺装置は省略してある。
1はメモリであり、プログラムとデータを格納する。2はプロセッサであり、メモリ1に格納されたプログラムに含まれた命令を順次読み出し、順次それらを実行する。3はキャッシュメモリユニットであり、メモリ1の一部分の写しを格納するキャッシュメモリ1001を内蔵する。4はシステム制御装置であり、プロセッサ2からのメモリリクエスト(メモリ参照要求)に応じキャッシュメモリ1001もしくはメモリ1を参照するための回路であるが、本実施例ではプリフェッチユニット105を含むのが大きな特徴である。
【0037】
この回路の詳細は後述するので、ここではプリフェッチユニット105及びそれによるデータプリフェッチ動作の概要を記す。プリフェッチユニット105はプロセッサ2で実行するプログラムにより初期設定されるプリフェッチ制御情報に基づいて、この情報が指定する一群のデータ、例えば、ある配列の複数の要素の先読み(プリフェチ)をプロセッサ2での命令実行とは非同期に実行し、先読みしたデータを、このプリフェッチユニット105内に設けた複数のプリフェッチデータレジスタ(PDR)(704(図7))の一つに一時的に格納し、さらにこのデータを必要とするメモリ参照命令がプロセッサ2にて後に実行される時に、この命令が指定する、プリフェッチ済みのデータをこのレジスタからプロセッサ2に転送する。したがって、このデータがキャッシュメモリ1004にない場合に、メモリ1からプロセッサ2にこのデータを供給する従来の場合より早く、データを供給できるようにしている。
【0038】
プリフェッチ制御情報は、プロセッサ2で実行中のプログラムにより、プロセッサ2内の汎用レジスタGRに予め作成され、初期設定命令にしたがってプロセッサ2から信号線106を介してプリフェッチユニット105内に転送され、プリフェッチユニット105内に設けられたプリフェッチ状態制御レジスタ(PFR)に書き込む。PFRは後述するように、プリフェッチ状態レジスタ(PSR)(301(図3))とプリフェッチ制御レジスタ(PCR)(302(図3)との組みを指す。書き込みすべきレジスタの番号を示すPFR書き込みレジスタ番号PFRWNがこの初期設定命令で指定され、プロセッサ2からプリフェッチユニット105に供給される。
【0039】
プリフェッチユニット105は、プリフェッチ制御情報が指定する一群のデータのプリフェッチを以下のようにしてキャッシュリクエストユニット101の制御の元で行なう。まず、信号線107を介してキャッシュリクエストユニット101へプリフェッチリクエストPFREQ、プリフェチアドレスPFA、プリフェッチすべきデータに関するプリフェッチ制御情報を保持するPCRの番号を示すREQPCRN、プリフェッチしたデータを格納する、PDR内の位置を示すPDRTP信号、そしてライン転送の有無を指定するBUF信号を送出する。
【0040】
キャッシュリクエストユニット101は、このプリフェッチアドレスで示されたデータがキャッシュメモリ1001内に保持されているか否かを検出し、そのデータがキャッシュメモリ1004に保持されている場合には、このアドレスPFAに対応するキャッシュアドレスCADRを線1132を介してキャッシュユニット3に送り、そのデータの読み出しを要求する。このデータCDATAはキャッシュメモリ1001から線108を介してプリフェッチユニット105に送られる。キャッシュリクエストユニット101は、このプリフェッチユニット105に信号線120を介してデータ送出指令CADV信号、PDR番号CWPDRN、PDR内格納位置CPDRIPを送出し、プリフェッチユニット105は、これらの信号に従って、データCDATAをPDR内に保持する。キャッシュリクエストユニット101は、プリフェッチユニット105から要求されたデータがキャッシュメモリ1001にない場合には、メモリ読み出し要求MREQ、メモリアドレスMADRをメモリリクエストユニット103に送り、メモリ1からのこのデータの読み出しを要求する。
【0041】
このユニット103は、メモリ1にこれらの信号を送出するとともに、メモリリクエストユニット103から信号線121を介してデータ送出指令MADV、PDR番号MWPDRN、PDR内格納位置MPDRIPをプリフェッチユニット105に送る。メモリ1からこのデータが読み出されると、メモリデータユニット104は、このデータMDATAを線109を介してプリフェッチユニット105に送出する。プリフェッチ要求されたデータに対してライン転送が指定されていないときは、このデータはキャッシュメモリ1001には書き込まない。
【0042】
プリフェッチユニット105は、プリフェッチすべき一群のデータに対して、以上の動作を繰り返す。ここで、上記の如くプロセッサ2とは独立したプリフェッチユニットからデータ参照要求を出力して処理としている点が重要である。各PDRは、プリフェッチされた一群のデータを保持する複数の順序付けられた記憶位置を有し、プリフェッチされた一群のデータをこれらの記憶位置の順に従って順次異なる記憶位置に保持し、またこれらのデータの読み出しが要求されたときには、後に説明するように、これらの記憶位置の順にしたがって順次プリフェッチ済みのデータを読み出すようになっている。これにより、一群のデータの書き込み位置、読み出し位置の制御を簡単になるようにしている。とくに、単純ベクトルよりも複雑な構造にて関連付けられた一群のデータを保持するのに適している。
【0043】
もし、プリフェッチすべきデータに対してライン転送が指定されている場合には、プリフェッチすべきデータの読み出しをメモリリクエストユニット103に要求するときにライン転送要求LTを供給する。この場合、メモリデータユニット104は、このライン転送要求LTにしたがって読み出された1ブロックのデータをキャッシュメモリユニット3に、線109、キャッシュデータユニット102、線114を介して送出する動作が追加される。同じブロック内の複数のデータがプリフェッチ要求される場合には、ライン転送を行なうことが有効である。本実施例では、プリフェッチ制御情報の中に含められた、ライン転送の有無を指定するBUF信号の値により、このライン転送をするか否かをプログラムで指定可能になっている。
【0044】
プロセッサ2がデータの読み出しを必要とするメモリ参照命令を実行するとき、プロセッサ2はその要求が指定するデータがプリフェッチ要求済みか否かに拘らず、通常通りにキャッシュリクエストユニット101にメモリ参照要求PRREQ及びメモリアドレスPRADRを送出すると同時に、プリフェッチユニット105にメモリリクエストPRREQ、メモリ参照命令解読情報LD、及び上記メモリ参照命令のベースレジスタ番号BRNを信号線106を介して送出する。
【0045】
プリフェッチユニット105は、この要求されたデータがそのユニット内の複数のPDRの内のいずれかに保持されているか否かを判別し、要求されたデータがPDRに存在した場合はそのデータDATA及びPDRヒット信号PDRHITを信号線110を介してキャッシュデータユニット102に送出し、さらに信号線114を介してキャッシュメモリユニット3に転送し、そのユニット3を通過して最後に信号線108を経由してプロセッサ2に転送する。このため、DATAの転送指令PDRHITを信号線111を介してキャッシュメモリユニット3に送出し、これにより信号線114により転送した上記データは後述するキャッシュメモリユニット3内部のバイパスを経由して信号線108に出力する。
【0046】
本実施例では、データのプリフェッチのときに、そのデータをキャッシュメモリ1001から読み出すことを許したので、一般にプロセッサ2が読み出しを要求したデータが、プリフェッチユニット105のいずれかのPDR内に存在するとともに、キャッシュメモリ1001にも存在する可能性がある。本実施例では、PDR内に存在するデータについては、PDRから供給するが、そのデータをキャッシュメモリから読み出さないようにしている。このために、キャッシュメモリユニット3は、PDRヒット信号が与えられた場合にはPDRから読み出されたデータDATAを線108に送出するようになっている。これにより、プリフェッチユニットおよびキャッシュメモリ1001の両方が同じデータを出力しないようにするとともに、プリフェッチユニット105内のデータを優先的に処理装置に送出することにより、後に詳細に説明するように、プリフェッチユニット105内のデータの管理を、キャッシュメモリ1001でのヒットの有無に依らないで、管理出来るようになっている。
【0047】
なお、プロセッサからのデータ読み出しのための上記メモリ参照要求に対して、プリフェッチユニット105がヒットしなかった場合には、以下のようにして、キャッシュメモリ1001およびメモリ1からのデータの読み出しが行なわれる。キャッシュリクエストユニット101は信号線122を介してプロセッサ2から供給されるメモリリクエストPRREQ及びオペランドアドレスPRADRをを受付け、この要求で指定されるデータを含むデータブロックがキャッシュメモリ1001に存在するか否かのチェックを行ない、もし存在すれば信号線113を介してキャッシュメモリユニット3に対し、当該データブロックのキャッシュメモリアドレスCADRを送出する。もし存在しなければ信号線115を介してメモリリクエストユニット103に対し、当該データを読みだすためのメモリリクエストMREQ及びアドレスMADRを発行する。本実施例では、通常そうであるように、プロセッサからのデータメモリ参照要求に対して、キャッシュメモリ1001がヒットしなかった場合には、メモリリクエストユニット103は、このメモリアドレスMADRのデータを含むブロックの読み出しをメモリ1に要求し、メモリデータユニット104は、このブロック内のデータをキャッシュメモリ1001に転送する。
【0048】
また、プロセッサ1から供給されたメモリ参照要求PRREQがデータ書き込み要求であれば、書き込みデータはプロセッサ2から信号線119を介してキャッシュデータユニット102に転送され、引き続き信号線114を介してキャッシュメモリ1001へ書き込まれる。本実施例ではキャッシュへの書き込み方式はいわゆるストアイン方式を採用するものとするので、書き込みデータはメモリ1へ転送する必要はない。データのメモリ1への反映はキャッシュメモリ1001上の変更されたデータブロックがラインから追い出されるときにメモリ1へ該データブロックを書き戻すことにより実現される。このためキャッシュメモリ1001から読みだされたデータブロックは信号線108を介してメモリデータユニット104へ転送され、引き続き信号線118を介してメモリ1へ書き込まれる。
【0049】
このデータ書き込みのためのメモリ参照要求に伴う問題点として、プリフェッチによりデータを読み出した後にプロセッサ2が当該データを変更するストア命令を実行した場合、このストア命令がプログラム上、当該データを参照するメモリ参照命令の前にあった場合は、プリフェッチしたデータは有効でなくなる。本実施例では、プリフェッチデータに付随してそのアドレスの少なくとも一部を保持し、これとプロセッサ2が実行するストア命令のアドレスを逐一比較し、もしあるプリフェッチデータのアドレスに関してそれを無効化する変更がなされた可能性のある場合はこれを検出し、無効なデータに対してはメモリ参照命令実行時にPDRでなくメモリを参照することにより変更後のデータを取り出すようにして解決していることも重要な特徴である。以上の制御のために、プロセッサ2から信号線106を介してストア命令実行指令ST、オペランドアドレスPRADRをプリフェッチユニット105に送出する。さらにPDRHIT信号をキャッシュリクエストユニット101に送出する。
【0050】
また、本実施例では、プロセッサがプリフェッチ制御情報をプリフェッチユニット105に出力するときおよびメモリ参照要求を発行するとき、いずれもベースレジスタ番号BRNを指定するようになっている。これにより、プリフェッチされた一群のデータを保持するPDRをこのプリフェッチ制御情報が指定するベースレジスタ番号に対応させ、後にプロセッサ1がデータ、データ読み出しのためのメモリ参照要求を出力したときに指定するベースレジスタ番号でもって、その番号に対応付けられたPDRがあるか否かを検出し、対応するPDRがある場合に、そのPDR内の一群のプリフェッチされたデータの一つを読み出すようになっている。これにより、複数群のデータを保持するための回路を簡単化している。
【0051】
本実施例では、さらに、単純ベクトルを構成する一群のデータだけでなく、インデクス付きベクトルあるいはリンクベクトルなどを構成する要素のごとく、複雑な構造を有する一群のデータをもプリフェッチ可能になっている。
【0052】
また、本実施例では、配列の複数行に属するデータから成る一群のデータを続けてプリフェッチ可能にするために、プリフェッチするデータのアドレス間隔を、プリフェッチするデータに応じて変更する、いわゆるアドレススキップも実現する。
【0053】
さらに、条件付きメモリ参照命令が実行を抑止された時においてもプリフェッチしたデータを空転送によりスキップすることで、ループ内にIF文がある場合でも本実施例を適用可能にしている。
【0054】
また、本実施例は、プロセッサ2での命令実行に対して発生した割り込みにも対処可能になっている。すなわち、割り込み信号INTを信号線106を介してプリフェッチユニットに通知する。これを受けてプリフェッチ動作は中断させる。割り込み処理の後に再び中断したプリフェッチを再開する場合、PCRとPSRの退避回復を行う。このため、これらプリフェッチ関連のレジスタを読み出すためのレジスタ番地情報PFRRNを信号線106を介してプリフェッチユニットに送出する。読み出された情報は信号線112を介してプロセッサ2に送出される。
【0055】
本実施例のその他の特徴を含めて、本実施例の構造と動作をより詳細に以下に説明する。
【0056】
<プロセッサ>
図11はプロセッサ2の概略構成である。1101は命令制御ユニットでありメモリ1からの命令の読み出し回路1101Aと命令解読回路1101Bを有する。1102はリクエスト制御ユニットであり、命令制御ユニット1101からの要求に基づき、命令読み出しリクエストやメモリデータの読み出しあるいは書き込みを要求するメモリリクエストPRREQを生成する。内部に小容量のプロセッサキャッシュ1102Aを設ける構成も可能である。1103は演算制御ユニットで、内部に演算器1103A、汎用レジスタ(GR)の群1103B、浮動小数点レジスタ群1103C、マスクレジスタ103Dなどを有する。
【0057】
リクエスト制御ユニット1102は、メモリリクエストPRREQとそのアドレスPRADRを信号線122を介してキャッシュリクエストユニット101へ送出し、書き込みの場合は書き込みデータを信号線119を介してキャッシュデータユニット102へ送出する。このユニット1102は、メモリ参照命令によるリクエストに付随して、その解読情報LDとそのベースレジスタ番号BRNを命令制御ユニット1101から受け取り、マスクレジスタ値MKを演算制御ユニット1103から受け取り、上記PRREQ、PRADRと伴に信号線106を介してプリフェッチユニット105へ送出する。ストア命令によるリクエストに付随しては命令制御ユニット1101からストア命令実行指令STを受取り、これを同様にプリフェッチユニット105に送出する。データの読み出し要求の場合には、読み出しデータはキャッシュメモリユニット3から信号線108を介してリクエストユニット1102に供給される。
【0058】
命令制御ユニット1101からプリフェッチレジスタPFRに対する参照命令を受け取った場合は、参照要求信号PFRREQを生成し、読み出し、書き込みのレジスタを指定するPFRRN、PFRWNを生成し、書き込みの場合は汎用レジスタGRを読み出してこれらを信号線106を介してプリフェッチユニット105に送出する。読み出したPFRの内容は信号線112によりプリフェッチユニット105より入力する。
【0059】
また、演算制御ユニット1103は、命令実行にあたり、割り込み要因を検出し、検出した場合INT信号を生成、信号線106を介してプリフェッチユニット105に通知する。さらに、リクエスト制御ユニット1102は、プリフェッチユニット105から信号線112を介してPDRWAIT信号を入力し、プリフェッチデータレジスタPDRからのデータが到着しない場合、この信号に従って以後のメモリリクエストPRREQの発行を保留するようになっている。
【0060】
<プリフェッチ対象とするデータ構造の例>
プリフェッチ制御を詳細に説明する前に、本実施例になるプリフェチ方式の適用対象となるデータ構造を説明する。本プリフェッチ方式の対象データ構造は図13に示す4種類である。同図には各構造データを参照するプログラム例を付記する。
【0061】
1)シーケンシャルベクトル
図13(1a)で示すデータ構造は長さlの要素N個がメモリ1上で連続的に並んだベクトルであり、先頭アドレスは&B(1)である。各要素はB(1)、B(2)、、、B(N)で表わされている。これに対する連続的な参照を行うプログラム例を同図(1b)にしめす。この場合、各ループにて参照する要素の間隔は要素長lに一致する。また非連続参照を行うプログラム例を同図(1c)に示す。この場合、参照間隔は5×lである。
【0062】
2)インデクス付きベクトル
本データ構造は同図(2a)で示す、2つのシーケンシャルベクトルL(i)(1≦i≦N)およびB(j)(1≦j≦M)からなる。それぞれの要素長、先頭アドレスはlL、&L(1)及び、lB、&B(1)である。インデクス付きベクトルでは第1レベル(以下インデクスベクトル、リストベクトルとも)L(i)の各要素は、第2レベル(以下ターゲットベクトル)B(j)の要素番号を差し示している。
【0063】
同図(2b)にインデクス付きベクトルを参照するプログラム例をしめす。この例ではインデクスベクトルに対する参照は連続する要素に対して順に行われる。ユーザのコードによっては、一つのインデクスベクトルが複数のターゲットベクトルの参照に用いられることがある。本実施例はこの場合でも適用可能である。
【0064】
3)単純リンクリストのアレイ
本データ構造は同図(3a)で示す様に、複数レベルのデータの集合からなる。最上位レベルは先頭アドレスa、要素長lLからなるシーケンシャルベクトルであり、その各要素b、b’、、、、、b”は第2レベルのデータの置かれるテーブルの先頭アドレスを保持する。第2レベル以下のデータは各レベルともテーブル中のデータであり、テーブルの先頭アドレスと先頭からの変位にて位置が指定される。本実施例では該変位は同一レベル内では全てのデータについて一定の場合を対象としているが、各データ毎にこれを可変とすることの拡張も可能である。最下位レベルを除き、第2レベル以下のデータは次のレベルのデータを格納するテーブルの先頭アドレスを示している。
【0065】
この図の例では最上位のベクトルの先頭要素bは第2レベルのデータcを含むデーブルCを示し、所定の変位jの位置にcが置かれている。cは第3レベルのデータdを含むテーブルDを示し、所定の変位kの位置にdが置かれている。dは最下位レベルのデータeを含むテーブルEを示し、所定の変位lの位置にeが置かれている。同図(3b)にこの単純リンクリストアレイを参照するプログラム例を掲げる。この例の他、本機能はC言語で記述が容易なstructのアレイの参照に適している。
【0066】
4)ツリーのアレイ
本データ構造は3)の単純リンクリストのアレイと極めて類似しており、同図(4a)で示す様に、複数レベルのデータの集合からなる。最上位レベルは先頭アドレスa、要素長lLからなるシーケンシャルベクトルであり、その各要素b、b’、、、、、b”は第2レベルのデータの置かれるテーブルの先頭アドレスを保持する。第2レベル以下のデータは各レベルともテーブル中のデータであり、テーブルの先頭アドレスと先頭からの変位にて位置が指定される。
【0067】
前に3)で述べた単純リンクリストのアレイとの違いは第2レベル以下のデータが、対応する1レベル上位のデータに対して複数存在する点である。これら複数のデータは同一のテーブル上におかれ、該テーブルの先頭からの変位が予め指定される。本実施例では該変位は同一レベル内では全てのデータについて一定の場合を対象としているが、各データ毎にこれを可変とすることの拡張も可能である。最下位レベルを除き、第2レベル以下のデータは次のレベルのデータを格納するテーブルの先頭アドレスを示している。
【0068】
この図の例では最上位のベクトルの先頭要素bは第2レベルのデータc及びdを含むデーブルCDを示し、所定の変位j及びkの位置にc及びdが置かれている。cは最下位レベルのデータeを含むテーブルEを示し、所定の変位lの位置にeが置かれている。dは最下位レベルのデータfを含むテーブルFを示し、所定の変位mの位置にfが置かれている。(4b)にこのツリーのアレイを参照するプログラム例を掲げる。
【0069】
<命令形式>
図17に本実施例で使用する命令の形式を示す。(a)は一般命令の形式であり、命令は基本部32ビット、拡張部16ビットからなる。基本部は米国ヒューレットパッカード社のPAーRISCアーキテクチャに準じる。同図(b)にメモリ参照命令の基本部形式を示す。opは命令コード、bはベースレジスタ番号、t/rはオペランドレジスタ番号、sは空間レジスタ指定、im14は14ビットの即値である。同図(c)は演算命令の基本部形式を示す。op1、op2は命令コード、r1、r2はオペランドレジスタ番号、tは結果を格納するレジスタ番号、c及びfは次命令の抑止条件を指定する。詳細は ”Precision Architecture and InstructionSet Reference Manual”,付録Cー1から5,Hewlett−Packard,1992 を参照されたい。
【0070】
同図(d)に拡張部の形式を示す。rm、tmは夫々読み出しマスク番号、書き込みマスク番号であり、いずれも図18で示すマスクレジスタMRを指定する。マスクレジスタは1ビットのレジスタ62本で構成される。マスクレジスタには演算命令の演算結果の条件値を格納する。すなわち演算命令の実行にあたり基本部のc及びfフィールドの指定に従いその演算結果の条件をtmで指定するマスクレジスタに格納する。また基本部で指定する命令はrmで指定したマスクレジスタの値が1ならば実行され、0ならば抑止される。マスクレジスタにより命令実行の有無を制御することを条件付き実行制御と言う。rmで番号0及び1を指定した場合、恒等的にマスク値0及び1が読みだされる。またtmで番号0もしくは1を指定した場合、マスクレジスタの内容は変わらない。
【0071】
プリフェッチ制御のための特殊命令の仕様を以下に記載する。以下では、[m]は読みだしマスクフィールドで、mで指定するマスクレジスタの内容に従い、この命令の実行を制御する。次のフィールドが命令種別を示し、さらにいくつかのオペランドフィールドが引き続く。命令種別とオペランドの意味は各命令毎に説明する。
【0072】
1)プリフェッチ状態レジスタ(PSR)の設定及び退避/回復命令
○Move GR to PSR; [m]MVRPSR, s1
本命令はs1が指定する汎用レジスタ(GR)の内容に従い、PSRの値を設定する。本命令はPSR の初期設定や割り込み等のコンテクストスイッチ時のPSRの回復に用いる。
【0073】
○Move to PSR Immediate; [m]MVPSRI, imm16
本命令は命令16ビット即値フィールドに従い、PSRを設定する。本命令はPSRの初期設定に用いる。
【0074】
○Move PSR to GR; [m]MVPSRR, t
本命令はPSRの内容をtで指定するGRに格納する。本命令はPSR の参照に用いる。
【0075】
2)プリフェッチ制御レジスタ(PCR)の設定及び退避/回復命令
○Move GR to PCR; [m]MVRPCR, s1, t
本命令はs1で指定するGRの内容に従い、tで指定するPCRの値を設定する。本命令はPCR の初期設定や割り込み等のコンテクストスイッチ時のPCRの回復に用いる。
【0076】
○Move PCR to GR; [m]MVPCRR, s1, t
本命令は、s1で指定するPCRの内容をtで指定するGRに格納する。本命令はPCR の参照や割り込み等のコンテクストスイッチ時のPCRの退避に用いる。
【0077】
4)制御命令
PSRやPCRの特定のフィールドのみ更新する命令として以下のものを使用する。
【0078】
○Set PCR ACT; [m]SPCRACT, imm8, t
本命令はtで指定するPCRのACTフラグ(図14)をimm8フィールドの値に従い更新する。
【0079】
○Set PSR SUSP; [m]SPSRSUSP, imm8
本命令はPSRのSUSPフラグ(図3)をimm8フィールドの値に従い更新する。
【0080】
○Innitialize PCR; [m]IPCR, all, t
本命令はtで指定するPCRのVLD及びACTフラグ(図14)をリセットする。但しallが1であれば全てのPCRを対象にリセットを行なう。
【0081】
○Innitialize PDR; [m]IPDR
本命令は全てのPDSRの全ての要素について、RCフィールドを0にリセットする。
【0082】
<プリフェッチユニット>
図2にはプリフェッチユニット105を構成する4つのユニットと、それらの間の、またそれらとプリフェッチユニット以外の装置構成要素との間でやりとりする主要な信号を示している。各信号の詳細な意味や生成の方法は各ユニット毎の説明図を用いて後で補足説明を行う。ここでは、各ユニットの概略構成とその動作を、図2で示した信号の内、主要なもののみ用いて説明する。
【0083】
201はプリフェッチ状態レジスタ(PSR)301とプリフェッチ制御レジスタ(PCR)302に対する読み書きの制御を行うプリフェッチ状態制御ユニットである。PSRとPCRを併せてプリフェッチ状態制御レジスタ(PFR)と呼ぶ。プリフェッチを動作させるにあたり、プロセッサ2によるプログラムの実行によりPFRに対象データ構造やプリフェッチ動作態様を指定するための情報設定を行う。
【0084】
プログラムによるPFRの設定にあたり、設定情報はプロセッサ2内の汎用レジスタ(GR)に予め格納しておく。次に前述するプリフェッチ制御命令にて指定するPFRに書き込みを行う。このとき、上記プリフェッチ制御命令の実行に伴い、信号線106を介してプロセッサ2からPFR書き込み指令PFRREQとPFR識別番号PFRWN及び、上記GRのデータを入力する。
【0085】
202はプリフェッチリクエストの発行並びにそれに伴うPCR及び後述のプリフェッチデータ状態レジスタPDSRの更新を行うプリフェッチリクエスト制御ユニットである。プリフェッチリクエスト制御ユニット202は信号線206を介してPSR及びPCRを、また信号線210を介してプリフェッチデータユニット203からPDSRを読み出し、16本のPCRのうちからリクエストの発行可能なものがあるかを検査し、あった場合は後述する所定の基準にて次にリクエストを発行するPCRを選択する。そして、信号線205を介してプリフェッチリクエストPFREQ及びPCR番号REQPCRN(以下この値をiとする)をプリフェッチ状態制御ユニット201に送出する。REQPCRNで指定したi番のプリフェッチ制御レジスタPCRiよりリクエストに付随するフィールドを読み出し、信号線206にてこれらを取り込む。以後、PCRの各フィールドには添え字iを付記して表わす。
【0086】
これらの中の主要なものはプリフェッチアドレスPFAiと読み出したデータのPDR内での格納位置を示すPDR先頭ポインタPDRTPiである。これらは、PFREQ、REQPCRN信号と伴に信号線107を介してキャッシュリクエストユニット101に送出する。また信号線209を介してプリフェッチデータユニット203のPDSRの状態をリクエスト発行済みと表示する。このためのPDSR位置はREQPCRNとPDRTPiにて指定し、また初期設定情報としてはPFAiの少なくとも一部と後述の参照回数NRiがある。
【0087】
次にPFREQの発行にともない、プリフェッチリクエスト制御ユニット202は上記PFAiとPDRTPi等のリクエスト発行に関わるPCRiのフィールドの更新値(以下、PCR及びPDSRの各フィールドの更新値にはフィールド名に’を付す)を生成し、信号線205を介してプリフェッチ状態制御ユニット201に送出する。このプリフェッチアドレスPFAiの更新値生成のため、PCRiから後述のアドレスモディファイアMODi等を読み出す。なお、以前受け付けたプリフェッチリクエストの処理が完了しないため現在リクエストが受け付けられない状態を示すビジー信号REQBSYをキャッシュリクエストユニット101より信号線120を介してプリフェッチリクエスト制御ユニットに送出する。
【0088】
プリフェッチデータユニット203にはプリフェッチしたデータを一時的に格納するための複数のプリフェッチデータレジスタ(PDR)704とその読み出し制御情報を格納するプリフェッチデータ状態レジスタ(PDSR)705を有する。キャッシュメモリ1001からプリフェッチデータを読み出した場合、信号線120を介してデータ送出指令CADV、格納PDR番号を示すCWPDRN、及びこのPDR番号を有するPDRにおける要素位置を示すCPDRIPを取り込み、これに従いキャッシュメモリ1001からのデータCDATAを格納する。
【0089】
メモリ1からプリフェッチデータを読み出した場合は、信号線121を介してデータ送出指令MADV、格納PDR番号を示すMWPDRN、及びこのPDR番号を有するPDRにおける要素位置を示すMPDRIPを取り込み、これに従いデータMDATAを格納する。また、このデータ格納に伴い、PDSRの状態をデータ到着済みと表示する。
【0090】
また、プロセッサ2での割り込み発生に伴い、プリフェッチ動作を中断するために、プリフェッチリクエスト処理の終了を認識するための状態信号PFBSYを信号線213を介してプリフェッチ状態制御ユニット201に送出する。
【0091】
204はプリフェッチデータレジスタPDRに一時的に格納されているデータをプロセッサ2に転送するための制御を行う、プリフェッチデータ読み出し制御ユニットである。プロセッサ2からは信号線106を介してメモリリクエストPRREQとメモリ参照命令解読情報LDを取り込む。このとき、同時にこの命令のオペランドアドレスを格納していたベースレジスタ番号BRNをキーとして、PDRとの対応をとるのが本実施例の特徴の一つである。
【0092】
すなわち、このベースレジスタ番号BRNに対応するPDRに対応するPCRには予め上記メモリ参照命令のベースレジスタ番号を命令識別子IIDフィールドに格納しておくので、これと上記BRNを比較をすることにより当該PDRが対応することを認識できる。このため全てのPCRのIIDフィールドの値を信号線208を介して取り込む。こうして識別したPDR番号をRPDRN信号(値をmとする)として信号線207を介してプリフェッチ状態制御ユニット201に送出し、指定したPCRmからPDRアウトポインタフィールドPDROPm(値をnとする)を読み出し、信号線208を介して取り込む。信号線212を介してPDR読み出し指令PDRREQ、読み出しPDR番号RPDRN、そして上記PDROPmをプリフェッチデータユニット203に送出し、m番目のPDRのn番要素からデータDATAm(n)を読みだし、信号線110を介してキャッシュデータユニット102に送出する。この時、上記PDR位置に格納されているデータの有効性の検査を行い、データが有効を表わすPDRHIT信号を信号線111を介してキャッシュメモリユニット3に、信号線110を介してキャッシュデータユニット102に、そして信号線107を介してキャッシュリクエストユニット101へそれぞれ送出する。これにより、キャッシュリクエストユニット101では上記メモリ参照命令によるメモリリクエスト動作を抑止する。
【0093】
また、もし、当該PDR位置にデータが未だ到着していない場合は、PDRWAIT信号を生成、これをキャッシュリクエストユニット101とプロセッサ2に対し送出する。キャッシュリクエストユニット101ではこれを受けて、上記メモリ参照命令によるキャッシュ参照要求を保持する。PDRWAIT信号は当該プリフェッチデータの到着まで保持し、到着時点で解除する。このとき、データの有効性を検査しその結果により、上記と同様PDRHITの生成を行う。PDRのデータが無効であった場合、PDRHITが成立せず、従って当該メモリ参照命令のメモリリクエスト動作は抑止せずに処理することになる。これによりキャッシュもしくはメモリ1から最新のデータを読み出すことができる。これによりプリフェッチデータのストア命令による書き換えに起因するデータの無効化に関する問題点を解決することができる。なお、PDRWAITを受けたプロセッサ2では、これがオンの間は引き続くメモリリクエストを保留するものとする。上記PDRHIT及びPDRWAITの生成のために信号線211を介して後述のPDSRの各フィールドRC、RI、DA、及びDIを読み出し、プリフェッチデータ読み出し制御回路204に入力する。
【0094】
ストア命令の実行時には信号線106を介してメモリリクエストPRREQ、ストア命令実行指令ST、及びオペランドアドレスPRADRをプリフェッチデータユニット203に取り込む。この時、各PDSRの各対応PDR要素毎に保持しているプリフェッチアドレスの少なくとも一部と比較を行い、一致した場合には、書換の可能性ありとして、当該PDR要素に読み出したデータの無効を表示する。
【0095】
以下ではプリフェッチユニット105を構成する各ユニットのより詳細な構成を説明する。
【0096】
(プリフェッチ状態制御ユニット201)
図3はプリフェッチ状態制御ユニット201の詳細を示す。
301はプリフェッチ状態レジスタ(PSR)であり、プリフェッチリクエストの発行停止状態を表示するSUSP、仕掛り中のプリフェッチリクエストの有無を表示するプリフェッチリクエストビジーフラグPFBSY、及びPDRの深さを表示するPDRDPTを保持する。PSR301に対する書き込みはPFRREQ信号がオンで、PFRWNがPSRを指定していたときに行い、このとき、プロセッサ2から送るGRの内容を書き込む。ただし、PFBSYフラグへの書き込みは行わない。プロセッサ2から割り込み発生を通知するINT信号を入力し、これに応答してSUSPフラグをセットする。プリフェッチデータユニット203から信号線213を介してPFBSY信号を入力しこれをPFBSYフラグに表示する。
【0097】
プロセッサ2によるPSR読み出しは、プログラムにて読み出しアドレスPFRRNとPSRとを指定し、セレクタ318によりその内容を選択することにより行う。PFRRNは信号線319にてセレクタ318に供給する。セレクタ318の出力は信号線112によりプロセッサ2に送出する。また、PSRの内容は信号線206を介して、プリフェッチリクエスト制御ユニット202へ送出する。
【0098】
PSRの各フィールドの意味は以下の通りである。
○中断フラグ;SUSP
SUSPは本実施例になるプリフェッチ機構がリクエスト停止状態であることを表示する。SUSPがオンのとき、プリフェッチ機構はリクエスト停止状態であり、プリフェッチ制御レジスタPCRの中にアクティブなものがあってもプリフェッチリクエストの発行は行なわない。SUSPがオフの時、プリフェッチリクエストの発行が可能である。プロセッサ2にて例えば記憶保護例外による割り込みが発生すると、信号線106を介してINT信号がこれを通知し、PSRのSUSPフラグをセットする。SUSPはプログラムにより設定することができる。
【0099】
○プリフェッチリクエストビジーフラグ;PFBSY
PFBSYはデータ読み出しの完了していないプリフェッチリクエストが存在することを表示する。割り込み発生時にはSUSPをオンとしてリクエストの発行を停止し、このPFBSYフラグがオフとなったことでプリフェッチ機構が中断状態であることを認識するのに使用される。
【0100】
○PDR深さ;PDRDPT
PDRDPTは16本あるPDRの各々の要素数を表わす。従って、装置全体では16×PDRDPT個の8バイト幅のレジスタ要素がプリフェッチデータの一時的格納のために用意する。
【0101】
上記SUSP、及びPFBSYの各フラグについては後述の割り込み処理において詳細に説明する。
【0102】
302はプリフェッチ制御情報を格納する16本のプリフェッチ制御レジスタPCR0〜15である。混乱のない場合、一本のプリフェッチ制御レジスタもしくは全プリフェッチ制御レジスタを単にPCRと記す。PCRはプリフェッチの対象となるデータの位置や構造を記述する情報、プリフェッチしたデータを要求する命令の識別情報、データの読み出しリクエスト制御に関する情報、PDRに保持したデータを読み出すための制御情報等からなる。
【0103】
図3において、303、305、及び307はPCRへの書き込み回路であり、順にPFRREQ、PDRREQ、及びPFREQの指令に従い、PFRWN、RPDRN、及びREQPCRNで示す番号のPCRに対して、GR、PDROPm’、及び(PDRTPi’、PDRQPi’、PFAi’、SKIPCNTi’)を、信号線304、306、及び308を介して書き込む。
【0104】
315は各PCR毎のBALフィールドの更新制御回路である。315の各々には信号線316により対応PCRのBALフィールドを、信号線308によりPFREQ発行に伴うBALインクリメント指令を、また信号線306によりPDRREQ発行に伴うBALデクリメント指令を入力する。インクリメント指令に対してはBALを1加算、デクリメント指令に対しては1減算、同時に指令を受けたときはそのままとした更新値を生成し、信号線317を介してBALにセットする。これにより、BALはリクエストを発行したものの、プロセッサ2への読み出しを行っていないPDRの要素数が表示される。
【0105】
309、311、及び313はPCRの読み出し回路であり、順に信号線310、312、及び314にてPCRの内容を入力し、PFRRN、RPDRN、及びREQPCRNで示す番号のPCRを選択し、倍語単位のPCRの内容、(PDROPm、MOEm、RDCm)、及び(ORGi、LLi、PDRTPi、PDRQPi、LPCRi、NRi、PFAi、MODi、DLi、BUFi、SKIPi、SKIPPi、SKIPCNTi、SKIPGAPi)を信号線320、208、及び206に出力する。 また、全PCRのVLD及びIIDフィールドを信号線208に、同じく全てのVLD、ACT、LA、LAC、BAL、及びORGフィールドを信号線206に出力する。
【0106】
一本のPCRは、図14で示すように4つの倍語で構成する。割り込み等に伴うコンテクストスイッチにおいては関連するPCRの退避回復をプログラムにより行うことが必要である。各フィールドは機能別にグループ分けし、それぞれ倍語に割り当てていること、またプログラムによる参照は倍語単位で実行することから、不要な機能に関するグループは退避回復の対象からはずすことが可能である。これにより、割り込み処理や、初期設定に伴うプログラム実行ステップ数の削減に効果がある。
【0107】
GRとPCRの間の情報の移動は前述の専用の移動命令にて行う。なお、PCRの参照は、上記GRを介した倍語単位以外に、特定のフィールドに対する個別の参照も可能である。これらについては通常の技術にて容易に実現することができるので、特にそのための詳細な構成を示さない。
【0108】
以下ではPCRの各フィールドにつきその意味を説明する。
1)第1グループ:基本プリフェッチ制御情報
○有効フラグ;VLD
VLDは当該PCRが現コンテクストにて有効であることを表示する。
【0109】
○アクティブフラグ;ACT
ACTは当該PCRがアクティブ状態にあることを表示する。PCRがアクティブの時、指定されたデータに対するプリフェッチ動作を行なう。
【0110】
○オリジンフラグ;ORG
ORGは当該PCRがシーケンシャルベクトルを指定、もしくはインデックス付きベクトル及びリンクリストのプリフェッチにおけるPCRリンクの最初のPCRを指定することを表示する。ORGがオンであるPCRをオリジンPCR、それ以外をリンクPCRと呼ぶことがある。
【0111】
○プリフェッチデータ長;DL
DLはプリフェッチの対象となるメモリ参照命令のオペランド長を指定する。但し、オペランド長を2の巾乗で表わしたときの指数とする。
【0112】
○プリフェッチバッファ指定;BUF
BUFはプリフェッチしたデータの保持場所、すなわちプリフェッチバッファを指定する。BUFがオフの時プリフェッチバッファとしてはPDRのみ、オンの時はPDRとキャッシュの両方にデータを格納する。すなわち、BUFがオフのときはキャッシュミスにおいてメモリ1には単一データの要求をし、オンの時はライン転送を要求する。
【0113】
○命令識別子;IID
IIDは当該プリフェッチの対象となるメモリ参照命令の識別に用いる。識別にはメモリ参照命令のベースアドレスレジスタ番号を用いる。本フィールドはメモリ参照命令の実行に当たりそのベースアドレスレジスタ番号と比較し、一致していればプリフェッチデータレジスタよりデータを当該メモリ参照命令に転送する。
【0114】
○先読み制御指定;LA
LAは先読み制御機能を有効化する。先読み制御機能が有効のとき、下記先読みカウントLACは対応するメモリ参照命令に対し、何実行回まで先読みを許可するかを指定する。
【0115】
○先読みカウント;LAC
LACは対応するメモリ参照命令に対し、何実行回まで先読みを許可するかの最大値を指定する。
【0116】
○アドレススキップ指定;SKIP
SKIPはアドレススキップ機能を有効化する。アドレススキップ機能が有効の時、下記のスキップカウントSKIPCNTで指定した個数のデータプリフェッチリクエスト毎に、下記スキップギャップSKIPGAPで指定した長さ分だけプリフェッチアドレスを更新する。
【0117】
○PDR先頭ポインタ;PDRTP
PDRTPはPDRの中で最新のリクエストによるデータを保持する要素の位置を表示する。
【0118】
○処理中リクエストカウント;BAL
BALはデータ転送の行なわれていない処理中のリクエスト数を表示する。
【0119】
○参照数;NR
NRは当該PCRの指定に基づき読みだされた同一のデータを何回参照するかを示す。ここで言う参照としては対応メモリ参照命令によるオペランドとしてのデータ読み出しと子PCRで指定したデータフェッチ動作に必要なアドレスもしくはモディファイア(これらを伴にリンクデータと呼ぶことにする)としての参照を含む。NRはデータ構造により決まる数であるが、本実施例では最大16まで指定可能とする。PDRに格納した個々のデータはNRで指定した回数の参照の後使用完了とみなされる。後述のPDSRのRCフィールドを参照のこと。
【0120】
○マスクオーバライド指定;MOE
MOEはメモリ参照命令の実行に伴うPDRからのデータ読みだし要求が該メモリ参照命令の実行条件を示すマスクレジスタの値に依存するか否かを指定する。ループ内にIF文があり、該メモリ参照がIFの成立条件に依存して実行される場合はMOEをオンとすることでマスク値が0の時のPDRの空読みを行なう。
【0121】
○PDRアウトポインタ;PDROP
PDROPは対応メモリ参照命令が実行されたときに転送すべきデータの保持しているPDR中の要素位置を示す。
【0122】
○リダイレクションデータカウント;RDC
RDCはPDRに保持されている有効データのうち後述のプリフェッチバッファリダイレクション機能によりリダイレクトすべき要素数を表示する。これは追って、割り込み処理にて詳細に説明する。
【0123】
2)第2グループ:オプション情報
○プリフェッチアドレス;PFA
PFAはプリフェッチのためのメモリアドレスとなり、オリジンPCRの場合(シーケンシャルベクトルの場合)、リクエストの発行と共に次のアドレスに更新する。従って、次のプリフェッチリクエスト発行時にはPFAフィールドから読み出した値をそのままプリフェッチアドレスとする。リンクPCRの場合は所定の方法にてアドレスを生成しPFAフィールドに格納したものをプリフェッチアドレスとする。
【0124】
3)第3グループ:オプション情報
○アドレスモディファイア;MOD
MODは64bのアドレスモディファイアである。シーケンシャルベクトルの場合はデータの要素間隔を指定する。インデックス付ベクトルの場合はターゲットベクトルの先頭アドレス、リンクリストの場合はリンクテーブルのアドレスからの変位を指定する。詳細は図15を用いて追って説明する。
【0125】
4)第4グループ:オプション情報
○リンクリストプリフェッチ指定;LL
LLは当該PCRがリンクリストのプリフェッチを指定する子PCRであることを示す。この時親PCRにより読みだされたリンクデータを当該PCRのアドレスモディファイアに加算することでメモリアドレスを生成し、これをPFAに保持する。
【0126】
○リンクPCR番号;LPCR
LPCRはインデクス付きベクトルとリンクリストのプリフェッチにおける親PCRの番号を示す。一般的に複数の子PCRが共通のPCRを親として指定することが可能である。これにより、例えば2種のターゲットベクトルを共通のインデクスベクトルで参照する場合に、2種目のターゲットベクトルのアドレス生成のためのインデクス参照をメモリ1からではなく1種目のためにインデクスを格納したGRから読みだすようプログラムされている場合でも本プリフェチを適用可能となる。これは本実施例の1つの特徴である。
【0127】
○PDRリクエストポインタ;PDRQP
PDRQPはインデクス付きベクトルもしくはリンクリストのプリフェッチにおけるアドレス生成のためのインデクスもしくはテーブルアドレスを参照するべきデータの保持されている親PDR中の要素位置を示す。
【0128】
○スキップ間隔;SKIPP
SKIPPは後述のアドレススキップを行なうリクエスト間隔を示す。
【0129】
○スキップギャップ;SKIPGAP
SKIPGAPはアドレススキップ時のアドレス増分値を示す。アドレススキップを行なうとき、SKIPGAPをPFAに加算したものを次のアドレスとする。
【0130】
○スキップカウント;SKIPCNT
SKIPCNTは最近行なわれたアドレススキップ以後の発行リクエスト数を表示する。
【0131】
次に、PCRとそれによるデータ構造の指定例を図15に示す。但し、説明に関係のないフィールドは図示していない。インデクス付きベクトルのプリフェッチの為には2つのPCRを、単純なリンクリストのプリフェッチにはそのレベルの数分のPCRを用いる。(1)ではPCR1がベクトルB(i)のプリフェッチ方法を指定している。PFAが先頭アドレスを指定し、アドレスモディファイアMODが参照の間隔を指定する。(2)はPCR1及びPCR2にてインデクス付きベクトルのプリフェッチ方法を指定している。PCR1はインデクスベクトル、PCR2はターゲットベクトルに対応し、特にPCR2のLPCRフィールドは親PCRがPCR1であることを示している。(3)はPCR1〜PCR3により3レベルのリンクリストのプリフェッチ方法を指定している。PCR2及びPCR3で指定するMODはテーブルC及びDの先頭から目的のデータc及びdまでの変位を示している。
【0132】
(プリフェッチリクエスト制御ユニット202)
図4はプリフェッチリクエスト制御ユニット202の詳細を示す。401はPCR0〜15に対応して16組設けられた、各々のPCRがプリフェッチリクエストを発行可能なレディ状態か否かを判定するPCRレディ判定回路0〜15である。PCRレディ判定回路kには信号線206を介してプリフェッチ状態レジスタPSRの内容SUSP、PDRDPTを入力し、プリフェッチ制御レジスタPCRkからVLDk、ACTk、LAk、BALk、LACk、ORGk、LPCRk、及びPDRQPkを入力し、プリフェッチデータユニット203から信号線210を介して全てのPDSRのRC及びDAフィールドを入力し、キャッシュリクエストユニット101からは信号線120を介してREQBSYを入力する。
【0133】
402はセレクタであり、全てのPDSRのRC及びDAフィールドについて、LPCRkが示す番号(値をxとする)のPDRに対応したPDSRxであって、かつPDRQPkが示す番号(値をyとする)の要素に対応した状態フラグRCx(y)及びDAx(y)を選択し、信号線412を介して回路403に出力する。この状態フラグDAx(y)はPCRkがリンクPCRの場合に、PCRkがプリフェッチアドレスを生成するために必要なリンクデータが親PCRに付随するPDRxに読み出されているか否かを表示する。なおDAx(y)は未参照カウントRCx(y)が非0のときにその表示が有効である。
【0134】
403はPCRkがレディ状態かを判定し、結果のRDYk信号を出力するレディ判定回路である。ここで、&は論理積、#は論理和、^は論理否定、そして<は不等号を示す。RDYkが成立する条件は図の回路403を示すブロック内に示した通りであるが、この条件の意味するところは、
(1)プリフェッチ機構がリクエスト停止状態ではなく(SUSPがオフ)、
(2)キャッシュリクエストユニット101がプリフェッチリクエストを受け付けることが可能であり(REQBSYがオフ)、
(3)当該PCRは有効(VLDがオン)でアクティブ状態(ACTがオン)であり、
(4)先読み制御が指定されている場合(LAがオン)は処理中リクエスト数(BAL)が先読みカウント(LAC)に達しておらず、また指定されていない場合(LAがオフ)はBALがPDRの深さ(PDRDPT)に達しておらず、
(6)当該PCRがオリジンPCR(ORGがオン)であるか、もしくはそうでない場合(ORGがオフ)には当該PCRがプリフェッチアドレスを生成するために必要なリンクデータがPDRに読み出されている(DAx(y)がオン)ことである。
【0135】
各PCRに対応したレディ信号RDY0−15はプリフェッチリクエスト発行回路404に送出し、この中から次にリクエストを発行するPCRを選択する。405はリクエストPCR番号保持回路であり、最後にリクエストを発行したPCR番号を保持し、それを信号線406を介して404に通知する。プリフェッチリクエスト発行回路404は最後にリクエストを発行したPCRの次のPCRから順にそのレディ状態をチェックし、最初に見つかったレディ状態のPCRを次にリクエストを発行するものと決定し、その番号をリクエストPCR番号REQPCRNとして出力する。RDY信号のチェックはPCR番号の小さい順に行い、15番の次は0番を続ける。またレディ状態にあるPCRが存在したときはプリフェッチリクエストPFREQを発行する。PFREQに応答して信号線407を介してREQPCRNをリクエストPCR番号保持回路405に送出し、その内容を置き換える。
【0136】
上記のようなリクエスト制御を行なうため、プログラムはループ内のプリフェッチ対象のメモリ参照命令をその記述順序に従ってPCRに割り振るのが簡単で効率よい。
【0137】
PFREQ及びREQPCRN(値をiとする)は信号線205を介してプリフェッチ状態制御ユニット201へ送出し、これで指定されるPCRiの内容を読みだし信号線206を介してプリフェッチリクエスト制御ユニット202に取り込む。
【0138】
408はポインタ更新制御回路であり、PFREQに応答してPDRTPiとPDRQPiの更新を制御する。このため信号線206を介して現在のPDRTPiとPDRQPiの値を取り込み、これらにPDRDPTを法として1を加算した値を更新値として出力し、信号線205を介してプリフェッチ状態制御ユニット201に送出する。これらの値はPFREQに応答してPCRiの当該フィールドに書き込む。
【0139】
409はプリフェッチアドレス制御回路であり、プリフェッチアドレスの更新値PFAi’とアドレススキップカウントの更新値SKIPCNTi’を信号線205を介してプリフェッチ状態制御ユニット201に送出する。
【0140】
410はPFREQの発行にともない必要となるPDSRの初期化もしくは更新の制御を行う、PDSR更新制御回路である。410はプリフェッチリクエスト発行時に、データを格納するPDRi(j)に付随するPDSRi(j)の状態フラグを初期設定するための情報を信号線209を介してプリフェッチデータユニット203に送出する。これらの信号はPFREQ、REQPCRN、PDRTPi、NRi、PFAi、及びDIi(j)の初期設定値である。また、410は当該プリフェッチリクエストがリンクPCRによる場合、リンクデータを格納するPDRの状態フラグRCを更新するための情報も同時に送出する。
【0141】
プリフェッチリクエスト制御ユニット202から信号線107を介して、プリフェッチリクエストPFREQとその付随情報をキャッシュリクエストユニット101へ送出する。付随情報としては、データを格納するPDR番号REQPCRNとその要素位置PDRTPi、プリフェチアドレスPFAi、及びBUFiである。
【0142】
図5を用いてプリフェッチアドレス制御回路409をより詳細に説明する。
【0143】
501はアドレス加算器であり、入力データの加算結果をプリフェッチアドレスの更新値PFAi’として信号線205を介してプリフェッチ状態制御ユニット201に送出する。入力データはセレクタ502及び503から信号線512及び513を介して供給する。
【0144】
セレクタ502はPFAi、インデクスX、及びリンクデータDATAp(q)の中から制御線SELX及びSELLに従い一つを選択する。リンクデータDATAp(q)はプリフェッチデータユニット203から信号線210を介して入力する。504はシフタであり、DATAp(q)が入力され、プリフェッチ長DLiで指定するビット数分上位ビット方向にシフトした結果をインデクスXとして出力する。505はセレクタ502の制御信号生成回路であり、プリフェッチ状態制御ユニット201よりORGiとLLiが入力され、SELXとSELLを生成する。SELXはインデクスXの選択指令であり、インデクス付ベクトルにおけるターゲットベクトルのプリフェッチ時にオンとする。また、SELLはリンクデータDATAp(q)の選択指令であり、リンクリストにおける第2レベル以下のデータのプリフェッチ時にオンとする。
【0145】
セレクタ503はMODiとSKIPGAPiのいずれかを制御線SELSKIPに従い選択する。SELSKIPはアドレススキップが指定されたとき(SKIPiがオン)にSKIPCNTiがSKIPPiに達したときにオンとする。このため、比較器506はSKIPCNTiとSKIPPiを比較し、結果を信号線507を介して論理積回路509に送出する。509はこの比較結果が一致を示し、SKIPiがオンの時出力のSELSKIPをオンとする。508はSKIPCNTiにSKIPPiを法として1を加えるインクリメンタであり、SKIPCNTiの更新値をプリフェッチ状態制御ユニット201に送出する。この更新値をPFREQに応答してPCRiに取り込む。
【0146】
以上の制御により、プリフェッチリクエストにともなうプリフェッチアドレスPFAiの更新値を生成し、これをPFREQに応答してPCRiに取り込むことが出来る。
【0147】
図6を用いてPDSR更新制御回路を詳細に説明する。発行するPFREQがオリジンPCRによる場合(ORGiがオン)、PDSRi(j)に付随した状態情報RC、RI、DA、DI、MDKEYを初期設定する。すなわち、RCi(j)には参照数NRiを設定し、RIi(j)、DAi(j)、DIi(j)には各々1、0、0を設定する。また、MDKEYi(j)には本実施例ではPFAiの下位16ビットを設定する。このため、信号線411を介してプリフェッチリクエスト発行回路404よりPFREQ及びREQPCRNをとりこみ、また信号線206を介してプリフェッチ状態制御ユニット201よりPDRTPi、NRi、PFAiを取り込み、これらを信号線209を介してそのままプリフェッチデータユニット203へ送出する。
【0148】
発行するPFREQがリンクPCRによる場合(ORGiがオフ)、リンクデータの格納されるPDSRに付随した状態情報RCを更新(1減算)する必要がある。このため、信号線206を介してORGiを取り込み、601によりRCの更新指令DECRC信号を生成し、信号線209に出力する。さらに信号線206を介して上記PDSRの番号LPCRi(=pとする)、及び要素位置PDRQPi(=qとする)を読み出し、これらをプリフェッチデータユニット203へ送出する。
【0149】
セレクタ602は全てのPDSRのDIフィールドからLPCRiが示す番号の内容DIpを選択しをセレクタ603に供給する。603はこの中からPDRQPiが示す要素の内容DIp(q)を選択し、これを無効フラグ生成回路605に供給する。無効フラグ生成回路605はリンクPCRにおけるPFREQ発行時のDIi(j)の初期設定値を生成する。605の生成する条件の意味するところは、リンクリクエストの発行にあたり、アドレスの生成に必要なPDRデータが無効(DIp(q)がオン)の場合は、生成したアドレスやそれを用いて読み出したデータも無効の可能性があるため、当該PDSRのDIフラグをオン(無効)と設定する必要があるということである。この初期設定値はPFREQとともにプリフェッチデータユニットに送出し、DIi(j)にセットする。
【0150】
(プリフェッチデータユニット203)
図7を用いてプリフェッチデータユニット203をより詳細に説明する。プリフェッチデータユニットにはPCR0〜15に対応した16組のプリフェッチデータ回路701を設ける。各プリフェッチデータ回路には各々8バイトのデータを格納する複数のデータレジスタ要素からなるプリフェッチデータレジスタ(PDR)704を設ける。一つのPDRを構成するデータレジスタ要素の本数はPSRのPDRDPTフィールドで表示する。16本のプリフェッチデータレジスタ全体をPDRと記すこともある。キャッシュメモリ1001より読み出したデータCDATAは信号線108を介してPDRに格納する。このためのデータ送出指令CADV及び、PDR番号CWPDRN、及び格納要素位置CPDRIPはキャッシュリクエストユニット101から信号線120を介して供給する。メモリ1より読み出したデータMDATAは信号線109を介してPDRに格納する。このためのデータ送出指令MADV及び、PDR番号MWPDRN、及び格納要素位置MPDRIPはメモリリクエストユニット103から信号線121を介して供給する。
【0151】
プロセッサ2での命令実行に伴うPDR読み出しのために、プリフェッチデータ読み出し制御ユニット204よりPDRREQ、RPDRN、PDROPmを供給する。各PDRでは各要素を信号線709にてセレクタ710に供給し、これを上記PDROPm(=nとする)にて選択、結果を信号線712によりセレクタ713に供給する。713は上記RPDRN(=mとする)により所望のPDRからのデータを選択する。この出力DATAm(n)を信号線110によりキャッシュデータユニット102に送出する。
【0152】
リンクPCRにおけるプリフェッチリクエスト発行に伴いリンクデータをPDRより読み出すために、プリフェッチリクエスト制御ユニット202より信号線209を介しLPCRi、PDRQPiを供給する。各PDRでは各要素を信号線709にてセレクタ711に供給し、これを上記PDRQPi(=q)にて選択、結果を信号線714によりセレクタ715に供給する。715は上記LPCRi(=p)により所望のPDRからのデータを選択する。この出力DATAp(q)を信号線210によりプリフェッチリクエスト制御ユニット202に送出する。
【0153】
705はPDRを構成する各要素に対応した状態情報を保持するプリフェッチデータ状態レジスタPDSRである。PDSRの各状態情報の意味とその初期設定及び更新制御を以下に説明する。
【0154】
○未参照回数;RC
RCはPDR中の当該要素に対し行なわれるべき参照回数NRのうち、未だ行なわれていない参照回数を表示する。RCが0となった要素は使用済みであり、次の読みだしデータ格納のために使用可能となる。RCはPCRiを用いた当該要素に対するプリフェッチリクエストPFREQを発行した時点で、PCRi中の参照数NRiフィールドの値を初期設定する。このためPDSR705の本フィールドにはPFREQ、REQPCRN、PDRTPi、NRiを入力する。また、プロセッサ2へのデータ転送、リンクリクエストの発行による参照の度にデクリメントしていく。リンクリクエストの発行時の更新のためにDECRC、LPCRi、PDRQPiを、またプロセッサ2への転送時の更新ためにPDRREQ、RPDRN、PDROPmを入力する。
【0155】
以下に述べるRI、DA、DI、及びMDKEYの各フラグはRCが非0の時にのみ表示が有効である。
【0156】
○リクエスト発行済みフラグ;RI
RIは当該要素にデータを格納するプリフェッチリクエストが既に発行されていて、しかもまだデータが到着していないことを表示する。本フラグはPFREQ発行時にオンとし、データが到着したときにオフとする。このためPDSR705の本フラグには、リクエスト発行時のためにPFREQ、REQPCRN、PDRTPi、上記CDATAが到着したときのためにCADV、CWPDRN、CPDRIP、上記MDATAが到着したときのためにMADV、MWPDRN、MPDRIPをそれぞれ入力する。各フラグのオン、オフ回路は容易に構成可能なので説明を省略する。以下のフラグ、フィールドにつても同様である。
【0157】
○データ到着済みフラグ;DA
DAは当該データが既に到着して保持されていることを表示する。本フラグはPFREQ発行時にオフとし、データ到着時にオンとする。このためPDSR705の本フラグには、リクエスト発行時のためにPFREQ、REQPCRN、PDRTPi、上記CDATAが到着したときのためにCADV、CWPDRN、CPDRIP、上記MDATAが到着したときのためにMADV、MWPDRN、MPDRIPをそれぞれ入力する。
【0158】
○データ無効フラグ;DI
DIは当該PDR要素に読み出され保持されたデータが有効か否かを表示する。PDRの各要素に保持されているデータは、対応メモリアドレスのデータが書き換えられたもしくはメモリ参照命令実行までに書き換えられる可能性がある時無効と見做す。また該データ参照においてアクセス例外が検出されたときも無効とする。
【0159】
本フラグのPFREQ発行時の初期設定は、当該PCRがオリジンPCRかリンクPCRかにより異なる。オリジンPCRの場合、本フラグは0に初期設定する。リンクPCRの場合、リンクデータのデータ無効フラグDIp(q)を初期設定する。これは、リンクデータが無効の時は生成するアドレスも無効の可能性があるため、それによるデータも無効と見なすべきだからである。このため、上記図6での説明の通り、PFREQに付随した本フラグの初期設定値DIi(j)’はPDSR更新制御回路410にて生成し、信号線209を介してPDSRに取り込む。更新時期とPDSR番号、要素位置の指定のため、PFREQ、REQPCRN、PDRTPiを入力する。
【0160】
キャッシュリクエストユニット101にてアクセス例外が検出されると信号線120を介してCADV信号に付随してアクセス例外EXPを送出し、本フラグをセットする。更新時期とPDSR番号、要素位置の指定のため、CADV、CWPDRN、CPDRIPを入力する。
【0161】
また、下記MDKEYで説明するように、プロセッサ2にて実行したストア命令によりプリフェッチデータを書き換えた可能性があるときは本フラグをセットする。
【0162】
プリフェッチデータを必要とするメモリ参照命令が実行された時に、PDR中のデータが無効であった場合、該データは無視し、メモリ参照命令によるメモリリクエストを活かして通常どおりにキャッシュもしくはメモリ1よりデータを読みだす。この動作を本明細書においてはプリフェッチバッファリダイレクションPBRと呼ぶが、追って詳細に説明する。
【0163】
○書き換え検出キー;MDKEY
MDKEYはプリフェッチしたデータアドレスに対する書き換えの有無を検出するキーである。MDKEYはPFREQ発行時にプリフェッチアドレスもしくはその一部をセットする。このために本フィールドにはPFREQ、REQPCRN、PDRTPi、及びPFAiを入力する。
【0164】
706は上記書き換えの検出を行なうための比較回路であり、PDR要素ごとに設ける。上記比較回路ではプロセッサ2から信号線106を介して送るストア命令実行指令ST信号に応答してそのオペランドアドレスPRADRと、信号線707により供給するMDKEYの値を比較する。比較の結果一致したら該PDRデータが無効であると見做し、信号線708を介して該要素のDIフラグをオン(無効状態)とする。MDKEYがプリフェッチアドレスの一部である実施態様の場合はアドレスの対応する部分のみ比較する。この時実際にはアドレスが一致しない場合でも比較が成立することがあるが、この場合はPBR動作によりメモリ参照命令がデータを読み出すのでプログラムの正しい動作を保証する上では問題ない。
【0165】
717は全てのRIフラグの論理和をとる回路であり、出力PFBSYを信号線213を介してプリフェッチ状態制御ユニット201へ送出する。PFBSYはリクエストを発行したがデータが到着していないものが存在することを示しており、割り込み発生時にプリフェッチ動作が中断状態となることの確認のためにプログラムが参照する。
【0166】
全てのPDSRについてのRC、DA及びDIフラグを信号線210を介してプリフェッチリクエスト制御ユニット202へ、またRC、RI、DA、及びDIを信号線211を介してプリフェッチデータ読み出し制御ユニット204へ送出する。
【0167】
図12にPDRの各要素に関し、上記4種の状態フラグRC、RI、DA、DIにより表示する状態遷移図を示す。
【0168】
図8は、PDRからのデータ読み出しと、読み出したデータのプロセッサ2への転送等を制御するプリフェッチデータ読み出し制御ユニット204である。
【0169】
プロセッサ2からは信号線106を介してメモリ参照命令実行にともなうメモリリクエストPRREQ、メモリ参照命令解読情報LD、メモリ参照命令のベースレジスタ番号BRN、そしてメモリ参照命令の実行条件を示すマスクレジスタ値MKを取り込む。ここで、MKがオフの場合、プログラムから見て当該命令は無効化されねばならないが、装置内部ではあたかもMKがオンであるかのように処理し、結果の書き込みのみ抑止するものとする。従って、MKの値に関わらずPRREQを始めこの命令に関する情報を取り込むことができる。809はこれら取り込んだ情報を格納するレジスタである。プリフェッチデータが到着するまえに当該データを要求するPRREQが発行された場合、データの到着までこれらの情報をレジスタ809に保持するため、後述のPDRWAIT信号を保持条件として入力する。
【0170】
801はPCRに対応した16組の比較器であり、各々のIIDフィールドとレジスタ809からのBRNを比較し、結果を信号線802を介してエンコーダ803と論理和回路810に供給する。なお、比較は有効なPCR(VLDがオン)に関してのみ行い、無効なPCRに関する比較結果は0を保証するよう構成する。
【0171】
エンコーダ803は上記比較により一致を見たPCRの番号を符号化し、RPDRN信号として出力する。
【0172】
論理和回路810の出力は、当該メモリ参照命令に対応する有効なPCRが存在することを示すMATCH信号である。
【0173】
セレクタ804は信号線211によりプリフェッチデータユニット203より全てのPDSRのRC、RI、DA、及びDIフィールドが入力され、各々のフィールド毎にRPDRN信号により指定するPDSRに対応する内容を選択する。その出力RCm、RIm、DAm、及びDImをセレクタ805に入力し、各々のフィールド毎に信号線208のPDROPm信号により指定するPDSRmの要素に対応する内容を選択する。
【0174】
インクリメンタ808はPDROPmが入力されPDROPmをPDRDPTを法として1加算し、更新値PDROPm’として出力する。
【0175】
デクリメンタ811は信号線208のRDCm信号が入力され、1減算した更新値RDCm’を出力する。但し、RDCmがすでに0であった場合は0のままとする。
【0176】
PDR読み出しリクエスト制御回路806にはレジスタ809よりPRREQ、LD、及びMK、論理和回路810よりMATCH、セレクタ805よりRCm(n)、RIm(n)、DAm(n)、及びDIm(n)、そして、信号線208よりマスクオーバライド指定MOEmを入力する。806はPDR読み出しリクエストPDRREQ、PDRヒット信号PDRHIT及びPDR読み出し待機信号PDRWAITを生成する。
【0177】
各信号の生成条件は図に示した通りであるが、その意味について若干の説明をする。PDRREQの生成条件は3つに分けて考える。
【0178】
(1)第1条件
プロセッサ2からメモリ参照命令によるメモリリクエストが発行されたこと(PRREQ & LDが成立)。この場合、上記メモリ参照命令はその実行が許可されている(マスクMKがオン)か、マスクの指定を無視して良い指定(MOEmがオン)かのいずれかでなければならない。
【0179】
(2)第2条件
当該メモリ参照命令のデータをプリフェッチする有効なPCRが指定されていること(MATCHがオン)。
【0180】
(3)第3条件
PDRm(n)にデータが既に読み出されている((RCm(n)≠0) &DAm(n)が成立)もしくは、プリフェッチバッファリダイレクション実施のためデータの読み出しが不要であること(RDCm≠0)。
【0181】
PDRHITの生成条件はPDRREQの第3の条件が次のように異なるのみである。すなわち、PDRm(n)に有効なデータが既に読み出されていて((RCm(n)≠0) & DAm(n) & ^DIm(n)が成立)、しかもデータの読み出しが必要であること(RDCm=0)である。
【0182】
PDRWAITの生成条件はPDRREQの第3の条件が次のように異なるのみである。すなわち、PDRm(n)にデータの読み出しが必要である(RDCm=0)にも関わらず、リクエストが発行されていない(RCm(n)=0)かデータが到着していないこと(RIm(n)がオン)である。
【0183】
以上プリフェッチデータ読み出し制御ユニット204にて生成もしくは取り込んだ信号のうち、RPDRN、PDROPm、及びPDRREQは信号線211を介してプリフェッチデータユニット203へ、PDROPm’、RDCm’、及びRPDRNは信号線207を介してプリフェッチ状態制御ユニット201へ、PDRHITは信号線111及び110を介してそれぞれキャッシュメモリユニット3及びキャッシュデータユニット102へ、PDRHIT及びPDRWAITは信号線107を介してキャッシュリクエストユニット101へ、そしてPDRWAITは信号線112介してプロセッサ2へそれぞれ送出する。
【0184】
<プリフェッチユニットに関連する回路ユニットの詳細>
図9はキャッシュリクエストユニット101の構成を示す。キャッシュリクエストユニット101には信号線107を介してプリフェッチユニット105よりPFREQ、PDRHIT、PDRWAIT、PFAi、REQPCRN、PDRTPi、及びBUFiを入力する。また、プロセッサ2より信号線122を介してPRREQ及びPRADRを入力する。
【0185】
レジスタ908はプリフェッチリクエストPFREQ及びその付随情報PFAi、REQPCRN、PDRTPi、BUFi信号が入力され、後述のREQBSYがオンの間このリクエスト及び付随情報を保持し、その後信号線915に出力する。レジスタ909はPDRHIT信号が入力され、そのまま信号線916に出力する。レジスタ910はPRREQ、PRADR及びPDRWAITが入力され、PDRWAITがオンの間、このリクエスト及びアドレスを保持し、信号線917に出力する。
【0186】
901はキャッシュリクエスト制御回路であり、メモリリクエストが同時に発生した場合の優先付けとデータがプリフェッチユニットにて読みだし済みの場合のキャッシュメモリ1001への参照抑止を行う。このため、信号線915を介してPFREQ、信号線917を介してPRREQ、そして信号線916を介してPDRHITを入力する。PDRHITはプロセッサ2からのメモリリクエストPRREQに対する有効なデータがプリフェッチユニットにて読みだし済みであることを示す。本実施例ではキャッシュリクエスト制御回路は、PFREQとPRREQを同時に発行した時はPRREQを優先する。以上から、キャッシュメモリ1001もしくはメモリ1へのリクエストREQ信号は以下の2つの条件のいずれかが成立した時に生成する。
1)PRREQ & ^PDRHIT
2)^PRREQ & PFREQ
REQ信号は信号線914を介してキャッシュアクセス制御回路903に送出する。
【0187】
キャッシュリクエスト制御回路901はPFREQとPRREQが同時に発生した場合、PFREQの処理を待たせ、さらに後続のプリフェッチリクエストの発行を保留するためのREQBSY信号を生成し、信号線120を介してプリフェッチユニット105に送出する。
【0188】
セレクタ902は上記選択されたリクエストに付随するアドレスを選択する。このため信号線915よりPFAi、信号線917よりPRADR及びPRREQを入力し、PRREQがオンのときはPRADRを、オフのときはPFAiを選択してADR信号として出力する。
【0189】
903はキャッシュアクセス制御回路であり、仮想アドレスを実アドレスに変換するためのアドレス変換緩衝機構(TLB)904、キャッシュメモリ1001に登録されているデータブロックのアドレスを保持するアドレスアレイ905、TLBとアドレスアレイの検索結果によりキャッシュヒットの判定を行うキャッシュヒット判定回路906、及びリクエストの付随情報を保持管理するリクエストオーダ制御回路907を設ける。これらは基本的に従来技術を適用して構成するので、詳細は省略する。キャッシュアクセス制御回路903には信号線914によりREQ、信号線915によりREQPCRN、PDRTPi、BUFi信号、そしてセレクタ902より上記ADRを入力する。
【0190】
キャッシュアクセス制御回路903はキャッシュリクエスト制御回路901からのREQに応答して、仮想アドレスであるADRをTLB904で実アドレスMADRに変換する。このときTLBに登録している記憶保護情報も同時に検査し、アクセス例外が検出された場合はEXP信号を生成する。次に上記実アドレスを用いてこのアドレスアレイ905を検索し、キャッシュヒット判定回路906により判定する。もし当該実アドレスが登録されていればキャッシュヒットと判定し、従来の方法によりキャッシュアドレスCADRを生成し、信号線113を介してキャッシュメモリユニット3へ送出、さらにデータ送出指令CADVを生成する。もし当該実アドレスが登録されていなければキャッシュミスと判定しメモリリクエストMREQを生成する。リクエストオーダ制御回路907は上記実アドレスMADRを信号線115を介してメモリリクエストユニット103へ送出する。このとき、プリフェッチバッファ指定BUFiがオンならライン転送要求LTを付随する。
【0191】
リクエストオーダ制御回路907は信号線915よりREQPCRN、PDRTPiを取り込み、キャッシュヒット時はこれをCWPDRN、CPDRIPとして信号線120によりプリフェッチユニット105へ、キャッシュミス時はこれをMWPDRN、MPDRIPとして信号線115によりメモリリクエストユニット103へ送出する。
【0192】
図10はキャッシュメモリユニット3の詳細を示す。キャッシュメモリユニット3には信号線113を介してキャッシュリクエストユニット101よりCADR、信号線114を介してキャッシュデータユニット102よりキャッシュへの書き込みデータやプリフェッチデータを取り込む。1001はキャッシュメモリであり、アドレスCADRを用いてアクセスする。書き込みデータは信号線114により入力する。セレクタ1003には信号線1002によりキャッシュメモリ1001の読み出しデータ及び信号線114上のデータを入力する。プリフェッチユニット105より信号線111を介してPDRHIT信号を取り込み、これにより上記セレクタのデータ選択を行う。PDRHITがオンのときは信号線114にはPDRから読み出した有効なプリフェッチデータを送出しており、セレクタ1003によりこれを選択し、信号線108を介してプロセッサ2へ送出する。これはプロセッサ2を構成する上で別のデータ線を設ける必要がないため、コスト削減に効果がある。
【0193】
<プリフェッチ制御の補足説明>
以下では本実施例によるプリフェッチ機能、動作及びプログラムの方法等につき、上記で述べなかった点を中心に補足説明する。
【0194】
(1)タイプ固有のプリフェッチ制御
以下では各データ構造タイプ毎にPCRの初期設定方法並びにプリフェッチ制御を説明する。
【0195】
1)シーケンシャルベクトル
シーケンシャルベクトルのプリフェッチは1つのPCRで指定する。プログラムによる初期設定情報は以下の通り。記述のないフィールドの設定は不要であり、このことは設定オーバヘッドの軽減に役立つ。以下に図22〜25にて示したプログラム例1におけるPCRの初期設定例を説明する。ここでPCR0を使用する。
【0196】
−ACT=1; プリフェッチ動作を起動
−ORG=1; オリジン PCRであることを指定
−MOD=(8);ストライドが8B
−DL=(3); オペランド長が8B
−BUF=0; プリフェッチバッファとしてPDRのみ使用
−IID=(GR12); Load命令のベースレジスタ番号として12を指定
−LA=1; 先読み制御ありを指定
−LAC=(20); 20要素まで先読み
−SKIP=0; アドレススキップ有り
−PDRTP=0; PDRの先頭要素を指定
−BAL=0; (PDRTPと同じ値)
−NR=1 ; メモリ参照命令のみがフェッチデータを参照
−MOE=0; マスクオーバライド指定不要
−PFA=(&B(1)) ; ベクトルBの最初の要素アドレス(GR12の初期値)
2)インデクス付きベクトルのプリフェッチ制御
インデクス付きベクトルのプリフェッチはインデクスの読みだし制御を指定するオリジンPCRとターゲット(一般には複数)の読み出しを制御するリンクPCRで指定する。以下に図26〜29にて示したプログラム例2及び図30〜33にて示したプログラム例3におけるPCRの初期設定例を説明する。
【0197】
<オリジンPCRの初期設定>PCR0を使用
−ACT=1; プリフェッチ動作を起動
−ORG=1 ; インデクスベクトルを読みだすオリジン PCRであることを指定
−MOD=(8); ストライドが8B
−DL=(3); インデクスベクトルのオペランド長が8B
−BUF=0; プリフェッチバッファとしてPDRのみ使用
−IID=(GR10); Load命令のベースレジスタ番号として10を指定
−LA=1; 先読み制御ありを指定
−LAC=(5); 5要素まで先読み
−SKIP=0; アドレススキップ無し
−PDRTP=0; PDRの先頭要素を指定
−BAL=0; (PDRTPと同じ値)
−NR=2 ; Load命令及びFload命令のプリフェッチアドレス生成のために当該PDRを参照
−MOE=0; マスクオーバライド指定不要
−PFA=(&L(1)) ; インデクスベクトルLの最初の要素アドレス(GR10の初期値)
<リンクPCRの 初期設定>PCR1を使用
−ACT=1; プリフェッチ動作を起動
−ORG=0 ; ターゲットベクトルBを読みだすリンク PCR
−MOD=(&B(1)); ターゲットベクトルBのベースアドレス
−DL=(3); ターゲットベクトルBのオペランド長8B
−BUF=1; プリフェッチバッファとしてPDRとキャッシュの両方を指定
−IID=(GR12); Fload命令のベースレジスタ番号として12を指定
−LA=0; 先読み制御なしを指定(リクエストは親PCRのデータ読みだしに従属するので不要)
−SKIP=0; アドレススキップ無し
−PDRTP=0(プログラム例2)/1(プログラム例3)
−BAL=0; (PDRTPと同じ値)
−NR=1 ; Fload命令が該PDRを参照
−MOE=0(プログラム例2)/1(プログラム例3)
−LL=0; インデクス付きベクトルのリンクPCRであることを表示
−LPCR=(PCR0); オリジン PCR 番号を指定
−PDRQP=0; オリジンPCRのPDRTPに同じ
−PFA;初期設定不要
プログラム例3の場合マスクオーバライドの指定によりプロローグステージ中の実行抑止されるFload命令(図32の位置(7,3))でPDRの内容を空読みするのでリンクPCRのPDRTPは1と初期設定することに注意されたい。
【0198】
ターゲットベクトルの読みだしアドレスの生成は、読みだされたインデクスベクトル要素をDLで指定したビット数分シフトした値をリンクPCRのモディファイアに加算して得る。生成したアドレスはリンクPCRのPFAフィールドに保持し、プリフェッチリクエストに用いる。
【0199】
3)リンクリストのプリフェッチ制御
リンクリストのプリフェッチは、最上位のシーケンシャルなベクトルとその各要素を起点にリンクされる多レベル複数のテーブル中のデータの読み出しを制御する2つ以上のPCRで指定する。プログラムによる初期設定情報は以下の通りである。
【0200】
<オリジンPCR>
−ACT=[0/1] ; ACT=1の時, プリフェッチ動作を起動
−ORG=1 ; インデクスベクトルを読みだすオリジン PCRであることを指定
−MOD=(ストライド)
−DL=(インデクスベクトルのオペランド長を指定)
−BUF=[0/1]; [PDR/キャッシュ]
−IID=(ベースレジスタ番号)
−LA=[0/1]; 先読み制御の有無を指定
−LAC=(先読みカウント)
−SKIP=[0/1]; SKIP=1の時, SKIPP及び SKIPGAP の指定が必要
−PDRTP; MOE=0の時0, MOE=1の時プロローグステージでのPDRの空読みの回数を指定
−BAL=(PDRTPと同じ値)
−NR=[2/3/...] ; 最上位レベルのテーブル要素を格納したPDRを参照する回数を指定
−MOE=[0/1]; マスクオーバライド指定
−PFA=(ベースアドレス) ; インデクスベクトルの最初の要素アドレス
<リンクPCRの初期設定>
−ACT=[0/1] ; ACT=1の時, プリフェッチ動作を起動
−ORG=0 ; 下位レベルのリストを読みだすリンク PCRであることを指定
−MOD=(変位); 次レベルのテーブルにおけるリンクデータへの変位
−DL=(リンクデータの長さを指定)
−BUF=0/1; [PDR/キャッシュ]
−IID=(ベースレジスタ番号)
−LA=0; 先読み制御なしを指定(リクエストは親PCRのデータ読みだしに従属するので不要)
−SKIP=0; スキップ不要
−PDRTP; MOE=0の時0, MOE=1の時プロログステージでのメモリ参照命令実行回数
−BAL=(PDRTPと同じ値)
−NR=[1/2/...] ; 最下位レベルのPCRでは1、他のレベルでは該データを格納するPDRを参照する回数を指定
−MOE=[0/1]; マスクオーバライド指定
−LL=1; リンクリストにおけるリンクPCRであることを指定
−LPCR=(親 PCR 番号)
−PDRQP=(親PCRのPDRTPに同じ)
−PFA;初期設定不要
子PCRによるデータの読みだしアドレスの生成は、親PCRにより読みだされた上位要素(リンクデータ)に子PCRのモディファイアを加算して得る。生成したアドレスは子PCRのPFAフィールドに保持し、プリフェッチリクエストに用いる。以下、子PCRによるプリフェッチリクエストの発行制御はインデクスベクトルのプリフェッチにおけると同様である。
【0201】
(2)アドレススキップ機能
本実施例ではアドレススキップ機能を具備する。アドレススキップ機能は多次元配列への部分参照にプリフェッチを適用するうえで有効である。
【0202】
多次元配列を用いた数値計算に於て、配列の周辺上の要素は境界条件を与えるため、主たる計算には用いない場合があり、またメモリバンク競合を回避するため意図的に参照しない要素を加えた配列を定義する場合もある。図16は2次元配列への部分参照を行なう例を示す。このケースではカラム100元、ロー200元の配列A(100,200)はカラム優先で読みだされる。このプログラムでは太枠で囲んだA(1−99,1−199)の部分を参照する。即ちデータプリフェッチにおいは各カラム上の最後のロー要素は参照せず、次のカラムの先頭ロー要素からプリフェッチを継続する必要がある。実際に参照するのは間に1要素ずつ間隙のある連続99要素ずつにブロックされたメモリ領域となる。これを、各カラムごとに毎回プリフェッチを起動するとオーバヘッドが発生し、十分な高速化が図れない恐れがある。本アドレススキップ機能はこの場合でも一回のプリフェッチ起動にて上記ブロック化された領域を読みだすことが可能なため、オーバヘッドの削減に効果的である。
【0203】
アドレススキップ機能は、全体のデータ容量がキャッシュを越える程度に大きく、しかもプリフェッチの起動時間が最内ループの実行時間に比較して無視できない場合に効果が大である。例えば100X100X100の3次元配列に於て、最内ループの実行サイクルがイタレーションあたり50サイクルで、プリフェッチの起動に25サイクルのオーバヘッドがかかる場合、本機能により約50%の高速化が見込まれる。
【0204】
(3)割り込み処理
以下ではプリフェッチ動作中に割り込みが発生した場合のハードウェア及びソフトウェアによる処理について詳述する。プリフェッチ動作に関する割り込み処理はその原因の例外事象の種類により異なる。例外の種類は以下の4種類に分類される。
【0205】
○プリフェッチ動作中に検出した回復可能な例外
例:プリフェッチにおけるページフォールト、TLBミスフォールト
○プリフェッチ動作中に検出した回復不可能な例外
例:プリフェッチにおけるデータメモリ保護チェック、非アラインデータ参照トラップ
○プリフェッチ動作とは独立に検出した回復可能な例外
例:外部割り込み、命令実行にともなうメモリ参照で検出したページフォールトとTLBミスフォールト
○プリフェッチ動作とは独立に検出した回復不可能な例外
例:高優先度マシンチェック、命令実行に伴うメモリ参照で検出したメモリ保護チェック
割り込みの原因である例外事象が回復可能な種類であるとき、再開後にもプリフェッチが継続可能である。この場合本実施例では必要なプリフェッチ制御情報のみ退避回復を行ない、プリフェッチデータレジスタのデータについては退避回復を行なわないことでオーバヘッドを削減する。
【0206】
以下、本実施例になる情報処理装置において割り込みが発生したときのプリフェッチ関連の処理概要を記す。
【0207】
1)例外検出
プリフェッチのためのメモリ読みだしに付随したアクセス例外EXPはキャッシュリクエストユニット101におけるTLB904の索引により検出する。
【0208】
このアクセス例外の検出はプロセッサ2における対応メモリ参照命令の実行に際しても必要である。それは例外検出時の後続命令の実行抑止のタイミングがクリティカルであるため、プリフェッチでのリクエスト処理による検出結果を用いることの困難な場合がありうるからである。従ってプリフェッチユニットからプロセッサ2への例外の報告も行なわない。プロセッサ2でのアクセス例外の検出は、従来通りプロセッサ2内のTLB(図示せず)の索引により行う。
【0209】
2)例外検出時の動作
プリフェッチリクエストに付随して例外EXPが検出された時、該リクエストに対応するPDR要素に付随するデータ無効フラグDIをオンとし、データの無効を表示する。この場合でも後続のデータプリフェッチは継続する。この継続の理由は、以下の通りである。
【0210】
○対応するメモリ参照命令は条件付き実行制御のもとにその実行が抑止されることがありえるため、該例外が必ずしも検出されるとは限らない。
【0211】
○非連続なシーケンシャルベクトル、インデクスベクトル、リンクリストのプリフェッチの場合など、後続のデータアドレスが大きく離れうる場合は後続のアドレスでは例外が発生しない場合もありうる。
【0212】
○後続データのプリフェッチを停止した場合、メモリ参照命令がプリフェッチデータを待ちつづけることによるハングアップが発生しうる。
【0213】
3)割り込み時の動作
対応するメモリ参照命令の実行時に例外を検出した場合、当該命令の実行を抑止し、ハードウェアによる割り込み時の動作を実行する。この時、割り込み発生をINT信号によりプリフェッチユニット105へ報告する。プリフェッチユニット105はPSRのSUSPフラグをセットする。これにより全てのプリフェッチ動作は以後のリクエスト発行を停止し、既に発行したリクエストに対するデータの到着完了を待つ。全てのデータが到着すると上記ハードウェア動作によりPSRのPFBSYフラグがオフとなる。プリフェッチ機構のこの状態を中断状態という。プロセッサ2は割り込み処理ルーチンの先頭にてPSRを読み出し、プリフェッチ機構が中断状態であることを確認後、引き続く割り込み処理ルーチンを実行する。回復可能な割り込みにおいて、割り込み処理中にプリフェッチ情報であるPSR、PCR、PDR及びPDSRの内容が保存される場合、すなわち元のプログラムに復帰するまで本実施例になるプリフェッチ機構を一切使用しない場合、割り込み処理ルーチンではこれらの退避を行なう必要がない。従って該処理に要する処理オーバヘッドはない。
【0214】
回復可能な割り込みにおいて、割り込み処理中に該プリフェッチ情報が保存される保証がない場合、本実施例では割り込み処理ルーチンはPSR及びPCRのみ退避を行なう必要がある。この退避回復は命令により実行する。この場合でもPDRは割り込みからの復帰後再読み出しを行なうので退避は不要である。また、PDSRも退避は不要であるが、次に述べるように状態情報の初期化が必要である。
【0215】
回復不可能な割り込みにおいては、割り込み処理ルーチンにて全てのPCRの有効フラグVLDをリセットすることでプリフェッチ動作を無効化する。この場合プリフェッチ関連の諸資源の退避は不要である。
【0216】
4)割り込みからの復帰時の動作
プリフェッチ情報の保存を保証不可能な割り込みからの復帰時に於て、割り込みルーチンはPSR及び有効なPCRの回復を行なう。この間SUSPフラグをセットすることで回復中のPCR情報でプリフェッチ動作が先走らないよう保証する。割り込み処理中にプリフェッチ情報の保存が保証される場合は該回復動作は不要である。
【0217】
割り込み処理ルーチンから元のプログラムへの復帰直前の命令の実行によりSUSPフラグをリセットする。これにより回復したPCRの指定に従いプリフェッチ機構が動作状態になりプリフェッチ動作が再開する。そして割り込み処理ルーチンからの復帰命令の実行によってプロセッサ2は元のプログラムの実行を再開する。プリフェッチリクエストは割り込みからの復帰に伴い、回復したPFAを用いて発行し、データは回復したPDRTPが指すPDR要素から格納していく。この要素は割り込みにより捨てられた、BALフィールドで示される個数のPDR要素の次に位置することになる。
【0218】
プリフェッチ機構に関する特定の回路のハード故障検出時など、割り込み後にプリフェッチを再開することが適当でない場合は、PCR初期化命令によりVLDフラグをオフにすることでプリフェッチを無効化可能である。この場合でも下記プリフェッチバッファリダイレクションによりプログラムの正しい動作が保証される。
【0219】
5)プリフェッチバッファリダイレクション
プリフェッチしたデータが書き換えやアクセス例外発生により無効であった場合、すでに述べたように当該メモリ参照命令の実行時にキャッシュメモリ1001もしくはメモリ1から正しいデータを読み出す制御を行う。これは既に説明した通り、当該メモリ参照命令のメモリリクエストPRREQによる処理を抑止するPDRHIT信号を発行しないことにより実現する。この動作をプリフェッチバッファリダイレクションと呼び、PBRと略記する。
【0220】
割り込まれたプログラムがその再開後、割り込み時に捨てられたプリフェッチデータを参照しようとする場合も、このPBRを用いる。すなわち、まず割り込みからの回復にあたり、PCRのリダイレクションデータカウントRDCフィールドを割り込み発生時のBALに設定する。プリフェッチユニットではメモリ参照命令の実行毎にRDCがゼロでなければPBRを継続する。PBRによりメモリデータを読み出す度にRDCを1ずつ減ずる。PDROPは捨てられたデータの内最も古いものが保持されていたPDR要素位置を復帰時点でポイントしている。その後PDROPはPBR動作が行なわれるたびにインクリメントする。
【0221】
図19にコンテクストスイッチ時のPDR及びPDSRの状態例を示す。同図(a)は割り込み処理ルーチンに制御が渡る前のPDRとPDSRの状態を示す。この場合BALフィールドに表示されるn個のデータがPDRに格納されており、そのうちのいくつかは書き換えによりデータ無効フラグDIがセットされている。割り込みが発生してもこれらPDR及びPDSRは退避しない。同図(b)は割り込まれたプログラムに制御が戻った直後のPDRとPDSRの状態を示す。この場合、プログラムによりPDROP、PDRTP、BALは割り込み時点の内容を回復し、またリダイレクションデータカウントRDCをBALと同じ値nに設定する。PDSRのRCフィールドの内容は全て0に初期化する。該PDRに対応するメモリ参照命令が実行され、PDR読みだしリクエストを発行したとき、プリフェッチバッファリダイレクションによりキャッシュメモリ1001もしくはメモリ1からデータを読みだす。RDCが0でない間このプリフェッチバッファリダイレクションを行なう。PDR読みだしの度にRDCを1減じ、またPDROPを次に進める。この様にすることで割り込みにおいてPDR内のデータを退避回復しなくても正しいプログラム動作を保証することができる。また該退避回復に必要な処理時間を削減することで割り込み処理の効率化を実現する。
【0222】
(4)コヒーレンシ制御
本プリフェッチ方式ではPDRとキャッシュメモリ1001のコヒーレンシを上記プリフェッチバッファリダイレクションによりハードウェアが保証する。即ちプリフェッチの起動命令実行後からメモリ参照命令で該データを読みだすまでの間にストア命令で当該データを書き換えた場合、プログラムからみて書き換え後のデータをメモリ参照命令が受け取ることを保証する。
【0223】
この制御タイムチャート例を図20に示す。同図ではプリフェッチの設定をする命令の実行によりプリフェッチを起動後、該データを参照するload命令がループ制御にて繰り返し実行される様子を示している。load命令に付した()付きの数字はループ回数である。このプログラムの場合第1ループのstore命令が第2ループのload命令のオペランドを書き換える。プリフェッチアドレスがPFAに設定されたのち、この例ではプリフェッチユニットは第3サイクル(C3)からプリフェッチリクエストを毎サイクル発行し始める。プリフェッチアドレスPFAはキャッシュアドレスCADRに変換され、読みだしたキャッシュデータCDATAはPDR1(0)に格納される。load命令(1)が実行されるとPDR読みだしリクエストPDRREQが生成され、該PDR1(0)に格納されたデータを読みだしC12にてこれをプロセッサ2の汎用レジスタGRに格納する。laod命令(2)に対応するプリフェッチリクエストはC4にて発行され、これに伴い、PDSR1(1)の状態が(1100)に遷移する。store命令(1)の実行において書き換えが検出されるため、該PDSRの状態は(1101)に遷移する。その後、データが到着するのでC9にて状態は(1011)に遷移する。load命令(2)が実行されると該PDSRの状態からデータの無効が認識され、PDRHITが抑止され、PBRが実行される。これによりC12においてキャッシュアドレスはプリフェッチアドレスの代わりにload命令(2)のメモリリクエストアドレスがセットされる。読みだされたload命令(2)のデータはPDR1(1)内の書き換え前のデータに替えてプロセッサ2内のレジスタにC15にて格納される。
【0224】
ハードウェアによるコヒーレンシの保証により、論理的にはプリフェッチを適用した場合の動作を保証するうえで、プログラムはストア命令とプリフェッチ起動命令の順序を考慮する必要がなくなる。このためプリフェッチ起動命令をできるだけ早期に実行し、起動オーバヘッドを削減するためのコード最適化を図るうえで効果的である。
【0225】
本実施例ではハードウェアによりコヒーレンシが保証されるが、プリフェッチデータの書き換えが頻発した場合、性能への影響が発生する実施態様も考えうる。このような場合に対しては、先読み制御を用いることで性能への影響を避けながらコヒーレンシを保証することが可能である。これを次の例で説明する。
【0226】
本例ではMはコンパイル時にわかっているものとする。この例で、LAC<Mとなるように先読みカウントLACを指定してもプリフェッチが性能向上に有効であるとする。この時、プリフェッチは最後にメモリ参照命令に転送したデータよりLACで示される数以上先には進まないため、上記A(I−M)によるデータプリフェッチはA(I)に対応して行なわれる該データへの書き換え以前には起こりえない。従って必ず書き換え後のデータをプリフェッチすることとなり、コヒーレンシが保証される。この先読み制御によるデータコヒーレンシ保証動作のタイムチャート例を図21に示す。
【0227】
この例では同図に示すDOループにおける配列要素A(I−4)の読みだしにおけるコヒーレンシ保証を示してある。該ループではA(I−4)は常に4回前のループ実行において書き換えが行なわれるのでその書き換え結果を読みだす必要がある。このため先読みカウントLACを3と指定し、プリフェッチによる先読みは3要素分に制限する。第4サイクル(C4)にてload命令(3)用のデータ読みだしが完了するとBALの値がLACに達するのでリクエスト発行が保留となる。C6にてlaod命令(1)(ld.1と略記)が実行されPDRデータが読みだされるとBALが2となるのでプリフェッチリクエストが発行可能となる。この様にして次のld.5のプリフェッチはld.2の命令実行の後に行なわれることが保証できる。一方、ld.5のプリフェッチの前に実行されるべき配列要素A(5)への書き込みst.5はプログラム上明らかにld.2の前に実行される。従って、ld.5はst.5の後に実行され、書き換え後のデータを得ることができる。
【0228】
<プログラム例>
ここで、対象となる上記データ構造を参照する幾つかのプログラムについて、高速化のための最適化方式とそれを適用した場合のオブジェクトプログラム及び本情報処理装置における命令実行トレースにつき説明する。
【0229】
図22はシーケンシャルベクトルBを参照するプログラムである。このケースはループ長3Nが大きく、ベクトルB(I)がプロセッサ2内キャッシュの容量をこえていることを想定しており、プロセッサ2の外付けキャッシュ(以後これを単にキャッシュメモリと呼ぶ)を参照するための最適化を行なう。このキャッシュメモリ1001の参照には、本実施例では約7サイクルを要するとすると、以下に記すようなループ展開と命令スケジューリングを適用する。まず、ソースプログラムを(b)で示すように3倍ループ展開する。このループ部分をオブジェクトプログラムに展開し、命令スケジューリングを施したものを図23に示す。この図では命令は一行に3個ずつ書かれている。これは図22(b)で示したループ展開後のソースプログラムとの対応を見やすくしたためであり、メモリ1上での位置は第1行第1列(以下(1,1)と記す)、(1,2),(1,3),(2,1),...の様に並んでいる。すなわち3行目までは通常の書き方により記すと
(1,1) [MR2]Fload (GR12) −>FR2; B(I)
(1,2) [MR3]And MR3, MR10 −> MR3
(2,1) [MR2]Add GR12+d1 −> GR12
(2,2) [MR1]Set 1 to MR3
(2,3) [MR4]Fstore FR4 −> (GR13); A(I+2)
(3,2) [MR1]And MR3, MR10 −> MR3
(3,3) [MR4]Add GR13+d2 −> GR13
−
となることを示してある。
【0230】
各命令の先頭にはその実行の有無を制御するマスクレジスタ番号(rmにより指定)が示してある。図24及び図25は上記オブジェクトを実行したときの、実行された命令の並び(トレース)を示してある。但し簡単のためオリジナルのプログラムにおいて、ループ長は6(N=2)としている。ループ部のオブジェクトプログラムの第1回目の実行にあたっては、第2列上の最初の1命令及び、第3列上の最初の3命令は実行不要な命令である。これはマスクレジスタの初期値を同図に示すように設定してあることにより、条件実行制御により実現する。ここでMR1は常に1(論理値で真に対応)であることに注意が必要である。この実行抑止を含む一回めのプログラム実行ステージをプロローグステージと呼ぶ。また2回目の実行では該ループ部は全ての命令が実行される。このプログラム実行ステージをボディーステージと呼ぶ。この例では一回であるが、一般にはループ長に応じ、このボディーステージが繰り返し実行される。3回目の実行では第1列の第21行から第26行、及び第28行の命令が、第2列の第24行から第29行の命令が、そして第3列の第27行から第28行の命令が実行を抑止される。この最後のループ実行ステージをエピローグステージと呼ぶ。結局実際に実ATAはPDR1(0)に格納される。load命令(1)が実行されるとPDR読みだしリクエストPDRREQが生成され、該PDR1(0)に格納されたデータを読みだしC12にてこれをプロセッサ2の汎用レジスタGRに格納する。laod命令(2)に対応するプリフェッチリクエストはC4にて発行され、これに伴い、PDSR1(1)の状態が(1100)に遷移する。store命令(1)の実行において書き換えが検出されるため、該PDSRの状態は(1101)に遷移する。その後、データが到着するのでC9にて状態は(1011)に遷移する。load命令(2)が実行されると該PDSRの状態からデータの無効が認識され、PDRHITが抑止され、PBRが実行される。これによりC12においてキャッシュアドレスはプリフェッチアドレスの代わりにload命令(2)のメモリリクエストアドレスがセットされる。読みだされたload命令(2)のデータはPDR1(1)内の書き換え前のデータに替えてプロセッサ2内のレジスタにC15にて格納される。
【0231】
ハードウェアによるコヒーレンシの保証により、論理的にはプリフェッチを適用した場合の動作を保証するうえで、プログラムはストア命令とプリフェッチ起動命令の順序を考慮する必要がなくなる。このためプリフェッチ起動命令をできるだけ早期に実行し、起動オーバヘッドを削減するためのコード最適化を図るうえで効果的である。
【0232】
本実施例ではハードウェアによりコヒーレンシが保証されるが、プリフェッチデータの書き換えが頻発した場合、性能への影響が発生する実施態様も考えうる。このような場合に対しては、先読み制御を用いることで性能への影響を避けながらコヒーレンシを保証することが可能である。これを次の例で説明する。
【0233】
本例ではMはコンパイル時にわかっているものとする。この例で、LAC<Mとなるように先読みカウントLACを指定してもプリフェッチが性能向上に有効であるとする。この時、プリフェッチは最後にメモリ参照命令に転送したデータよりLACで示される数以上先には進まないため、上記A(I−M)によるデータプリフェッチはA(I)に対応して行なわれる該データへの書き換え以前には起こりえない。従って必ず書き換え後のデータをプリフェッチすることとなり、コヒーレンシが保証される。この先読み制御によるデータコヒーレンシ保証動作のタイムチャート例を図21に示す。
【0234】
この例では同図に示すDOループにおける配列要素A(I−4)の読みだしにおけるコヒーレンシ保証を示してある。該ループではA(I−4)は常に4回前のループ実行において書き換えが行なわれるのでその書き換え結果を読みだす必要がある。このため先読みカウントLACを3と指定し、プリフェッチによる先読みは3要素分に制限する。第4サイクル(C4)にてload命令(3)用のデータ読みだしが完了するとBALの値がLACに達するのでリクエスト発行が保留となる。C6にてlaod命令(1)(ld.1と略記)が実行されPDRデータが読みだされるとBALが2となるのでプリフェッチリクエストが発行可能となる。この様にして次のld.5のプリフェッチはld.2の命令実行の後に行なわれることが保証できる。一方、ld.5のプリフェッチの前に実行されるべき配列要素A(5)への書き込みst.5はプログラム上明らかにld.2の前に実行される。従って、ld.5はst.5の後に実行され、書き換え後のデータを得ることができる。
【0235】
<プログラム例>
ここで、対象となる上記データ構造を参照する幾つかのプログラムについて、高速化のための最適化方式とそれを適用した場合のオブジェクトプログラム及び本情報処理装置における命令実行トレースにつき説明する。
【0236】
図22はシーケンシャルベクトルBを参照するプログラムである。このケースはループ長3Nが大きく、ベクトルB(I)がプロセッサ2内キャッシュの容量をこえていることを想定しており、プロセッサ2の外付けキャッシュ(以後これを単にキャッシュメモリと呼ぶ)を参照するための最適化を行なう。このキャッシュメモリ1001の参照には、本実施例では約7サイクルを要するとすると、以下に記すようなループ展開と命令スケジューリングを適用する。まず、ソースプログラムを(b)で示すように3倍ループ展開する。このループ部分をオブジェクトプログラムに展開し、命令スケジューリングを施したものを図23に示す。この図では命令は一行に3個ずつ書かれている。これは図22(b)で示したループ展開後のソースプログラムとの対応を見やすくしたためであり、メモリ1上での位置は第1行第1列(以下(1,1)と記す)、(1,2),(1,3),(2,1),...の様に並んでいる。すなわち3行目までは通常の書き方により記すと
(1,1) [MR2]Fload (GR12) −>FR2; B(I)
(1,2) [MR3]And MR3, MR10 −> MR3
(2,1) [MR2]Add GR12+d1 −> GR12
(2,2) [MR1]Set 1 to MR3
(2,3) [MR4]Fstore FR4 −> (GR13); A(I+2)
(3,2) [MR1]And MR3, MR10 −> MR3
(3,3) [MR4]Add GR13+d2 −> GR13
−
となることを示してある。
【0237】
各命令の先頭にはその実行の有無を制御するマスクレジスタ番号(rmにより指定)が示してある。図24及び図25は上記オブジェクトを実行したときの、実行された命令の並び(トレース)を示してある。但し簡単のためオリジナルのプログラムにおいて、ループ長は6(N=2)としている。ループ部のオブジェクトプログラムの第1回目の実行にあたっては、第2列上の最初の1命令及び、第3列上の最初の3命令は実行不要な命令である。これはマスクレジスタの初期値を同図に示すように設定してあることにより、条件実行制御により実現する。ここでMR1は常に1(論理値で真に対応)であることに注意が必要である。この実行抑止を含む一回めのプログラム実行ステージをプロローグステージと呼ぶ。また2回目の実行では該ループ部は全ての命令が実行される。このプログラム実行ステージをボディーステージと呼ぶ。この例では一回であるが、一般にはループ長に応じ、このボディーステージが繰り返し実行される。3回目の実行では第1列の第21行から第26行、及び第28行の命令が、第2列の第24行から第29行の命令が、そして第3列の第27行から第28行の命令が実行を抑止される。この最後のループ実行ステージをエピローグステージと呼ぶ。結局実際に実行される命令は枠で囲ったもののみとなる。
【0238】
このコードを実行すると位置(1,1)の浮動小数点数メモリ参照命令Floadは7サイクル目以降にベクトル要素B(I)を浮動小数点レジスタFR2に取り込む。アドレスは汎用レジスタGR12に格納している。FR2を参照する位置(5,1)の浮動小数点数ストア命令Fstoreの実行までには9命令の処理が必要で、本プロセッサ2では9サイクルを要する。従って、必要なデータはすでにFR2に取り込まれているので待ち合わせをすることなくFstore命令が実行される。また位置(4,2)のFload命令は次のベクトル要素B(I+1)を読みだすが、FR2は使用中であるためFR3にこれを取り込む。但しアドレスを格納するレジスタはGR12を共用する。
【0239】
この様にループ展開の後、オブジェクトコードを最適にスケジュールすることで、パイプラインピッチより長いデータ参照レーテンシを他の命令処理に隠すことが可能である。本実施例で全てのデータがキャッシュメモリ1001に入っていれば上記の通りデータ参照の待ち合わせが発生することなくオブジェクトプログラムを実行することが可能であるが、データがキャッシュメモリ1001に入りきらない場合は待ち合わせが発生する。これを回避するにはさらにループ展開の多重度をあげる方法がありうるが、必要レジスタ数が増大し限界がある。本実施例はこれを解決するうえで効果がある。
【0240】
図26(a)はインデクス付きベクトルBを参照するプログラム例である。インデクスベクトルはLである。これもプログラム例1と同様、(b)のように3倍ループ展開を行ない、図27のようにオブジェクトを生成する。簡単のためループ長は3(N=1)としておりその命令実行トレースを図28及び図29に示す。条件実行制御のもとに命令の実行されるものを枠で囲み示してある。
【0241】
図30はインデクス付きベクトルの参照プログラム例であるが、インデクスの値が正である条件のときのみ結果をベクトルAに格納する。これに関しても変換後のソースプログラムを図30(b)、オブジェクトプログラムを図31、及び命令実行トレースを図32及び図33に示す。
【0242】
以上説明したように、本実施例による情報処理装置では以下の特徴がある。
【0243】
1)プロセッサとは非同期なデータプリフェッチ
個々のデータに対するプリフェッチ動作は、明示的なプリフェッチ命令の実行をすることなく、プロセッサ2とは非同期に行なわれる。これにより同期プリフェッチにおいて生ずる命令実行ネックに起因する性能低下を回避出来る。
【0244】
2)データ単位でのプリフェッチ
データ単位プリフェッチ機構では、データはそれを必要とするメモリ参照命令に対応して一つずつ読みだし、プリフェッチデータレジスタ(PDR)に保持する。同一アドレス上のデータであってもメモリ参照命令に応じて再度読みだし、プリフェッチデータレジスタ(PDR)上では別々の場所に保持する。このようなデータ単位でのプリフェッチは、大規模シーケンシャルベクトルやストライドの大きな非連続シーケンシャルベクトルの参照等、再使用確率が低いデータをプリフェッチするのに適している。
【0245】
3)アドレス単位でのプリフェッチ
プリフェッチデータをキャッシュメモリ1001に格納する機能があるため、同一アドレスに対するプリフェッチが多発する場合は、このキャッシュからプリフェッチすることでメモリ1に対する負荷を軽減する上で効果がある。これはインデクス付きベクトルのターゲットベクトルやリンクリストの下位データの参照等で効果的である。
【0246】
4)プリフェッチアドレス
プリフェッチリクエストのために生成するアドレスはメモリ参照命令のオペランドアドレスと同一であるべきため、バーチャルアドレスである。プリフェッチアドレスはプロセッサ2とは非同期に生成し、専用のプリフェッチアドレスレジスタに保持する。
【0247】
5)プリフェッチデータバッファ
データ単位でのプリフェッチのために、読みだしたデータを保持する専用のプリフェッチデータレジスタ(PDR)を設けている。PDRを設けることでキャッシュに対する参照スループット要求値を、プリフェッチを用いない場合と同程度に押さえることが可能であり、従ってコストの増加を押さえるうえで効果的である。
【0248】
6)初期設定とリクエスト制御
プリフェッチ実行にあたっては、専用の命令により制御情報の初期設定、起動、及び停止を行なう。
【0249】
7)プロセッサ2へのデータ転送制御
プリフェッチパッフアからプロセッサ2へのデータ転送は対応メモリ参照命令の実行により要求されるが、対応メモリ参照命令の識別はそのベースアドレスレジスタ番号をキーとして行なう。従って、転送用の専用命令を設けることはしない。また、従来の命令に識別フィールドを設けるなどの拡張も不要である。
【0250】
8)先読み制御
対応メモリ参照命令の実行時刻を基準としたとき、当該データ読みだし時刻を制御可能である。即ち対応メモリ参照命令のある実行に対してn回先の実行に必要なデータまでしか先読みを許さない制御が可能である。これにより不要データによるキャシュの汚染を回避することが可能。またデータのコヒーレンシ保証にも用いることができる。
【0251】
9)PDRのコヒーレンシ制御
ストアアドレスチェックとプリフェッチバッファリダイレクションPBRと呼ぶ機構にてPDRとキャッシュのコヒーレンシをハードウェアにより保証する。即ち、プリフェッチの起動後にストア命令がプリフェッチする領域を書き換えた場合、メモリ参照命令が書き換え後のデータを参照することをハードウェアが保証する。
【0252】
10)IF文に対応するデータスキップ機能
条件付きメモリ参照命令が実行を抑止された時においてもプリフェッチしたデータを空転送によりスキップすることで、ループ内にIF文がある場合でも本プリフェッチが適用可能である。
【0253】
11)アドレススキップ機能
シーケンシャルベクトルに対するプリフェチアドレスの生成に於て、所定の間隔毎にアドレスをノンリニアに更新することが可能。これにより多次元配列の部分参照のために最内ループを反復実行する場合、一回のプリフェチの起動にて全体の必要データが先読み可能となる。これはプリフェッチの起動オーバヘッドを削減し、高速化を図るうえで効果的である。
【0254】
12)データの退避回復の不要なコンテクストスイッチ
割り込みに伴うコンテクストスイッチにおいて、PDRの退避回復は不要である。割り込み時に捨てられたデータはPBR機構にて復帰後再び読みだす。これは、コンテクストスイッチの高速化に有効である。
【0255】
【発明の効果】
以上説明したように、本発明によるいろいろの特徴によれば、より高い機能のプリフェッチ回路を有する情報処理装置を提供することができる。
【0256】
例えば、本発明の一つの特徴によれば、主記憶等の記憶装置に対するキャッシュメモリが存在する情報処理装置において、このキャッシュメモリ内のデータをプリフェッチ時に利用可能になる。
【0257】
本発明の他の特徴によれば、複数群のデータをプリフェッチ可能になる。
【0258】
本発明のさらに他の特徴によれば、インデックス付きのベクトル等の、単純ベクトルよりは複雑な構造を有するデータもプリフェッチ可能になる。
【0259】
本発明のさらに他の特徴によれば、条件付きメモリ参照命令が実行を抑止された時においてもプリフェッチしたデータを空転送によりスキップすることで、ループ内にIF文がある場合でも適用可能なプリフェッチ回路得られる。
【0260】
本発明のさらに他の特徴によれば、シーケンシャルベクトルに対するプリフェチアドレスの生成に於て、所定の間隔毎にアドレスをノンリニアに更新することが可能になる。これにより多次元配列の部分参照のために最内ループを反復実行する場合、一回のプリフェチの起動にて全体の必要データが先読み可能となる。これはプリフェッチの起動オーバヘッドを削減し、高速化を図るうえで効果的である。
【0261】
本発明のさらに他の特徴によれば、処理装置内で割り込みが発生した場合にも、プリフェッチ済みのデータの使用あるいは不使用を制御可能になる。
【図面の簡単な説明】
【図1】本発明の一実施例に係わる情報処理装置の全体構成を示す図。
【図2】図1の装置に使用するプリフェッチユニットの概略構成図。
【図3】図1の装置に使用するプリフェッチ状態制御ユニットの概略構成図。
【図4】図1の装置に使用するプリフェッチリクエスト制御ユニットの概略構成図。
【図5】図1の装置に使用するプリフェッチアドレス制御回路の概略構成図。
【図6】図1の装置に使用するPDSR更新制御回路の概略構成図。
【図7】図1の装置に使用するプリフェッチデータユニットの概略構成図。
【図8】図1の装置に使用するプリフェッチデータ読み出し制御ユニットの構成図。
【図9】図1の装置に使用するキャッシュリクエストユニット101の概略構成図。
【図10】図1の装置に使用するキャッシュメモリユニット3の概略構成図。
【図11】図1の装置に使用するるプロセッサ2の概略構成図。
【図12】図1の装置におけるPDR要素の状態遷移図。
【図13】図1の装置によるプリフェッチ対象のデータ構造の説明図
【図14】図1の装置に使用するプリフェッチ制御レジスタの概略構成図。
【図15】図1の装置に使用するデータ構造の指定例を示す図。
【図16】図1の装置に使用する2次元配列の部分参照の例を示す図。
【図17】図1の装置に使用する命令の形式を示す図。
【図18】図1の装置に使用するマスクレジスタの構成を示す図。
【図19】図1の装置における割り込み処理時のPDRとPDSRの状態例を示す図。
【図20】図1の装置におけるハードウエア制御によるコヒーレンシ保証のタイムチャート。
【図21】図1の装置における先読み制御によるコヒーレンシ保証のタイムチャート。
【図22】図1の装置に使用するプログラム例1のソースプログラムを示す図。
【図23】プログラム例1のループ部オブジェクトプログラムを示す図。
【図24】プログラム例1の命令実行トレースの上半分を示す図。
【図25】プログラム例1の命令実行トレースの下半分を示す図。
【図26】プログラム例2のソースプログラムを示す図。
【図27】プログラム例2のループ部オブジェクトプログラムを示す図。
【図28】プログラム例2の命令実行トレース(上半分)を示す図。
【図29】プログラム例2の命令実行トレース(下半分)を示す図。
【図30】プログラム例3のソースプログラムを示す図。
【図31】プログラム例3のループ部オブジェクトプログラムを示す図。
【図32】プログラム例3の命令実行トレース(上半分)を示す図。
【図33】プログラム例3の命令実行トレース(下半分)を示す図。
【符号の説明】
301…プリフェッチ状態レジスタ、302…プリフェッチ制御レジスタ、704…プリフェッチデータレジスタ、705…プリフェッチデータ状態レジスタ
Claims (14)
- (a)プログラムとデータを保持する記憶装置と、
(b)該プログラムに含まれた複数の命令を実行する処理装置と、
(c)該記憶装置内の複数のブロックを保持するキャッシュメモリと、
(d)該キャッシュメモリへのアクセスを制御するキャッシュ制御回路と、
(e)該プログラムが指定する一群のデータをそのプログラムが使用する前に、その一群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該プリフェッチ回路は、
(e1)順序付けられた一群の記憶領域と、
(e2)該処理装置が発行したデータ先読み要求に応答し、その要求が指定する一群のデータの読み出しを要求する一群の先読みデータ読み出し要求を該キャッシュ制御回路に対し順次発行し、該一群の先読みデータ読み出し要求に対する応答として該一群のデータ
が後に供給されたときに、該供給された一群のデータを該一群の記憶領域に、所定の記憶領域の順番に従って順次書き込む先読みデータ要求回路と、
(e3)該処理装置から発行されたデータ読み出し要求に応答し、そのデータ読み出し要求が指定するデータが該一群の記憶領域に保持されているか否かを検出し、該指定されたデータが該一群の記憶領域に保持されている場合、該保持されたデータを該処理装置に転送する先読みデータ供給回路とを有し、
該キャッシュ制御回路は、
(d1)該先読みデータ要求回路が発行した各先読みデータ読み出し要求に応答し、その要求が指定するデータが該キャッシュメモリに保持されている場合、そのデータを該プリフェッチ回路に転送する先読みデータ転送回路と、
(d2)該一群の先読みデータ読み出し要求のいずれかが指定するデータが該キャッシュメモリに保持されていない場合、少なくともそのデータの読み出しを該記憶装置に要求する先読みデータ要求回路とを有する情報処理装置。 - 該プリフェッチ回路は、
(e4)該処理装置から発行された上記データ読み出し要求により指定された上記データが該一群の記憶領域に保持されている場合、該キャッシュ制御回路がそのデータを該キャッシュメモリから該処理装置に転送するのを禁止するデータ転送禁止回路をさらに有し、
該キャッシュ制御回路は、
(d3)該処理装置から発行された上記データ読み出し要求が指定する上記データが該キャッシュメモリに保持されている場合、上記転送禁止回路によりそのデータの転送が禁止されていないことを条件に、その保持されたデータを該処理装置に転送する読み出しデータ転送回路と、
(d4)上記データ読み出し要求が指定したデータが該キャッシュメモリに保持されていない場合には、そのデータの転送が上記データ転送禁止回路により禁止されていないことを条件に、該データを含む第1のブロックを該キャッシュメモリへ転送することを要求する第1のブロック転送要求を該記憶装置に出力し、該記憶装置から該キャッシュメモリにそのブロックが転送されたときに、その第1のブロックに含まれた該指定されたデータを該処理装置に転送する読み出しデータ要求回路とをさらに有する請求項1記載の情報処理装置。 - 該記憶装置へのアクセスを制御する記憶装置制御回路をさらに有し、
該キャッシュ制御回路内の該先読みデータ要求回路は、該一群の先読みデータ読み出し要求のいずれかが指定するデータが該キャッシュメモリに保持されていない場合、そのデータを含む第2のブロックを該記憶装置から読み出すことを要求する第2のブロック転送要求を該記憶装置制御回路に出力する回路を有し、
該記憶装置制御回路は、該第2のブロック転送要求に応答して、上記第2のブロックを該記憶装置から読み出し、該キャッシュメモリに転送し、かつ、該読み出された第2のブロック内の該指定されたデータを該プリフェッチ回路に供給する記憶装置アクセス回路を有する請求項2記載の情報処理装置。 - 該キャッシュ制御回路内の該先読みデータ要求回路は、
該一群の先読みデータのいずれかが該キャッシュメモリに保持されていないときには、そのデータを該記憶装置から読み出すことおよびそのデータを該プリフェッチ回路に転送することを要求する先読みデータ転送要求もしくは上記第2のブロック転送要求のいずれか一方を該記憶制御回路に供給する回路と、
該先読み要求が特定の指定を含むか否かに依存して、上記先読みデータ転送要求と上記第2のブロック転送要求のいずれを出力するかに関して上記先読みデータ要求回路を制御する回路とを有し、
該記憶装置制御回路内の上記記憶装置アクセス回路は、
該第2のブロック転送要求に応答して、上記第2のブロックを該記憶装置から読み出し、該キャッシュメモリに転送すとともに、該読み出された第2のブロック内の、該指定されたデータを該プリフェッチ回路に供給する回路と、
上記先読みデータ転送要求に応答して、その要求が指定するデータを該記憶装置から読み出し、該プリフェッチ回路に供給する回路とを有する請求項3記載の情報処理装置。 - 該キャッシュ制御回路は、該処理装置から供給された書き込み要求に応答して、その要求が指定する、該記憶装置へ書き込むべきデータを、該キャッシュメモリに書き込む回路を有し、
該プリフェッチ回路は、該データ書き込み要求に応答して、その要求が指定する上記データが、該一群のデータの一つとして保持されているか否かを検出する回路と、
該書き込み要求が指定するデータが、該一群のデータの一つとして保持されている場合には、その保持されたデータを無効とする回路とを有し、
上記データ転送禁止回路は、該処理装置から出力されたデータ読み出し要求が指定するデータが、該一群の記憶領域に保持されているが無効にされている場合に、そのデータの転送を該キャッシュ制御装置には禁止しない回路からなる請求項3記載の情報処理装置。 - (a)プログラムとデータを保持する記憶装置と、
(b)該プログラムに含まれた複数の命令を順次実行する処理装置と、
(c)該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該処理装置は、
(b1)命令で指定可能な複数のレジスタと、
(b2)それぞれ先読みすべき一群のデータのデータ構造を指定する情報と、その一群のデータのアドレスの算出に使用する該一群のデータに対して共通なベースアドレスを保持するベースレジスタの番号とを少なくとも指定する複数の先読み要求を該プリフェッチ回路に供給する回路と、
(b3)該記憶装置からデータを読み出すことを要求するデータ読み出し命令に応答して、該複数のレジスタの内、その命令が指定するベースレジスタ番号を有するいずれかのレジスタの内容と、その命令が指定する他のアドレス情報とに基づいて、そのデータのアドレスを算出する回路と、
(b4)その算出されたアドレスとともにその指定されたベースレジスタ番号を含むデータ読み出し要求を該プリフェッチ回路に供給する回路とを有し、
各先読み要求で要求された一群のデータの読み出しを要求する一群のデータ読み出し命令が、その先読み要求が指定したベースレジスタ番号と同じベースレジスタ番号を指定するように、該プログラムはプログラムされ、
該プリフェッチ回路は、
(c1)それぞれ先読みされた一群のデータを保持するための複数群の順序付けられた記憶領域と、
(c2)該処理装置が発行した複数の先読み要求の各々に応答して該複数群の記憶領域のいずれか一群の記憶領域をその先読み要求に割り当てる回路と、
(c3)各群の記憶領域に対応して、その一群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を記憶する回路と、
(c4)各先読み要求が指定する一群のデータを該記憶装置から順次読み出し、その先読み要求に割り当てられた一群の記憶領域に、予め定めた記憶領域の順に従って順次格納する先読みデータ読み出し回路と、
(c5)該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、そのデータ読み出し要求が指定するベースレジスタ番号を指定した先読み要求に割り当てられた一群の記憶領域があるか否かを、各群の記憶領域に対応して記憶されたベースレジスタ番号に基づいて検出する回路と、
(c6)上記データ読み出し要求が指定するベースレジスタに割り当てられた一群の記憶領域がある場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有し、
該先読みデータ供給回路は、各群の記憶領域に保持された一群の先読みデータを、その一群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を指定する一群のデータ読み出し要求に応答して該所定の記憶領域の順にしたがって順次読み出す回路を有する情報処理装置。 - 上記処理装置は、上記先読みすべき一群のデータとして一定要素間隔の単純ベクトルを指定する回路を有する請求項6の情報処理装置。
- 上記処理装置は、上記先読みすべき一群のデータとして該単純ベクトルを一定間隔にて配置して得られる2次元配列を指定する回路を有する請求項6の情報処理装置。
- 上記処理装置は、上記先読みすべき一群のデータとして単純ベクトルとその参照要素番号であるインデクスを格納する単純ベクトルからなるインデクス付きベクトルを指定する回路を有する請求項6の情報処理装置。
- 上記処理装置は、上記先読みすべき一群のデータとしてテーブル内要素に次段のテーブル位置情報が格納されているリンクリストを指定する回路を有する請求項6の情報処理装置。
- (a)プログラムとデータを保持する記憶装置と、
(b)該プログラムに含まれた複数の命令を順次実行する処理装置と、
(c)該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該処理装置は、該記憶装置から読み出すべき一群のデータを指定するデータ群指定情報として、その一群のデータのアドレスを算出するのに使用する少なくとも一つの他のデータ群を指定するデータ群指定情報を含む先読み要求を該プリフェッチ回路に供給する回路を有し、
該プリフェッチ回路は、(c1)それぞれ一群のデータを保持するための複数群の順序付けられた記憶領域と、
(c2)該先読み要求に応答して、上記他のデータ群を該記憶装置から順次読み出し、該複数群の記憶領域の内の第1群の記憶領域に、予め定めた記憶領域の順に従って順次格納する第1のデータ読み出し回路と、
(c3)該第1群の記憶領域に格納された該他のデータ群に基づいて、該一群のデータのアドレスを順次生成する回路と、
(c4)該生成されたアドレスに基づいて、該記憶装置から、該一群のデータを順次読み出し、読み出された該一群のデータを、該複数群の記憶領域の内の第2群の記憶領域に、予め定めた記憶領域の順に従って順次格納する第2のデータ読み出し回路と、
(c5)該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、その読み出し要求が要求するデータが該第2群の記憶領域に保持されているかを、そのデータ読み出し要求が指定するアドレス情報に基づいて検出する回路と、
(c6)上記データ読み出し要求が指定するデータが該第2群の記憶領域に保持されている場合に、その第2群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有する情報処理装置。 - (a)プログラムとデータを保持する記憶装置と、
(b)該プログラムに含まれた複数の命令を順次実行する処理装置と、
(c)該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、該処理装置は、複数の部分データ群からなり、各部分データ内の複数のデータは、それぞれ第1の所定のアドレス間隔で隔たったアドレスを有し、隣接する部分データ群が第2の所定のアドレス間隔で隔たっている、一群のデータを該記憶装置から先読みすることを要求する先読み要求を該プリフェッチ回路に供給する回路を有し、
該プリフェッチ回路は、
(c1)一群の順序付けられた記憶領域と、
(c2)該先読み要求に応答して、該一群のデータのアドレスを順次生成する回路であって、
各部分データ群に属する複数のデータのアドレスを上記第1のアドレス間隔を用いて順次生成する第1のアドレス生成回路と、
その部分データ群の複数のデータのアドレスの生成を終了する毎に、該第2のアドレス間隔を使用して次の部分データ群の先頭のデータのアドレスを生成する第2のアドレス生成回路とを有するものと、
(c3)該アドレス生成回路により該順次生成されたアドレスに基づいて、該記憶装置から、該一群のデータを順次読み出し、読み出された該第1群のデータを、該一群の記憶領域に、予め定めた記憶領域の順に従って順次格納するデータ読み出し回路と、
(c4)該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、その読み出し要求が要求するデータが該一群の記憶領域に保持されているかを、そのデータ読み出し要求が指定するアドレス情報に基づいて検出する回路と、
(c5)上記データ読み出し要求が指定するデータが該一群の記憶領域に
保持されている場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有する情報処理装置。 - (a)プログラムとデータを保持する記憶装置と、
(b)該プログラムに含まれた複数の命令を順次実行する処理装置と、
(c)該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該処理装置は、(b1)各命令を実行するか否かを規定するためのマスクレジスタと、(b2)先読みすべき一群のデータのデータ構造を指定する情報と、各先読み要求が要求する一群のデータの読み出しを要求する命令の実行を、該マスクレジスタの内容に依存して実行すべきか否かを規定するマスク使用情報とを少なくとも指定する先読み要求を該プリフェッチ回路に供給する回路と、
(b3)該記憶装置からデータを読み出すことを要求するデータ読み出し命令に応答して、その命令が指定するアドレス情報と、該マスクレジスタの内容とを該プリフェッチ回路に供給する回路を有し、
該プリフェッチ回路は、(c1)それぞれ先読みされた一群のデータを保持するための一群の順序付けられた記憶領域と、
(c2)該処理装置が発行した先読み要求に応答して、該先読み要求が指定する一群のデータを該記憶装置から順次読み出し、該一群の記憶領域に、予め定めた記憶領域の順に従って順次格納する先読みデータ読み出し回路と、
(c3)該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、その読み出し要求が要求するデータが該一群の記憶領域に保持されているかを、そのデータ読み出し要求が指定するアドレス情報に基づいて検出する回路と、
(c4)上記データ読み出し要求が指定するデータが該一群の記憶領域に保持されている場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有し、
該先読みデータ供給回路は、該処理装置から出力された複数のデータ読み出し要求の内、該一群の記憶領域に保持された一群の先読みデータの読み出しを要求する一群のデータ読み出し要求に応答して、該一群の先読みデータを該所定の記憶領域の順にしたがって順次読み出す回路と、
上記先読み要求に付随して該処理装置から供給されたマスク使用情報が該一群のデータ読み出し要求の実行を、該マスクレジスタの内容に依存すべきことを指定し、かつ、上記一群の読み出し要求のいずれかに付随して該処理装置から供給された上記マスクレジスタの内容が所定の値であるときに、該一群の記憶領域の内、そのデータ読み出し要求が要求するデータを読み飛ばすように該順次読み出し回路を制御する回路を有する情報処理装置。 - プログラムとデータを格納する記憶装置と、
該プログラムに含まれた命令を実行する処理装置と、
該記憶装置と該処理装置の間に設けられたプリフェッチ回路とを有し、
該プリフェッチ回路は、上記処理装置から与えられる、該プログラムが後に参照する一群のデータからなるデータ構造を指定する情報に従って、該一群のデータを参照する命令の実行時点より先行する時点にて、該一群のデータを順次該記憶装置より読み出する先読み手段と、
該先読み手段により読みだされたデータを格納するための先読みデータ格納手段と、
該一群のデータのいずれかを参照する命令が上記処理装置で実行されたときに、そのデータを該先読みデータ格納手段から取り出し該処理装置に転送する先読みデータ転送手段と、
上記プログラムの実行中に割り込みが発生した場合に、上記データ構造を指定する情報と、割り込みが発生した時点での先読み制御情報と、その時点での先読みデータ転送制御情報とからなる割り込み時点情報を退避する手段と、
該割り込みに対して実行される割り込み処理プログラムの実行が終了した後、該プログラムに復帰する時点において、該退避された割り込み時点情報を回復する手段と、
該割り込みが発生した時点において該先読みデータ格納手段に保持されていた先読みデータの内、該処理装置への転送が終了していなかった先読みデータを無効とする手段を有する情報処理装置。
Priority Applications (4)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP00738895A JP3548616B2 (ja) | 1995-01-20 | 1995-01-20 | 情報処理装置 |
| EP96100414A EP0723221B1 (en) | 1995-01-20 | 1996-01-12 | Information processing apparatus for prefetching data structure either from a main memory or its cache memory |
| DE69620807T DE69620807T2 (de) | 1995-01-20 | 1996-01-12 | Datenverarbeitungsvorrichtung zum Vorziehen einer Datenstruktur aus dem Hauptspeicher oder seinem Cachespeicher |
| US08/588,503 US5721865A (en) | 1995-01-20 | 1996-01-18 | Information processing apparatus with prefetch control for prefetching data structure from memory through cache memory |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP00738895A JP3548616B2 (ja) | 1995-01-20 | 1995-01-20 | 情報処理装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH08194615A JPH08194615A (ja) | 1996-07-30 |
| JP3548616B2 true JP3548616B2 (ja) | 2004-07-28 |
Family
ID=11664551
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP00738895A Expired - Fee Related JP3548616B2 (ja) | 1995-01-20 | 1995-01-20 | 情報処理装置 |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US5721865A (ja) |
| EP (1) | EP0723221B1 (ja) |
| JP (1) | JP3548616B2 (ja) |
| DE (1) | DE69620807T2 (ja) |
Families Citing this family (46)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6065108A (en) * | 1996-01-24 | 2000-05-16 | Sun Microsystems Inc | Non-quick instruction accelerator including instruction identifier and data set storage and method of implementing same |
| US5925100A (en) * | 1996-03-21 | 1999-07-20 | Sybase, Inc. | Client/server system with methods for prefetching and managing semantic objects based on object-based prefetch primitive present in client's executing application |
| US5983324A (en) * | 1996-03-28 | 1999-11-09 | Hitachi, Ltd. | Data prefetch control method for main storage cache for protecting prefetched data from replacement before utilization thereof |
| US5887151A (en) * | 1997-07-10 | 1999-03-23 | Emc Corporation | Method and apparatus for performing a modified prefetch which sends a list identifying a plurality of data blocks |
| US6058461A (en) | 1997-12-02 | 2000-05-02 | Advanced Micro Devices, Inc. | Computer system including priorities for memory operations and allowing a higher priority memory operation to interrupt a lower priority memory operation |
| US6247107B1 (en) * | 1998-04-06 | 2001-06-12 | Advanced Micro Devices, Inc. | Chipset configured to perform data-directed prefetching |
| US6055580A (en) * | 1998-05-29 | 2000-04-25 | 3Com Corporation | System for transferring length round down to cache line multiple capable to determine type of read request which selects and reads portion of prefetched data in memory |
| JP3506024B2 (ja) | 1998-12-10 | 2004-03-15 | 日本電気株式会社 | 情報処理装置 |
| US6311260B1 (en) * | 1999-02-25 | 2001-10-30 | Nec Research Institute, Inc. | Method for perfetching structured data |
| US6449697B1 (en) * | 1999-04-23 | 2002-09-10 | International Business Machines Corporation | Prestaging data into cache in preparation for data transfer operations |
| JP3968914B2 (ja) | 1999-06-02 | 2007-08-29 | 株式会社日立製作所 | ディスクアレイ装置 |
| US6754779B1 (en) * | 1999-08-23 | 2004-06-22 | Advanced Micro Devices | SDRAM read prefetch from multiple master devices |
| JP3739607B2 (ja) | 1999-08-24 | 2006-01-25 | 富士通株式会社 | 情報処理装置 |
| US6862657B1 (en) * | 1999-12-21 | 2005-03-01 | Intel Corporation | Reading data from a storage medium |
| EP1160662A1 (en) | 2000-03-10 | 2001-12-05 | Texas Instruments France | Processor with pointer tracking to eliminate redundant memory fetches |
| US6934807B1 (en) * | 2000-03-31 | 2005-08-23 | Intel Corporation | Determining an amount of data read from a storage medium |
| US6629178B1 (en) | 2000-06-15 | 2003-09-30 | Advanced Micro Devices, Inc. | System and method for controlling bus access for bus agents having varying priorities |
| JP3979009B2 (ja) * | 2000-07-07 | 2007-09-19 | 株式会社デンソー | 制御情報出力装置及び情報システム |
| US6598124B1 (en) | 2000-09-29 | 2003-07-22 | Sun Microsystems, Inc. | System and method for identifying streaming-data |
| US6782454B1 (en) | 2000-09-29 | 2004-08-24 | Sun Microsystems, Inc. | System and method for pre-fetching for pointer linked data structures |
| AU2001294788A1 (en) * | 2000-09-29 | 2002-04-08 | Sun Microsystems, Inc. | System and method for pre-fetching for pointer linked data structures |
| US6668307B1 (en) | 2000-09-29 | 2003-12-23 | Sun Microsystems, Inc. | System and method for a software controlled cache |
| US6578111B1 (en) | 2000-09-29 | 2003-06-10 | Sun Microsystems, Inc. | Cache memory system and method for managing streaming-data |
| CN1537275A (zh) * | 2001-02-24 | 2004-10-13 | �Ҵ���˾ | 低等待时间存储器系统访问 |
| US20020188424A1 (en) * | 2001-04-20 | 2002-12-12 | Grinstein Georges G. | Method and system for data analysis |
| US20030154363A1 (en) * | 2002-02-11 | 2003-08-14 | Soltis Donald C. | Stacked register aliasing in data hazard detection to reduce circuit |
| US6874067B2 (en) * | 2002-04-11 | 2005-03-29 | International Business Machines Corporation | Eliminating unnecessary data pre-fetches in a multiprocessor computer system |
| US6957306B2 (en) * | 2002-09-09 | 2005-10-18 | Broadcom Corporation | System and method for controlling prefetching |
| DE10254653B4 (de) * | 2002-11-22 | 2009-05-28 | Infineon Technologies Ag | Vorrichtung zur Steuerung der Verarbeitung von Datenwörtern eines Datenstroms |
| US7058938B2 (en) * | 2003-03-05 | 2006-06-06 | Intel Corporation | Method and system for scheduling software pipelined loops |
| US7284014B2 (en) | 2003-04-07 | 2007-10-16 | Hitachi, Ltd. | Pre-fetch computer system |
| US20050071542A1 (en) * | 2003-05-13 | 2005-03-31 | Advanced Micro Devices, Inc. | Prefetch mechanism for use in a system including a host connected to a plurality of memory modules via a serial memory interconnect |
| US7529895B2 (en) | 2003-08-22 | 2009-05-05 | International Business Machines Corporation | Method for prefetching non-contiguous data structures |
| US7111126B2 (en) * | 2003-09-24 | 2006-09-19 | Arm Limited | Apparatus and method for loading data values |
| US7246203B2 (en) * | 2004-11-19 | 2007-07-17 | Motorola, Inc. | Queuing cache for vectors with elements in predictable order |
| US7761666B2 (en) | 2006-10-26 | 2010-07-20 | Intel Corporation | Temporally relevant data placement |
| JP5068552B2 (ja) * | 2007-02-02 | 2012-11-07 | ルネサスエレクトロニクス株式会社 | プリフェッチ方法、及びキャッシュ機構用ユニット |
| WO2008155812A1 (ja) * | 2007-06-18 | 2008-12-24 | Fujitsu Limited | プロセッサおよびプリフェッチ支援プログラム |
| JPWO2009098737A1 (ja) * | 2008-02-08 | 2011-05-26 | パナソニック株式会社 | 外部デバイスアクセス装置、その制御方法及びシステムlsi |
| US8364901B2 (en) * | 2009-02-13 | 2013-01-29 | Micron Technology, Inc. | Memory prefetch systems and methods |
| US8954680B2 (en) * | 2011-11-20 | 2015-02-10 | International Business Machines Corporation | Modifying data prefetching operation based on a past prefetching attempt |
| WO2014107148A1 (en) | 2013-01-03 | 2014-07-10 | Intel Corporation | Adaptive data prefetching |
| US9996350B2 (en) * | 2014-12-27 | 2018-06-12 | Intel Corporation | Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array |
| US20170177349A1 (en) * | 2015-12-21 | 2017-06-22 | Intel Corporation | Instructions and Logic for Load-Indices-and-Prefetch-Gathers Operations |
| US10248569B2 (en) * | 2016-08-11 | 2019-04-02 | Futurewei Technologies, Inc. | Pattern based preload engine |
| US12299446B2 (en) * | 2017-06-28 | 2025-05-13 | Texas Instruments Incorporated | Streaming engine with stream metadata saving for context switching |
Family Cites Families (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4860199A (en) * | 1987-07-31 | 1989-08-22 | Prime Computer, Inc. | Hashing indexer for branch cache |
| US4888679A (en) * | 1988-01-11 | 1989-12-19 | Digital Equipment Corporation | Method and apparatus using a cache and main memory for both vector processing and scalar processing by prefetching cache blocks including vector data elements |
| US5163140A (en) * | 1990-02-26 | 1992-11-10 | Nexgen Microsystems | Two-level branch prediction cache |
| WO1993018459A1 (en) * | 1992-03-06 | 1993-09-16 | Rambus Inc. | Prefetching into a cache to minimize main memory access time and cache size in a computer system |
| JPH06222990A (ja) * | 1992-10-16 | 1994-08-12 | Fujitsu Ltd | データ処理装置 |
| JP2744882B2 (ja) * | 1993-01-15 | 1998-04-28 | インターナショナル・ビジネス・マシーンズ・コーポレイション | キューにより命令の実行を制御する装置及び方法 |
| US5537573A (en) * | 1993-05-28 | 1996-07-16 | Rambus, Inc. | Cache system and method for prefetching of data |
-
1995
- 1995-01-20 JP JP00738895A patent/JP3548616B2/ja not_active Expired - Fee Related
-
1996
- 1996-01-12 EP EP96100414A patent/EP0723221B1/en not_active Expired - Lifetime
- 1996-01-12 DE DE69620807T patent/DE69620807T2/de not_active Expired - Fee Related
- 1996-01-18 US US08/588,503 patent/US5721865A/en not_active Expired - Lifetime
Also Published As
| Publication number | Publication date |
|---|---|
| EP0723221A2 (en) | 1996-07-24 |
| DE69620807T2 (de) | 2002-11-28 |
| EP0723221B1 (en) | 2002-04-24 |
| DE69620807D1 (de) | 2002-05-29 |
| JPH08194615A (ja) | 1996-07-30 |
| EP0723221A3 (en) | 1997-05-14 |
| US5721865A (en) | 1998-02-24 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP3548616B2 (ja) | 情報処理装置 | |
| EP0747816B1 (en) | Method and system for high performance multithread operation in a data processing system | |
| US7386701B2 (en) | Prefetching hints | |
| US6230260B1 (en) | Circuit arrangement and method of speculative instruction execution utilizing instruction history caching | |
| US6151662A (en) | Data transaction typing for improved caching and prefetching characteristics | |
| US6161166A (en) | Instruction cache for multithreaded processor | |
| EP1031919B1 (en) | Method for prefetching structured data | |
| US4985825A (en) | System for delaying processing of memory access exceptions until the execution stage of an instruction pipeline of a virtual memory system based digital computer | |
| US5835951A (en) | Branch processing unit with target cache read prioritization protocol for handling multiple hits | |
| US5835967A (en) | Adjusting prefetch size based on source of prefetch address | |
| US5692168A (en) | Prefetch buffer using flow control bit to identify changes of flow within the code stream | |
| AU632324B2 (en) | Multiple instruction preprocessing system with data dependency resolution | |
| JP3739491B2 (ja) | プリフェッチ命令を用いるハーバードアーキテクチャキャッシュメモリの調和したソフトウェア制御 | |
| US6351796B1 (en) | Methods and apparatus for increasing the efficiency of a higher level cache by selectively performing writes to the higher level cache | |
| US7219185B2 (en) | Apparatus and method for selecting instructions for execution based on bank prediction of a multi-bank cache | |
| US5870599A (en) | Computer system employing streaming buffer for instruction preetching | |
| JPH0782438B2 (ja) | コンピュータ・システム | |
| JPH0588888A (ja) | アドレス生成機構及びデータの事前取り出し方法 | |
| EP0394624B1 (en) | Multiple sequence processor system | |
| JP2003533822A (ja) | ダイレクトマップドキャッシュとフルアソシアティブバッファとを含んだキャッシュシステム及びその制御方法 | |
| JPH09128293A (ja) | 情報処理装置 | |
| JPH08278886A (ja) | データ処理システムでの拡張システム管理操作のための方法およびシステム | |
| GB2273186A (en) | Register expansion in a data processing unit. | |
| US5732253A (en) | Branch processing unit with target cache storing history for predicted taken branches and history cache storing history for predicted not-taken branches | |
| US20080052470A1 (en) | Runtime register allocator |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 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: 20040413 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040419 |
|
| 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: 20080423 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080423 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090423 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090423 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100423 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110423 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120423 Year of fee payment: 8 |
|
| LAPS | Cancellation because of no payment of annual fees |
