(57)【特許請求の範囲】
【請求項１】
（ａ）プログラムとデータを保持する記憶装置と、
（ｂ）該プログラムに含まれた複数の命令を実行する処理装置と、
（ｃ）該記憶装置内の複数のブロックを保持するキャッシュメモリと、
（ｄ）該キャッシュメモリへのアクセスを制御するキャッシュ制御回路と、
（ｅ）該プログラムが指定する一群のデータをそのプログラムが使用する前に、その一群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該プリフェッチ回路は、
（ｅ１）順序付けられた一群の記憶領域と、
（ｅ２）該処理装置が発行したデータ先読み要求に応答し、その要求が指定する一群のデータの読み出しを要求する一群の先読みデータ読み出し要求を該キャッシュ制御回路に対し順次発行し、該一群の先読みデータ読み出し要求に対する応答として該一群のデータ
が後に供給されたときに、該供給された一群のデータを該一群の記憶領域に、所定の記憶領域の順番に従って順次書き込む先読みデータ要求回路と、
（ｅ３）該処理装置から発行されたデータ読み出し要求に応答し、そのデータ読み出し要求が指定するデータが該一群の記憶領域に保持されているか否かを検出し、該指定されたデータが該一群の記憶領域に保持されている場合、該保持されたデータを該処理装置に転送する先読みデータ供給回路とを有し、
該キャッシュ制御回路は、
（ｄ１）該先読みデータ要求回路が発行した各先読みデータ読み出し要求に応答し、その要求が指定するデータが該キャッシュメモリに保持されている場合、そのデータを該プリフェッチ回路に転送する先読みデータ転送回路と、
（ｄ２）該一群の先読みデータ読み出し要求のいずれかが指定するデータが該キャッシュメモリに保持されていない場合、少なくともそのデータの読み出しを該記憶装置に要求する先読みデータ要求回路とを有する情報処理装置。
【請求項２】
該プリフェッチ回路は、
（ｅ４）該処理装置から発行された上記データ読み出し要求により指定された上記データが該一群の記憶領域に保持されている場合、該キャッシュ制御回路がそのデータを該キャッシュメモリから該処理装置に転送するのを禁止するデータ転送禁止回路をさらに有し、
該キャッシュ制御回路は、
（ｄ３）該処理装置から発行された上記データ読み出し要求が指定する上記データが該キャッシュメモリに保持されている場合、上記転送禁止回路によりそのデータの転送が禁止されていないことを条件に、その保持されたデータを該処理装置に転送する読み出しデータ転送回路と、
（ｄ４）上記データ読み出し要求が指定したデータが該キャッシュメモリに保持されていない場合には、そのデータの転送が上記データ転送禁止回路により禁止されていないことを条件に、該データを含む第１のブロックを該キャッシュメモリへ転送することを要求する第１のブロック転送要求を該記憶装置に出力し、該記憶装置から該キャッシュメモリにそのブロックが転送されたときに、その第１のブロックに含まれた該指定されたデータを該処理装置に転送する読み出しデータ要求回路とをさらに有する請求項１記載の情報処理装置。
【請求項３】
該記憶装置へのアクセスを制御する記憶装置制御回路をさらに有し、
該キャッシュ制御回路内の該先読みデータ要求回路は、該一群の先読みデータ読み出し要求のいずれかが指定するデータが該キャッシュメモリに保持されていない場合、そのデータを含む第２のブロックを該記憶装置から読み出すことを要求する第２のブロック転送要求を該記憶装置制御回路に出力する回路を有し、
該記憶装置制御回路は、該第２のブロック転送要求に応答して、上記第２のブロックを該記憶装置から読み出し、該キャッシュメモリに転送し、かつ、該読み出された第２のブロック内の該指定されたデータを該プリフェッチ回路に供給する記憶装置アクセス回路を有する請求項２記載の情報処理装置。
【請求項４】
該キャッシュ制御回路内の該先読みデータ要求回路は、
該一群の先読みデータのいずれかが該キャッシュメモリに保持されていないときには、そのデータを該記憶装置から読み出すことおよびそのデータを該プリフェッチ回路に転送することを要求する先読みデータ転送要求もしくは上記第２のブロック転送要求のいずれか一方を該記憶制御回路に供給する回路と、
該先読み要求が特定の指定を含むか否かに依存して、上記先読みデータ転送要求と上記第２のブロック転送要求のいずれを出力するかに関して上記先読みデータ要求回路を制御する回路とを有し、
該記憶装置制御回路内の上記記憶装置アクセス回路は、
該第２のブロック転送要求に応答して、上記第２のブロックを該記憶装置から読み出し、該キャッシュメモリに転送すとともに、該読み出された第２のブロック内の、該指定されたデータを該プリフェッチ回路に供給する回路と、
上記先読みデータ転送要求に応答して、その要求が指定するデータを該記憶装置から読み出し、該プリフェッチ回路に供給する回路とを有する請求項３記載の情報処理装置。
【請求項５】
該キャッシュ制御回路は、該処理装置から供給された書き込み要求に応答して、その要求が指定する、該記憶装置へ書き込むべきデータを、該キャッシュメモリに書き込む回路を有し、
該プリフェッチ回路は、該データ書き込み要求に応答して、その要求が指定する上記データが、該一群のデータの一つとして保持されているか否かを検出する回路と、
該書き込み要求が指定するデータが、該一群のデータの一つとして保持されている場合には、その保持されたデータを無効とする回路とを有し、
上記データ転送禁止回路は、該処理装置から出力されたデータ読み出し要求が指定するデータが、該一群の記憶領域に保持されているが無効にされている場合に、そのデータの転送を該キャッシュ制御装置には禁止しない回路からなる請求項３記載の情報処理装置。
【請求項６】
（ａ）プログラムとデータを保持する記憶装置と、
（ｂ）該プログラムに含まれた複数の命令を順次実行する処理装置と、
（ｃ）該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該処理装置は、
（ｂ１）命令で指定可能な複数のレジスタと、
（ｂ２）それぞれ先読みすべき一群のデータのデータ構造を指定する情報と、その一群のデータのアドレスの算出に使用する該一群のデータに対して共通なベースアドレスを保持するベースレジスタの番号とを少なくとも指定する複数の先読み要求を該プリフェッチ回路に供給する回路と、
（ｂ３）該記憶装置からデータを読み出すことを要求するデータ読み出し命令に応答して、該複数のレジスタの内、その命令が指定するベースレジスタ番号を有するいずれかのレジスタの内容と、その命令が指定する他のアドレス情報とに基づいて、そのデータのアドレスを算出する回路と、
（ｂ４）その算出されたアドレスとともにその指定されたベースレジスタ番号を含むデータ読み出し要求を該プリフェッチ回路に供給する回路とを有し、
各先読み要求で要求された一群のデータの読み出しを要求する一群のデータ読み出し命令が、その先読み要求が指定したベースレジスタ番号と同じベースレジスタ番号を指定するように、該プログラムはプログラムされ、
該プリフェッチ回路は、
（ｃ１）それぞれ先読みされた一群のデータを保持するための複数群の順序付けられた記憶領域と、
（ｃ２）該処理装置が発行した複数の先読み要求の各々に応答して該複数群の記憶領域のいずれか一群の記憶領域をその先読み要求に割り当てる回路と、
（ｃ３）各群の記憶領域に対応して、その一群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を記憶する回路と、
（ｃ４）各先読み要求が指定する一群のデータを該記憶装置から順次読み出し、その先読み要求に割り当てられた一群の記憶領域に、予め定めた記憶領域の順に従って順次格納する先読みデータ読み出し回路と、
（ｃ５）該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、そのデータ読み出し要求が指定するベースレジスタ番号を指定した先読み要求に割り当てられた一群の記憶領域があるか否かを、各群の記憶領域に対応して記憶されたベースレジスタ番号に基づいて検出する回路と、
（ｃ６）上記データ読み出し要求が指定するベースレジスタに割り当てられた一群の記憶領域がある場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有し、
該先読みデータ供給回路は、各群の記憶領域に保持された一群の先読みデータを、その一群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を指定する一群のデータ読み出し要求に応答して該所定の記憶領域の順にしたがって順次読み出す回路を有する情報処理装置。
【請求項７】
上記処理装置は、上記先読みすべき一群のデータとして一定要素間隔の単純ベクトルを指定する回路を有する請求項６の情報処理装置。
【請求項８】
上記処理装置は、上記先読みすべき一群のデータとして該単純ベクトルを一定間隔にて配置して得られる２次元配列を指定する回路を有する請求項６の情報処理装置。
【請求項９】
上記処理装置は、上記先読みすべき一群のデータとして単純ベクトルとその参照要素番号であるインデクスを格納する単純ベクトルからなるインデクス付きベクトルを指定する回路を有する請求項６の情報処理装置。
【請求項１０】
上記処理装置は、上記先読みすべき一群のデータとしてテーブル内要素に次段のテーブル位置情報が格納されているリンクリストを指定する回路を有する請求項６の情報処理装置。
【請求項１１】
（ａ）プログラムとデータを保持する記憶装置と、
（ｂ）該プログラムに含まれた複数の命令を順次実行する処理装置と、
（ｃ）該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該処理装置は、該記憶装置から読み出すべき一群のデータを指定するデータ群指定情報として、その一群のデータのアドレスを算出するのに使用する少なくとも一つの他のデータ群を指定するデータ群指定情報を含む先読み要求を該プリフェッチ回路に供給する回路を有し、
該プリフェッチ回路は、（ｃ１）それぞれ一群のデータを保持するための複数群の順序付けられた記憶領域と、
（ｃ２）該先読み要求に応答して、上記他のデータ群を該記憶装置から順次読み出し、該複数群の記憶領域の内の第１群の記憶領域に、予め定めた記憶領域の順に従って順次格納する第１のデータ読み出し回路と、
（ｃ３）該第１群の記憶領域に格納された該他のデータ群に基づいて、該一群のデータのアドレスを順次生成する回路と、
（ｃ４）該生成されたアドレスに基づいて、該記憶装置から、該一群のデータを順次読み出し、読み出された該一群のデータを、該複数群の記憶領域の内の第２群の記憶領域に、予め定めた記憶領域の順に従って順次格納する第２のデータ読み出し回路と、
（ｃ５）該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、その読み出し要求が要求するデータが該第２群の記憶領域に保持されているかを、そのデータ読み出し要求が指定するアドレス情報に基づいて検出する回路と、
（ｃ６）上記データ読み出し要求が指定するデータが該第２群の記憶領域に保持されている場合に、その第２群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有する情報処理装置。
【請求項１２】
（ａ）プログラムとデータを保持する記憶装置と、
（ｂ）該プログラムに含まれた複数の命令を順次実行する処理装置と、
（ｃ）該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、該処理装置は、複数の部分データ群からなり、各部分データ内の複数のデータは、それぞれ第１の所定のアドレス間隔で隔たったアドレスを有し、隣接する部分データ群が第２の所定のアドレス間隔で隔たっている、一群のデータを該記憶装置から先読みすることを要求する先読み要求を該プリフェッチ回路に供給する回路を有し、
該プリフェッチ回路は、
（ｃ１）一群の順序付けられた記憶領域と、
（ｃ２）該先読み要求に応答して、該一群のデータのアドレスを順次生成する回路であって、
各部分データ群に属する複数のデータのアドレスを上記第１のアドレス間隔を用いて順次生成する第１のアドレス生成回路と、
その部分データ群の複数のデータのアドレスの生成を終了する毎に、該第２のアドレス間隔を使用して次の部分データ群の先頭のデータのアドレスを生成する第２のアドレス生成回路とを有するものと、
（ｃ３）該アドレス生成回路により該順次生成されたアドレスに基づいて、該記憶装置から、該一群のデータを順次読み出し、読み出された該第１群のデータを、該一群の記憶領域に、予め定めた記憶領域の順に従って順次格納するデータ読み出し回路と、
（ｃ４）該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、その読み出し要求が要求するデータが該一群の記憶領域に保持されているかを、そのデータ読み出し要求が指定するアドレス情報に基づいて検出する回路と、
（ｃ５）上記データ読み出し要求が指定するデータが該一群の記憶領域に
保持されている場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有する情報処理装置。
【請求項１３】
（ａ）プログラムとデータを保持する記憶装置と、
（ｂ）該プログラムに含まれた複数の命令を順次実行する処理装置と、
（ｃ）該プログラムが指定する複数群のデータを該プログラムが使用する前に、該複数群のデータを該記憶装置から先読みするプリフェッチ回路とを有し、
該処理装置は、（ｂ１）各命令を実行するか否かを規定するためのマスクレジスタと、（ｂ２）先読みすべき一群のデータのデータ構造を指定する情報と、各先読み要求が要求する一群のデータの読み出しを要求する命令の実行を、該マスクレジスタの内容に依存して実行すべきか否かを規定するマスク使用情報とを少なくとも指定する先読み要求を該プリフェッチ回路に供給する回路と、
（ｂ３）該記憶装置からデータを読み出すことを要求するデータ読み出し命令に応答して、その命令が指定するアドレス情報と、該マスクレジスタの内容とを該プリフェッチ回路に供給する回路を有し、
該プリフェッチ回路は、（ｃ１）それぞれ先読みされた一群のデータを保持するための一群の順序付けられた記憶領域と、
（ｃ２）該処理装置が発行した先読み要求に応答して、該先読み要求が指定する一群のデータを該記憶装置から順次読み出し、該一群の記憶領域に、予め定めた記憶領域の順に従って順次格納する先読みデータ読み出し回路と、
（ｃ３）該処理装置から発行された該記憶装置に対するデータ読み出し要求に応答して、その読み出し要求が要求するデータが該一群の記憶領域に保持されているかを、そのデータ読み出し要求が指定するアドレス情報に基づいて検出する回路と、
（ｃ４）上記データ読み出し要求が指定するデータが該一群の記憶領域に保持されている場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを有し、
該先読みデータ供給回路は、該処理装置から出力された複数のデータ読み出し要求の内、該一群の記憶領域に保持された一群の先読みデータの読み出しを要求する一群のデータ読み出し要求に応答して、該一群の先読みデータを該所定の記憶領域の順にしたがって順次読み出す回路と、
上記先読み要求に付随して該処理装置から供給されたマスク使用情報が該一群のデータ読み出し要求の実行を、該マスクレジスタの内容に依存すべきことを指定し、かつ、上記一群の読み出し要求のいずれかに付随して該処理装置から供給された上記マスクレジスタの内容が所定の値であるときに、該一群の記憶領域の内、そのデータ読み出し要求が要求するデータを読み飛ばすように該順次読み出し回路を制御する回路を有する情報処理装置。
【請求項１４】
プログラムとデータを格納する記憶装置と、
該プログラムに含まれた命令を実行する処理装置と、
該記憶装置と該処理装置の間に設けられたプリフェッチ回路とを有し、
該プリフェッチ回路は、上記処理装置から与えられる、該プログラムが後に参照する一群のデータからなるデータ構造を指定する情報に従って、該一群のデータを参照する命令の実行時点より先行する時点にて、該一群のデータを順次該記憶装置より読み出する先読み手段と、
該先読み手段により読みだされたデータを格納するための先読みデータ格納手段と、
該一群のデータのいずれかを参照する命令が上記処理装置で実行されたときに、そのデータを該先読みデータ格納手段から取り出し該処理装置に転送する先読みデータ転送手段と、
上記プログラムの実行中に割り込みが発生した場合に、上記データ構造を指定する情報と、割り込みが発生した時点での先読み制御情報と、その時点での先読みデータ転送制御情報とからなる割り込み時点情報を退避する手段と、
該割り込みに対して実行される割り込み処理プログラムの実行が終了した後、該プログラムに復帰する時点において、該退避された割り込み時点情報を回復する手段と、
該割り込みが発生した時点において該先読みデータ格納手段に保持されていた先読みデータの内、該処理装置への転送が終了していなかった先読みデータを無効とする手段を有する情報処理装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、主記憶装置等の記憶装置から配列データ等の特定の構造を有する一群のデータを先読みする情報処理装置に関する。
【０００２】
【従来の技術】
従来の高性能情報処理装置は一般的に命令処理装置とキャッシュ及びメモリ装置を有する。該情報処理装置はメモリにプログラムとデータを格納し、プログラムに記述された命令に従いメモリ中のデータを処理する。キャッシュは命令処理装置からの参照時間の短かい比較的小容量の記憶手段であり、該プログラム及びデータの一部を一時的に格納する。命令実行にあたり必要なデータはメモリから読みだされるが、同時に該データを含むデータブロックはキャッシュを構成するラインにコピーされ、以後当該ブロック内のデータに対する参照が指定されたときは該キャッシュのラインからデータを参照する。このメモリからキャッシュラインへのデータブロックの転送をブロックもしくはライン転送と呼ぶ。命令実行にあたり必要データがキャッシュにない場合、これをキャッシュミスと呼ぶ。キャッシュミスが発生するとライン転送が実行される。従来の情報処理装置では命令実行に伴いこのライン転送が発生するとその完了までは当該命令の実行が待ち合わされる。従って、キャッシュミスが多発するとライン転送に伴う待ち合わせにより該プログラムの実行時間が増大し、該情報処理装置の処理性能が劣化するという問題があった。特に大規模データを扱う技術計算やデータベース処理において深刻であった。
【０００３】
これに対し、最近では予めプログラムにおいて、キャッシュミスを引き起こす可能性のある命令に先だってデータの先読みを指示する特殊な命令を実行させることで上記ライン転送に伴う性能劣化を回避する試みがなされている。このデータ先読みをデータプリフェッチあるいは単にプリフェッチとも呼ぶ。例えば米国ヒューレットパッカード社のマイクロプロセッサＰＡ７１００では汎用レジスタ０番へのメモリ参照命令（以後ロードＧＲ０型プリフェッチ命令と呼ぶ）はこのプリフェッチを実現する一つの手段として定義されている（以下第１の従来技術と呼ぶことがある）。このロードＧＲ０型プリフェッチ命令は指定したオペランドアドレスに位置するデータの読みだしを行なうがその結果は読み捨てる。この動作において、キャッシュミスを発生した場合当該命令を待ち合わせることなくライン転送を行なう。従って後刻に上記データを参照する命令を実行する時には該データがキャッシュに入っているために上記性能劣化が回避される。
【０００４】
しかしながら、該プリフェッチ命令を用いた場合、以下に記すような４つの問題がある。第１の問題は、該プリフェッチを用いて、例えば、ベクトルデータを順次参照するループ構造のプログラムを実行すると、一つのベクトル要素に対して、演算数を格納するレジスタへデータをロードするためのメモリ参照命令と当該プリフェッチ命令の計２命令を実行する必要があるため、これに伴う命令処理時間が増大する点である。もし多くのデータがキャッシュに入っているプログラムに対し該プリフェッチ命令を加えたコードを実行したとすると、加えないプログラムに比べ命令処理時間が増大し、返って性能が劣化する可能性がある。
【０００５】
第２の問題は、該プリフェッチ命令はプログラム中に記述されるためなんらかの原因で当該プログラムの実行が待ち合わされた場合、該プリフェッチ命令自身の実行も待ち合わされるため早期にデータ読み出しを開始すると言うプリフェッチの効果が減少する点である。これを避けるためには該プリフェッチ命令を対応するメモリ参照命令に対して極めて早期に発行する必要があるが、これは当該プログラムの構造を複雑にし、またプログラムサイズを大きくするという問題点を引き起こす。
【０００６】
第３の問題は、該ロードＧＲ０型プリフェッチ命令によると大規模なベクトルデータを順次キャッシュに取り込むため、キャッシュに既に格納されている他のデータを追い出すことになりこのためのキャッシュミスを増大させ、結果として該処理装置の性能を低下させる可能性のある点である。
【０００７】
第４の問題はロードＧＲ０型プリフェッチによるとデータ参照はキャッシュのライン単位となるため、非連続なベクトルデータの参照に適用した場合、参照しないデータまで読みだすための性能劣化が生じうる。
【０００８】
他の従来技術として、プロセッサにて初期設定され、以後プロセッサとは非同期にデータ読みだしを行なうプリフェッチユニットを設ける技術が提案されている。例えば、「お茶の水１号の構成と評価」、情報処理学会研究報告、計算機アーキテクチャ１０１−８、１９９３．８．２０、ｐｐ．５７−６４参照。以下、この文献記載の技術を第２の従来技術と呼ぶことがある。この従来技術では、複数のプロセッサを有するシステムにおいて、各プロセッサごとに配列データをプリフェッチする技術が開示されている。すなわち、各プロセッサにより指示された、プリフェッチすべき配列データのアドレス、ストライド、レングスに従って、そのプロセッサ用に設けたプリフェッチ制御部がこの配列データの複数の要素をプリフェッチし、そのプロセッサに対応して設けたプリフェッチバッファに格納する技術が示されている。
【０００９】
【発明が解決しようとする課題】
この第２の従来技術によれば、上記第１の従来技術に関して述べた問題は軽減される。しかし、この第２の従来技術を実現するに当たり次の問題もある。
【００１０】
この第２の従来技術では、各プロセッサに対応して主記憶のデータを保持するキャッシュメモリが開示されているが、このキャッシュメモリをプリフェッチユニットによるデータのプリフェッチ時にどのように使用するかに関する記載はない。
【００１１】
さらに、この第２の従来技術では、一つの配列に属する複数のデータのプリフェッチのみを行なえる技術しか記載がない。しかし、実際のプログラムには、複数の配列を使用するのが通常である。
【００１２】
さらに、この第２の従来技術では、上記の配列内の複数のデータのごとく、互いに一定のアドレス間隔で隔たったアドレスを有する複数のデータのプリフェッチを実行する技術が開示されているのみである。しかするに、プログラムで処理される一群のデータの中には、インデックス付きベクトルのごとく、他の一群のデータによりアドレスが決まるデータもある。
【００１３】
上記第２の従来技術を実用化するには、その他いろいろの解決すべき問題がある。
【００１４】
本発明は上記第２の従来技術の問題点を解決し、より機能の高いプリフェッチ回路を有する情報処理装置を提供することを目的とする。
【００１５】
本発明のより具体的な目的は、主記憶等の記憶装置に対するキャッシュメモリをプリフェッチ時に上手く利用することにより、プリフェッチの高速化を図る情報処理装置を提供することである。
【００１６】
本発明の他の目的は、複数群のデータをプリフェッチ可能な情報処理装置を提供することである。
【００１７】
本発明のさらに他の目的は、インデックス付きのベクトルを構成する一群のデータをプリフェッチ可能な情報処理装置を提供することである。
【００１８】
本発明のさらに他の目的は、上記第２の従来技術が有する他の実用上の問題点を解決した情報処理装置を提供することである。
【００１９】
【課題を解決するための手段】
上記目的を達成するため、本願第１の発明では、処理装置から要求された先読みすべき一群のデータをプリフェッチする回路内には、それらのデータのプリフェッチのために動作する回路として、その一群のデータに対する一群の読み出し要求をキャッシュメモリに対するアクセスを制御するキャッシュ制御回路に順次出力し、この一群の読み出し要求に対する応答として供給される一群のデータをプリフェッチ回路内に設けた一群の順序付けられた記憶領域に順次格納する先読みデータ要求回路を設ける。
【００２０】
さらに、キャッシュ制御回路には、それらの一群のデータのプリフェッチ時に動作する回路として、
これらの一群のデータ読み出し要求で指定される一群のデータのいずれかがキャッシュメモリにあるときには、そのデータをキャッシュメモリからプリフェッチ回路に転送する回路と、
該一群の先読みデータ読み出し要求のいずれかが指定するデータが該キャッシュメモリに保持されていない場合、少なくともそのデータを該記憶装置から読み出すことを該記憶制御回路に要求する先読みデータ要求回路を設ける。
【００２１】
この記憶装置制御回路には、この先読みデータ要求回路からの要求が指定するデータをプリフェッチ回路に供給する記憶装置アクセス回路を設ける。
【００２２】
さらに、プリフェッチ回路内には、すでにプリフェッチされた一群のデータを処理装置が利用するときに動作する回路として、
該処理装置から発行されたデータ読み出し要求が指定するデータが該一群の記憶領域に保持されているか否かを検出し、該指定されたデータが該一群の記憶領域に保持されている場合、該保持されたデータを該処理装置に転送する先読みデータ供給回路を設ける。
【００２３】
これにより、上記一群のデータのプリフェッチ時に、キャッシュメモリ内にあるデータをプリフェッチ回路が要求したときには、そのデータをキャッシュメモリからプリフェッチ回路に供給することが出来、そのデータのプリフェッチを高速に実行できる。
【００２４】
本発明のより望ましい態様では、プリフェッチ回路内には、該指定されたデータが該一群の記憶領域に保持されている場合、該キャッシュ制御回路がそのデータを該キャッシュメモリから該処理装置に転送するのを禁止するデータ転送禁止回路とを設ける。
【００２５】
本願第２の発明により、同じデータがキャッシュメモリにも、プリフェッチ回路内にも保持されることになるが、後に処理装置がプリフェッチされたデータを使用する場合、プリフェッチ回路からそのデータを処理装置に提供し、上記禁止回路によりキャッシュメモリからそのデータを提供するのを禁止することにより、誤って同じデータが２重に処理装置に供給されるのを防ぐとともに、プリフェッチ回路では、プリフェッチされたデータが処理装置に読み出されたか否かをの管理を正しく行ない得る。
【００２６】
本発明の他の望ましい態様では、プリフェッチ要求された一群のデータのいずれかがキャッシュメモリにないに存在しない場合、そのデータを含むブロックを、キャッシュメモリに転送することを要求する回路をキャッシュ制御回路内に設けた。これにより、処理装置が要求した一群のデータ内に、そのブロックに属する他のデータが複数存在する場合には、それらの他のデータのプリフェッチは、この転送されたブロック内のデータを使用して高速に行ない得る。しかし、先読みする一群のデータを構成する複数のデータの内、同一のブロックに同時に属するデータがゼロもしくは少ない場合もあり得る。この場合には、上記第１の従来技術で述べた第３、第４の問題が発生し得る。従って、本願発明のより望ましい態様では、このブロック転送をするか否かを、処理装置が先読み要求の一部として指定した情報に依存して制御する回路を設ける。
【００２７】
さらに、本願第２の発明では、複数群のデータのプリフェッチを実行可能にするために、処理装置内に、先読み要求の一部として、先読みすべき一群のデータのアドレスの算出に使用するベースレジスタの番号を指定する複数の先読み要求をプリフェッチ回路に供給する回路を設ける。
【００２８】
プリフェッチ回路内には、
先読みされたデータ用の複数群の順序付けられた記憶領域と、
処理装置が発行した複数の先読み要求に対して、これらの複数群の記憶領域のいずれか一群の記憶領域を割り当てる回路と、
各群の記憶領域に対応して、その一群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を記憶する回路と、
各群の記憶領域が割り当てられた先読み要求が指定したベースレジスタ番号を記憶する回路とを設ける。
【００２９】
これにより、これらの複数群の記憶領域を異なる先読み要求が指定する異なるベースレジスタ番号に関連付ける。
【００３０】
さらに、処理装置内に、記憶装置からデータを読み出すことを要求するデータ読み出し命令に応答して、データ読み出し要求を上記プリフェッチ回路に供給する際に、その命令が指定するベースレジスタ番号をそのデータ読み出し要求の一部としてプリフェッチ回路に供給する回路を設ける。
【００３１】
プリフェッチ回路内には、
処理装置から発行されたデータ読み出し要求に応答して、そのデータ読み出し要求が指定するベースレジスタ番号を指定した先読み要求に割り当てられた一群の記憶領域があるか否かを、各群の記憶領域に対応して記憶されたベースレジスタ番号に基づいて検出する回路と、
上記データ読み出し要求が指定するベースレジスタに割り当てられた一群の記憶領域がある場合に、その一群の記憶領域に保持されている先読みデータを該処理装置に転送する先読みデータ供給回路とを設ける。
【００３２】
これにより、複数群のデータを先読みしてプリフェッチ回路内に保持した上で、処理装置で実行される異なるデータ読み出し要求が指定する異なるベースレジスタ番号により、これらの複数群の記憶領域を利用可能にする。
【００３３】
さらに、本願第３の発明によれば、インデックス付きベクトルを構成する一群のデータをプリフェッチするために、そのベクトルのインデックスとして使用される他のデータ群をまずプリフェッチし、プリフェッチ回路内に保持し、この他のデータ群を使用して上記一群のデータ群をプリフェッチする回路がプリフェッチ回路に設けられる。これにより、インデックス付きベクトルをプリフェッチ回路を使用してプリフェッチ可能になる。
【００３４】
さらに本願の他の発明によれば、他の問題を解決した情報処理装置が与えられる。
【００３５】
【実施例】
以下、本発明に係るディスクアレイを図面に示した実施例を参照してさらに詳細に説明する。
【００３６】
＜装置の概略＞
図１は本発明による情報処理装置の実施例の全体構成を示す。但し、入出力装置等周辺装置は省略してある。
１はメモリであり、プログラムとデータを格納する。２はプロセッサであり、メモリ１に格納されたプログラムに含まれた命令を順次読み出し、順次それらを実行する。３はキャッシュメモリユニットであり、メモリ１の一部分の写しを格納するキャッシュメモリ１００１を内蔵する。４はシステム制御装置であり、プロセッサ２からのメモリリクエスト（メモリ参照要求）に応じキャッシュメモリ１００１もしくはメモリ１を参照するための回路であるが、本実施例ではプリフェッチユニット１０５を含むのが大きな特徴である。
【００３７】
この回路の詳細は後述するので、ここではプリフェッチユニット１０５及びそれによるデータプリフェッチ動作の概要を記す。プリフェッチユニット１０５はプロセッサ２で実行するプログラムにより初期設定されるプリフェッチ制御情報に基づいて、この情報が指定する一群のデータ、例えば、ある配列の複数の要素の先読み（プリフェチ）をプロセッサ２での命令実行とは非同期に実行し、先読みしたデータを、このプリフェッチユニット１０５内に設けた複数のプリフェッチデータレジスタ（ＰＤＲ）（７０４（図７））の一つに一時的に格納し、さらにこのデータを必要とするメモリ参照命令がプロセッサ２にて後に実行される時に、この命令が指定する、プリフェッチ済みのデータをこのレジスタからプロセッサ２に転送する。したがって、このデータがキャッシュメモリ１００４にない場合に、メモリ１からプロセッサ２にこのデータを供給する従来の場合より早く、データを供給できるようにしている。
【００３８】
プリフェッチ制御情報は、プロセッサ２で実行中のプログラムにより、プロセッサ２内の汎用レジスタＧＲに予め作成され、初期設定命令にしたがってプロセッサ２から信号線１０６を介してプリフェッチユニット１０５内に転送され、プリフェッチユニット１０５内に設けられたプリフェッチ状態制御レジスタ（ＰＦＲ）に書き込む。ＰＦＲは後述するように、プリフェッチ状態レジスタ（ＰＳＲ）（３０１（図３））とプリフェッチ制御レジスタ（ＰＣＲ）（３０２（図３）との組みを指す。書き込みすべきレジスタの番号を示すＰＦＲ書き込みレジスタ番号ＰＦＲＷＮがこの初期設定命令で指定され、プロセッサ２からプリフェッチユニット１０５に供給される。
【００３９】
プリフェッチユニット１０５は、プリフェッチ制御情報が指定する一群のデータのプリフェッチを以下のようにしてキャッシュリクエストユニット１０１の制御の元で行なう。まず、信号線１０７を介してキャッシュリクエストユニット１０１へプリフェッチリクエストＰＦＲＥＱ、プリフェチアドレスＰＦＡ、プリフェッチすべきデータに関するプリフェッチ制御情報を保持するＰＣＲの番号を示すＲＥＱＰＣＲＮ、プリフェッチしたデータを格納する、ＰＤＲ内の位置を示すＰＤＲＴＰ信号、そしてライン転送の有無を指定するＢＵＦ信号を送出する。
【００４０】
キャッシュリクエストユニット１０１は、このプリフェッチアドレスで示されたデータがキャッシュメモリ１００１内に保持されているか否かを検出し、そのデータがキャッシュメモリ１００４に保持されている場合には、このアドレスＰＦＡに対応するキャッシュアドレスＣＡＤＲを線１１３２を介してキャッシュユニット３に送り、そのデータの読み出しを要求する。このデータＣＤＡＴＡはキャッシュメモリ１００１から線１０８を介してプリフェッチユニット１０５に送られる。キャッシュリクエストユニット１０１は、このプリフェッチユニット１０５に信号線１２０を介してデータ送出指令ＣＡＤＶ信号、ＰＤＲ番号ＣＷＰＤＲＮ、ＰＤＲ内格納位置ＣＰＤＲＩＰを送出し、プリフェッチユニット１０５は、これらの信号に従って、データＣＤＡＴＡをＰＤＲ内に保持する。キャッシュリクエストユニット１０１は、プリフェッチユニット１０５から要求されたデータがキャッシュメモリ１００１にない場合には、メモリ読み出し要求ＭＲＥＱ、メモリアドレスＭＡＤＲをメモリリクエストユニット１０３に送り、メモリ１からのこのデータの読み出しを要求する。
【００４１】
このユニット１０３は、メモリ１にこれらの信号を送出するとともに、メモリリクエストユニット１０３から信号線１２１を介してデータ送出指令ＭＡＤＶ、ＰＤＲ番号ＭＷＰＤＲＮ、ＰＤＲ内格納位置ＭＰＤＲＩＰをプリフェッチユニット１０５に送る。メモリ１からこのデータが読み出されると、メモリデータユニット１０４は、このデータＭＤＡＴＡを線１０９を介してプリフェッチユニット１０５に送出する。プリフェッチ要求されたデータに対してライン転送が指定されていないときは、このデータはキャッシュメモリ１００１には書き込まない。
【００４２】
プリフェッチユニット１０５は、プリフェッチすべき一群のデータに対して、以上の動作を繰り返す。ここで、上記の如くプロセッサ２とは独立したプリフェッチユニットからデータ参照要求を出力して処理としている点が重要である。各ＰＤＲは、プリフェッチされた一群のデータを保持する複数の順序付けられた記憶位置を有し、プリフェッチされた一群のデータをこれらの記憶位置の順に従って順次異なる記憶位置に保持し、またこれらのデータの読み出しが要求されたときには、後に説明するように、これらの記憶位置の順にしたがって順次プリフェッチ済みのデータを読み出すようになっている。これにより、一群のデータの書き込み位置、読み出し位置の制御を簡単になるようにしている。とくに、単純ベクトルよりも複雑な構造にて関連付けられた一群のデータを保持するのに適している。
【００４３】
もし、プリフェッチすべきデータに対してライン転送が指定されている場合には、プリフェッチすべきデータの読み出しをメモリリクエストユニット１０３に要求するときにライン転送要求ＬＴを供給する。この場合、メモリデータユニット１０４は、このライン転送要求ＬＴにしたがって読み出された１ブロックのデータをキャッシュメモリユニット３に、線１０９、キャッシュデータユニット１０２、線１１４を介して送出する動作が追加される。同じブロック内の複数のデータがプリフェッチ要求される場合には、ライン転送を行なうことが有効である。本実施例では、プリフェッチ制御情報の中に含められた、ライン転送の有無を指定するＢＵＦ信号の値により、このライン転送をするか否かをプログラムで指定可能になっている。
【００４４】
プロセッサ２がデータの読み出しを必要とするメモリ参照命令を実行するとき、プロセッサ２はその要求が指定するデータがプリフェッチ要求済みか否かに拘らず、通常通りにキャッシュリクエストユニット１０１にメモリ参照要求ＰＲＲＥＱ及びメモリアドレスＰＲＡＤＲを送出すると同時に、プリフェッチユニット１０５にメモリリクエストＰＲＲＥＱ、メモリ参照命令解読情報ＬＤ、及び上記メモリ参照命令のベースレジスタ番号ＢＲＮを信号線１０６を介して送出する。
【００４５】
プリフェッチユニット１０５は、この要求されたデータがそのユニット内の複数のＰＤＲの内のいずれかに保持されているか否かを判別し、要求されたデータがＰＤＲに存在した場合はそのデータＤＡＴＡ及びＰＤＲヒット信号ＰＤＲＨＩＴを信号線１１０を介してキャッシュデータユニット１０２に送出し、さらに信号線１１４を介してキャッシュメモリユニット３に転送し、そのユニット３を通過して最後に信号線１０８を経由してプロセッサ２に転送する。このため、ＤＡＴＡの転送指令ＰＤＲＨＩＴを信号線１１１を介してキャッシュメモリユニット３に送出し、これにより信号線１１４により転送した上記データは後述するキャッシュメモリユニット３内部のバイパスを経由して信号線１０８に出力する。
【００４６】
本実施例では、データのプリフェッチのときに、そのデータをキャッシュメモリ１００１から読み出すことを許したので、一般にプロセッサ２が読み出しを要求したデータが、プリフェッチユニット１０５のいずれかのＰＤＲ内に存在するとともに、キャッシュメモリ１００１にも存在する可能性がある。本実施例では、ＰＤＲ内に存在するデータについては、ＰＤＲから供給するが、そのデータをキャッシュメモリから読み出さないようにしている。このために、キャッシュメモリユニット３は、ＰＤＲヒット信号が与えられた場合にはＰＤＲから読み出されたデータＤＡＴＡを線１０８に送出するようになっている。これにより、プリフェッチユニットおよびキャッシュメモリ１００１の両方が同じデータを出力しないようにするとともに、プリフェッチユニット１０５内のデータを優先的に処理装置に送出することにより、後に詳細に説明するように、プリフェッチユニット１０５内のデータの管理を、キャッシュメモリ１００１でのヒットの有無に依らないで、管理出来るようになっている。
【００４７】
なお、プロセッサからのデータ読み出しのための上記メモリ参照要求に対して、プリフェッチユニット１０５がヒットしなかった場合には、以下のようにして、キャッシュメモリ１００１およびメモリ１からのデータの読み出しが行なわれる。キャッシュリクエストユニット１０１は信号線１２２を介してプロセッサ２から供給されるメモリリクエストＰＲＲＥＱ及びオペランドアドレスＰＲＡＤＲをを受付け、この要求で指定されるデータを含むデータブロックがキャッシュメモリ１００１に存在するか否かのチェックを行ない、もし存在すれば信号線１１３を介してキャッシュメモリユニット３に対し、当該データブロックのキャッシュメモリアドレスＣＡＤＲを送出する。もし存在しなければ信号線１１５を介してメモリリクエストユニット１０３に対し、当該データを読みだすためのメモリリクエストＭＲＥＱ及びアドレスＭＡＤＲを発行する。本実施例では、通常そうであるように、プロセッサからのデータメモリ参照要求に対して、キャッシュメモリ１００１がヒットしなかった場合には、メモリリクエストユニット１０３は、このメモリアドレスＭＡＤＲのデータを含むブロックの読み出しをメモリ１に要求し、メモリデータユニット１０４は、このブロック内のデータをキャッシュメモリ１００１に転送する。
【００４８】
また、プロセッサ１から供給されたメモリ参照要求ＰＲＲＥＱがデータ書き込み要求であれば、書き込みデータはプロセッサ２から信号線１１９を介してキャッシュデータユニット１０２に転送され、引き続き信号線１１４を介してキャッシュメモリ１００１へ書き込まれる。本実施例ではキャッシュへの書き込み方式はいわゆるストアイン方式を採用するものとするので、書き込みデータはメモリ１へ転送する必要はない。データのメモリ１への反映はキャッシュメモリ１００１上の変更されたデータブロックがラインから追い出されるときにメモリ１へ該データブロックを書き戻すことにより実現される。このためキャッシュメモリ１００１から読みだされたデータブロックは信号線１０８を介してメモリデータユニット１０４へ転送され、引き続き信号線１１８を介してメモリ１へ書き込まれる。
【００４９】
このデータ書き込みのためのメモリ参照要求に伴う問題点として、プリフェッチによりデータを読み出した後にプロセッサ２が当該データを変更するストア命令を実行した場合、このストア命令がプログラム上、当該データを参照するメモリ参照命令の前にあった場合は、プリフェッチしたデータは有効でなくなる。本実施例では、プリフェッチデータに付随してそのアドレスの少なくとも一部を保持し、これとプロセッサ２が実行するストア命令のアドレスを逐一比較し、もしあるプリフェッチデータのアドレスに関してそれを無効化する変更がなされた可能性のある場合はこれを検出し、無効なデータに対してはメモリ参照命令実行時にＰＤＲでなくメモリを参照することにより変更後のデータを取り出すようにして解決していることも重要な特徴である。以上の制御のために、プロセッサ２から信号線１０６を介してストア命令実行指令ＳＴ、オペランドアドレスＰＲＡＤＲをプリフェッチユニット１０５に送出する。さらにＰＤＲＨＩＴ信号をキャッシュリクエストユニット１０１に送出する。
【００５０】
また、本実施例では、プロセッサがプリフェッチ制御情報をプリフェッチユニット１０５に出力するときおよびメモリ参照要求を発行するとき、いずれもベースレジスタ番号ＢＲＮを指定するようになっている。これにより、プリフェッチされた一群のデータを保持するＰＤＲをこのプリフェッチ制御情報が指定するベースレジスタ番号に対応させ、後にプロセッサ１がデータ、データ読み出しのためのメモリ参照要求を出力したときに指定するベースレジスタ番号でもって、その番号に対応付けられたＰＤＲがあるか否かを検出し、対応するＰＤＲがある場合に、そのＰＤＲ内の一群のプリフェッチされたデータの一つを読み出すようになっている。これにより、複数群のデータを保持するための回路を簡単化している。
【００５１】
本実施例では、さらに、単純ベクトルを構成する一群のデータだけでなく、インデクス付きベクトルあるいはリンクベクトルなどを構成する要素のごとく、複雑な構造を有する一群のデータをもプリフェッチ可能になっている。
【００５２】
また、本実施例では、配列の複数行に属するデータから成る一群のデータを続けてプリフェッチ可能にするために、プリフェッチするデータのアドレス間隔を、プリフェッチするデータに応じて変更する、いわゆるアドレススキップも実現する。
【００５３】
さらに、条件付きメモリ参照命令が実行を抑止された時においてもプリフェッチしたデータを空転送によりスキップすることで、ループ内にＩＦ文がある場合でも本実施例を適用可能にしている。
【００５４】
また、本実施例は、プロセッサ２での命令実行に対して発生した割り込みにも対処可能になっている。すなわち、割り込み信号ＩＮＴを信号線１０６を介してプリフェッチユニットに通知する。これを受けてプリフェッチ動作は中断させる。割り込み処理の後に再び中断したプリフェッチを再開する場合、ＰＣＲとＰＳＲの退避回復を行う。このため、これらプリフェッチ関連のレジスタを読み出すためのレジスタ番地情報ＰＦＲＲＮを信号線１０６を介してプリフェッチユニットに送出する。読み出された情報は信号線１１２を介してプロセッサ２に送出される。
【００５５】
本実施例のその他の特徴を含めて、本実施例の構造と動作をより詳細に以下に説明する。
【００５６】
＜プロセッサ＞
図１１はプロセッサ２の概略構成である。１１０１は命令制御ユニットでありメモリ１からの命令の読み出し回路１１０１Ａと命令解読回路１１０１Ｂを有する。１１０２はリクエスト制御ユニットであり、命令制御ユニット１１０１からの要求に基づき、命令読み出しリクエストやメモリデータの読み出しあるいは書き込みを要求するメモリリクエストＰＲＲＥＱを生成する。内部に小容量のプロセッサキャッシュ１１０２Ａを設ける構成も可能である。１１０３は演算制御ユニットで、内部に演算器１１０３Ａ、汎用レジスタ（ＧＲ）の群１１０３Ｂ、浮動小数点レジスタ群１１０３Ｃ、マスクレジスタ１０３Ｄなどを有する。
【００５７】
リクエスト制御ユニット１１０２は、メモリリクエストＰＲＲＥＱとそのアドレスＰＲＡＤＲを信号線１２２を介してキャッシュリクエストユニット１０１へ送出し、書き込みの場合は書き込みデータを信号線１１９を介してキャッシュデータユニット１０２へ送出する。このユニット１１０２は、メモリ参照命令によるリクエストに付随して、その解読情報ＬＤとそのベースレジスタ番号ＢＲＮを命令制御ユニット１１０１から受け取り、マスクレジスタ値ＭＫを演算制御ユニット１１０３から受け取り、上記ＰＲＲＥＱ、ＰＲＡＤＲと伴に信号線１０６を介してプリフェッチユニット１０５へ送出する。ストア命令によるリクエストに付随しては命令制御ユニット１１０１からストア命令実行指令ＳＴを受取り、これを同様にプリフェッチユニット１０５に送出する。データの読み出し要求の場合には、読み出しデータはキャッシュメモリユニット３から信号線１０８を介してリクエストユニット１１０２に供給される。
【００５８】
命令制御ユニット１１０１からプリフェッチレジスタＰＦＲに対する参照命令を受け取った場合は、参照要求信号ＰＦＲＲＥＱを生成し、読み出し、書き込みのレジスタを指定するＰＦＲＲＮ、ＰＦＲＷＮを生成し、書き込みの場合は汎用レジスタＧＲを読み出してこれらを信号線１０６を介してプリフェッチユニット１０５に送出する。読み出したＰＦＲの内容は信号線１１２によりプリフェッチユニット１０５より入力する。
【００５９】
また、演算制御ユニット１１０３は、命令実行にあたり、割り込み要因を検出し、検出した場合ＩＮＴ信号を生成、信号線１０６を介してプリフェッチユニット１０５に通知する。さらに、リクエスト制御ユニット１１０２は、プリフェッチユニット１０５から信号線１１２を介してＰＤＲＷＡＩＴ信号を入力し、プリフェッチデータレジスタＰＤＲからのデータが到着しない場合、この信号に従って以後のメモリリクエストＰＲＲＥＱの発行を保留するようになっている。
【００６０】
＜プリフェッチ対象とするデータ構造の例＞
プリフェッチ制御を詳細に説明する前に、本実施例になるプリフェチ方式の適用対象となるデータ構造を説明する。本プリフェッチ方式の対象データ構造は図１３に示す４種類である。同図には各構造データを参照するプログラム例を付記する。
【００６１】
１）シーケンシャルベクトル
図１３（１ａ）で示すデータ構造は長さｌの要素Ｎ個がメモリ１上で連続的に並んだベクトルであり、先頭アドレスは＆Ｂ（１）である。各要素はＢ（１）、Ｂ（２）、、、Ｂ（Ｎ）で表わされている。これに対する連続的な参照を行うプログラム例を同図（１ｂ）にしめす。この場合、各ループにて参照する要素の間隔は要素長ｌに一致する。また非連続参照を行うプログラム例を同図（１ｃ）に示す。この場合、参照間隔は５×ｌである。
【００６２】
２）インデクス付きベクトル
本データ構造は同図（２ａ）で示す、２つのシーケンシャルベクトルＬ（ｉ）（１≦ｉ≦Ｎ）およびＢ（ｊ）（１≦ｊ≦Ｍ）からなる。それぞれの要素長、先頭アドレスはｌＬ、＆Ｌ（１）及び、ｌＢ、＆Ｂ（１）である。インデクス付きベクトルでは第１レベル（以下インデクスベクトル、リストベクトルとも）Ｌ（ｉ）の各要素は、第２レベル（以下ターゲットベクトル）Ｂ（ｊ）の要素番号を差し示している。
【００６３】
同図（２ｂ）にインデクス付きベクトルを参照するプログラム例をしめす。この例ではインデクスベクトルに対する参照は連続する要素に対して順に行われる。ユーザのコードによっては、一つのインデクスベクトルが複数のターゲットベクトルの参照に用いられることがある。本実施例はこの場合でも適用可能である。
【００６４】
３）単純リンクリストのアレイ
本データ構造は同図（３ａ）で示す様に、複数レベルのデータの集合からなる。最上位レベルは先頭アドレスａ、要素長ｌＬからなるシーケンシャルベクトルであり、その各要素ｂ、ｂ’、、、、、ｂ”は第２レベルのデータの置かれるテーブルの先頭アドレスを保持する。第２レベル以下のデータは各レベルともテーブル中のデータであり、テーブルの先頭アドレスと先頭からの変位にて位置が指定される。本実施例では該変位は同一レベル内では全てのデータについて一定の場合を対象としているが、各データ毎にこれを可変とすることの拡張も可能である。最下位レベルを除き、第２レベル以下のデータは次のレベルのデータを格納するテーブルの先頭アドレスを示している。
【００６５】
この図の例では最上位のベクトルの先頭要素ｂは第２レベルのデータｃを含むデーブルＣを示し、所定の変位ｊの位置にｃが置かれている。ｃは第３レベルのデータｄを含むテーブルＤを示し、所定の変位ｋの位置にｄが置かれている。ｄは最下位レベルのデータｅを含むテーブルＥを示し、所定の変位ｌの位置にｅが置かれている。同図（３ｂ）にこの単純リンクリストアレイを参照するプログラム例を掲げる。この例の他、本機能はＣ言語で記述が容易なｓｔｒｕｃｔのアレイの参照に適している。
【００６６】
４）ツリーのアレイ
本データ構造は３）の単純リンクリストのアレイと極めて類似しており、同図（４ａ）で示す様に、複数レベルのデータの集合からなる。最上位レベルは先頭アドレスａ、要素長ｌＬからなるシーケンシャルベクトルであり、その各要素ｂ、ｂ’、、、、、ｂ”は第２レベルのデータの置かれるテーブルの先頭アドレスを保持する。第２レベル以下のデータは各レベルともテーブル中のデータであり、テーブルの先頭アドレスと先頭からの変位にて位置が指定される。
【００６７】
前に３）で述べた単純リンクリストのアレイとの違いは第２レベル以下のデータが、対応する１レベル上位のデータに対して複数存在する点である。これら複数のデータは同一のテーブル上におかれ、該テーブルの先頭からの変位が予め指定される。本実施例では該変位は同一レベル内では全てのデータについて一定の場合を対象としているが、各データ毎にこれを可変とすることの拡張も可能である。最下位レベルを除き、第２レベル以下のデータは次のレベルのデータを格納するテーブルの先頭アドレスを示している。
【００６８】
この図の例では最上位のベクトルの先頭要素ｂは第２レベルのデータｃ及びｄを含むデーブルＣＤを示し、所定の変位ｊ及びｋの位置にｃ及びｄが置かれている。ｃは最下位レベルのデータｅを含むテーブルＥを示し、所定の変位ｌの位置にｅが置かれている。ｄは最下位レベルのデータｆを含むテーブルＦを示し、所定の変位ｍの位置にｆが置かれている。（４ｂ）にこのツリーのアレイを参照するプログラム例を掲げる。
【００６９】
＜命令形式＞
図１７に本実施例で使用する命令の形式を示す。（ａ）は一般命令の形式であり、命令は基本部３２ビット、拡張部１６ビットからなる。基本部は米国ヒューレットパッカード社のＰＡーＲＩＳＣアーキテクチャに準じる。同図（ｂ）にメモリ参照命令の基本部形式を示す。ｏｐは命令コード、ｂはベースレジスタ番号、ｔ／ｒはオペランドレジスタ番号、ｓは空間レジスタ指定、ｉｍ１４は１４ビットの即値である。同図（ｃ）は演算命令の基本部形式を示す。ｏｐ１、ｏｐ２は命令コード、ｒ１、ｒ２はオペランドレジスタ番号、ｔは結果を格納するレジスタ番号、ｃ及びｆは次命令の抑止条件を指定する。詳細は  ”Ｐｒｅｃｉｓｉｏｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ａｎｄ  ＩｎｓｔｒｕｃｔｉｏｎＳｅｔ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ”，付録Ｃー１から５，Ｈｅｗｌｅｔｔ−Ｐａｃｋａｒｄ，１９９２  を参照されたい。
【００７０】
同図（ｄ）に拡張部の形式を示す。ｒｍ、ｔｍは夫々読み出しマスク番号、書き込みマスク番号であり、いずれも図１８で示すマスクレジスタＭＲを指定する。マスクレジスタは１ビットのレジスタ６２本で構成される。マスクレジスタには演算命令の演算結果の条件値を格納する。すなわち演算命令の実行にあたり基本部のｃ及びｆフィールドの指定に従いその演算結果の条件をｔｍで指定するマスクレジスタに格納する。また基本部で指定する命令はｒｍで指定したマスクレジスタの値が１ならば実行され、０ならば抑止される。マスクレジスタにより命令実行の有無を制御することを条件付き実行制御と言う。ｒｍで番号０及び１を指定した場合、恒等的にマスク値０及び１が読みだされる。またｔｍで番号０もしくは１を指定した場合、マスクレジスタの内容は変わらない。
【００７１】
プリフェッチ制御のための特殊命令の仕様を以下に記載する。以下では、［ｍ］は読みだしマスクフィールドで、ｍで指定するマスクレジスタの内容に従い、この命令の実行を制御する。次のフィールドが命令種別を示し、さらにいくつかのオペランドフィールドが引き続く。命令種別とオペランドの意味は各命令毎に説明する。
【００７２】
１）プリフェッチ状態レジスタ（ＰＳＲ）の設定及び退避／回復命令
○Ｍｏｖｅ  ＧＲ  ｔｏ  ＰＳＲ；  ［ｍ］ＭＶＲＰＳＲ，  ｓ１
本命令はｓ１が指定する汎用レジスタ（ＧＲ）の内容に従い、ＰＳＲの値を設定する。本命令はＰＳＲ  の初期設定や割り込み等のコンテクストスイッチ時のＰＳＲの回復に用いる。
【００７３】
○Ｍｏｖｅ  ｔｏ  ＰＳＲ  Ｉｍｍｅｄｉａｔｅ；  ［ｍ］ＭＶＰＳＲＩ，  ｉｍｍ１６
本命令は命令１６ビット即値フィールドに従い、ＰＳＲを設定する。本命令はＰＳＲの初期設定に用いる。
【００７４】
○Ｍｏｖｅ  ＰＳＲ  ｔｏ  ＧＲ；  ［ｍ］ＭＶＰＳＲＲ，  ｔ
本命令はＰＳＲの内容をｔで指定するＧＲに格納する。本命令はＰＳＲ  の参照に用いる。
【００７５】
２）プリフェッチ制御レジスタ（ＰＣＲ）の設定及び退避／回復命令
○Ｍｏｖｅ  ＧＲ  ｔｏ  ＰＣＲ；  ［ｍ］ＭＶＲＰＣＲ，  ｓ１，  ｔ
本命令はｓ１で指定するＧＲの内容に従い、ｔで指定するＰＣＲの値を設定する。本命令はＰＣＲ  の初期設定や割り込み等のコンテクストスイッチ時のＰＣＲの回復に用いる。
【００７６】
○Ｍｏｖｅ  ＰＣＲ  ｔｏ  ＧＲ；  ［ｍ］ＭＶＰＣＲＲ，  ｓ１，    ｔ
本命令は、ｓ１で指定するＰＣＲの内容をｔで指定するＧＲに格納する。本命令はＰＣＲ  の参照や割り込み等のコンテクストスイッチ時のＰＣＲの退避に用いる。
【００７７】
４）制御命令
ＰＳＲやＰＣＲの特定のフィールドのみ更新する命令として以下のものを使用する。
【００７８】
○Ｓｅｔ  ＰＣＲ  ＡＣＴ；  ［ｍ］ＳＰＣＲＡＣＴ，  ｉｍｍ８，  ｔ
本命令はｔで指定するＰＣＲのＡＣＴフラグ（図１４）をｉｍｍ８フィールドの値に従い更新する。
【００７９】
○Ｓｅｔ  ＰＳＲ  ＳＵＳＰ；  ［ｍ］ＳＰＳＲＳＵＳＰ，  ｉｍｍ８
本命令はＰＳＲのＳＵＳＰフラグ（図３）をｉｍｍ８フィールドの値に従い更新する。
【００８０】
○Ｉｎｎｉｔｉａｌｉｚｅ  ＰＣＲ；  ［ｍ］ＩＰＣＲ，  ａｌｌ，  ｔ
本命令はｔで指定するＰＣＲのＶＬＤ及びＡＣＴフラグ（図１４）をリセットする。但しａｌｌが１であれば全てのＰＣＲを対象にリセットを行なう。
【００８１】
○Ｉｎｎｉｔｉａｌｉｚｅ  ＰＤＲ；  ［ｍ］ＩＰＤＲ
本命令は全てのＰＤＳＲの全ての要素について、ＲＣフィールドを０にリセットする。
【００８２】
＜プリフェッチユニット＞
図２にはプリフェッチユニット１０５を構成する４つのユニットと、それらの間の、またそれらとプリフェッチユニット以外の装置構成要素との間でやりとりする主要な信号を示している。各信号の詳細な意味や生成の方法は各ユニット毎の説明図を用いて後で補足説明を行う。ここでは、各ユニットの概略構成とその動作を、図２で示した信号の内、主要なもののみ用いて説明する。
【００８３】
２０１はプリフェッチ状態レジスタ（ＰＳＲ）３０１とプリフェッチ制御レジスタ（ＰＣＲ）３０２に対する読み書きの制御を行うプリフェッチ状態制御ユニットである。ＰＳＲとＰＣＲを併せてプリフェッチ状態制御レジスタ（ＰＦＲ）と呼ぶ。プリフェッチを動作させるにあたり、プロセッサ２によるプログラムの実行によりＰＦＲに対象データ構造やプリフェッチ動作態様を指定するための情報設定を行う。
【００８４】
プログラムによるＰＦＲの設定にあたり、設定情報はプロセッサ２内の汎用レジスタ（ＧＲ）に予め格納しておく。次に前述するプリフェッチ制御命令にて指定するＰＦＲに書き込みを行う。このとき、上記プリフェッチ制御命令の実行に伴い、信号線１０６を介してプロセッサ２からＰＦＲ書き込み指令ＰＦＲＲＥＱとＰＦＲ識別番号ＰＦＲＷＮ及び、上記ＧＲのデータを入力する。
【００８５】
２０２はプリフェッチリクエストの発行並びにそれに伴うＰＣＲ及び後述のプリフェッチデータ状態レジスタＰＤＳＲの更新を行うプリフェッチリクエスト制御ユニットである。プリフェッチリクエスト制御ユニット２０２は信号線２０６を介してＰＳＲ及びＰＣＲを、また信号線２１０を介してプリフェッチデータユニット２０３からＰＤＳＲを読み出し、１６本のＰＣＲのうちからリクエストの発行可能なものがあるかを検査し、あった場合は後述する所定の基準にて次にリクエストを発行するＰＣＲを選択する。そして、信号線２０５を介してプリフェッチリクエストＰＦＲＥＱ及びＰＣＲ番号ＲＥＱＰＣＲＮ（以下この値をｉとする）をプリフェッチ状態制御ユニット２０１に送出する。ＲＥＱＰＣＲＮで指定したｉ番のプリフェッチ制御レジスタＰＣＲｉよりリクエストに付随するフィールドを読み出し、信号線２０６にてこれらを取り込む。以後、ＰＣＲの各フィールドには添え字ｉを付記して表わす。
【００８６】
これらの中の主要なものはプリフェッチアドレスＰＦＡｉと読み出したデータのＰＤＲ内での格納位置を示すＰＤＲ先頭ポインタＰＤＲＴＰｉである。これらは、ＰＦＲＥＱ、ＲＥＱＰＣＲＮ信号と伴に信号線１０７を介してキャッシュリクエストユニット１０１に送出する。また信号線２０９を介してプリフェッチデータユニット２０３のＰＤＳＲの状態をリクエスト発行済みと表示する。このためのＰＤＳＲ位置はＲＥＱＰＣＲＮとＰＤＲＴＰｉにて指定し、また初期設定情報としてはＰＦＡｉの少なくとも一部と後述の参照回数ＮＲｉがある。
【００８７】
次にＰＦＲＥＱの発行にともない、プリフェッチリクエスト制御ユニット２０２は上記ＰＦＡｉとＰＤＲＴＰｉ等のリクエスト発行に関わるＰＣＲｉのフィールドの更新値（以下、ＰＣＲ及びＰＤＳＲの各フィールドの更新値にはフィールド名に’を付す）を生成し、信号線２０５を介してプリフェッチ状態制御ユニット２０１に送出する。このプリフェッチアドレスＰＦＡｉの更新値生成のため、ＰＣＲｉから後述のアドレスモディファイアＭＯＤｉ等を読み出す。なお、以前受け付けたプリフェッチリクエストの処理が完了しないため現在リクエストが受け付けられない状態を示すビジー信号ＲＥＱＢＳＹをキャッシュリクエストユニット１０１より信号線１２０を介してプリフェッチリクエスト制御ユニットに送出する。
【００８８】
プリフェッチデータユニット２０３にはプリフェッチしたデータを一時的に格納するための複数のプリフェッチデータレジスタ（ＰＤＲ）７０４とその読み出し制御情報を格納するプリフェッチデータ状態レジスタ（ＰＤＳＲ）７０５を有する。キャッシュメモリ１００１からプリフェッチデータを読み出した場合、信号線１２０を介してデータ送出指令ＣＡＤＶ、格納ＰＤＲ番号を示すＣＷＰＤＲＮ、及びこのＰＤＲ番号を有するＰＤＲにおける要素位置を示すＣＰＤＲＩＰを取り込み、これに従いキャッシュメモリ１００１からのデータＣＤＡＴＡを格納する。
【００８９】
メモリ１からプリフェッチデータを読み出した場合は、信号線１２１を介してデータ送出指令ＭＡＤＶ、格納ＰＤＲ番号を示すＭＷＰＤＲＮ、及びこのＰＤＲ番号を有するＰＤＲにおける要素位置を示すＭＰＤＲＩＰを取り込み、これに従いデータＭＤＡＴＡを格納する。また、このデータ格納に伴い、ＰＤＳＲの状態をデータ到着済みと表示する。
【００９０】
また、プロセッサ２での割り込み発生に伴い、プリフェッチ動作を中断するために、プリフェッチリクエスト処理の終了を認識するための状態信号ＰＦＢＳＹを信号線２１３を介してプリフェッチ状態制御ユニット２０１に送出する。
【００９１】
２０４はプリフェッチデータレジスタＰＤＲに一時的に格納されているデータをプロセッサ２に転送するための制御を行う、プリフェッチデータ読み出し制御ユニットである。プロセッサ２からは信号線１０６を介してメモリリクエストＰＲＲＥＱとメモリ参照命令解読情報ＬＤを取り込む。このとき、同時にこの命令のオペランドアドレスを格納していたベースレジスタ番号ＢＲＮをキーとして、ＰＤＲとの対応をとるのが本実施例の特徴の一つである。
【００９２】
すなわち、このベースレジスタ番号ＢＲＮに対応するＰＤＲに対応するＰＣＲには予め上記メモリ参照命令のベースレジスタ番号を命令識別子ＩＩＤフィールドに格納しておくので、これと上記ＢＲＮを比較をすることにより当該ＰＤＲが対応することを認識できる。このため全てのＰＣＲのＩＩＤフィールドの値を信号線２０８を介して取り込む。こうして識別したＰＤＲ番号をＲＰＤＲＮ信号（値をｍとする）として信号線２０７を介してプリフェッチ状態制御ユニット２０１に送出し、指定したＰＣＲｍからＰＤＲアウトポインタフィールドＰＤＲＯＰｍ（値をｎとする）を読み出し、信号線２０８を介して取り込む。信号線２１２を介してＰＤＲ読み出し指令ＰＤＲＲＥＱ、読み出しＰＤＲ番号ＲＰＤＲＮ、そして上記ＰＤＲＯＰｍをプリフェッチデータユニット２０３に送出し、ｍ番目のＰＤＲのｎ番要素からデータＤＡＴＡｍ（ｎ）を読みだし、信号線１１０を介してキャッシュデータユニット１０２に送出する。この時、上記ＰＤＲ位置に格納されているデータの有効性の検査を行い、データが有効を表わすＰＤＲＨＩＴ信号を信号線１１１を介してキャッシュメモリユニット３に、信号線１１０を介してキャッシュデータユニット１０２に、そして信号線１０７を介してキャッシュリクエストユニット１０１へそれぞれ送出する。これにより、キャッシュリクエストユニット１０１では上記メモリ参照命令によるメモリリクエスト動作を抑止する。
【００９３】
また、もし、当該ＰＤＲ位置にデータが未だ到着していない場合は、ＰＤＲＷＡＩＴ信号を生成、これをキャッシュリクエストユニット１０１とプロセッサ２に対し送出する。キャッシュリクエストユニット１０１ではこれを受けて、上記メモリ参照命令によるキャッシュ参照要求を保持する。ＰＤＲＷＡＩＴ信号は当該プリフェッチデータの到着まで保持し、到着時点で解除する。このとき、データの有効性を検査しその結果により、上記と同様ＰＤＲＨＩＴの生成を行う。ＰＤＲのデータが無効であった場合、ＰＤＲＨＩＴが成立せず、従って当該メモリ参照命令のメモリリクエスト動作は抑止せずに処理することになる。これによりキャッシュもしくはメモリ１から最新のデータを読み出すことができる。これによりプリフェッチデータのストア命令による書き換えに起因するデータの無効化に関する問題点を解決することができる。なお、ＰＤＲＷＡＩＴを受けたプロセッサ２では、これがオンの間は引き続くメモリリクエストを保留するものとする。上記ＰＤＲＨＩＴ及びＰＤＲＷＡＩＴの生成のために信号線２１１を介して後述のＰＤＳＲの各フィールドＲＣ、ＲＩ、ＤＡ、及びＤＩを読み出し、プリフェッチデータ読み出し制御回路２０４に入力する。
【００９４】
ストア命令の実行時には信号線１０６を介してメモリリクエストＰＲＲＥＱ、ストア命令実行指令ＳＴ、及びオペランドアドレスＰＲＡＤＲをプリフェッチデータユニット２０３に取り込む。この時、各ＰＤＳＲの各対応ＰＤＲ要素毎に保持しているプリフェッチアドレスの少なくとも一部と比較を行い、一致した場合には、書換の可能性ありとして、当該ＰＤＲ要素に読み出したデータの無効を表示する。
【００９５】
以下ではプリフェッチユニット１０５を構成する各ユニットのより詳細な構成を説明する。
【００９６】
（プリフェッチ状態制御ユニット２０１）
図３はプリフェッチ状態制御ユニット２０１の詳細を示す。
３０１はプリフェッチ状態レジスタ（ＰＳＲ）であり、プリフェッチリクエストの発行停止状態を表示するＳＵＳＰ、仕掛り中のプリフェッチリクエストの有無を表示するプリフェッチリクエストビジーフラグＰＦＢＳＹ、及びＰＤＲの深さを表示するＰＤＲＤＰＴを保持する。ＰＳＲ３０１に対する書き込みはＰＦＲＲＥＱ信号がオンで、ＰＦＲＷＮがＰＳＲを指定していたときに行い、このとき、プロセッサ２から送るＧＲの内容を書き込む。ただし、ＰＦＢＳＹフラグへの書き込みは行わない。プロセッサ２から割り込み発生を通知するＩＮＴ信号を入力し、これに応答してＳＵＳＰフラグをセットする。プリフェッチデータユニット２０３から信号線２１３を介してＰＦＢＳＹ信号を入力しこれをＰＦＢＳＹフラグに表示する。
【００９７】
プロセッサ２によるＰＳＲ読み出しは、プログラムにて読み出しアドレスＰＦＲＲＮとＰＳＲとを指定し、セレクタ３１８によりその内容を選択することにより行う。ＰＦＲＲＮは信号線３１９にてセレクタ３１８に供給する。セレクタ３１８の出力は信号線１１２によりプロセッサ２に送出する。また、ＰＳＲの内容は信号線２０６を介して、プリフェッチリクエスト制御ユニット２０２へ送出する。
【００９８】
ＰＳＲの各フィールドの意味は以下の通りである。
○中断フラグ；ＳＵＳＰ
ＳＵＳＰは本実施例になるプリフェッチ機構がリクエスト停止状態であることを表示する。ＳＵＳＰがオンのとき、プリフェッチ機構はリクエスト停止状態であり、プリフェッチ制御レジスタＰＣＲの中にアクティブなものがあってもプリフェッチリクエストの発行は行なわない。ＳＵＳＰがオフの時、プリフェッチリクエストの発行が可能である。プロセッサ２にて例えば記憶保護例外による割り込みが発生すると、信号線１０６を介してＩＮＴ信号がこれを通知し、ＰＳＲのＳＵＳＰフラグをセットする。ＳＵＳＰはプログラムにより設定することができる。
【００９９】
○プリフェッチリクエストビジーフラグ；ＰＦＢＳＹ
ＰＦＢＳＹはデータ読み出しの完了していないプリフェッチリクエストが存在することを表示する。割り込み発生時にはＳＵＳＰをオンとしてリクエストの発行を停止し、このＰＦＢＳＹフラグがオフとなったことでプリフェッチ機構が中断状態であることを認識するのに使用される。
【０１００】
○ＰＤＲ深さ；ＰＤＲＤＰＴ
ＰＤＲＤＰＴは１６本あるＰＤＲの各々の要素数を表わす。従って、装置全体では１６×ＰＤＲＤＰＴ個の８バイト幅のレジスタ要素がプリフェッチデータの一時的格納のために用意する。
【０１０１】
上記ＳＵＳＰ、及びＰＦＢＳＹの各フラグについては後述の割り込み処理において詳細に説明する。
【０１０２】
３０２はプリフェッチ制御情報を格納する１６本のプリフェッチ制御レジスタＰＣＲ０〜１５である。混乱のない場合、一本のプリフェッチ制御レジスタもしくは全プリフェッチ制御レジスタを単にＰＣＲと記す。ＰＣＲはプリフェッチの対象となるデータの位置や構造を記述する情報、プリフェッチしたデータを要求する命令の識別情報、データの読み出しリクエスト制御に関する情報、ＰＤＲに保持したデータを読み出すための制御情報等からなる。
【０１０３】
図３において、３０３、３０５、及び３０７はＰＣＲへの書き込み回路であり、順にＰＦＲＲＥＱ、ＰＤＲＲＥＱ、及びＰＦＲＥＱの指令に従い、ＰＦＲＷＮ、ＲＰＤＲＮ、及びＲＥＱＰＣＲＮで示す番号のＰＣＲに対して、ＧＲ、ＰＤＲＯＰｍ’、及び（ＰＤＲＴＰｉ’、ＰＤＲＱＰｉ’、ＰＦＡｉ’、ＳＫＩＰＣＮＴｉ’）を、信号線３０４、３０６、及び３０８を介して書き込む。
【０１０４】
３１５は各ＰＣＲ毎のＢＡＬフィールドの更新制御回路である。３１５の各々には信号線３１６により対応ＰＣＲのＢＡＬフィールドを、信号線３０８によりＰＦＲＥＱ発行に伴うＢＡＬインクリメント指令を、また信号線３０６によりＰＤＲＲＥＱ発行に伴うＢＡＬデクリメント指令を入力する。インクリメント指令に対してはＢＡＬを１加算、デクリメント指令に対しては１減算、同時に指令を受けたときはそのままとした更新値を生成し、信号線３１７を介してＢＡＬにセットする。これにより、ＢＡＬはリクエストを発行したものの、プロセッサ２への読み出しを行っていないＰＤＲの要素数が表示される。
【０１０５】
３０９、３１１、及び３１３はＰＣＲの読み出し回路であり、順に信号線３１０、３１２、及び３１４にてＰＣＲの内容を入力し、ＰＦＲＲＮ、ＲＰＤＲＮ、及びＲＥＱＰＣＲＮで示す番号のＰＣＲを選択し、倍語単位のＰＣＲの内容、（ＰＤＲＯＰｍ、ＭＯＥｍ、ＲＤＣｍ）、及び（ＯＲＧｉ、ＬＬｉ、ＰＤＲＴＰｉ、ＰＤＲＱＰｉ、ＬＰＣＲｉ、ＮＲｉ、ＰＦＡｉ、ＭＯＤｉ、ＤＬｉ、ＢＵＦｉ、ＳＫＩＰｉ、ＳＫＩＰＰｉ、ＳＫＩＰＣＮＴｉ、ＳＫＩＰＧＡＰｉ）を信号線３２０、２０８、及び２０６に出力する。  また、全ＰＣＲのＶＬＤ及びＩＩＤフィールドを信号線２０８に、同じく全てのＶＬＤ、ＡＣＴ、ＬＡ、ＬＡＣ、ＢＡＬ、及びＯＲＧフィールドを信号線２０６に出力する。
【０１０６】
一本のＰＣＲは、図１４で示すように４つの倍語で構成する。割り込み等に伴うコンテクストスイッチにおいては関連するＰＣＲの退避回復をプログラムにより行うことが必要である。各フィールドは機能別にグループ分けし、それぞれ倍語に割り当てていること、またプログラムによる参照は倍語単位で実行することから、不要な機能に関するグループは退避回復の対象からはずすことが可能である。これにより、割り込み処理や、初期設定に伴うプログラム実行ステップ数の削減に効果がある。
【０１０７】
ＧＲとＰＣＲの間の情報の移動は前述の専用の移動命令にて行う。なお、ＰＣＲの参照は、上記ＧＲを介した倍語単位以外に、特定のフィールドに対する個別の参照も可能である。これらについては通常の技術にて容易に実現することができるので、特にそのための詳細な構成を示さない。
【０１０８】
以下ではＰＣＲの各フィールドにつきその意味を説明する。
１）第１グループ：基本プリフェッチ制御情報
○有効フラグ；ＶＬＤ
ＶＬＤは当該ＰＣＲが現コンテクストにて有効であることを表示する。
【０１０９】
○アクティブフラグ；ＡＣＴ
ＡＣＴは当該ＰＣＲがアクティブ状態にあることを表示する。ＰＣＲがアクティブの時、指定されたデータに対するプリフェッチ動作を行なう。
【０１１０】
○オリジンフラグ；ＯＲＧ
ＯＲＧは当該ＰＣＲがシーケンシャルベクトルを指定、もしくはインデックス付きベクトル及びリンクリストのプリフェッチにおけるＰＣＲリンクの最初のＰＣＲを指定することを表示する。ＯＲＧがオンであるＰＣＲをオリジンＰＣＲ、それ以外をリンクＰＣＲと呼ぶことがある。
【０１１１】
○プリフェッチデータ長；ＤＬ
ＤＬはプリフェッチの対象となるメモリ参照命令のオペランド長を指定する。但し、オペランド長を２の巾乗で表わしたときの指数とする。
【０１１２】
○プリフェッチバッファ指定；ＢＵＦ
ＢＵＦはプリフェッチしたデータの保持場所、すなわちプリフェッチバッファを指定する。ＢＵＦがオフの時プリフェッチバッファとしてはＰＤＲのみ、オンの時はＰＤＲとキャッシュの両方にデータを格納する。すなわち、ＢＵＦがオフのときはキャッシュミスにおいてメモリ１には単一データの要求をし、オンの時はライン転送を要求する。
【０１１３】
○命令識別子；ＩＩＤ
ＩＩＤは当該プリフェッチの対象となるメモリ参照命令の識別に用いる。識別にはメモリ参照命令のベースアドレスレジスタ番号を用いる。本フィールドはメモリ参照命令の実行に当たりそのベースアドレスレジスタ番号と比較し、一致していればプリフェッチデータレジスタよりデータを当該メモリ参照命令に転送する。
【０１１４】
○先読み制御指定；ＬＡ
ＬＡは先読み制御機能を有効化する。先読み制御機能が有効のとき、下記先読みカウントＬＡＣは対応するメモリ参照命令に対し、何実行回まで先読みを許可するかを指定する。
【０１１５】
○先読みカウント；ＬＡＣ
ＬＡＣは対応するメモリ参照命令に対し、何実行回まで先読みを許可するかの最大値を指定する。
【０１１６】
○アドレススキップ指定；ＳＫＩＰ
ＳＫＩＰはアドレススキップ機能を有効化する。アドレススキップ機能が有効の時、下記のスキップカウントＳＫＩＰＣＮＴで指定した個数のデータプリフェッチリクエスト毎に、下記スキップギャップＳＫＩＰＧＡＰで指定した長さ分だけプリフェッチアドレスを更新する。
【０１１７】
○ＰＤＲ先頭ポインタ；ＰＤＲＴＰ
ＰＤＲＴＰはＰＤＲの中で最新のリクエストによるデータを保持する要素の位置を表示する。
【０１１８】
○処理中リクエストカウント；ＢＡＬ
ＢＡＬはデータ転送の行なわれていない処理中のリクエスト数を表示する。
【０１１９】
○参照数；ＮＲ
ＮＲは当該ＰＣＲの指定に基づき読みだされた同一のデータを何回参照するかを示す。ここで言う参照としては対応メモリ参照命令によるオペランドとしてのデータ読み出しと子ＰＣＲで指定したデータフェッチ動作に必要なアドレスもしくはモディファイア（これらを伴にリンクデータと呼ぶことにする）としての参照を含む。ＮＲはデータ構造により決まる数であるが、本実施例では最大１６まで指定可能とする。ＰＤＲに格納した個々のデータはＮＲで指定した回数の参照の後使用完了とみなされる。後述のＰＤＳＲのＲＣフィールドを参照のこと。
【０１２０】
○マスクオーバライド指定；ＭＯＥ
ＭＯＥはメモリ参照命令の実行に伴うＰＤＲからのデータ読みだし要求が該メモリ参照命令の実行条件を示すマスクレジスタの値に依存するか否かを指定する。ループ内にＩＦ文があり、該メモリ参照がＩＦの成立条件に依存して実行される場合はＭＯＥをオンとすることでマスク値が０の時のＰＤＲの空読みを行なう。
【０１２１】
○ＰＤＲアウトポインタ；ＰＤＲＯＰ
ＰＤＲＯＰは対応メモリ参照命令が実行されたときに転送すべきデータの保持しているＰＤＲ中の要素位置を示す。
【０１２２】
○リダイレクションデータカウント；ＲＤＣ
ＲＤＣはＰＤＲに保持されている有効データのうち後述のプリフェッチバッファリダイレクション機能によりリダイレクトすべき要素数を表示する。これは追って、割り込み処理にて詳細に説明する。
【０１２３】
２）第２グループ：オプション情報
○プリフェッチアドレス；ＰＦＡ
ＰＦＡはプリフェッチのためのメモリアドレスとなり、オリジンＰＣＲの場合（シーケンシャルベクトルの場合）、リクエストの発行と共に次のアドレスに更新する。従って、次のプリフェッチリクエスト発行時にはＰＦＡフィールドから読み出した値をそのままプリフェッチアドレスとする。リンクＰＣＲの場合は所定の方法にてアドレスを生成しＰＦＡフィールドに格納したものをプリフェッチアドレスとする。
【０１２４】
３）第３グループ：オプション情報
○アドレスモディファイア；ＭＯＤ
ＭＯＤは６４ｂのアドレスモディファイアである。シーケンシャルベクトルの場合はデータの要素間隔を指定する。インデックス付ベクトルの場合はターゲットベクトルの先頭アドレス、リンクリストの場合はリンクテーブルのアドレスからの変位を指定する。詳細は図１５を用いて追って説明する。
【０１２５】
４）第４グループ：オプション情報
○リンクリストプリフェッチ指定；ＬＬ
ＬＬは当該ＰＣＲがリンクリストのプリフェッチを指定する子ＰＣＲであることを示す。この時親ＰＣＲにより読みだされたリンクデータを当該ＰＣＲのアドレスモディファイアに加算することでメモリアドレスを生成し、これをＰＦＡに保持する。
【０１２６】
○リンクＰＣＲ番号；ＬＰＣＲ
ＬＰＣＲはインデクス付きベクトルとリンクリストのプリフェッチにおける親ＰＣＲの番号を示す。一般的に複数の子ＰＣＲが共通のＰＣＲを親として指定することが可能である。これにより、例えば２種のターゲットベクトルを共通のインデクスベクトルで参照する場合に、２種目のターゲットベクトルのアドレス生成のためのインデクス参照をメモリ１からではなく１種目のためにインデクスを格納したＧＲから読みだすようプログラムされている場合でも本プリフェチを適用可能となる。これは本実施例の１つの特徴である。
【０１２７】
○ＰＤＲリクエストポインタ；ＰＤＲＱＰ
ＰＤＲＱＰはインデクス付きベクトルもしくはリンクリストのプリフェッチにおけるアドレス生成のためのインデクスもしくはテーブルアドレスを参照するべきデータの保持されている親ＰＤＲ中の要素位置を示す。
【０１２８】
○スキップ間隔；ＳＫＩＰＰ
ＳＫＩＰＰは後述のアドレススキップを行なうリクエスト間隔を示す。
【０１２９】
○スキップギャップ；ＳＫＩＰＧＡＰ
ＳＫＩＰＧＡＰはアドレススキップ時のアドレス増分値を示す。アドレススキップを行なうとき、ＳＫＩＰＧＡＰをＰＦＡに加算したものを次のアドレスとする。
【０１３０】
○スキップカウント；ＳＫＩＰＣＮＴ
ＳＫＩＰＣＮＴは最近行なわれたアドレススキップ以後の発行リクエスト数を表示する。
【０１３１】
次に、ＰＣＲとそれによるデータ構造の指定例を図１５に示す。但し、説明に関係のないフィールドは図示していない。インデクス付きベクトルのプリフェッチの為には２つのＰＣＲを、単純なリンクリストのプリフェッチにはそのレベルの数分のＰＣＲを用いる。（１）ではＰＣＲ１がベクトルＢ（ｉ）のプリフェッチ方法を指定している。ＰＦＡが先頭アドレスを指定し、アドレスモディファイアＭＯＤが参照の間隔を指定する。（２）はＰＣＲ１及びＰＣＲ２にてインデクス付きベクトルのプリフェッチ方法を指定している。ＰＣＲ１はインデクスベクトル、ＰＣＲ２はターゲットベクトルに対応し、特にＰＣＲ２のＬＰＣＲフィールドは親ＰＣＲがＰＣＲ１であることを示している。（３）はＰＣＲ１〜ＰＣＲ３により３レベルのリンクリストのプリフェッチ方法を指定している。ＰＣＲ２及びＰＣＲ３で指定するＭＯＤはテーブルＣ及びＤの先頭から目的のデータｃ及びｄまでの変位を示している。
【０１３２】
（プリフェッチリクエスト制御ユニット２０２）
図４はプリフェッチリクエスト制御ユニット２０２の詳細を示す。４０１はＰＣＲ０〜１５に対応して１６組設けられた、各々のＰＣＲがプリフェッチリクエストを発行可能なレディ状態か否かを判定するＰＣＲレディ判定回路０〜１５である。ＰＣＲレディ判定回路ｋには信号線２０６を介してプリフェッチ状態レジスタＰＳＲの内容ＳＵＳＰ、ＰＤＲＤＰＴを入力し、プリフェッチ制御レジスタＰＣＲｋからＶＬＤｋ、ＡＣＴｋ、ＬＡｋ、ＢＡＬｋ、ＬＡＣｋ、ＯＲＧｋ、ＬＰＣＲｋ、及びＰＤＲＱＰｋを入力し、プリフェッチデータユニット２０３から信号線２１０を介して全てのＰＤＳＲのＲＣ及びＤＡフィールドを入力し、キャッシュリクエストユニット１０１からは信号線１２０を介してＲＥＱＢＳＹを入力する。
【０１３３】
４０２はセレクタであり、全てのＰＤＳＲのＲＣ及びＤＡフィールドについて、ＬＰＣＲｋが示す番号（値をｘとする）のＰＤＲに対応したＰＤＳＲｘであって、かつＰＤＲＱＰｋが示す番号（値をｙとする）の要素に対応した状態フラグＲＣｘ（ｙ）及びＤＡｘ（ｙ）を選択し、信号線４１２を介して回路４０３に出力する。この状態フラグＤＡｘ（ｙ）はＰＣＲｋがリンクＰＣＲの場合に、ＰＣＲｋがプリフェッチアドレスを生成するために必要なリンクデータが親ＰＣＲに付随するＰＤＲｘに読み出されているか否かを表示する。なおＤＡｘ（ｙ）は未参照カウントＲＣｘ（ｙ）が非０のときにその表示が有効である。
【０１３４】
４０３はＰＣＲｋがレディ状態かを判定し、結果のＲＤＹｋ信号を出力するレディ判定回路である。ここで、＆は論理積、＃は論理和、＾は論理否定、そして＜は不等号を示す。ＲＤＹｋが成立する条件は図の回路４０３を示すブロック内に示した通りであるが、この条件の意味するところは、
（１）プリフェッチ機構がリクエスト停止状態ではなく（ＳＵＳＰがオフ）、
（２）キャッシュリクエストユニット１０１がプリフェッチリクエストを受け付けることが可能であり（ＲＥＱＢＳＹがオフ）、
（３）当該ＰＣＲは有効（ＶＬＤがオン）でアクティブ状態（ＡＣＴがオン）であり、
（４）先読み制御が指定されている場合（ＬＡがオン）は処理中リクエスト数（ＢＡＬ）が先読みカウント（ＬＡＣ）に達しておらず、また指定されていない場合（ＬＡがオフ）はＢＡＬがＰＤＲの深さ（ＰＤＲＤＰＴ）に達しておらず、
（６）当該ＰＣＲがオリジンＰＣＲ（ＯＲＧがオン）であるか、もしくはそうでない場合（ＯＲＧがオフ）には当該ＰＣＲがプリフェッチアドレスを生成するために必要なリンクデータがＰＤＲに読み出されている（ＤＡｘ（ｙ）がオン）ことである。
【０１３５】
各ＰＣＲに対応したレディ信号ＲＤＹ０−１５はプリフェッチリクエスト発行回路４０４に送出し、この中から次にリクエストを発行するＰＣＲを選択する。４０５はリクエストＰＣＲ番号保持回路であり、最後にリクエストを発行したＰＣＲ番号を保持し、それを信号線４０６を介して４０４に通知する。プリフェッチリクエスト発行回路４０４は最後にリクエストを発行したＰＣＲの次のＰＣＲから順にそのレディ状態をチェックし、最初に見つかったレディ状態のＰＣＲを次にリクエストを発行するものと決定し、その番号をリクエストＰＣＲ番号ＲＥＱＰＣＲＮとして出力する。ＲＤＹ信号のチェックはＰＣＲ番号の小さい順に行い、１５番の次は０番を続ける。またレディ状態にあるＰＣＲが存在したときはプリフェッチリクエストＰＦＲＥＱを発行する。ＰＦＲＥＱに応答して信号線４０７を介してＲＥＱＰＣＲＮをリクエストＰＣＲ番号保持回路４０５に送出し、その内容を置き換える。
【０１３６】
上記のようなリクエスト制御を行なうため、プログラムはループ内のプリフェッチ対象のメモリ参照命令をその記述順序に従ってＰＣＲに割り振るのが簡単で効率よい。
【０１３７】
ＰＦＲＥＱ及びＲＥＱＰＣＲＮ（値をｉとする）は信号線２０５を介してプリフェッチ状態制御ユニット２０１へ送出し、これで指定されるＰＣＲｉの内容を読みだし信号線２０６を介してプリフェッチリクエスト制御ユニット２０２に取り込む。
【０１３８】
４０８はポインタ更新制御回路であり、ＰＦＲＥＱに応答してＰＤＲＴＰｉとＰＤＲＱＰｉの更新を制御する。このため信号線２０６を介して現在のＰＤＲＴＰｉとＰＤＲＱＰｉの値を取り込み、これらにＰＤＲＤＰＴを法として１を加算した値を更新値として出力し、信号線２０５を介してプリフェッチ状態制御ユニット２０１に送出する。これらの値はＰＦＲＥＱに応答してＰＣＲｉの当該フィールドに書き込む。
【０１３９】
４０９はプリフェッチアドレス制御回路であり、プリフェッチアドレスの更新値ＰＦＡｉ’とアドレススキップカウントの更新値ＳＫＩＰＣＮＴｉ’を信号線２０５を介してプリフェッチ状態制御ユニット２０１に送出する。
【０１４０】
４１０はＰＦＲＥＱの発行にともない必要となるＰＤＳＲの初期化もしくは更新の制御を行う、ＰＤＳＲ更新制御回路である。４１０はプリフェッチリクエスト発行時に、データを格納するＰＤＲｉ（ｊ）に付随するＰＤＳＲｉ（ｊ）の状態フラグを初期設定するための情報を信号線２０９を介してプリフェッチデータユニット２０３に送出する。これらの信号はＰＦＲＥＱ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、ＮＲｉ、ＰＦＡｉ、及びＤＩｉ（ｊ）の初期設定値である。また、４１０は当該プリフェッチリクエストがリンクＰＣＲによる場合、リンクデータを格納するＰＤＲの状態フラグＲＣを更新するための情報も同時に送出する。
【０１４１】
プリフェッチリクエスト制御ユニット２０２から信号線１０７を介して、プリフェッチリクエストＰＦＲＥＱとその付随情報をキャッシュリクエストユニット１０１へ送出する。付随情報としては、データを格納するＰＤＲ番号ＲＥＱＰＣＲＮとその要素位置ＰＤＲＴＰｉ、プリフェチアドレスＰＦＡｉ、及びＢＵＦｉである。
【０１４２】
図５を用いてプリフェッチアドレス制御回路４０９をより詳細に説明する。
【０１４３】
５０１はアドレス加算器であり、入力データの加算結果をプリフェッチアドレスの更新値ＰＦＡｉ’として信号線２０５を介してプリフェッチ状態制御ユニット２０１に送出する。入力データはセレクタ５０２及び５０３から信号線５１２及び５１３を介して供給する。
【０１４４】
セレクタ５０２はＰＦＡｉ、インデクスＸ、及びリンクデータＤＡＴＡｐ（ｑ）の中から制御線ＳＥＬＸ及びＳＥＬＬに従い一つを選択する。リンクデータＤＡＴＡｐ（ｑ）はプリフェッチデータユニット２０３から信号線２１０を介して入力する。５０４はシフタであり、ＤＡＴＡｐ（ｑ）が入力され、プリフェッチ長ＤＬｉで指定するビット数分上位ビット方向にシフトした結果をインデクスＸとして出力する。５０５はセレクタ５０２の制御信号生成回路であり、プリフェッチ状態制御ユニット２０１よりＯＲＧｉとＬＬｉが入力され、ＳＥＬＸとＳＥＬＬを生成する。ＳＥＬＸはインデクスＸの選択指令であり、インデクス付ベクトルにおけるターゲットベクトルのプリフェッチ時にオンとする。また、ＳＥＬＬはリンクデータＤＡＴＡｐ（ｑ）の選択指令であり、リンクリストにおける第２レベル以下のデータのプリフェッチ時にオンとする。
【０１４５】
セレクタ５０３はＭＯＤｉとＳＫＩＰＧＡＰｉのいずれかを制御線ＳＥＬＳＫＩＰに従い選択する。ＳＥＬＳＫＩＰはアドレススキップが指定されたとき（ＳＫＩＰｉがオン）にＳＫＩＰＣＮＴｉがＳＫＩＰＰｉに達したときにオンとする。このため、比較器５０６はＳＫＩＰＣＮＴｉとＳＫＩＰＰｉを比較し、結果を信号線５０７を介して論理積回路５０９に送出する。５０９はこの比較結果が一致を示し、ＳＫＩＰｉがオンの時出力のＳＥＬＳＫＩＰをオンとする。５０８はＳＫＩＰＣＮＴｉにＳＫＩＰＰｉを法として１を加えるインクリメンタであり、ＳＫＩＰＣＮＴｉの更新値をプリフェッチ状態制御ユニット２０１に送出する。この更新値をＰＦＲＥＱに応答してＰＣＲｉに取り込む。
【０１４６】
以上の制御により、プリフェッチリクエストにともなうプリフェッチアドレスＰＦＡｉの更新値を生成し、これをＰＦＲＥＱに応答してＰＣＲｉに取り込むことが出来る。
【０１４７】
図６を用いてＰＤＳＲ更新制御回路を詳細に説明する。発行するＰＦＲＥＱがオリジンＰＣＲによる場合（ＯＲＧｉがオン）、ＰＤＳＲｉ（ｊ）に付随した状態情報ＲＣ、ＲＩ、ＤＡ、ＤＩ、ＭＤＫＥＹを初期設定する。すなわち、ＲＣｉ（ｊ）には参照数ＮＲｉを設定し、ＲＩｉ（ｊ）、ＤＡｉ（ｊ）、ＤＩｉ（ｊ）には各々１、０、０を設定する。また、ＭＤＫＥＹｉ（ｊ）には本実施例ではＰＦＡｉの下位１６ビットを設定する。このため、信号線４１１を介してプリフェッチリクエスト発行回路４０４よりＰＦＲＥＱ及びＲＥＱＰＣＲＮをとりこみ、また信号線２０６を介してプリフェッチ状態制御ユニット２０１よりＰＤＲＴＰｉ、ＮＲｉ、ＰＦＡｉを取り込み、これらを信号線２０９を介してそのままプリフェッチデータユニット２０３へ送出する。
【０１４８】
発行するＰＦＲＥＱがリンクＰＣＲによる場合（ＯＲＧｉがオフ）、リンクデータの格納されるＰＤＳＲに付随した状態情報ＲＣを更新（１減算）する必要がある。このため、信号線２０６を介してＯＲＧｉを取り込み、６０１によりＲＣの更新指令ＤＥＣＲＣ信号を生成し、信号線２０９に出力する。さらに信号線２０６を介して上記ＰＤＳＲの番号ＬＰＣＲｉ（＝ｐとする）、及び要素位置ＰＤＲＱＰｉ（＝ｑとする）を読み出し、これらをプリフェッチデータユニット２０３へ送出する。
【０１４９】
セレクタ６０２は全てのＰＤＳＲのＤＩフィールドからＬＰＣＲｉが示す番号の内容ＤＩｐを選択しをセレクタ６０３に供給する。６０３はこの中からＰＤＲＱＰｉが示す要素の内容ＤＩｐ（ｑ）を選択し、これを無効フラグ生成回路６０５に供給する。無効フラグ生成回路６０５はリンクＰＣＲにおけるＰＦＲＥＱ発行時のＤＩｉ（ｊ）の初期設定値を生成する。６０５の生成する条件の意味するところは、リンクリクエストの発行にあたり、アドレスの生成に必要なＰＤＲデータが無効（ＤＩｐ（ｑ）がオン）の場合は、生成したアドレスやそれを用いて読み出したデータも無効の可能性があるため、当該ＰＤＳＲのＤＩフラグをオン（無効）と設定する必要があるということである。この初期設定値はＰＦＲＥＱとともにプリフェッチデータユニットに送出し、ＤＩｉ（ｊ）にセットする。
【０１５０】
（プリフェッチデータユニット２０３）
図７を用いてプリフェッチデータユニット２０３をより詳細に説明する。プリフェッチデータユニットにはＰＣＲ０〜１５に対応した１６組のプリフェッチデータ回路７０１を設ける。各プリフェッチデータ回路には各々８バイトのデータを格納する複数のデータレジスタ要素からなるプリフェッチデータレジスタ（ＰＤＲ）７０４を設ける。一つのＰＤＲを構成するデータレジスタ要素の本数はＰＳＲのＰＤＲＤＰＴフィールドで表示する。１６本のプリフェッチデータレジスタ全体をＰＤＲと記すこともある。キャッシュメモリ１００１より読み出したデータＣＤＡＴＡは信号線１０８を介してＰＤＲに格納する。このためのデータ送出指令ＣＡＤＶ及び、ＰＤＲ番号ＣＷＰＤＲＮ、及び格納要素位置ＣＰＤＲＩＰはキャッシュリクエストユニット１０１から信号線１２０を介して供給する。メモリ１より読み出したデータＭＤＡＴＡは信号線１０９を介してＰＤＲに格納する。このためのデータ送出指令ＭＡＤＶ及び、ＰＤＲ番号ＭＷＰＤＲＮ、及び格納要素位置ＭＰＤＲＩＰはメモリリクエストユニット１０３から信号線１２１を介して供給する。
【０１５１】
プロセッサ２での命令実行に伴うＰＤＲ読み出しのために、プリフェッチデータ読み出し制御ユニット２０４よりＰＤＲＲＥＱ、ＲＰＤＲＮ、ＰＤＲＯＰｍを供給する。各ＰＤＲでは各要素を信号線７０９にてセレクタ７１０に供給し、これを上記ＰＤＲＯＰｍ（＝ｎとする）にて選択、結果を信号線７１２によりセレクタ７１３に供給する。７１３は上記ＲＰＤＲＮ（＝ｍとする）により所望のＰＤＲからのデータを選択する。この出力ＤＡＴＡｍ（ｎ）を信号線１１０によりキャッシュデータユニット１０２に送出する。
【０１５２】
リンクＰＣＲにおけるプリフェッチリクエスト発行に伴いリンクデータをＰＤＲより読み出すために、プリフェッチリクエスト制御ユニット２０２より信号線２０９を介しＬＰＣＲｉ、ＰＤＲＱＰｉを供給する。各ＰＤＲでは各要素を信号線７０９にてセレクタ７１１に供給し、これを上記ＰＤＲＱＰｉ（＝ｑ）にて選択、結果を信号線７１４によりセレクタ７１５に供給する。７１５は上記ＬＰＣＲｉ（＝ｐ）により所望のＰＤＲからのデータを選択する。この出力ＤＡＴＡｐ（ｑ）を信号線２１０によりプリフェッチリクエスト制御ユニット２０２に送出する。
【０１５３】
７０５はＰＤＲを構成する各要素に対応した状態情報を保持するプリフェッチデータ状態レジスタＰＤＳＲである。ＰＤＳＲの各状態情報の意味とその初期設定及び更新制御を以下に説明する。
【０１５４】
○未参照回数；ＲＣ
ＲＣはＰＤＲ中の当該要素に対し行なわれるべき参照回数ＮＲのうち、未だ行なわれていない参照回数を表示する。ＲＣが０となった要素は使用済みであり、次の読みだしデータ格納のために使用可能となる。ＲＣはＰＣＲｉを用いた当該要素に対するプリフェッチリクエストＰＦＲＥＱを発行した時点で、ＰＣＲｉ中の参照数ＮＲｉフィールドの値を初期設定する。このためＰＤＳＲ７０５の本フィールドにはＰＦＲＥＱ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、ＮＲｉを入力する。また、プロセッサ２へのデータ転送、リンクリクエストの発行による参照の度にデクリメントしていく。リンクリクエストの発行時の更新のためにＤＥＣＲＣ、ＬＰＣＲｉ、ＰＤＲＱＰｉを、またプロセッサ２への転送時の更新ためにＰＤＲＲＥＱ、ＲＰＤＲＮ、ＰＤＲＯＰｍを入力する。
【０１５５】
以下に述べるＲＩ、ＤＡ、ＤＩ、及びＭＤＫＥＹの各フラグはＲＣが非０の時にのみ表示が有効である。
【０１５６】
○リクエスト発行済みフラグ；ＲＩ
ＲＩは当該要素にデータを格納するプリフェッチリクエストが既に発行されていて、しかもまだデータが到着していないことを表示する。本フラグはＰＦＲＥＱ発行時にオンとし、データが到着したときにオフとする。このためＰＤＳＲ７０５の本フラグには、リクエスト発行時のためにＰＦＲＥＱ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、上記ＣＤＡＴＡが到着したときのためにＣＡＤＶ、ＣＷＰＤＲＮ、ＣＰＤＲＩＰ、上記ＭＤＡＴＡが到着したときのためにＭＡＤＶ、ＭＷＰＤＲＮ、ＭＰＤＲＩＰをそれぞれ入力する。各フラグのオン、オフ回路は容易に構成可能なので説明を省略する。以下のフラグ、フィールドにつても同様である。
【０１５７】
○データ到着済みフラグ；ＤＡ
ＤＡは当該データが既に到着して保持されていることを表示する。本フラグはＰＦＲＥＱ発行時にオフとし、データ到着時にオンとする。このためＰＤＳＲ７０５の本フラグには、リクエスト発行時のためにＰＦＲＥＱ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、上記ＣＤＡＴＡが到着したときのためにＣＡＤＶ、ＣＷＰＤＲＮ、ＣＰＤＲＩＰ、上記ＭＤＡＴＡが到着したときのためにＭＡＤＶ、ＭＷＰＤＲＮ、ＭＰＤＲＩＰをそれぞれ入力する。
【０１５８】
○データ無効フラグ；ＤＩ
ＤＩは当該ＰＤＲ要素に読み出され保持されたデータが有効か否かを表示する。ＰＤＲの各要素に保持されているデータは、対応メモリアドレスのデータが書き換えられたもしくはメモリ参照命令実行までに書き換えられる可能性がある時無効と見做す。また該データ参照においてアクセス例外が検出されたときも無効とする。
【０１５９】
本フラグのＰＦＲＥＱ発行時の初期設定は、当該ＰＣＲがオリジンＰＣＲかリンクＰＣＲかにより異なる。オリジンＰＣＲの場合、本フラグは０に初期設定する。リンクＰＣＲの場合、リンクデータのデータ無効フラグＤＩｐ（ｑ）を初期設定する。これは、リンクデータが無効の時は生成するアドレスも無効の可能性があるため、それによるデータも無効と見なすべきだからである。このため、上記図６での説明の通り、ＰＦＲＥＱに付随した本フラグの初期設定値ＤＩｉ（ｊ）’はＰＤＳＲ更新制御回路４１０にて生成し、信号線２０９を介してＰＤＳＲに取り込む。更新時期とＰＤＳＲ番号、要素位置の指定のため、ＰＦＲＥＱ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉを入力する。
【０１６０】
キャッシュリクエストユニット１０１にてアクセス例外が検出されると信号線１２０を介してＣＡＤＶ信号に付随してアクセス例外ＥＸＰを送出し、本フラグをセットする。更新時期とＰＤＳＲ番号、要素位置の指定のため、ＣＡＤＶ、ＣＷＰＤＲＮ、ＣＰＤＲＩＰを入力する。
【０１６１】
また、下記ＭＤＫＥＹで説明するように、プロセッサ２にて実行したストア命令によりプリフェッチデータを書き換えた可能性があるときは本フラグをセットする。
【０１６２】
プリフェッチデータを必要とするメモリ参照命令が実行された時に、ＰＤＲ中のデータが無効であった場合、該データは無視し、メモリ参照命令によるメモリリクエストを活かして通常どおりにキャッシュもしくはメモリ１よりデータを読みだす。この動作を本明細書においてはプリフェッチバッファリダイレクションＰＢＲと呼ぶが、追って詳細に説明する。
【０１６３】
○書き換え検出キー；ＭＤＫＥＹ
ＭＤＫＥＹはプリフェッチしたデータアドレスに対する書き換えの有無を検出するキーである。ＭＤＫＥＹはＰＦＲＥＱ発行時にプリフェッチアドレスもしくはその一部をセットする。このために本フィールドにはＰＦＲＥＱ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、及びＰＦＡｉを入力する。
【０１６４】
７０６は上記書き換えの検出を行なうための比較回路であり、ＰＤＲ要素ごとに設ける。上記比較回路ではプロセッサ２から信号線１０６を介して送るストア命令実行指令ＳＴ信号に応答してそのオペランドアドレスＰＲＡＤＲと、信号線７０７により供給するＭＤＫＥＹの値を比較する。比較の結果一致したら該ＰＤＲデータが無効であると見做し、信号線７０８を介して該要素のＤＩフラグをオン（無効状態）とする。ＭＤＫＥＹがプリフェッチアドレスの一部である実施態様の場合はアドレスの対応する部分のみ比較する。この時実際にはアドレスが一致しない場合でも比較が成立することがあるが、この場合はＰＢＲ動作によりメモリ参照命令がデータを読み出すのでプログラムの正しい動作を保証する上では問題ない。
【０１６５】
７１７は全てのＲＩフラグの論理和をとる回路であり、出力ＰＦＢＳＹを信号線２１３を介してプリフェッチ状態制御ユニット２０１へ送出する。ＰＦＢＳＹはリクエストを発行したがデータが到着していないものが存在することを示しており、割り込み発生時にプリフェッチ動作が中断状態となることの確認のためにプログラムが参照する。
【０１６６】
全てのＰＤＳＲについてのＲＣ、ＤＡ及びＤＩフラグを信号線２１０を介してプリフェッチリクエスト制御ユニット２０２へ、またＲＣ、ＲＩ、ＤＡ、及びＤＩを信号線２１１を介してプリフェッチデータ読み出し制御ユニット２０４へ送出する。
【０１６７】
図１２にＰＤＲの各要素に関し、上記４種の状態フラグＲＣ、ＲＩ、ＤＡ、ＤＩにより表示する状態遷移図を示す。
【０１６８】
図８は、ＰＤＲからのデータ読み出しと、読み出したデータのプロセッサ２への転送等を制御するプリフェッチデータ読み出し制御ユニット２０４である。
【０１６９】
プロセッサ２からは信号線１０６を介してメモリ参照命令実行にともなうメモリリクエストＰＲＲＥＱ、メモリ参照命令解読情報ＬＤ、メモリ参照命令のベースレジスタ番号ＢＲＮ、そしてメモリ参照命令の実行条件を示すマスクレジスタ値ＭＫを取り込む。ここで、ＭＫがオフの場合、プログラムから見て当該命令は無効化されねばならないが、装置内部ではあたかもＭＫがオンであるかのように処理し、結果の書き込みのみ抑止するものとする。従って、ＭＫの値に関わらずＰＲＲＥＱを始めこの命令に関する情報を取り込むことができる。８０９はこれら取り込んだ情報を格納するレジスタである。プリフェッチデータが到着するまえに当該データを要求するＰＲＲＥＱが発行された場合、データの到着までこれらの情報をレジスタ８０９に保持するため、後述のＰＤＲＷＡＩＴ信号を保持条件として入力する。
【０１７０】
８０１はＰＣＲに対応した１６組の比較器であり、各々のＩＩＤフィールドとレジスタ８０９からのＢＲＮを比較し、結果を信号線８０２を介してエンコーダ８０３と論理和回路８１０に供給する。なお、比較は有効なＰＣＲ（ＶＬＤがオン）に関してのみ行い、無効なＰＣＲに関する比較結果は０を保証するよう構成する。
【０１７１】
エンコーダ８０３は上記比較により一致を見たＰＣＲの番号を符号化し、ＲＰＤＲＮ信号として出力する。
【０１７２】
論理和回路８１０の出力は、当該メモリ参照命令に対応する有効なＰＣＲが存在することを示すＭＡＴＣＨ信号である。
【０１７３】
セレクタ８０４は信号線２１１によりプリフェッチデータユニット２０３より全てのＰＤＳＲのＲＣ、ＲＩ、ＤＡ、及びＤＩフィールドが入力され、各々のフィールド毎にＲＰＤＲＮ信号により指定するＰＤＳＲに対応する内容を選択する。その出力ＲＣｍ、ＲＩｍ、ＤＡｍ、及びＤＩｍをセレクタ８０５に入力し、各々のフィールド毎に信号線２０８のＰＤＲＯＰｍ信号により指定するＰＤＳＲｍの要素に対応する内容を選択する。
【０１７４】
インクリメンタ８０８はＰＤＲＯＰｍが入力されＰＤＲＯＰｍをＰＤＲＤＰＴを法として１加算し、更新値ＰＤＲＯＰｍ’として出力する。
【０１７５】
デクリメンタ８１１は信号線２０８のＲＤＣｍ信号が入力され、１減算した更新値ＲＤＣｍ’を出力する。但し、ＲＤＣｍがすでに０であった場合は０のままとする。
【０１７６】
ＰＤＲ読み出しリクエスト制御回路８０６にはレジスタ８０９よりＰＲＲＥＱ、ＬＤ、及びＭＫ、論理和回路８１０よりＭＡＴＣＨ、セレクタ８０５よりＲＣｍ（ｎ）、ＲＩｍ（ｎ）、ＤＡｍ（ｎ）、及びＤＩｍ（ｎ）、そして、信号線２０８よりマスクオーバライド指定ＭＯＥｍを入力する。８０６はＰＤＲ読み出しリクエストＰＤＲＲＥＱ、ＰＤＲヒット信号ＰＤＲＨＩＴ及びＰＤＲ読み出し待機信号ＰＤＲＷＡＩＴを生成する。
【０１７７】
各信号の生成条件は図に示した通りであるが、その意味について若干の説明をする。ＰＤＲＲＥＱの生成条件は３つに分けて考える。
【０１７８】
（１）第１条件
プロセッサ２からメモリ参照命令によるメモリリクエストが発行されたこと（ＰＲＲＥＱ  ＆  ＬＤが成立）。この場合、上記メモリ参照命令はその実行が許可されている（マスクＭＫがオン）か、マスクの指定を無視して良い指定（ＭＯＥｍがオン）かのいずれかでなければならない。
【０１７９】
（２）第２条件
当該メモリ参照命令のデータをプリフェッチする有効なＰＣＲが指定されていること（ＭＡＴＣＨがオン）。
【０１８０】
（３）第３条件
ＰＤＲｍ（ｎ）にデータが既に読み出されている（（ＲＣｍ（ｎ）≠０）  ＆ＤＡｍ（ｎ）が成立）もしくは、プリフェッチバッファリダイレクション実施のためデータの読み出しが不要であること（ＲＤＣｍ≠０）。
【０１８１】
ＰＤＲＨＩＴの生成条件はＰＤＲＲＥＱの第３の条件が次のように異なるのみである。すなわち、ＰＤＲｍ（ｎ）に有効なデータが既に読み出されていて（（ＲＣｍ（ｎ）≠０）  ＆  ＤＡｍ（ｎ）  ＆  ＾ＤＩｍ（ｎ）が成立）、しかもデータの読み出しが必要であること（ＲＤＣｍ＝０）である。
【０１８２】
ＰＤＲＷＡＩＴの生成条件はＰＤＲＲＥＱの第３の条件が次のように異なるのみである。すなわち、ＰＤＲｍ（ｎ）にデータの読み出しが必要である（ＲＤＣｍ＝０）にも関わらず、リクエストが発行されていない（ＲＣｍ（ｎ）＝０）かデータが到着していないこと（ＲＩｍ（ｎ）がオン）である。
【０１８３】
以上プリフェッチデータ読み出し制御ユニット２０４にて生成もしくは取り込んだ信号のうち、ＲＰＤＲＮ、ＰＤＲＯＰｍ、及びＰＤＲＲＥＱは信号線２１１を介してプリフェッチデータユニット２０３へ、ＰＤＲＯＰｍ’、ＲＤＣｍ’、及びＲＰＤＲＮは信号線２０７を介してプリフェッチ状態制御ユニット２０１へ、ＰＤＲＨＩＴは信号線１１１及び１１０を介してそれぞれキャッシュメモリユニット３及びキャッシュデータユニット１０２へ、ＰＤＲＨＩＴ及びＰＤＲＷＡＩＴは信号線１０７を介してキャッシュリクエストユニット１０１へ、そしてＰＤＲＷＡＩＴは信号線１１２介してプロセッサ２へそれぞれ送出する。
【０１８４】
＜プリフェッチユニットに関連する回路ユニットの詳細＞
図９はキャッシュリクエストユニット１０１の構成を示す。キャッシュリクエストユニット１０１には信号線１０７を介してプリフェッチユニット１０５よりＰＦＲＥＱ、ＰＤＲＨＩＴ、ＰＤＲＷＡＩＴ、ＰＦＡｉ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、及びＢＵＦｉを入力する。また、プロセッサ２より信号線１２２を介してＰＲＲＥＱ及びＰＲＡＤＲを入力する。
【０１８５】
レジスタ９０８はプリフェッチリクエストＰＦＲＥＱ及びその付随情報ＰＦＡｉ、ＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、ＢＵＦｉ信号が入力され、後述のＲＥＱＢＳＹがオンの間このリクエスト及び付随情報を保持し、その後信号線９１５に出力する。レジスタ９０９はＰＤＲＨＩＴ信号が入力され、そのまま信号線９１６に出力する。レジスタ９１０はＰＲＲＥＱ、ＰＲＡＤＲ及びＰＤＲＷＡＩＴが入力され、ＰＤＲＷＡＩＴがオンの間、このリクエスト及びアドレスを保持し、信号線９１７に出力する。
【０１８６】
９０１はキャッシュリクエスト制御回路であり、メモリリクエストが同時に発生した場合の優先付けとデータがプリフェッチユニットにて読みだし済みの場合のキャッシュメモリ１００１への参照抑止を行う。このため、信号線９１５を介してＰＦＲＥＱ、信号線９１７を介してＰＲＲＥＱ、そして信号線９１６を介してＰＤＲＨＩＴを入力する。ＰＤＲＨＩＴはプロセッサ２からのメモリリクエストＰＲＲＥＱに対する有効なデータがプリフェッチユニットにて読みだし済みであることを示す。本実施例ではキャッシュリクエスト制御回路は、ＰＦＲＥＱとＰＲＲＥＱを同時に発行した時はＰＲＲＥＱを優先する。以上から、キャッシュメモリ１００１もしくはメモリ１へのリクエストＲＥＱ信号は以下の２つの条件のいずれかが成立した時に生成する。
１）ＰＲＲＥＱ  ＆  ＾ＰＤＲＨＩＴ
２）＾ＰＲＲＥＱ  ＆  ＰＦＲＥＱ
ＲＥＱ信号は信号線９１４を介してキャッシュアクセス制御回路９０３に送出する。
【０１８７】
キャッシュリクエスト制御回路９０１はＰＦＲＥＱとＰＲＲＥＱが同時に発生した場合、ＰＦＲＥＱの処理を待たせ、さらに後続のプリフェッチリクエストの発行を保留するためのＲＥＱＢＳＹ信号を生成し、信号線１２０を介してプリフェッチユニット１０５に送出する。
【０１８８】
セレクタ９０２は上記選択されたリクエストに付随するアドレスを選択する。このため信号線９１５よりＰＦＡｉ、信号線９１７よりＰＲＡＤＲ及びＰＲＲＥＱを入力し、ＰＲＲＥＱがオンのときはＰＲＡＤＲを、オフのときはＰＦＡｉを選択してＡＤＲ信号として出力する。
【０１８９】
９０３はキャッシュアクセス制御回路であり、仮想アドレスを実アドレスに変換するためのアドレス変換緩衝機構（ＴＬＢ）９０４、キャッシュメモリ１００１に登録されているデータブロックのアドレスを保持するアドレスアレイ９０５、ＴＬＢとアドレスアレイの検索結果によりキャッシュヒットの判定を行うキャッシュヒット判定回路９０６、及びリクエストの付随情報を保持管理するリクエストオーダ制御回路９０７を設ける。これらは基本的に従来技術を適用して構成するので、詳細は省略する。キャッシュアクセス制御回路９０３には信号線９１４によりＲＥＱ、信号線９１５によりＲＥＱＰＣＲＮ、ＰＤＲＴＰｉ、ＢＵＦｉ信号、そしてセレクタ９０２より上記ＡＤＲを入力する。
【０１９０】
キャッシュアクセス制御回路９０３はキャッシュリクエスト制御回路９０１からのＲＥＱに応答して、仮想アドレスであるＡＤＲをＴＬＢ９０４で実アドレスＭＡＤＲに変換する。このときＴＬＢに登録している記憶保護情報も同時に検査し、アクセス例外が検出された場合はＥＸＰ信号を生成する。次に上記実アドレスを用いてこのアドレスアレイ９０５を検索し、キャッシュヒット判定回路９０６により判定する。もし当該実アドレスが登録されていればキャッシュヒットと判定し、従来の方法によりキャッシュアドレスＣＡＤＲを生成し、信号線１１３を介してキャッシュメモリユニット３へ送出、さらにデータ送出指令ＣＡＤＶを生成する。もし当該実アドレスが登録されていなければキャッシュミスと判定しメモリリクエストＭＲＥＱを生成する。リクエストオーダ制御回路９０７は上記実アドレスＭＡＤＲを信号線１１５を介してメモリリクエストユニット１０３へ送出する。このとき、プリフェッチバッファ指定ＢＵＦｉがオンならライン転送要求ＬＴを付随する。
【０１９１】
リクエストオーダ制御回路９０７は信号線９１５よりＲＥＱＰＣＲＮ、ＰＤＲＴＰｉを取り込み、キャッシュヒット時はこれをＣＷＰＤＲＮ、ＣＰＤＲＩＰとして信号線１２０によりプリフェッチユニット１０５へ、キャッシュミス時はこれをＭＷＰＤＲＮ、ＭＰＤＲＩＰとして信号線１１５によりメモリリクエストユニット１０３へ送出する。
【０１９２】
図１０はキャッシュメモリユニット３の詳細を示す。キャッシュメモリユニット３には信号線１１３を介してキャッシュリクエストユニット１０１よりＣＡＤＲ、信号線１１４を介してキャッシュデータユニット１０２よりキャッシュへの書き込みデータやプリフェッチデータを取り込む。１００１はキャッシュメモリであり、アドレスＣＡＤＲを用いてアクセスする。書き込みデータは信号線１１４により入力する。セレクタ１００３には信号線１００２によりキャッシュメモリ１００１の読み出しデータ及び信号線１１４上のデータを入力する。プリフェッチユニット１０５より信号線１１１を介してＰＤＲＨＩＴ信号を取り込み、これにより上記セレクタのデータ選択を行う。ＰＤＲＨＩＴがオンのときは信号線１１４にはＰＤＲから読み出した有効なプリフェッチデータを送出しており、セレクタ１００３によりこれを選択し、信号線１０８を介してプロセッサ２へ送出する。これはプロセッサ２を構成する上で別のデータ線を設ける必要がないため、コスト削減に効果がある。
【０１９３】
＜プリフェッチ制御の補足説明＞
以下では本実施例によるプリフェッチ機能、動作及びプログラムの方法等につき、上記で述べなかった点を中心に補足説明する。
【０１９４】
（１）タイプ固有のプリフェッチ制御
以下では各データ構造タイプ毎にＰＣＲの初期設定方法並びにプリフェッチ制御を説明する。
【０１９５】
１）シーケンシャルベクトル
シーケンシャルベクトルのプリフェッチは１つのＰＣＲで指定する。プログラムによる初期設定情報は以下の通り。記述のないフィールドの設定は不要であり、このことは設定オーバヘッドの軽減に役立つ。以下に図２２〜２５にて示したプログラム例１におけるＰＣＲの初期設定例を説明する。ここでＰＣＲ０を使用する。
【０１９６】
−ＡＣＴ＝１；  プリフェッチ動作を起動
−ＯＲＧ＝１；  オリジン  ＰＣＲであることを指定
−ＭＯＤ＝（８）；ストライドが８Ｂ
−ＤＬ＝（３）；  オペランド長が８Ｂ
−ＢＵＦ＝０；  プリフェッチバッファとしてＰＤＲのみ使用
−ＩＩＤ＝（ＧＲ１２）；  Ｌｏａｄ命令のベースレジスタ番号として１２を指定
−ＬＡ＝１；  先読み制御ありを指定
−ＬＡＣ＝（２０）；  ２０要素まで先読み
−ＳＫＩＰ＝０；  アドレススキップ有り
−ＰＤＲＴＰ＝０；  ＰＤＲの先頭要素を指定
−ＢＡＬ＝０；  （ＰＤＲＴＰと同じ値）
−ＮＲ＝１  ；  メモリ参照命令のみがフェッチデータを参照
−ＭＯＥ＝０；  マスクオーバライド指定不要
−ＰＦＡ＝（＆Ｂ（１））  ；  ベクトルＢの最初の要素アドレス（ＧＲ１２の初期値）
２）インデクス付きベクトルのプリフェッチ制御
インデクス付きベクトルのプリフェッチはインデクスの読みだし制御を指定するオリジンＰＣＲとターゲット（一般には複数）の読み出しを制御するリンクＰＣＲで指定する。以下に図２６〜２９にて示したプログラム例２及び図３０〜３３にて示したプログラム例３におけるＰＣＲの初期設定例を説明する。
【０１９７】
＜オリジンＰＣＲの初期設定＞ＰＣＲ０を使用
−ＡＣＴ＝１；  プリフェッチ動作を起動
−ＯＲＧ＝１  ；  インデクスベクトルを読みだすオリジン  ＰＣＲであることを指定
−ＭＯＤ＝（８）；  ストライドが８Ｂ
−ＤＬ＝（３）；  インデクスベクトルのオペランド長が８Ｂ
−ＢＵＦ＝０；  プリフェッチバッファとしてＰＤＲのみ使用
−ＩＩＤ＝（ＧＲ１０）；  Ｌｏａｄ命令のベースレジスタ番号として１０を指定
−ＬＡ＝１；  先読み制御ありを指定
−ＬＡＣ＝（５）；  ５要素まで先読み
−ＳＫＩＰ＝０；  アドレススキップ無し
−ＰＤＲＴＰ＝０；  ＰＤＲの先頭要素を指定
−ＢＡＬ＝０；  （ＰＤＲＴＰと同じ値）
−ＮＲ＝２  ；  Ｌｏａｄ命令及びＦｌｏａｄ命令のプリフェッチアドレス生成のために当該ＰＤＲを参照
−ＭＯＥ＝０；  マスクオーバライド指定不要
−ＰＦＡ＝（＆Ｌ（１））  ；  インデクスベクトルＬの最初の要素アドレス（ＧＲ１０の初期値）
＜リンクＰＣＲの  初期設定＞ＰＣＲ１を使用
−ＡＣＴ＝１；  プリフェッチ動作を起動
−ＯＲＧ＝０  ；  ターゲットベクトルＢを読みだすリンク  ＰＣＲ
−ＭＯＤ＝（＆Ｂ（１））；  ターゲットベクトルＢのベースアドレス
−ＤＬ＝（３）；  ターゲットベクトルＢのオペランド長８Ｂ
−ＢＵＦ＝１；  プリフェッチバッファとしてＰＤＲとキャッシュの両方を指定
−ＩＩＤ＝（ＧＲ１２）；  Ｆｌｏａｄ命令のベースレジスタ番号として１２を指定
−ＬＡ＝０；  先読み制御なしを指定（リクエストは親ＰＣＲのデータ読みだしに従属するので不要）
−ＳＫＩＰ＝０；  アドレススキップ無し
−ＰＤＲＴＰ＝０（プログラム例２）／１（プログラム例３）
−ＢＡＬ＝０；  （ＰＤＲＴＰと同じ値）
−ＮＲ＝１  ；  Ｆｌｏａｄ命令が該ＰＤＲを参照
−ＭＯＥ＝０（プログラム例２）／１（プログラム例３）
−ＬＬ＝０；  インデクス付きベクトルのリンクＰＣＲであることを表示
−ＬＰＣＲ＝（ＰＣＲ０）；  オリジン  ＰＣＲ  番号を指定
−ＰＤＲＱＰ＝０；  オリジンＰＣＲのＰＤＲＴＰに同じ
−ＰＦＡ；初期設定不要
プログラム例３の場合マスクオーバライドの指定によりプロローグステージ中の実行抑止されるＦｌｏａｄ命令（図３２の位置（７，３））でＰＤＲの内容を空読みするのでリンクＰＣＲのＰＤＲＴＰは１と初期設定することに注意されたい。
【０１９８】
ターゲットベクトルの読みだしアドレスの生成は、読みだされたインデクスベクトル要素をＤＬで指定したビット数分シフトした値をリンクＰＣＲのモディファイアに加算して得る。生成したアドレスはリンクＰＣＲのＰＦＡフィールドに保持し、プリフェッチリクエストに用いる。
【０１９９】
３）リンクリストのプリフェッチ制御
リンクリストのプリフェッチは、最上位のシーケンシャルなベクトルとその各要素を起点にリンクされる多レベル複数のテーブル中のデータの読み出しを制御する２つ以上のＰＣＲで指定する。プログラムによる初期設定情報は以下の通りである。
【０２００】
＜オリジンＰＣＲ＞
−ＡＣＴ＝［０／１］  ；  ＡＣＴ＝１の時，  プリフェッチ動作を起動
−ＯＲＧ＝１  ；  インデクスベクトルを読みだすオリジン  ＰＣＲであることを指定
−ＭＯＤ＝（ストライド）
−ＤＬ＝（インデクスベクトルのオペランド長を指定）
−ＢＵＦ＝［０／１］；  ［ＰＤＲ／キャッシュ］
−ＩＩＤ＝（ベースレジスタ番号）
−ＬＡ＝［０／１］；  先読み制御の有無を指定
−ＬＡＣ＝（先読みカウント）
−ＳＫＩＰ＝［０／１］；  ＳＫＩＰ＝１の時，  ＳＫＩＰＰ及び  ＳＫＩＰＧＡＰ  の指定が必要
−ＰＤＲＴＰ；  ＭＯＥ＝０の時０，  ＭＯＥ＝１の時プロローグステージでのＰＤＲの空読みの回数を指定
−ＢＡＬ＝（ＰＤＲＴＰと同じ値）
−ＮＲ＝［２／３／．．．］  ；  最上位レベルのテーブル要素を格納したＰＤＲを参照する回数を指定
−ＭＯＥ＝［０／１］；  マスクオーバライド指定
−ＰＦＡ＝（ベースアドレス）  ；  インデクスベクトルの最初の要素アドレス
＜リンクＰＣＲの初期設定＞
−ＡＣＴ＝［０／１］  ；  ＡＣＴ＝１の時，  プリフェッチ動作を起動
−ＯＲＧ＝０  ；  下位レベルのリストを読みだすリンク  ＰＣＲであることを指定
−ＭＯＤ＝（変位）；  次レベルのテーブルにおけるリンクデータへの変位
−ＤＬ＝（リンクデータの長さを指定）
−ＢＵＦ＝０／１；    ［ＰＤＲ／キャッシュ］
−ＩＩＤ＝（ベースレジスタ番号）
−ＬＡ＝０；  先読み制御なしを指定（リクエストは親ＰＣＲのデータ読みだしに従属するので不要）
−ＳＫＩＰ＝０；  スキップ不要
−ＰＤＲＴＰ；  ＭＯＥ＝０の時０，  ＭＯＥ＝１の時プロログステージでのメモリ参照命令実行回数
−ＢＡＬ＝（ＰＤＲＴＰと同じ値）
−ＮＲ＝［１／２／．．．］  ；  最下位レベルのＰＣＲでは１、他のレベルでは該データを格納するＰＤＲを参照する回数を指定
−ＭＯＥ＝［０／１］；  マスクオーバライド指定
−ＬＬ＝１；  リンクリストにおけるリンクＰＣＲであることを指定
−ＬＰＣＲ＝（親  ＰＣＲ  番号）
−ＰＤＲＱＰ＝（親ＰＣＲのＰＤＲＴＰに同じ）
−ＰＦＡ；初期設定不要
子ＰＣＲによるデータの読みだしアドレスの生成は、親ＰＣＲにより読みだされた上位要素（リンクデータ）に子ＰＣＲのモディファイアを加算して得る。生成したアドレスは子ＰＣＲのＰＦＡフィールドに保持し、プリフェッチリクエストに用いる。以下、子ＰＣＲによるプリフェッチリクエストの発行制御はインデクスベクトルのプリフェッチにおけると同様である。
【０２０１】
（２）アドレススキップ機能
本実施例ではアドレススキップ機能を具備する。アドレススキップ機能は多次元配列への部分参照にプリフェッチを適用するうえで有効である。
【０２０２】
多次元配列を用いた数値計算に於て、配列の周辺上の要素は境界条件を与えるため、主たる計算には用いない場合があり、またメモリバンク競合を回避するため意図的に参照しない要素を加えた配列を定義する場合もある。図１６は２次元配列への部分参照を行なう例を示す。このケースではカラム１００元、ロー２００元の配列Ａ（１００，２００）はカラム優先で読みだされる。このプログラムでは太枠で囲んだＡ（１−９９，１−１９９）の部分を参照する。即ちデータプリフェッチにおいは各カラム上の最後のロー要素は参照せず、次のカラムの先頭ロー要素からプリフェッチを継続する必要がある。実際に参照するのは間に１要素ずつ間隙のある連続９９要素ずつにブロックされたメモリ領域となる。これを、各カラムごとに毎回プリフェッチを起動するとオーバヘッドが発生し、十分な高速化が図れない恐れがある。本アドレススキップ機能はこの場合でも一回のプリフェッチ起動にて上記ブロック化された領域を読みだすことが可能なため、オーバヘッドの削減に効果的である。
【０２０３】
アドレススキップ機能は、全体のデータ容量がキャッシュを越える程度に大きく、しかもプリフェッチの起動時間が最内ループの実行時間に比較して無視できない場合に効果が大である。例えば１００Ｘ１００Ｘ１００の３次元配列に於て、最内ループの実行サイクルがイタレーションあたり５０サイクルで、プリフェッチの起動に２５サイクルのオーバヘッドがかかる場合、本機能により約５０％の高速化が見込まれる。
【０２０４】
（３）割り込み処理
以下ではプリフェッチ動作中に割り込みが発生した場合のハードウェア及びソフトウェアによる処理について詳述する。プリフェッチ動作に関する割り込み処理はその原因の例外事象の種類により異なる。例外の種類は以下の４種類に分類される。
【０２０５】
○プリフェッチ動作中に検出した回復可能な例外
例：プリフェッチにおけるページフォールト、ＴＬＢミスフォールト
○プリフェッチ動作中に検出した回復不可能な例外
例：プリフェッチにおけるデータメモリ保護チェック、非アラインデータ参照トラップ
○プリフェッチ動作とは独立に検出した回復可能な例外
例：外部割り込み、命令実行にともなうメモリ参照で検出したページフォールトとＴＬＢミスフォールト
○プリフェッチ動作とは独立に検出した回復不可能な例外
例：高優先度マシンチェック、命令実行に伴うメモリ参照で検出したメモリ保護チェック
割り込みの原因である例外事象が回復可能な種類であるとき、再開後にもプリフェッチが継続可能である。この場合本実施例では必要なプリフェッチ制御情報のみ退避回復を行ない、プリフェッチデータレジスタのデータについては退避回復を行なわないことでオーバヘッドを削減する。
【０２０６】
以下、本実施例になる情報処理装置において割り込みが発生したときのプリフェッチ関連の処理概要を記す。
【０２０７】
１）例外検出
プリフェッチのためのメモリ読みだしに付随したアクセス例外ＥＸＰはキャッシュリクエストユニット１０１におけるＴＬＢ９０４の索引により検出する。
【０２０８】
このアクセス例外の検出はプロセッサ２における対応メモリ参照命令の実行に際しても必要である。それは例外検出時の後続命令の実行抑止のタイミングがクリティカルであるため、プリフェッチでのリクエスト処理による検出結果を用いることの困難な場合がありうるからである。従ってプリフェッチユニットからプロセッサ２への例外の報告も行なわない。プロセッサ２でのアクセス例外の検出は、従来通りプロセッサ２内のＴＬＢ（図示せず）の索引により行う。
【０２０９】
２）例外検出時の動作
プリフェッチリクエストに付随して例外ＥＸＰが検出された時、該リクエストに対応するＰＤＲ要素に付随するデータ無効フラグＤＩをオンとし、データの無効を表示する。この場合でも後続のデータプリフェッチは継続する。この継続の理由は、以下の通りである。
【０２１０】
○対応するメモリ参照命令は条件付き実行制御のもとにその実行が抑止されることがありえるため、該例外が必ずしも検出されるとは限らない。
【０２１１】
○非連続なシーケンシャルベクトル、インデクスベクトル、リンクリストのプリフェッチの場合など、後続のデータアドレスが大きく離れうる場合は後続のアドレスでは例外が発生しない場合もありうる。
【０２１２】
○後続データのプリフェッチを停止した場合、メモリ参照命令がプリフェッチデータを待ちつづけることによるハングアップが発生しうる。
【０２１３】
３）割り込み時の動作
対応するメモリ参照命令の実行時に例外を検出した場合、当該命令の実行を抑止し、ハードウェアによる割り込み時の動作を実行する。この時、割り込み発生をＩＮＴ信号によりプリフェッチユニット１０５へ報告する。プリフェッチユニット１０５はＰＳＲのＳＵＳＰフラグをセットする。これにより全てのプリフェッチ動作は以後のリクエスト発行を停止し、既に発行したリクエストに対するデータの到着完了を待つ。全てのデータが到着すると上記ハードウェア動作によりＰＳＲのＰＦＢＳＹフラグがオフとなる。プリフェッチ機構のこの状態を中断状態という。プロセッサ２は割り込み処理ルーチンの先頭にてＰＳＲを読み出し、プリフェッチ機構が中断状態であることを確認後、引き続く割り込み処理ルーチンを実行する。回復可能な割り込みにおいて、割り込み処理中にプリフェッチ情報であるＰＳＲ、ＰＣＲ、ＰＤＲ及びＰＤＳＲの内容が保存される場合、すなわち元のプログラムに復帰するまで本実施例になるプリフェッチ機構を一切使用しない場合、割り込み処理ルーチンではこれらの退避を行なう必要がない。従って該処理に要する処理オーバヘッドはない。
【０２１４】
回復可能な割り込みにおいて、割り込み処理中に該プリフェッチ情報が保存される保証がない場合、本実施例では割り込み処理ルーチンはＰＳＲ及びＰＣＲのみ退避を行なう必要がある。この退避回復は命令により実行する。この場合でもＰＤＲは割り込みからの復帰後再読み出しを行なうので退避は不要である。また、ＰＤＳＲも退避は不要であるが、次に述べるように状態情報の初期化が必要である。
【０２１５】
回復不可能な割り込みにおいては、割り込み処理ルーチンにて全てのＰＣＲの有効フラグＶＬＤをリセットすることでプリフェッチ動作を無効化する。この場合プリフェッチ関連の諸資源の退避は不要である。
【０２１６】
４）割り込みからの復帰時の動作
プリフェッチ情報の保存を保証不可能な割り込みからの復帰時に於て、割り込みルーチンはＰＳＲ及び有効なＰＣＲの回復を行なう。この間ＳＵＳＰフラグをセットすることで回復中のＰＣＲ情報でプリフェッチ動作が先走らないよう保証する。割り込み処理中にプリフェッチ情報の保存が保証される場合は該回復動作は不要である。
【０２１７】
割り込み処理ルーチンから元のプログラムへの復帰直前の命令の実行によりＳＵＳＰフラグをリセットする。これにより回復したＰＣＲの指定に従いプリフェッチ機構が動作状態になりプリフェッチ動作が再開する。そして割り込み処理ルーチンからの復帰命令の実行によってプロセッサ２は元のプログラムの実行を再開する。プリフェッチリクエストは割り込みからの復帰に伴い、回復したＰＦＡを用いて発行し、データは回復したＰＤＲＴＰが指すＰＤＲ要素から格納していく。この要素は割り込みにより捨てられた、ＢＡＬフィールドで示される個数のＰＤＲ要素の次に位置することになる。
【０２１８】
プリフェッチ機構に関する特定の回路のハード故障検出時など、割り込み後にプリフェッチを再開することが適当でない場合は、ＰＣＲ初期化命令によりＶＬＤフラグをオフにすることでプリフェッチを無効化可能である。この場合でも下記プリフェッチバッファリダイレクションによりプログラムの正しい動作が保証される。
【０２１９】
５）プリフェッチバッファリダイレクション
プリフェッチしたデータが書き換えやアクセス例外発生により無効であった場合、すでに述べたように当該メモリ参照命令の実行時にキャッシュメモリ１００１もしくはメモリ１から正しいデータを読み出す制御を行う。これは既に説明した通り、当該メモリ参照命令のメモリリクエストＰＲＲＥＱによる処理を抑止するＰＤＲＨＩＴ信号を発行しないことにより実現する。この動作をプリフェッチバッファリダイレクションと呼び、ＰＢＲと略記する。
【０２２０】
割り込まれたプログラムがその再開後、割り込み時に捨てられたプリフェッチデータを参照しようとする場合も、このＰＢＲを用いる。すなわち、まず割り込みからの回復にあたり、ＰＣＲのリダイレクションデータカウントＲＤＣフィールドを割り込み発生時のＢＡＬに設定する。プリフェッチユニットではメモリ参照命令の実行毎にＲＤＣがゼロでなければＰＢＲを継続する。ＰＢＲによりメモリデータを読み出す度にＲＤＣを１ずつ減ずる。ＰＤＲＯＰは捨てられたデータの内最も古いものが保持されていたＰＤＲ要素位置を復帰時点でポイントしている。その後ＰＤＲＯＰはＰＢＲ動作が行なわれるたびにインクリメントする。
【０２２１】
図１９にコンテクストスイッチ時のＰＤＲ及びＰＤＳＲの状態例を示す。同図（ａ）は割り込み処理ルーチンに制御が渡る前のＰＤＲとＰＤＳＲの状態を示す。この場合ＢＡＬフィールドに表示されるｎ個のデータがＰＤＲに格納されており、そのうちのいくつかは書き換えによりデータ無効フラグＤＩがセットされている。割り込みが発生してもこれらＰＤＲ及びＰＤＳＲは退避しない。同図（ｂ）は割り込まれたプログラムに制御が戻った直後のＰＤＲとＰＤＳＲの状態を示す。この場合、プログラムによりＰＤＲＯＰ、ＰＤＲＴＰ、ＢＡＬは割り込み時点の内容を回復し、またリダイレクションデータカウントＲＤＣをＢＡＬと同じ値ｎに設定する。ＰＤＳＲのＲＣフィールドの内容は全て０に初期化する。該ＰＤＲに対応するメモリ参照命令が実行され、ＰＤＲ読みだしリクエストを発行したとき、プリフェッチバッファリダイレクションによりキャッシュメモリ１００１もしくはメモリ１からデータを読みだす。ＲＤＣが０でない間このプリフェッチバッファリダイレクションを行なう。ＰＤＲ読みだしの度にＲＤＣを１減じ、またＰＤＲＯＰを次に進める。この様にすることで割り込みにおいてＰＤＲ内のデータを退避回復しなくても正しいプログラム動作を保証することができる。また該退避回復に必要な処理時間を削減することで割り込み処理の効率化を実現する。
【０２２２】
（４）コヒーレンシ制御
本プリフェッチ方式ではＰＤＲとキャッシュメモリ１００１のコヒーレンシを上記プリフェッチバッファリダイレクションによりハードウェアが保証する。即ちプリフェッチの起動命令実行後からメモリ参照命令で該データを読みだすまでの間にストア命令で当該データを書き換えた場合、プログラムからみて書き換え後のデータをメモリ参照命令が受け取ることを保証する。
【０２２３】
この制御タイムチャート例を図２０に示す。同図ではプリフェッチの設定をする命令の実行によりプリフェッチを起動後、該データを参照するｌｏａｄ命令がループ制御にて繰り返し実行される様子を示している。ｌｏａｄ命令に付した（）付きの数字はループ回数である。このプログラムの場合第１ループのｓｔｏｒｅ命令が第２ループのｌｏａｄ命令のオペランドを書き換える。プリフェッチアドレスがＰＦＡに設定されたのち、この例ではプリフェッチユニットは第３サイクル（Ｃ３）からプリフェッチリクエストを毎サイクル発行し始める。プリフェッチアドレスＰＦＡはキャッシュアドレスＣＡＤＲに変換され、読みだしたキャッシュデータＣＤＡＴＡはＰＤＲ１（０）に格納される。ｌｏａｄ命令（１）が実行されるとＰＤＲ読みだしリクエストＰＤＲＲＥＱが生成され、該ＰＤＲ１（０）に格納されたデータを読みだしＣ１２にてこれをプロセッサ２の汎用レジスタＧＲに格納する。ｌａｏｄ命令（２）に対応するプリフェッチリクエストはＣ４にて発行され、これに伴い、ＰＤＳＲ１（１）の状態が（１１００）に遷移する。ｓｔｏｒｅ命令（１）の実行において書き換えが検出されるため、該ＰＤＳＲの状態は（１１０１）に遷移する。その後、データが到着するのでＣ９にて状態は（１０１１）に遷移する。ｌｏａｄ命令（２）が実行されると該ＰＤＳＲの状態からデータの無効が認識され、ＰＤＲＨＩＴが抑止され、ＰＢＲが実行される。これによりＣ１２においてキャッシュアドレスはプリフェッチアドレスの代わりにｌｏａｄ命令（２）のメモリリクエストアドレスがセットされる。読みだされたｌｏａｄ命令（２）のデータはＰＤＲ１（１）内の書き換え前のデータに替えてプロセッサ２内のレジスタにＣ１５にて格納される。
【０２２４】
ハードウェアによるコヒーレンシの保証により、論理的にはプリフェッチを適用した場合の動作を保証するうえで、プログラムはストア命令とプリフェッチ起動命令の順序を考慮する必要がなくなる。このためプリフェッチ起動命令をできるだけ早期に実行し、起動オーバヘッドを削減するためのコード最適化を図るうえで効果的である。
【０２２５】
本実施例ではハードウェアによりコヒーレンシが保証されるが、プリフェッチデータの書き換えが頻発した場合、性能への影響が発生する実施態様も考えうる。このような場合に対しては、先読み制御を用いることで性能への影響を避けながらコヒーレンシを保証することが可能である。これを次の例で説明する。
【０２２６】
0003548616.tif 000002
本例ではＭはコンパイル時にわかっているものとする。この例で、ＬＡＣ＜Ｍとなるように先読みカウントＬＡＣを指定してもプリフェッチが性能向上に有効であるとする。この時、プリフェッチは最後にメモリ参照命令に転送したデータよりＬＡＣで示される数以上先には進まないため、上記Ａ（Ｉ−Ｍ）によるデータプリフェッチはＡ（Ｉ）に対応して行なわれる該データへの書き換え以前には起こりえない。従って必ず書き換え後のデータをプリフェッチすることとなり、コヒーレンシが保証される。この先読み制御によるデータコヒーレンシ保証動作のタイムチャート例を図２１に示す。
【０２２７】
この例では同図に示すＤＯループにおける配列要素Ａ（Ｉ−４）の読みだしにおけるコヒーレンシ保証を示してある。該ループではＡ（Ｉ−４）は常に４回前のループ実行において書き換えが行なわれるのでその書き換え結果を読みだす必要がある。このため先読みカウントＬＡＣを３と指定し、プリフェッチによる先読みは３要素分に制限する。第４サイクル（Ｃ４）にてｌｏａｄ命令（３）用のデータ読みだしが完了するとＢＡＬの値がＬＡＣに達するのでリクエスト発行が保留となる。Ｃ６にてｌａｏｄ命令（１）（ｌｄ．１と略記）が実行されＰＤＲデータが読みだされるとＢＡＬが２となるのでプリフェッチリクエストが発行可能となる。この様にして次のｌｄ．５のプリフェッチはｌｄ．２の命令実行の後に行なわれることが保証できる。一方、ｌｄ．５のプリフェッチの前に実行されるべき配列要素Ａ（５）への書き込みｓｔ．５はプログラム上明らかにｌｄ．２の前に実行される。従って、ｌｄ．５はｓｔ．５の後に実行され、書き換え後のデータを得ることができる。
【０２２８】
＜プログラム例＞
ここで、対象となる上記データ構造を参照する幾つかのプログラムについて、高速化のための最適化方式とそれを適用した場合のオブジェクトプログラム及び本情報処理装置における命令実行トレースにつき説明する。
【０２２９】
図２２はシーケンシャルベクトルＢを参照するプログラムである。このケースはループ長３Ｎが大きく、ベクトルＢ（Ｉ）がプロセッサ２内キャッシュの容量をこえていることを想定しており、プロセッサ２の外付けキャッシュ（以後これを単にキャッシュメモリと呼ぶ）を参照するための最適化を行なう。このキャッシュメモリ１００１の参照には、本実施例では約７サイクルを要するとすると、以下に記すようなループ展開と命令スケジューリングを適用する。まず、ソースプログラムを（ｂ）で示すように３倍ループ展開する。このループ部分をオブジェクトプログラムに展開し、命令スケジューリングを施したものを図２３に示す。この図では命令は一行に３個ずつ書かれている。これは図２２（ｂ）で示したループ展開後のソースプログラムとの対応を見やすくしたためであり、メモリ１上での位置は第１行第１列（以下（１，１）と記す）、（１，２），（１，３），（２，１），．．．の様に並んでいる。すなわち３行目までは通常の書き方により記すと
（１，１）  ［ＭＲ２］Ｆｌｏａｄ  （ＧＲ１２）  −＞ＦＲ２；  Ｂ（Ｉ）
（１，２）  ［ＭＲ３］Ａｎｄ  ＭＲ３，  ＭＲ１０  −＞  ＭＲ３
（２，１）  ［ＭＲ２］Ａｄｄ  ＧＲ１２＋ｄ１  −＞  ＧＲ１２
（２，２）  ［ＭＲ１］Ｓｅｔ  １  ｔｏ  ＭＲ３
（２，３）  ［ＭＲ４］Ｆｓｔｏｒｅ  ＦＲ４  −＞  （ＧＲ１３）；  Ａ（Ｉ＋２）
（３，２）  ［ＭＲ１］Ａｎｄ  ＭＲ３，  ＭＲ１０  −＞  ＭＲ３
（３，３）  ［ＭＲ４］Ａｄｄ  ＧＲ１３＋ｄ２  −＞  ＧＲ１３
−
となることを示してある。
【０２３０】
各命令の先頭にはその実行の有無を制御するマスクレジスタ番号（ｒｍにより指定）が示してある。図２４及び図２５は上記オブジェクトを実行したときの、実行された命令の並び（トレース）を示してある。但し簡単のためオリジナルのプログラムにおいて、ループ長は６（Ｎ＝２）としている。ループ部のオブジェクトプログラムの第１回目の実行にあたっては、第２列上の最初の１命令及び、第３列上の最初の３命令は実行不要な命令である。これはマスクレジスタの初期値を同図に示すように設定してあることにより、条件実行制御により実現する。ここでＭＲ１は常に１（論理値で真に対応）であることに注意が必要である。この実行抑止を含む一回めのプログラム実行ステージをプロローグステージと呼ぶ。また２回目の実行では該ループ部は全ての命令が実行される。このプログラム実行ステージをボディーステージと呼ぶ。この例では一回であるが、一般にはループ長に応じ、このボディーステージが繰り返し実行される。３回目の実行では第１列の第２１行から第２６行、及び第２８行の命令が、第２列の第２４行から第２９行の命令が、そして第３列の第２７行から第２８行の命令が実行を抑止される。この最後のループ実行ステージをエピローグステージと呼ぶ。結局実際に実ＡＴＡはＰＤＲ１（０）に格納される。ｌｏａｄ命令（１）が実行されるとＰＤＲ読みだしリクエストＰＤＲＲＥＱが生成され、該ＰＤＲ１（０）に格納されたデータを読みだしＣ１２にてこれをプロセッサ２の汎用レジスタＧＲに格納する。ｌａｏｄ命令（２）に対応するプリフェッチリクエストはＣ４にて発行され、これに伴い、ＰＤＳＲ１（１）の状態が（１１００）に遷移する。ｓｔｏｒｅ命令（１）の実行において書き換えが検出されるため、該ＰＤＳＲの状態は（１１０１）に遷移する。その後、データが到着するのでＣ９にて状態は（１０１１）に遷移する。ｌｏａｄ命令（２）が実行されると該ＰＤＳＲの状態からデータの無効が認識され、ＰＤＲＨＩＴが抑止され、ＰＢＲが実行される。これによりＣ１２においてキャッシュアドレスはプリフェッチアドレスの代わりにｌｏａｄ命令（２）のメモリリクエストアドレスがセットされる。読みだされたｌｏａｄ命令（２）のデータはＰＤＲ１（１）内の書き換え前のデータに替えてプロセッサ２内のレジスタにＣ１５にて格納される。
【０２３１】
ハードウェアによるコヒーレンシの保証により、論理的にはプリフェッチを適用した場合の動作を保証するうえで、プログラムはストア命令とプリフェッチ起動命令の順序を考慮する必要がなくなる。このためプリフェッチ起動命令をできるだけ早期に実行し、起動オーバヘッドを削減するためのコード最適化を図るうえで効果的である。
【０２３２】
本実施例ではハードウェアによりコヒーレンシが保証されるが、プリフェッチデータの書き換えが頻発した場合、性能への影響が発生する実施態様も考えうる。このような場合に対しては、先読み制御を用いることで性能への影響を避けながらコヒーレンシを保証することが可能である。これを次の例で説明する。
【０２３３】
0003548616.tif 000003
本例ではＭはコンパイル時にわかっているものとする。この例で、ＬＡＣ＜Ｍとなるように先読みカウントＬＡＣを指定してもプリフェッチが性能向上に有効であるとする。この時、プリフェッチは最後にメモリ参照命令に転送したデータよりＬＡＣで示される数以上先には進まないため、上記Ａ（Ｉ−Ｍ）によるデータプリフェッチはＡ（Ｉ）に対応して行なわれる該データへの書き換え以前には起こりえない。従って必ず書き換え後のデータをプリフェッチすることとなり、コヒーレンシが保証される。この先読み制御によるデータコヒーレンシ保証動作のタイムチャート例を図２１に示す。
【０２３４】
この例では同図に示すＤＯループにおける配列要素Ａ（Ｉ−４）の読みだしにおけるコヒーレンシ保証を示してある。該ループではＡ（Ｉ−４）は常に４回前のループ実行において書き換えが行なわれるのでその書き換え結果を読みだす必要がある。このため先読みカウントＬＡＣを３と指定し、プリフェッチによる先読みは３要素分に制限する。第４サイクル（Ｃ４）にてｌｏａｄ命令（３）用のデータ読みだしが完了するとＢＡＬの値がＬＡＣに達するのでリクエスト発行が保留となる。Ｃ６にてｌａｏｄ命令（１）（ｌｄ．１と略記）が実行されＰＤＲデータが読みだされるとＢＡＬが２となるのでプリフェッチリクエストが発行可能となる。この様にして次のｌｄ．５のプリフェッチはｌｄ．２の命令実行の後に行なわれることが保証できる。一方、ｌｄ．５のプリフェッチの前に実行されるべき配列要素Ａ（５）への書き込みｓｔ．５はプログラム上明らかにｌｄ．２の前に実行される。従って、ｌｄ．５はｓｔ．５の後に実行され、書き換え後のデータを得ることができる。
【０２３５】
＜プログラム例＞
ここで、対象となる上記データ構造を参照する幾つかのプログラムについて、高速化のための最適化方式とそれを適用した場合のオブジェクトプログラム及び本情報処理装置における命令実行トレースにつき説明する。
【０２３６】
図２２はシーケンシャルベクトルＢを参照するプログラムである。このケースはループ長３Ｎが大きく、ベクトルＢ（Ｉ）がプロセッサ２内キャッシュの容量をこえていることを想定しており、プロセッサ２の外付けキャッシュ（以後これを単にキャッシュメモリと呼ぶ）を参照するための最適化を行なう。このキャッシュメモリ１００１の参照には、本実施例では約７サイクルを要するとすると、以下に記すようなループ展開と命令スケジューリングを適用する。まず、ソースプログラムを（ｂ）で示すように３倍ループ展開する。このループ部分をオブジェクトプログラムに展開し、命令スケジューリングを施したものを図２３に示す。この図では命令は一行に３個ずつ書かれている。これは図２２（ｂ）で示したループ展開後のソースプログラムとの対応を見やすくしたためであり、メモリ１上での位置は第１行第１列（以下（１，１）と記す）、（１，２），（１，３），（２，１），．．．の様に並んでいる。すなわち３行目までは通常の書き方により記すと
（１，１）  ［ＭＲ２］Ｆｌｏａｄ  （ＧＲ１２）  −＞ＦＲ２；  Ｂ（Ｉ）
（１，２）  ［ＭＲ３］Ａｎｄ  ＭＲ３，  ＭＲ１０  −＞  ＭＲ３
（２，１）  ［ＭＲ２］Ａｄｄ  ＧＲ１２＋ｄ１  −＞  ＧＲ１２
（２，２）  ［ＭＲ１］Ｓｅｔ  １  ｔｏ  ＭＲ３
（２，３）  ［ＭＲ４］Ｆｓｔｏｒｅ  ＦＲ４  −＞  （ＧＲ１３）；  Ａ（Ｉ＋２）
（３，２）  ［ＭＲ１］Ａｎｄ  ＭＲ３，  ＭＲ１０  −＞  ＭＲ３
（３，３）  ［ＭＲ４］Ａｄｄ  ＧＲ１３＋ｄ２  −＞  ＧＲ１３
−
となることを示してある。
【０２３７】
各命令の先頭にはその実行の有無を制御するマスクレジスタ番号（ｒｍにより指定）が示してある。図２４及び図２５は上記オブジェクトを実行したときの、実行された命令の並び（トレース）を示してある。但し簡単のためオリジナルのプログラムにおいて、ループ長は６（Ｎ＝２）としている。ループ部のオブジェクトプログラムの第１回目の実行にあたっては、第２列上の最初の１命令及び、第３列上の最初の３命令は実行不要な命令である。これはマスクレジスタの初期値を同図に示すように設定してあることにより、条件実行制御により実現する。ここでＭＲ１は常に１（論理値で真に対応）であることに注意が必要である。この実行抑止を含む一回めのプログラム実行ステージをプロローグステージと呼ぶ。また２回目の実行では該ループ部は全ての命令が実行される。このプログラム実行ステージをボディーステージと呼ぶ。この例では一回であるが、一般にはループ長に応じ、このボディーステージが繰り返し実行される。３回目の実行では第１列の第２１行から第２６行、及び第２８行の命令が、第２列の第２４行から第２９行の命令が、そして第３列の第２７行から第２８行の命令が実行を抑止される。この最後のループ実行ステージをエピローグステージと呼ぶ。結局実際に実行される命令は枠で囲ったもののみとなる。
【０２３８】
このコードを実行すると位置（１，１）の浮動小数点数メモリ参照命令Ｆｌｏａｄは７サイクル目以降にベクトル要素Ｂ（Ｉ）を浮動小数点レジスタＦＲ２に取り込む。アドレスは汎用レジスタＧＲ１２に格納している。ＦＲ２を参照する位置（５，１）の浮動小数点数ストア命令Ｆｓｔｏｒｅの実行までには９命令の処理が必要で、本プロセッサ２では９サイクルを要する。従って、必要なデータはすでにＦＲ２に取り込まれているので待ち合わせをすることなくＦｓｔｏｒｅ命令が実行される。また位置（４，２）のＦｌｏａｄ命令は次のベクトル要素Ｂ（Ｉ＋１）を読みだすが、ＦＲ２は使用中であるためＦＲ３にこれを取り込む。但しアドレスを格納するレジスタはＧＲ１２を共用する。
【０２３９】
この様にループ展開の後、オブジェクトコードを最適にスケジュールすることで、パイプラインピッチより長いデータ参照レーテンシを他の命令処理に隠すことが可能である。本実施例で全てのデータがキャッシュメモリ１００１に入っていれば上記の通りデータ参照の待ち合わせが発生することなくオブジェクトプログラムを実行することが可能であるが、データがキャッシュメモリ１００１に入りきらない場合は待ち合わせが発生する。これを回避するにはさらにループ展開の多重度をあげる方法がありうるが、必要レジスタ数が増大し限界がある。本実施例はこれを解決するうえで効果がある。
【０２４０】
図２６（ａ）はインデクス付きベクトルＢを参照するプログラム例である。インデクスベクトルはＬである。これもプログラム例１と同様、（ｂ）のように３倍ループ展開を行ない、図２７のようにオブジェクトを生成する。簡単のためループ長は３（Ｎ＝１）としておりその命令実行トレースを図２８及び図２９に示す。条件実行制御のもとに命令の実行されるものを枠で囲み示してある。
【０２４１】
図３０はインデクス付きベクトルの参照プログラム例であるが、インデクスの値が正である条件のときのみ結果をベクトルＡに格納する。これに関しても変換後のソースプログラムを図３０（ｂ）、オブジェクトプログラムを図３１、及び命令実行トレースを図３２及び図３３に示す。
【０２４２】
以上説明したように、本実施例による情報処理装置では以下の特徴がある。
【０２４３】
１）プロセッサとは非同期なデータプリフェッチ
個々のデータに対するプリフェッチ動作は、明示的なプリフェッチ命令の実行をすることなく、プロセッサ２とは非同期に行なわれる。これにより同期プリフェッチにおいて生ずる命令実行ネックに起因する性能低下を回避出来る。
【０２４４】
２）データ単位でのプリフェッチ
データ単位プリフェッチ機構では、データはそれを必要とするメモリ参照命令に対応して一つずつ読みだし、プリフェッチデータレジスタ（ＰＤＲ）に保持する。同一アドレス上のデータであってもメモリ参照命令に応じて再度読みだし、プリフェッチデータレジスタ（ＰＤＲ）上では別々の場所に保持する。このようなデータ単位でのプリフェッチは、大規模シーケンシャルベクトルやストライドの大きな非連続シーケンシャルベクトルの参照等、再使用確率が低いデータをプリフェッチするのに適している。
【０２４５】
３）アドレス単位でのプリフェッチ
プリフェッチデータをキャッシュメモリ１００１に格納する機能があるため、同一アドレスに対するプリフェッチが多発する場合は、このキャッシュからプリフェッチすることでメモリ１に対する負荷を軽減する上で効果がある。これはインデクス付きベクトルのターゲットベクトルやリンクリストの下位データの参照等で効果的である。
【０２４６】
４）プリフェッチアドレス
プリフェッチリクエストのために生成するアドレスはメモリ参照命令のオペランドアドレスと同一であるべきため、バーチャルアドレスである。プリフェッチアドレスはプロセッサ２とは非同期に生成し、専用のプリフェッチアドレスレジスタに保持する。
【０２４７】
５）プリフェッチデータバッファ
データ単位でのプリフェッチのために、読みだしたデータを保持する専用のプリフェッチデータレジスタ（ＰＤＲ）を設けている。ＰＤＲを設けることでキャッシュに対する参照スループット要求値を、プリフェッチを用いない場合と同程度に押さえることが可能であり、従ってコストの増加を押さえるうえで効果的である。
【０２４８】
６）初期設定とリクエスト制御
プリフェッチ実行にあたっては、専用の命令により制御情報の初期設定、起動、及び停止を行なう。
【０２４９】
７）プロセッサ２へのデータ転送制御
プリフェッチパッフアからプロセッサ２へのデータ転送は対応メモリ参照命令の実行により要求されるが、対応メモリ参照命令の識別はそのベースアドレスレジスタ番号をキーとして行なう。従って、転送用の専用命令を設けることはしない。また、従来の命令に識別フィールドを設けるなどの拡張も不要である。
【０２５０】
８）先読み制御
対応メモリ参照命令の実行時刻を基準としたとき、当該データ読みだし時刻を制御可能である。即ち対応メモリ参照命令のある実行に対してｎ回先の実行に必要なデータまでしか先読みを許さない制御が可能である。これにより不要データによるキャシュの汚染を回避することが可能。またデータのコヒーレンシ保証にも用いることができる。
【０２５１】
９）ＰＤＲのコヒーレンシ制御
ストアアドレスチェックとプリフェッチバッファリダイレクションＰＢＲと呼ぶ機構にてＰＤＲとキャッシュのコヒーレンシをハードウェアにより保証する。即ち、プリフェッチの起動後にストア命令がプリフェッチする領域を書き換えた場合、メモリ参照命令が書き換え後のデータを参照することをハードウェアが保証する。
【０２５２】
１０）ＩＦ文に対応するデータスキップ機能
条件付きメモリ参照命令が実行を抑止された時においてもプリフェッチしたデータを空転送によりスキップすることで、ループ内にＩＦ文がある場合でも本プリフェッチが適用可能である。
【０２５３】
１１）アドレススキップ機能
シーケンシャルベクトルに対するプリフェチアドレスの生成に於て、所定の間隔毎にアドレスをノンリニアに更新することが可能。これにより多次元配列の部分参照のために最内ループを反復実行する場合、一回のプリフェチの起動にて全体の必要データが先読み可能となる。これはプリフェッチの起動オーバヘッドを削減し、高速化を図るうえで効果的である。
【０２５４】
１２）データの退避回復の不要なコンテクストスイッチ
割り込みに伴うコンテクストスイッチにおいて、ＰＤＲの退避回復は不要である。割り込み時に捨てられたデータはＰＢＲ機構にて復帰後再び読みだす。これは、コンテクストスイッチの高速化に有効である。
【０２５５】
【発明の効果】
以上説明したように、本発明によるいろいろの特徴によれば、より高い機能のプリフェッチ回路を有する情報処理装置を提供することができる。
【０２５６】
例えば、本発明の一つの特徴によれば、主記憶等の記憶装置に対するキャッシュメモリが存在する情報処理装置において、このキャッシュメモリ内のデータをプリフェッチ時に利用可能になる。
【０２５７】
本発明の他の特徴によれば、複数群のデータをプリフェッチ可能になる。
【０２５８】
本発明のさらに他の特徴によれば、インデックス付きのベクトル等の、単純ベクトルよりは複雑な構造を有するデータもプリフェッチ可能になる。
【０２５９】
本発明のさらに他の特徴によれば、条件付きメモリ参照命令が実行を抑止された時においてもプリフェッチしたデータを空転送によりスキップすることで、ループ内にＩＦ文がある場合でも適用可能なプリフェッチ回路得られる。
【０２６０】
本発明のさらに他の特徴によれば、シーケンシャルベクトルに対するプリフェチアドレスの生成に於て、所定の間隔毎にアドレスをノンリニアに更新することが可能になる。これにより多次元配列の部分参照のために最内ループを反復実行する場合、一回のプリフェチの起動にて全体の必要データが先読み可能となる。これはプリフェッチの起動オーバヘッドを削減し、高速化を図るうえで効果的である。
【０２６１】
本発明のさらに他の特徴によれば、処理装置内で割り込みが発生した場合にも、プリフェッチ済みのデータの使用あるいは不使用を制御可能になる。
【図面の簡単な説明】
【図１】本発明の一実施例に係わる情報処理装置の全体構成を示す図。
【図２】図１の装置に使用するプリフェッチユニットの概略構成図。
【図３】図１の装置に使用するプリフェッチ状態制御ユニットの概略構成図。
【図４】図１の装置に使用するプリフェッチリクエスト制御ユニットの概略構成図。
【図５】図１の装置に使用するプリフェッチアドレス制御回路の概略構成図。
【図６】図１の装置に使用するＰＤＳＲ更新制御回路の概略構成図。
【図７】図１の装置に使用するプリフェッチデータユニットの概略構成図。
【図８】図１の装置に使用するプリフェッチデータ読み出し制御ユニットの構成図。
【図９】図１の装置に使用するキャッシュリクエストユニット１０１の概略構成図。
【図１０】図１の装置に使用するキャッシュメモリユニット３の概略構成図。
【図１１】図１の装置に使用するるプロセッサ２の概略構成図。
【図１２】図１の装置におけるＰＤＲ要素の状態遷移図。
【図１３】図１の装置によるプリフェッチ対象のデータ構造の説明図
【図１４】図１の装置に使用するプリフェッチ制御レジスタの概略構成図。
【図１５】図１の装置に使用するデータ構造の指定例を示す図。
【図１６】図１の装置に使用する２次元配列の部分参照の例を示す図。
【図１７】図１の装置に使用する命令の形式を示す図。
【図１８】図１の装置に使用するマスクレジスタの構成を示す図。
【図１９】図１の装置における割り込み処理時のＰＤＲとＰＤＳＲの状態例を示す図。
【図２０】図１の装置におけるハードウエア制御によるコヒーレンシ保証のタイムチャート。
【図２１】図１の装置における先読み制御によるコヒーレンシ保証のタイムチャート。
【図２２】図１の装置に使用するプログラム例１のソースプログラムを示す図。
【図２３】プログラム例１のループ部オブジェクトプログラムを示す図。
【図２４】プログラム例１の命令実行トレースの上半分を示す図。
【図２５】プログラム例１の命令実行トレースの下半分を示す図。
【図２６】プログラム例２のソースプログラムを示す図。
【図２７】プログラム例２のループ部オブジェクトプログラムを示す図。
【図２８】プログラム例２の命令実行トレース（上半分）を示す図。
【図２９】プログラム例２の命令実行トレース（下半分）を示す図。
【図３０】プログラム例３のソースプログラムを示す図。
【図３１】プログラム例３のループ部オブジェクトプログラムを示す図。
【図３２】プログラム例３の命令実行トレース（上半分）を示す図。
【図３３】プログラム例３の命令実行トレース（下半分）を示す図。
【符号の説明】
３０１…プリフェッチ状態レジスタ、３０２…プリフェッチ制御レジスタ、７０４…プリフェッチデータレジスタ、７０５…プリフェッチデータ状態レジスタ
【図１】
0003548616.tif 000004
【図２】
0003548616.tif 000005
【図３】
0003548616.tif 000006
【図４】
0003548616.tif 000007
【図５】
0003548616.tif 000008
【図６】
0003548616.tif 000009
【図７】
0003548616.tif 000010
【図８】
0003548616.tif 000011
【図９】
0003548616.tif 000012
【図１０】
0003548616.tif 000013
【図１１】
0003548616.tif 000014
【図１２】
0003548616.tif 000015
【図１３】
0003548616.tif 000016
【図１４】
0003548616.tif 000017
【図１５】
0003548616.tif 000018
【図１６】
0003548616.tif 000019
【図１７】
0003548616.tif 000020
【図１８】
0003548616.tif 000021
【図１９】
0003548616.tif 000022
【図２０】
0003548616.tif 000023
【図２１】
0003548616.tif 000024
【図２２】
0003548616.tif 000025
【図２３】
0003548616.tif 000026
【図２４】
0003548616.tif 000027
【図２５】
0003548616.tif 000028
【図２６】
0003548616.tif 000029
【図２７】
0003548616.tif 000030
【図２８】
0003548616.tif 000031
【図２９】
0003548616.tif 000032
【図３０】
0003548616.tif 000033
【図３１】
0003548616.tif 000034
【図３２】
0003548616.tif 000035
【図３３】
0003548616.tif 000036