[35] 図8は例示的な望ましい実施形態を示す。
[36] 発明の例示的実施形態の詳細について、添付の製図と共にこれから言及する。製図の中で使われている同じ参照番号は、同等のまたは類似のパーツを言及している。
[37] 図1で描かれているのは、開示された実施形態に整合する例示的な命令処理システムの構造概略図である。図1で示されているように、命令処理システムは以下のものを含む:CPU10, アクティブ・リスト11, スキャナ12, トラック・テーブル13,
コリレーション・テーブル14, トラッカー15, レべル1キャッシュ16 (すなわち第1次メモリ、最もアクセス・スピードの早いメモリ)、レべル2キャッシュ17 (すなわち第2次メモリ、最もアクセス・スピードの遅いメモリ)。これらの構成部品はあくまでイラストの目的でここにリストアップおり、実際には他の部品も含まれうるし、またある種の部品は統合ないしは省略されうる。さらに、これらの様々な構成部品は複数のシステムに分散されうるし、また物理的あるいは仮想的な構成部品でありうる。そしてハードウェア(例えば集積回路)の中で実装されうるし、或はソフトウェアないしソフトウェアとハードウェアの組み合わせとしても実装されうる。
[38] この文書においてメモリのレベルとは、カップリングにおけるCPU10との近さのことを示す。CPU10に近いほど、メモリのレベルが高い。さらに、高いレベルのメモリ(すなわちレべル1キャッシュ16)は低いレベルのメモリ(すなわちレべル2キャッシュ17)より一般的にスピードが速く、そしてサイズが小さい。一般的にCPUに最も近いメモリは最もスピードが速い (レべル1キャッシュ16のように)。それに加えて、全てのレベルのメモリの間には包含関係が成立する。つまり低いレベルのメモリは高いレベルのメモリの記憶内容のすべてを記憶する。
[39] 分岐命令または分岐ポイントとは、この文書においては、CPU10に実行フローの変更をおこさせる(例えばシーケンスから外れた命令を実行する)全ての適切な命令のことを示す。分岐ソースとは分岐動作(すなわち分岐命令)を実行するのに使われた命令のことを示し、そして分岐ソース・アドレスとは分岐命令自身のアドレスのことを示す。分岐ターゲットとは、分岐命令が実行された時の分岐先のターゲット命令のことを示す。そして分岐ターゲット・アドレスとは分岐が成功裏に実行されたときに辿り着くアドレス、すなわち分岐ターゲット命令の命令アドレスのことである。現時点の命令とは現時点でCPU10によって実行または取り込まれている命令のことを示すとする。現時点の命令ブロックとは現在CPU10によって実行されている命令を含む命令ブロックのことである。フォールスルー命令とは分岐が取られなかった、或は成功しなかった場合における、分岐命令の次の命令のことを示す。
[40] トラック・テーブル13の行とL1キャッシュ16のキャッシュ・ブロックは一対一に対応する。トラック・テーブル13は複数のトラック・ポイントを含む。トラック・ポイントとはトラック・テーブル13の1つのエントリーのことであり、少なくとも1つの命令に関する情報(例えば命令タイプ情報、分岐ターゲットアドレスなど)を含んでいる。
[41] ここにいう、トラック・ポイントのトラック・アドレスとはトラック・ポイントのトラック・テーブル・アドレスのことであり、そしてトラック・アドレスは行番号と列番号から構成される。トラック・ポイントのトラック・アドレスは、トラック・ポイントによって表現されている命令の命令アドレスに対応している。分岐命令のトラック・ポイント(すなわち分岐ポイント)は分岐命令の分岐ターゲット命令のトラック・テーブルにおけるトラック・アドレスを含んでいる。そしてそのトラック・アドレスは分岐ターゲット命令の命令アドレスに対応している。
[42] 説明のため、BNはトラック・アドレスを表すものとする。BNXはトラック・アドレスの行番号、またはブロック・アドレスを表し、BNYはトラック・アドレスの列番号、またはブロック・オフセット・アドレスを表すとする。従ってトラック・テーブル13はX行Y列からなる2次元テーブルとして構成することができる。そして各行はBNXでアドレス指定され1つのメモリ・ブロックまたはメモリ・ラインに対応する。各列はBNYでアドレス指定され、メモリ・ブロック内の該当する命令のオフセットに対応している。それに応じてBNXとBNYからなる各BNは、トラック・テーブル13のトラック・ポイントとも対応している。つまり対応するトラック・ポイントはトラック・テーブル13の中において、1つのBNによって特定されうる。さらに、BN1は対応するL1キャッシュにおけるトラック・アドレスを表し、BN2は対応するL2キャッシュにおけるトラック・アドレスを表すものとする。
[43] トラック・ポイントに対応する命令が分岐命令であるとき(つまりトラック・ポイントの命令タイプ情報が、該当する命令は分岐命令であることを示しているとき)、トラック・ポイントは、分岐命令の分岐ターゲット命令の、メモリ(L1キャッシュまたはL2キャッシュ)における、トラック・アドレスによって指定される位置情報をも記憶する。トラック・アドレスにもとづいて、分岐ターゲット命令に対応するトラック・ポイントの位置がトラック・テーブル13の中に見いだされる。トラック・テーブル13の分岐ポイントにおいては、トラック・テーブル・アドレスは分岐ソース・アドレスに対応するトラック・アドレスであり、トラック・テーブルの内容は分岐ターゲット・アドレスに対応するトラック・アドレスを含む。
[44] ある種の実施形態においては、アクティブ・リスト11の全エントリー数はL2キャッシュ17の全キャッシュ・ブロック数と等しく、アクティブ・リスト11のエントリーとL2キャッシュ17のキャッシュ・ブロックとの間に一対一の対応を付ける事が可能である。アクティブ・リスト11の各エントリーは1つのBN2Xと対応しており、それはアクティブ・リスト11の行に対応しているL2キャッシュ17内のキャッシュ・ブロックを示しており、従ってBN2XとL2キャッシュ17のキャッシュ・ブロックとの間には一対一の関係をつけることができる。アクティブ・リスト11の各エントリーはL2キャッシュ・ブロックのブロック・アドレスを記憶している。さらに、アクティブ・リスト11の各エントリーは、L2キャッシュのキャッシュ・ブロックの全てあるいは一部がL1キャッシュ16に記憶されているか否かについての情報をも含んでいる。L2キャッシュのキャッシュ・ブロックの全てあるいは一部がL1キャッシュ16に記憶されているとき、L2キャッシュのキャッシュ・ブロックに対応するアクティブ・リスト11の各エントリーは、対応するL1キャッシュ・ブロックのブロック・ナンバー(すなわちBN1のBN1X)を記憶する。従ってアクティブ・リスト11におけるマッチング操作において命令アドレスが使われるとき、マッチしたエントリーに記憶されたBN1X、マッチしたエントリーに対応するBN2X、もしくはマッチングが成功しなかったという結果情報が得られることになる。
[45] スキャナ12はL2キャッシュ17からL1キャッシュ16に送られる全ての命令を吟味する。もし スキャナ12が分岐命令を見つけた場合には、分岐命令の分岐ターゲット・アドレスが計算される。例えば、分岐ターゲット・アドレスは分岐命令を含む命令ブロックのブロック・アドレス、分岐命令を含む命令ブロックのブロック・オフセット、そして分岐オフセットの合計として計算される。
[46] スキャナ12によって計算された分岐ターゲット命令アドレスはアクティブ・リスト11に記憶されているメモリ・ブロックの行アドレスとマッチングされる。もしマッチが存在し、対応するBN1Xが見つかった場合(つまり分岐ターゲット命令がL1キャッシュ16に記憶されている)、アクティブ・リスト11はトラック・テーブル13にBN1Xを出力する。もしマッチが存在し、しかし対応するBN1Xが見つからない場合(つまり分岐ターゲット命令がL2キャッシュ17に記憶されているがL1キャッシュ16には無い)、アクティブ・リスト11はBN2Xをトラック・テーブル13に出力する。もしマッチが存在しない場合(すなわち分岐ターゲット命令がL1キャッシュ16にもL2キャッシュ17にも記憶されていない)、分岐ターゲット命令アドレスがバス18を経て外部メモリへと送られる。それと同時に、アクティブ・リスト11の1つのエントリーが割当られ、当該ブロック・アドレスを記憶する。そしてBN2Xがトラック・テーブル13に出力される。外部メモリから送られてくる、当該命令ブロックはこのBN2Xに対応するL2キャッシュ17のキャッシュ・ブロックに充填される。
[47] L2キャッシュ17から出力された命令ブロックがL1キャッシュ16のキャッシュ・ブロックに書き込まれる時、対応するトラックがトラック・テーブル13の該当する行に作られる。命令ブロック内の分岐命令の分岐ターゲット命令アドレスは、アクティブ・リスト11内でマッチング操作が行なわれた後で、BN1XまたはBN2Xを出力する。命令ブロック内における分岐ターゲット命令の位置は(すなわち、分岐ターゲット命令アドレスのオフセット)は対応するBN1YまたはBN2Yである。従って分岐ターゲット命令に対応するトラック・アドレス(すなわちBN1またはBN2)が得られる。またトラック・ポイントの内容となるトラック・アドレスが分岐命令に対応するトラック・ポイントに記憶される。
[48] 従って命令ブロックと対応したトラックが確立される。トラック・テーブル13のトラック・ポイントの内容に含まれるトラック・アドレスはBN1またはBN2である。BN1とBN2はそれぞれL1キャッシュ16とL2キャッシュ17に記憶されている命令ブロックに対応している。
[49] トラッカー15はレジスタ21、インクリメンタ22してセレクタ23を含む。レジスタ21はトラック・アドレスを記憶する。レジスタ21のアウトプットはトラッカー15のリード・ポインタ19である。リード・ポインタ19はトラック・テーブル13内のトラック・ポイントをポイントする。リード・ポインタ19によってトラック・テーブル13から読み取られた命令タイプが非分岐命令タイプである場合、レジスタ21のトラック・アドレスのBNX部分は変更されないが、トラック・アドレスのBNY部分はインクリメンター22によって1を追加され、そしてセレクタ23へ送られる。この時、分岐が取られたかを表すTAKENシグナル20は無効であるため、セレクタ23はデフォルトのインプットを選択する。つまり、1が追加されたBNYがレジスタ21に書き込まれ、リード・ポインタ19が移動して次のトラック・ポイントをポイントする。
[50] リード・ポインタ19は分岐命令にポイントするまで移動する。つまりリード・ポインタ19の値が分岐ソース命令のトラック・アドレスになる。分岐ソース命令の分岐ターゲット命令のトラック・アドレスはトラック・テーブル13から読み取られ、セレクタ23へ送られる。セレクタ23のもう1つのインプットは依然としてトラック・アドレスに1を加えた、リード・ポインタ19によって出力されたものである(つまりリード・ポインタ19は分岐ポイントの後のトラック・ポイントのトラック・アドレスをポイントする)。
[51] よって、トラッカー15のリード・ポインタ19は、現在CPUによって実行されている命令に対応するトラック・ポイントに先行して、トラック・ポイントの後の最初の分岐ポイントまで移動する。トラック・テーブル13のトラック・ポイントの内容に含まれているトラック・アドレスは、対応するターゲット命令のメモリ内の位置に依ってBN1あるいはBN2であるため、ターゲット命令はターゲット命令のトラック・アドレスにもとづいてキャッシュ・メモリ(L1キャッシュまたはL2キャッシュ)の中に見つけられる。
[52] トラッカー15のリード・ポインタ19によってポイントされたトラック・ポイントの内容がBN2である場合、BN2がバス30を経てL2キャッシュ17へ送られる。そして対応する命令ブロックが見つけられL1キャッシュ16に充填される。それと同時に、この命令ブロックに対応するトラックがトラック・テーブル11の中に作られ、トラッカー15のリード・ポインタ19によってポイントされたトラック・ポイントの内容が、元々のBN2の代わりに対応するBN1に取って代わられる。
[53] CPU10が分岐命令を実行するとき、TAKENシグナル20が生成される。もしTAKENシグナル20が分岐が取られなかったことを表している場合、セレクタ23はリード・ポインタ19によって1を加えられたトラック・アドレスを選択する。そしてそのトラック・アドレスはレジスタ21に書き込まれる。リード・ポインタ19は現在のトラックを次の分岐ポイントまで移動し続ける。さらに、リード・ポインタ19によってポイントされた後続の命令をL1キャッシュ16のキャッシュ・ブロックから読み出すために、CPU10は命令アドレスのオフセットを出力する。
[54] TAKENシグナル20が分岐が取られた事を示している場合、セレクタ23はトラック・テーブル13によって出力された分岐ターゲット命令のトラック・アドレスを選択し、トラック・アドレスはレジスタ21に書き込まれる。リード・ポインタ19は、トラック・テーブル13の分岐ターゲット命令に対応するトラック・ポイントとL1キャッシュ16の分岐ターゲット命令にポイントする。そしてリード・ポインタ19によって出力されたトラック・アドレスBN1を元に、分岐ターゲット命令はL1キャッシュ16から直接見つけられる。よって、分岐ターゲット命令がCPU10で実行されるべく、出力される。前述の方法に従って、リード・ポインタ19は新しい現行トラックを次の分岐ポイントまで移動し続ける。さらに、リード・ポインタ19によってポイントされた該当する後続命令をL1キャッシュ16のキャッシュ・ブロックから読み出すために、CPU10は命令アドレスのオフセットを出力する。
[55] 従ってCPU10が命令を取りに行く必要があるとき、該当する命令は既にL1キャッシュ16に記憶されているか、或はL1キャッシュ16に充填されている最中である。それゆえ、キャッシュミスによる待ち時間の全てあるいは一部が隠蔽されることになり、命令処理システムの性能を改善する。
[56] ここでトラック・テーブル13の各トラックの最後のトラックポイントの後ろに、エンド・トラック・ポイントが追加される点に留意したい。エンド・トラック・ポイントのタイプは取られるに違いない分岐である。エンド・ポイントの中身のBNXは、トラック・テーブル13のトラックに対応する命令ブロックの、次の命令ブロックの行番号(BNX)である。エンド・ポイントの中身のBNYは’0’である。よってトラッカー15がトラックの最後の分岐ポイントから移動し始めると、ポインタはエンド・トラック・ポイントをポイントし、そして次の命令ブロックに移動する。BNXとBNYは命令およびまたはデータに対しても使用されうる。しかし、データの場合はデータ行番号またはデータ・ブロック番号(DBNX)、そしてデータ列番号またはデータ・ブロック・オフセット番号(DBNY)が使われる。
[57] コリレーション・テーブル14はトラック・テーブル13のトラック間にある相関関係、例えば異なる行間の分岐関係、を表すために作られる。分岐ターゲットのないトラックは、トラック・テーブル13の中で選ばれそして交換される。また、トラック・テーブル13内の1つのトラックが交換される必要が有る場合、当該分岐ソースの中身(すなわち分岐ターゲット・トラック・アドレス)が更新されて、エラーが発生するのを防ぐ(例えば分岐ソースのトラック・ポイントの中身が間違った分岐ターゲットのトラック・ポイントにポイントするのを防ぐ)。
[58] 加えて、この構造はm階層のメモリ(キャッシュ)をもった命令処理システムに拡張することができる。ここでmは2以上の自然数である;図1においてはmは2である。
[59] もしL2キャッシュ17からL1キャッシュ16へ命令ブロックを充填する時間が非常に長いと、より多くの層の分岐命令のターゲット命令のターゲット・アドレスが先に見つけ出され、これらターゲット命令が早めにL2キャッシュ17からL1キャッシュ16へ移される。
従ってCPU10が当該命令を読み込む必要があるとき、これらの命令は既にL1キャッシュ16に記憶されており、それ故キャッシュミスによる待ち時間をより良く隠蔽することになる。
[60] 命令処理システムはプレディクタも含む。プレディクタはトラッカーによって指示された分岐命令セグメントの後ろの分岐命令セグメントを得るために構成される。つまりプレディクタは分岐セグメントの第1層の後のn層目の分岐命令セグメントを取得するために構成され、そしてそれは遅いスピードのメモリ装置を制御して、現在速いメモリ装置に記憶されていないn層目の分岐命令セグメントに対して、速いスピードのメモリ装置を提供する。nは自然数である。
[61] 図2は開示された実施形態と整合する例示的な命令処理システムのもう1つの構造概略図を示す。図2に示されるように、命令処理システムはCPU10、アクティブ・リスト11、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、トラッカー15、レベル1キャッシュ(L1キャッシュ)16、レベル2キャッシュ(L2キャッシュ)17、プレディクタ24、そしてバッファー25を含む。
[62] トラック・テーブル13は二つのトラック・アドレスにもとづいて同時に二つの対応するトラック・ポイントの中身を出力する。1つのトラック・アドレスはトラッカー15のリード・ポインタ19から来る。もう1つのトラック・アドレスはプレディクタ24から出力されてバス26から来る。
[63] プレディクタ24は分岐命令セグメントの第1層の後のn層目の分岐命令セグメントを得るように設定される。そして分岐命令セグメントの第1層の後のn層目の分岐命令セグメントのトラック・アドレスをバス26を経てトラック・テーブル13に出力する。もしトラック・アドレスがBN2のである場合、対応する命令ブロックがL2キャッシュ17からBN2に応じて先行して読み出され、そして一時的にバッファー25に記憶される。もしトラック・アドレスがBN1ならば、追加的な操作は必要とされない。さらに、バファー25に記憶されている全ての命令セグメントに対応するBN値もバッファー25に記憶される。ここでは、各命令セグメントは唯1つの分岐命令を持つとする。特に、各分岐命令と、直前の分岐命令の前に位置する全ての命令(直前の分岐命令は含まない)は1つの命令セグメントに属するものとする。トラッカーまたはプレディクタのアウトプット・ポインタは分岐命令のところで止まるため、’命令セグメントのトラック・アドレス’は’命令セグメントの中の分岐命令のトラック・アドレス’と等しい。’分岐命令セグメント’、’次の命令セグメント’、そして’ターゲット命令セグメント’はここで定義された’命令セグメント’に属する。
[64] 従って、トラッカー15のリード・ポインタ19によってポイントされた分岐命令の後の、n層の分岐命令の分岐ターゲット命令ブロックは、プレディクタ24を用いて、L1キャッシュ16またはバッファー25に先行して記憶されることになる。リード・ポインタ19によってポイントされた分岐命令のCPU10による実行結果にもとづいて、いくつかのバッファー25の命令ブロックはL1キャッシュ16に充填される。
[65] 図3で描かれているのは、開示された実施形態に整合する例示的なプレディクタの構造概略図である。図3に示されるように、プレディクタ24は分岐命令セグメントの第1層の後の第2層目の分岐命令セグメントのトラック・アドレスを取得するように設計されている。ここでnは2に等しい。
[66] プレディクタ24はインクリメンタ27、セレクタ28、コントロール・ロジック29そして4つのレジスタを含む。コントロール・ロジック29はCPU10から送られたTAKENシグナル20 と、CPU10で実行された命令が分岐命令であるか否かを示すBRANCHシグナル40(すなわち、BRANCHシグナル40はTAKENシグナル20が有効か否かを示す)を受け取る。そしてレジスタ並びにセレクタ28の書き込み操作を制御するコントロール・シグナルを生成する。レジスタ101とレジスタ102のインプットはインクリメンタ27から来る。レジスタ103とレジスタ104のインプットはトラック・テーブル13から来る。4つのレジスタからのアウトプットはセレクタ28に送られる。セレクタ28は第1層の分岐命令セグメントの最初の層の分岐命令セグメントのトラック・アドレスを出力する。
[67]具体的には、レジスタ101とレジスタ102は、現時点の分岐命令の次の命令セグメントの次の命令セグメント・アドレス、並びに現時点の分岐命令のターゲット命令セグメントの次の命令セグメント・アドレスとを記憶するように設計される。レジスタ103とレジスタ104は、現時点の分岐命令の次の命令セグメントのターゲット命令セグメント・アドレス、並びに現時点の分岐命令のターゲット命令セグメントのターゲット命令セグメント・アドレスとを記憶するように設計される。
[68] 図4A〜4Dは開示された実施形態と整合する、分岐命令と分岐命令セグメントのツリー構造概略図を示す。図4A~4Dに示されているように、ノード’A’は命令セグメント;’A’の左の子ノード’B’は’A’の次の命令セグメント;そしてA’の右の子ノード’C’は’A’のターゲット命令セグメントである。同様に’B’の左の子ノード’D’は’B’の次の命令セグメント;’B’の右の子ノード’E’は’B’のターゲット命令セグメントである。’C’の左の子ノード’F’は’C’の次の命令セグメント;’C’の右の子ノード’G’は’C’のターゲット命令セグメントである。’D’の左の子ノード’H’は’D’の次の命令セグメント;’D’の右の子ノード’I’は’D’のターゲット命令セグメントである。
’E’の左の子ノード’J’は’E’の次の命令セグメント;’E’の右の子ノード’K’は’E’のターゲット命令セグメントである。‘J’の左の子ノード’Q’は’J’の次の命令セグメント;’J’の右の子ノード’R’は’J’のターゲット命令セグメントである。
‘K’の左の子ノード’S’は’K’の次の命令セグメント;’K’の右の子ノード’T’は’K’のターゲット命令セグメントである。
[69] 加えて図4A~4Dにおいて、三角ラベルはプレディクタ24のレジスタに対応する。
三角ラベルはレジスタに記憶されている命令セグメントに対応するトラック・アドレスを表している。図4Eは開示された実施形態と整合する例示的なプレディクタの、4つのレジスタの変化状況を示す概略図である。図4Eに示されるように、各列(カラム)はプレディクタ24のレジスタの1つに対応している。つまり、最初の列(カラム)はレジスタ101;2番目の列(カラム)はレジスタ102;3番目の列(カラム)はレジスタ103;4番目の列(カラム)はレジスタ104にそれぞれ対応している。各行はそれぞれ図4A~4Dにおけるアップデートに対応している。
[70] 先ず、命令は現在の命令セグメント’A’から実行され始める。この時、図4Eの最初の行に示されるように、’A’のトラック・アドレスがレジスタ101に記憶される。
[71] それから、図4Aと図4Eの第2行目に示されるように、レジスタ101に記憶された’A’ のトラック・アドレスにもとづいて、’A’のターゲット命令セグメント’C’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に’A’のトラック・アドレスが、’A’の次の命令セグメント’B’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ101に記憶される。
[72] さらに、図4Bと図4Eの第3行目に示されるように、レジスタ103に記憶されている’C’のトラック・アドレスにもとづいて、’C’のターゲット命令セグメント’G’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ104に記憶される。同時に、’C’のトラック・アドレスが、’C’の次の命令セグメント’F’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラックアドレスがレジスタ102に記憶される。レジスタ101に記憶されている’B’のトラック・アドレスにもとづいて、’B’のターゲット命令セグメント’E’のトラック・アドレスもトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に、’B’のトラック・アドレスが、’B’の次の命令セグメント’D’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラックアドレスがレジスタ101に記憶される。
[73] このようにして、プレディクタ24の4つのレジスタの値が生成される。これらの4つのレジスタの値はそれぞれ’A’の分岐命令の後の第2層目の分岐命令セグメントの各トラック・アドレスに対応している。
[74] 図3に戻り、CPU10が’A’の分岐命令を実行しTAKENシグナル(20)を生成した時、TAKENシグナル20の値にもとづいて、コントロール・ロジック29はそれぞれ対応する制御シグナルを生成して4つのレジスタ値を更新する。TAKENシグナル20が分岐が取られなかった事を示すとき、コントロール・ロジック29はセレクタ28を制御してレジスタ101とレジスタ103のトラック・アドレスをアウトプットとして選び、後続する命令セグメントのトラック・アドレスを生成する。そしてレジスタ102 とレジスタ104に記憶されている’F’と’G’に対応するトラック・アドレスを破棄する。
[75] 具体的には、図4Cと図4Eの第4行目に示されるように、レジスタ103に記憶されている’E’のトラック・アドレスにもとづいて、’E’のターゲット命令セグメント’K’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ104に記憶される。同時に、’E’のトラック・アドレスが、’E’の次の命令セグメント’J’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ102に記憶される。レジスタ101に記憶された’D’のトラック・アドレスにもとづいて、’D’のターゲット命令セグメント’I’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に、’D’のトラック・アドレスが、’D’の次の命令セグメント’H’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ101に記憶される。従って、’A’の分岐命令の実行結果にもとづいて、プレディクタ24の4つのレジスタの値が更新される。すなわち、これらの4つのレジスタの値はそれぞれ’B’の分岐命令の後の第2層目の分岐命令セグメントの各トラック・アドレスに対応している。
[76] さて、CPU10が’B’の分岐命令を実行してTAKENシグナル20を生成した時、もしTAKENシグナル20が分岐が成功裏に取られたことを示すならば、コントロール・ロジック29はセレクタ28を制御して、レジスタ102とレジスタ104のトラック・アドレスをアウトプットとして選び、後続する命令セグメントのトラック・アドレスを生成する。そしてレジスタ101とレジスタ103に記憶されている’H’と’I’に対応するトラック・アドレスを破棄する。
[77] 具体的には、図4Dと図4Eの第5行目に示されるように、レジスタ102に記憶されている’J’のトラック・アドレスにもとづいて、’J’のターゲット命令セグメント’R’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ103に記憶される。同時に、’J’のトラック・アドレスが、’J’の次の命令セグメント’Q’のトラック・アドレスを得るために、インクリメンタ27と合算され、得られたトラック・アドレスがレジスタ101に記憶される。レジスタ104に記憶された’K’のトラック・アドレスにもとづいて、’K’のターゲット命令セグメント’T’のトラック・アドレスがトラック・テーブル13から読み出され、レジスタ104に記憶される。同時に、’K’のトラック・アドレスが、’K’の次の命令セグメント’S’のトラック・アドレスを得るために、インクリメンター27と合算され、得られたトラック・アドレスがレジスタ102に記憶される。従って、’B’の分岐命令の実行結果にもとづいて、プレディクタ24の4つのレジスタ値が更新される。すなわち、これらの4つのレジスタの値はそれぞれ’E’の分岐命令の後の第二層目の分岐命令セグメントの各トラック・アドレスに対応している。
[78]これらの操作の間、プレディクタ24はトラッカー15より2レベル先の命令セグメントにポイントする。プレディクタ24がこの命令セグメントのトラック・アドレスがBN2である事を察知するやいなや、該当する命令がバス30を経てL2キャッシュ17から読み出され、バッファー25に記憶される。TAKENシグナル20にもとづいて、バッファー25はL1キャッシュ16に充填する命令ブロックを選び、そしてトラック・テーブル13内の分岐ポイントの中身のBN2がBN1に取って代わられる。従ってトラッカー15のリード・ポインタが分岐ポイントをポイントするとき、読み出されるターゲット命令のトラック・アドレスはBN1である。
よって、もし命令セグメントがL2キャッシュ17からバッファー25へ充填され、そしてバッファー25からL1キャッシュ16へと充填される間の時間が、充填操作の開始時点とCPUが命令セグメントへ到達する時点との間の時間よりも長くならないならば、CPUによって要求された命令セグメント(次の命令セグメントとターゲット命令セグメント)は既にL1キャッシュ16に記憶されている。CPU10によって実行された分岐ポイントに対応する分岐命令の分岐が取られたか否かに関わらず、次の命令はL1キャッシュ16から読み出され、キャッシュミスを回避する。あるいは、CPUによって要求された命令セグメントがL1キャッシュ16にまだ記憶されていなくても、命令セグメントは既に充填プロセスの途中であり、キャッシュミスによる待ち時間を一部隠蔽することになる。
[79] プレディクション・トラッカーもトラッカー15とプレディクタ24の機能を果たすために用いることができる。図5は開示された実施形態と整合する例示的なプレディクション・トラッカーの構造概略図である。図5に示されるように、プレディクション・トラッカー31 はプレディクション・セクション32とクリップ・セクション33を含む。トラック・テーブル13はトラック・アドレスにもとづいて、該当するトラック・ポイントの中身をアウトプットするだけで良い。つまり、トラック・テーブル13は読み取り専用ポートだけ必要とする。クリップ・セクション33はリード・ポインタ19を出力しトラッカー15の機能を果たす。プレディクション・セクション32は第一層の分岐命令セグメントの後の第二層分岐命令セグメント(つまりnは2である)のトラック・アドレスを取得し、プレディクタ24の機能を果たす。プレディクション・セクション32の構造と処理プロセスは前述されたプレディクタ24のそれと同様であり、ここでは繰り返さない。
[80] クリップ・セクション33はレジスタ105、レジスタ106、セレクタ34、セレクタ35、セレクタ36そしてセレクタ37を含む。セレクタ34とセレクタ35は、プレディクション・セクション32の4つのレジスタに記憶されている、第一層の分岐命令セグメントの後の第二層分岐命令セグメントのトラック・アドレスをそれぞれ受け取る。TAKENシグナル20 にもとづいて、トラック・アドレスは半分にクリップされる。クリッピングの後、残りのトラック・アドレスはレジスタ105とレジスタ106にそれぞれ記憶される。分岐命令セグメントの次の命令セグメントと分岐命令セグメントのトラック・アドレスのBNXは同じである(すなわちBN1X)。そのため、ターゲット命令セグメントのトラック・アドレスに現れたBN2XのみBN1Xに取り代えられる必要がある。バッファー25に記憶された命令セグメント(すなわちBN2に対応する命令セグメント)がL1キャッシュ16に充填されるとき、特定の取替方策に従って、BN1が命令セグメントを記憶するように割り当てられる。従って、セレクタ35によって出力されたトラック・アドレスがBN2である場合、セレクタ37は新しく割り当てられたBN1をバス44から選び、そのアウトプットとする;セレクタ35によって出力されたトラック・アドレスがBN1である場合、セレクタ37はレジスタ106に一時的に記憶されたトラック・アドレスをそのアウトプットとする。TAKENシグナル20にもとづいて、セレクタ36はセレクタ37によって出力されたトラック・アドレスとレジスタ105に記憶されたトラック・アドレスの中から1つを選び、リード・ポインタ19とする。選ばれたトラック・アドレスは、CPU10のために該当する命令ブロックを見つけるために、L1キャッシュ16に送られる。
[81] 図4A〜4Eに描かれた状況において、図4Bと図4Eの第3行目に示されるように、プレディクション・セクション32の4つのレジスタの値は前述の方法で生成される。この時、クリップ・セクション33の4つのインプットは、左から右へそれぞれ’D’、’F’、’E’そして’G’のトラック・アドレスである。’B’のトラック・アドレスはクリップ・セクション33のレジスタ105に記憶される;
’C’のトラック・アドレスはクリップ・セクション33のレジスタ106に記憶される;
リード・ポインタ19の値は’A’のトラック・アドレスである。
[82] CPU10によって実行された分岐命令’A’によって生成されたTAKENシグナル20が、分岐が取られなかったことを示した時、セレクタ36はレジスタ105のインプット’B’を選んでリード・ポインタ19の値とする。リード・ポインタ19の値はCPU10のために該当する命令ブロックを見つけるために、L1キャッシュ16に送られ、そして’C’のトラック・アドレスはクリップされ破棄される。同時に、クリップ・セクション33のセレクタ34はレジスタ101からインプット’D’を選び、インプット’D’をレジスタ105に書き込む。セレクタ35 はレジスタ103からインプット’E’を選び、インプット’E’をレジスタ106に書き込む。よって、’B’の後続の命令セグメントのトラック・アドレスはそのまま保存され、’C’の後続の命令セグメントのトラック・アドレスはクリップされ破棄される。図4Cと図4Eの第4行目に示されるように、プレディクション・セクション32は上記の方法によって4つのレジスタ値を更新する。この時、クリップ・セクション33の4つのインプットは、左から右へそれぞれ’H’、’J’、’I’そして’K’のトラック・アドレスである。
[83] CPU10によって実行された分岐命令’B’によって生成されたTAKENシグナル20が、分岐が成功裏に取られたことを示した時、クリップ・セクション33のセレクタ34はレジスタ102からインプット’J’を選び、インプット’J’をレジスタ105へ書き込む。
セレクタ35はレジスタ104からインプット’K’を選び、インプット’K’をレジスタ106へ書き込む。よって、’E’の後続の命令セグメントのトラック・アドレスはそのまま保存され、’D’の後続の命令セグメントのトラック・アドレスはクリップされ破棄される。同時にセレクタ36はレジスタ106からインプット’E’をリード・ポインタ19の値として選ぶ。リード・ポインタ19の値はCPU10のために該当する命令ブロックを見つけるために、L1キャッシュ16に送られ、そして’C’のトラック・アドレスはクリップされ破棄される。図4Dと図4Eの第5行目に示されるように、プレディクション・セクション32は上記の方法によって4つのレジスタ値を更新する。
[84] プレディクション・トラッカー31はトラッカー15とプレディクタ24の機能を実装する事ができる。
[85] 図6は開示された実施形態と整合する例示的なバッファーの構造概略図である。
図6に示されるように、バッファー25 はレジスタ202、レジスタ203、レジスタ204、レジスタ205、レジスタ206、セレクタ38そしてセレクタ39を含む。バッファー25の構造はプレディクション・トラッカー31と似ており、バッファー25の幾つかのモジュールは省くことができる。
[86] レジスタ202、レジスタ203、レジスタ204、レジスタ205、レジスタ206は命令ブロックを記憶するように設計される。レジスタ202は、プレディクション・セクション32のレジスタ102に対応する命令セグメントを含む命令ブロックを記憶する;
レジスタ203は、プレディクション・セクション32のレジスタ103に対応する命令セグメントを含む命令ブロックを記憶する;
レジスタ204は、プレディクション・セクション32のレジスタ104に対応する命令セグメントを含む命令ブロックを記憶する;
レジスタ205は、プレディクション・セクション32のレジスタ105に対応する命令セグメントを含む命令ブロックを記憶する;
レジスタ206は、プレディクション・セクション32のレジスタ106に対応する命令セグメントを含む命令ブロックを記憶する;
プレディクション・セクション32のレジスタ101のトラック・アドレスに対応する命令セグメントはCPU10によって実行されている命令セグメントであり、命令はL1キャッシュ16に記憶されている。従ってバッファー25は、レジスタ101のトラック・アドレスに対応する命令セグメントを記憶するために用いられるレジスタを含む必要がない。同様に、CPU10がTAKENシグナル20を生成する限り、分岐が取られたか否かに関わらず、レジスタ202の命令ブロックはレジスタ205に書き込まれる。
[87] セレクタ38の機能はクリップ・セクション33のセレクタ35の機能と同様であり、セレクタ38もTAKENシグナル20によって制御されている。セレクタ35がレジスタ103からトラック・アドレスを選ぶとき、セレクタ38はレジスタ203から命令ブロックを選ぶ;
セレクタ35がレジスタ104からトラック・アドレスを選ぶとき、セレクタ38はレジスタ204から命令ブロックを選ぶ。
[88] セレクタ39の機能はクリップ・セクション33のセレクタ36の機能と同様であり、セレクタ39もTAKENシグナル20によって制御されている。セレクタ36 がレジスタ105からトラック・アドレスを選ぶとき、セレクタ39はレジスタ205から命令ブロックを選ぶ;
セレクタ36 がレジスタ106からトラック・アドレスを選ぶとき、セレクタ39はレジスタ206から命令ブロックを選ぶ。
[89] 従って、バッファー25に記憶された命令ブロックはCPU10による様々な分岐命令の分岐決定に応じて、順次クリップされる。クリップされた後に残った命令ブロックはCPU10によって実行される命令ブロックで、その命令ブロックはL1キャッシュ16に充填される。
[90] なお、バッファー25は必要なコンポーネントではない。命令処理システムがバッファー25を含まない場合、バス30を経てプレディクタによって出力されたBN2にもとづいて、L2キャッシュ17の該当する命令ブロックがL1キャッシュ16に直接充填される。そしてトラック・テーブル13における対応する分岐ポイントのBN2の中身がBN1に取って代わられる。命令処理システムがバッファー25を含む場合、やはり同じ量の命令ブロックがL2キャッシュ17から読み取られる必要があるが、実行されるべき命令ブロックのみがバッファー25からL1キャッシュに充填され、よってL1キャッシュ16の交換回数を削減する。従って、データ汚染(つまり、使われない命令ブロックがL1キャッシュ16のキャッシュ・ブロックを占めてしまうこと)が減少し、それに応じて命令処理システムのパフォーマンスも向上する。
[91] 加えて、バッファー25のクリップされ破棄された命令ブロックは、一時的に他のバッファーに記憶される事もできる。そうする事で、次に必要になった時に、クリップされ破棄された命令ブロックをより速く取り出すことができる。図7は開示された実施形態と整合する例示的な、一時ストレージ付きのバッファーの構造概略図である。バッファー25の構造と機能は図6におけるバッファー25の構造と機能と同様であり、ここでは繰り返さない。しかし、バッファー25のクリップされ破棄された命令ブロックは他のバッファー41に送られる。バッファー41は一時的にクリップされ破棄された命令ブロックを記憶する。
バッファー41はより小さい容量をもち、バッファー25の近くに位置する。従ってクリップされ破棄された命令ブロックが再びバッファー25に充填される必要があるとき、先ずバッファー41の中でマッチング操作が行なわれる。もしマッチがあった場合、命令ブロックは直接に読み出され、バス42を経てバッファー25に送られ、L2キャッシュ17から命令ブロックが読み出される際の長い遅延を避けることができる。さらにL2キャッシュにアクセスする回数も削減される。バッファー41 の構造はどんな適切な構造でもよく、例えば先入先出(FIFO)バッファー、フルアソシアティブ構造、セットアソシアティブ構造などでも良い。
[92] ここで記載された技術的解決に従って、上記の実施形態において記載された構造は、もっと多レベルのメモリ(キャッシュ)をもった命令処理システムに拡張することができる。図8は開示された実施形態と整合する例示的な命令処理システムのもう1つの構造概略図である。ここではmはレベル数を表し、3に等しいとする。mが他の値(すなわちmが3より大きい自然数)の場合、命令処理システムの構造は図8に示されている命令処理システムの構造と同様である。
[93] 図8に示されるように、命令処理システムはCPU10、アクティブ・リスト11、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、プレディクション・トラッカー31、L1キャッシュ16、L2キャッシュ17、レベル3キャッシュ(L3キャッシュ)45、そして2番目のスキャナ46を含む。
[94] プレディクション・トラッカー31は図2のトラッカー15とプレディクタ24に取り替えられうる。L1キャッシュ16、L2キャッシュ17、L3キャッシュ45が一体となって3レベル記憶システムを構成する (つまり、mは3に等しい)。
[95] アクティブ・リスト11 は最も外側のキャッシュ(つまりL3キャッシュ)に対応している。つまり、アクティブ・リスト11のエントリーとL3キャッシュのキャッシュ・ブロックの間には一対一の関係が成立する。各エントリーは1つのBN3Xに対応し、アクティブ・リスト11の行に対応する、L3キャッシュに記憶されたL3キャッシュ・ブロックの位置を示す。よって、BN3XとL3キャッシュのキャッシュ・ブロックとの間に一対一の関係が成立する。アクティブ・リスト11の各エントリーはL3キャッシュ・ブロックのブロック・アドレスを記憶する。
[96] さらに、アクティブ・リスト11の各エントリーは、L3キャッシュ・ブロックの全て或は一部がL1キャッシュ16そしてL2キャッシュ17に記憶されているかに関する情報をも含んでいる。L3キャッシュ・ブロックの全て或は一部がL1キャッシュ16に記憶されている場合、L3キャッシュの命令ブロックに対応するアクティブ・リスト11のエントリーは、対応するL1キャッシュ・ブロックのブロック番号(すなわち、BN1のBN1X)を記憶する。同様に、L3キャッシュ・ブロックの全て或は一部がL2キャッシュ17に記憶されている場合、L3キャッシュの命令ブロックに対応するアクティブ・リスト11のエントリーは、対応するL2キャッシュ・ブロックのブロック番号(すなわち、BN2のBN2X)を記憶する。
[97] 従って、命令アドレスがアクティブ・リスト11においてマッチング操作を行なうために用いられるとき、マッチしたエントリーに記憶されているBN1XまたはBN2X、マッチしたエントリーに対応するBN3X、またはマッチングが成功しなかった事を示す結果のいずれかが得られる。
[98] スキャナ46はL3キャッシュ45からL2キャッシュ17へ送られる全ての命令を吟味する。もしスキャナ46が、ある命令が分岐命令であることを見つけたならば、分岐命令の分岐ターゲット・アドレスが計算される。分岐ターゲット命令アドレスはアクティブ・リスト11に記憶されているメモリ・ブロックの行アドレスとマッチングされる。もしマッチが存在し、対応するBN2Xが見つかった場合、それは分岐ターゲット命令がL2キャッシュ17に記憶されている事を示し、追加的な操作は行なわれない。もしマッチが存在し、対応するBN2Xが見つらなかった場合、それは分岐ターゲット命令がL3キャッシュ45に記憶されている、しかしL2キャッシュ17に記憶されていないことを示す。そして、アクティブ・リスト11はバス47を経てL3キャッシュ47へBN3Xを出力し、分岐ターゲット命令を含む命令ブロックがL3キャッシュ47からL2キャッシュ17へ充填される。もしマッチが存在しない場合、それは分岐ターゲット命令がL2キャッシュ17にもL3キャッシュ45にも記憶されていない事を示し、分岐ターゲット命令アドレスが外部メモリへバス18を経て送られる。同時にアクティブ・リスト11は該当するブロック・アドレスを記憶するために1つのエントリーを割り当てる。BN3Xが出力されトラック・テーブル13へ送られる。外部メモリから送られた該当する命令ブロックが、L3キャッシュ45のBN3Xに対応するキャッシュ・ブロックに充填され、そしてL2キャッシュ17に充填される。従って、マッチング結果に関わらず、L3キャッシュ45からL2キャッシュ17に充填された命令ブロックの分岐命令の分岐ターゲット命令を含む全ての命令ブロックは、L2キャッシュ17に充填される。
[99] スキャナ12はL2キャッシュ17からL1キャッシュ16へ送られる全ての命令を上記方法によって吟味する。もしスキャナ12がある命令が分岐命令であることを見つけたならば、分岐命令の分岐ターゲット・アドレスが計算される。分岐ターゲット命令アドレスはアクティブ・リスト11に記憶されているメモリ・ブロックの行アドレスとマッチングされる。
[100] L2キャッシュ17の命令ブロックの分岐命令の分岐ターゲット命令を含む命令ブロックは、L2キャッシュ17に充填されため、マッチング操作は成功するはずである。この時、もし対応するBN1Xが見つかる場合(つまり、分岐ターゲット命令がL1キャッシュ16に記憶されている)、アクティブ・リスト11はBN1Xをトラック・テーブル13に出力し、該当する分岐ポイントの中身の行番号とする。この命令ブロックの中での分岐ターゲット命令のオフセットは、該当する分岐ポイントの中身の列(コラム)番号とする。もしもし対応するBN1Xが見つからない場合(つまり分岐ターゲット命令がL2キャッシュ17に記憶されているがL1キャッシュ16には記憶されていない)、アクティブ・リスト11はBN2Xをトラック・テーブル13に出力し、該当する分岐ポイントの中身の行番号とする。この命令ブロックの中での分岐ターゲット命令のオフセットは、該当する分岐ポイントの中身の列(コラム)番号とする。従って、充填されている命令ブロックに対応するトラックが上記方法によって確立する。
[101] トラック・テーブル13のトラック・ポイントの中身のトラック・アドレスはBN1かBN2である。BN1とBN2はそれぞれL1キャッシュ16とL2キャッシュ17に記憶されている命令ブロックに対応している。トラック・テーブル13によって読み出された中身に応じて、プレディクション・トラッカー31がCPU10に命令を提供するためにキャッシュ・システムを制御するプロセスは、前実施形態において記載されたプロセスと同じであり、ここでは繰り返さない。
[102] 前実施形態と比べて、スキャナ46はL3キャッシュ45からL2キャッシュ17へ充填される命令ブロックの分岐命令を早く見つけ出す事ができる。そして該当する分岐ターゲット命令をL2キャッシュ17に充填し、L3キャッシュ45からL2キャッシュ17へ命令ブロックを充填する際の時間遅延を隠蔽することができる。同じ方法がもっと多くのレベルのキャッシュを持つ命令処理システムにも拡張でき、最も外側のメモリ(キャッシュ)から内側へのメモリ(キャッシュ)へ命令ブロックを充填する際の時間遅延を隠蔽し、命令処理システムのパフォーマンスを向上させる。他の利点と応用はこの分野に熟練した者にとっては自明である。
[103] アドレス変更の幅によって、異なるキャッシュ・メモリ・アドレス指定法と、仮想アドレスから物理アドレスへの変換法が選ばれる。例えば、二つの連続したアドレス命令のアドレス変更の幅は’1’に等しい。しかし分岐命令(あるいは’分岐ソース命令’とも呼ばれる)と分岐ターゲット命令の間のアドレス変更の幅は、分岐ジャンプの距離に等しい。L1キャッシュにおいては、L1キャッシュの同じ命令ブロック内の命令のブロック・アドレスは同じである。キャッシュ・トラック・アドレスのBN1Xは同じである。従って、もし前の命令のトラック・アドレスBN1Xが知られていれば、次の命令のトラック・アドレスBN1Xは直接に取得することができる(次の命令のトラック・アドレスBN1Xはアクティブ・リストとのマッチング操作を行なわなくてよい)。そうでなければ、アクティブ・リストとのマッチング操作が必要になる可能性がある。
[104] 同様に、同一ページの命令に対応する仮想アドレスは同一であり、同一ページの命令に対応する物理アドレスも同一である。従って、前の命令の物理アドレスが知られているとき、次の命令の物理アドレスも直接に取得されうる(仮想アドレスから物理アドレスへの変換モジュールあるいはTLBとのマッチング操作は行なわれる必要がない)。
そうでなければ、TBLとのマッチング操作が必要になる可能性がある。
[105] 記載の簡略化のため、2レベル・キャッシュ階層(L1キャッシュとL2キャッシュ)を持つメモリシステムが以下の実施形態において用いられる。この技術的解決は2レベル以上のキャッシュ階層(例えば3レベル・キャッシュ階層)を持ったメモリシステムにも応用できる。方法の詳細は図8の具体化から参照されるべく、ここでは繰り返さない。
[106] 図9は開示された実施形態と整合する分岐命令の計算と検索の構造概略図を示す。図9に示されるように、スキャナがターゲット命令アドレスを計算・取得し、そしてターゲット命令アドレスの場所を判断する。それから関連した情報が、CPUが命令を実行する時に使うためにトラック・テーブルへ書き込まれる。
[107] 仮想アドレスを物理アドレスに変換する変換索引バッファー(Translation Lookaside Buffer = TBL)はL2キャッシュ17とより下位レベル・メモリ(例えばL3キャッシュ45)との間に位置する。ここでは、本実施形態においての全てのアドレスは仮想アドレスであるとする。仮想アドレス変換とは、どの物理アドレスがどの仮想アドレスにマップするかを探し出すプロセスとする。
[108] この構造はCPU10、アクティブ・リスト91、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、トラッカー15、レベル1キャッシュ16(すなわち、第一レベルメモリ、つまり最も速いアクセススピードを持つメモリ)、そしてレベル2キャッシュ17(すなわち、第2レベル・メモリ、つまり最も遅いアクセススピードを持つメモリ)を含む。この構造はまた、マルチプレクサ911、マルチプレクサ912そしてメモリ902を含む。様々なコンポーネントはあくまで例示目的で記載されているものとし、他のコンポーネントも含まれうるし、また幾つかのコンポーネントは融合ないしは省略されうる。さらに、様々なコンポーネントは複数のシステムに分散しうるし、物理的なあるいは仮想コンポーネントでありうる。またハードウェア(例えば集積回路)によって、あるいはソフトウェアによって、あるいはハードウェアとソフトウェアの組み合わせによって実装されうる。
[109] トラッカー15は図2のプレディクタ24によって交換されうる。ここにおいては、メモリ902は独立モジュールとして、アクティブ・リスト・マッチング以外のアドレス指定法を使うことができる。このとき、メモリ902とアクティブ・リスト91は一緒になって、前述の実施形態におけるアクティブ・リスト(例えば図1のアクティブ・リスト11)の機能を実現する。以下の実施形態において、メモリ902は独立モジュールとしても使用されうる。
[110] アクティブ・リスト91のエントリーとメモリ902のエントリーはL2キャッシュ17のメモリ・ブロックと一対一に対応している。すなわち、各エントリーはBN2Xに対応し、L2キャッシュ17に記憶されているアクティブ・リスト91の行に対応するメモリ・ブロックの位置を示す。従って、BN2XとL2キャッシュ17のメモリブロックとの間に対応関係が形成される。具体的には、図10Aを参照すると、図10Aは開示された実施形態と整合する、例示的なアクティブ・リストのエントリーの構造概略図である。図10Aに示されるように、アクティブ・リスト91の各エントリーはL2キャッシュのメモリブロックのブロック・アドレス77とその有効ビットを記憶する。異なるプログラムは同じ仮想アドレスを持ちうるから、アクティブ・リスト91の各エントリーは仮想アドレスに対応するスレッドID(TID)をも含む。
[111] メモリ902の各エントリーは、L2キャッシュのキャッシュ・ブロックの全てあるいは一部がL1キャッシュ16に記憶されているか否かの情報を含む。L2キャッシュ17の1行の命令ブロックは、L1キャッシュの4つの命令ブロックに対応する。従って、アクティブ・リスト91の各エントリーは、L1キャッシュ・ブロック番号BN1X(例えば、メモリ領域 60、61、62、63)を記憶するメモリ領域をも含む。各メモリ領域は有効ビットを含む。有効ビットはそのメモリ・ブロックに記憶されているL1キャッシュ・ブロック番号BN1Xが有効であるか否かを示す。加えて、各エントリーのメモリ領域64は、現在のL2命令ブロックの前のL2命令ブロックのBN2X情報を含む。各エントリーのメモリ領域65は、現在のL2命令ブロックの次のL2命令ブロックのBN2X情報を含む。これら二つの各メモリ・ブロックは、メモリ領域に記憶されているL2キャッシュ・ブロック番号BN2Xが有効であるかを示す有効ビットを含む。
[112] 図9に戻って、トラッカー15はレジスタ21、インクリメンター22そしてセレクタ23を含む。レジスタ21はトラック・アドレスを記憶する。リード・ポインタ19(すなわち、レジスタ21のアウトプット)は、トラック・テーブル13の、現在CPUによって実行されている命令の後の最初の分岐ポイントをポイントし、そしてトラック・ポイントの内容を読み出す。
[113] 図10Bは開示された実施形態と整合する、例示的なトラック・テーブルのエントリーの内容概略図である。図10Bに示されるように、トラック・テーブル13 のエントリー・フォーマットは686と688である。エントリー・フォーマット686はTYPE、BN2X(L2キャッシュブロック番号)そしてBN2Y(L2キャッシュブロックにおけるオフセット)を含む。TYPEは非分岐命令、直接分岐命令、間接分岐命令の命令タイプ・アドレスを含む。TYPEはまたアドレス・タイプも含む。エントリー・フォーマット686のアドレス・タイプはL2キャッシュアドレスBN2である。エントリー・フォーマット688はTYPE、BN1X(L1キャッシュブロック番号)そしてBN1Y(L1キャッシュブロックにおけるオフセット)を含む。エントリー・フォーマット688の命令タイプはエントリー・フォーマット688の命令タイプと同じであるが、エントリー・フォーマット688のアドレス・タイプはL1キャッシュアドレスBN1である。
[114] トラッカー15のリード・ポインタ19のBN1はトラック・ポイントの内容を読み出すために、トラック・テーブル13におけるアドレス操作に用いられる。BN1はさらに、L1キャッシュにおけるアドレス操作によって、CPUで実行するための該当する命令を読み出すためのにも用いられる。特に、トラッカー15のリード・ポインタ19によってポイントされたトラック・ポイントの内容が読み出され、バス30を経てセレクタ23へ送られる。
[115] トラック・ポイントの内容に含まれる命令タイプが命令が分岐命令でないことを示している時、レジスタ21によって出力されたBN1Yにインクリメンター22によって1が加算される。TAKENシグナル20の制御の下(この時、値は0)、セレクタ23はレジスタ21からBN1Xを選び、BN1Yをインクリメンター22から受け取り、新しいBN1とする。新しいBN1はレジスタ21に書き込まれ、リード・ポインタ19は移動して次のトラック・ポイントをポイントする。すなわち、レジスタ21の値が更新されて次のサイクルのレジスタ21の値は1が加算されたものになる。リード・ポインタ19は分岐ポイントに達するまで移動する。レジスタ21の更新はCPUのステータスによっても制御される。パイプラインがCPU10によって止められた時は、レジスタ21は更新されない。
[116] トラック・ポイントの内容に含まれる命令タイプが、命令は条件付き分岐命令であることを示しているとき、分岐が取られたかを示すTAKENシグナル20にもとづいて、セレクタ23は選択操作を行なう。BRANCHシグナル40の値が’1’である時、レジスタ21の値が更新される。すなわち、CPUが分岐ソース命令を実行するとき、TAKENシグナル20は有効である。この時、もしTAKENシグナル20の値が’1’ならば(分岐が取られたことを示す)、セレクタ23はトラック・テーブル13によって出力されたBN1を選び、レジスタ21 を更新する。すなわち、リード・ポインタ19は分岐ターゲット命令に対応するトラック・ポイントをポイントする。もしTAKENシグナル20の値が’0’ならば(分岐が取られなかったことを示す)、セレクタ23はレジスタ21からBN1Xを選び、インクリメンター22からBN1Yを受け、新しいBN1としてレジスタ21を更新する。すなわち、リード・ポインタ19は次のトラック・ポイントをポイントする。
[117] トラッカー15のリード・ポインタがトラック・テーブル13のエントリーにポイントする時、分岐ソース命令のタイプが決定される(直接分岐命令か間接分岐命令か)。
[118] ここの実施形態では、分岐ソース命令は直接分岐命令とする。1つのL2命令ブロックは4つのL1命令ブロックを含む。BN2Yの最も重要な2ビットはサブ・ブロック番号である。各L2命令ブロックの1つのサブ・ブロックは1つのL1命令ブロックと等しい。つまり、各L2命令ブロックの1つのサブ・ブロック番号はつのL1命令ブロックに対応している。例えば、サブ・ブロック番号’00’はメモリ領域60に対応する;
サブ・ブロック番号’01’はメモリ領域61に対応する; などなど。
[119] トラッカー15のリード・ポインタ19がトラック・テーブル13のエントリーにポイントしている時、エントリーに記憶されている値はバス30を経て読み出される。もしエントリーに記憶されている値がL2キャッシュのトラック・アドレス(すなわち、BN2XとBN2Y)であれば、BN2XとBN2Yがそれぞれ行アドレスと列アドレスとして用いられ、バス(30)とマルチプレクサ(901)を経てメモリ902の中の該当するエントリーが探索される。そしてエントリーに記憶されているBN1Xが有効であるか、つまり将来分岐ソース命令の分岐ターゲット命令アドレスを計算する際に使用できるか、を照合する。もしメモリ902の該当するエントリーに記憶されているBN1Xが有効である(それは対応する分岐ターゲット命令がL1キャッシュ16に記憶されている事を示す)ならば、メモリ902の該当するエントリーに記憶されたBN1Xは、 トラッカー15のリード・ポインタ19によってポイントされたトラック・テーブル13のエントリーへ、バス910とマルチプレクサ911を経て書き込まれる。同時にトラック・テーブル13に記憶されている当該エントリーのBN2Yの値はBN1Yの値によって更新される(すなわち、サブ・ブロック番号がBN2Yから取り除かれる)。
[120] 従って、CPU10が分岐ソース命令を実行するとき、トラック・テーブル13の該当するエントリーに記憶されたBN1にもとづいて、CPU10で実行するためにL1キャッシュ16から命令が直接読み出される。もしメモリ902の該当するエントリーに記憶されているBN1Xが無効であるならば(対応する分岐ターゲット命令がL1キャッシュ16に含まれていないことを示す)、バス30のBN2XとBN2Yにもとづいて、分岐ターゲット命令を含むL2命令サブ・ブロックが、L2キャッシュ17から交換ロジックによって生成されたBN1Xに従って、L1キャッシュ16に充填される。CPUが命令を実行する時、命令はCPU10で実行されるためにL1キャッシュ16から直接読み出される。同時に、交換ロジックによって生成されたBN1Xの値とBN1Yの値(サブ・ブロック番号はバス30のBN2Yからは取り除かれる)は一緒に、トラッカー15のリード・ポインタ19によってポイントされるトラック・テーブル13のエントリーに書き込まれる。メモリ902の対応するエントリーのBN1Xの値は有効と設定される。
[121] 同時に、バス30のBN2Xにもとづいて、アクティブ・リスト91に記憶されている対応するタグが読み出され、将来分岐ソース命令の分岐ターゲット命令アドレスを計算するために、スキャナ12のレジスタに送られる。交換ロジックによって生成されたBN1Xはスキャナ12のレジスタに記憶される。よって、取得されたL2命令サブ・ブロックの分岐ターゲット・アドレスがトラック・テーブルに書き込まれるとき、BN1Xが分岐ソース・アドレスによってポイントされたトラック・テーブル13の1つの行として使われる。
[122] トラッカー15のリード・ポインタがトラック・テーブル13のエントリーにポイントしている時、エントリーに記憶された値がバス30を経て読み出される。分岐ソース命令が間接分岐命令である場合、分岐ターゲット命令アドレスがCPU10によって計算される。そして、分岐ターゲット命令アドレスが、マッチング操作のために、バス908とマルチプレクサ912を経てアクティブ・リスト91に送られる。もしマッチング操作が成功であれば(分岐ターゲット命令がL2キャッシュ17に記憶されている事を示す)、成功裏にマッチされたBN2Xが、該当する行を見つけるために、バス903とマルチプレクサ901を経てメモリ902に送られる。そして計算によって得られた分岐ターゲット命令のBN2Yが、対応する列(コラム)を見つけるために、バス905とマルチプレクサ901を経てメモリ902に送られる。もしメモリ902の該当するエントリーに記憶されたBN1Xが有効である場合、 前述の実施形態の該当するオペレーションと同様のオペレーションがなされる。違いは、L1キャッシュ16に記憶された命令が、BN1Xと計算された分岐ターゲット命令のBN1Yとによってすぐに取得され、CPU10に送られる点である。もしメモリ902の該当するエントリーに記憶されたBN1Xが有効でない場合、前述の実施形態の該当するオペレーションと同様のオペレーションがなされる。違いは、L2キャッシュ17に記憶されている分岐ターゲット命令を含むL2命令サブ・ブロックが、BN2値によって、交換ポリシーによって決定されたL1キャッシュ16にすぐに充填される点である。同時に、計算によって得られた分岐ターゲット命令のBN1XとBN1Yが、間接分岐命令に対応するトラック・テーブル13のエントリーにすぐに書き込まれ、分岐ターゲット命令がCPU10で実行されるために送られる。
[123] もしマッチング操作が不成功であれば(分岐ターゲット命令がL2キャッシュ17に記憶されていない事を示す)、計算によって得られた分岐ターゲット・アドレスが、より低いレベルのメモリからとられ、交換ポリシーによって決定されたL2キャッシュに充填される。後続するオペレーションは前述の実施形態と同様である。
[124] 以下の実施形態において、すべての分岐ソース命令は直接分岐命令であるとする。
[125] L2キャッシュ17のL2命令サブ・ブロックがL1キャッシュ16に充填されるとき、スキャナ12は、 L2キャッシュ17からL1キャッシュ16に送られるL2命令サブ・ブロックを吟味する。L2命令サブ・ブロックの1つの命令が分岐命令である時、分岐ソース命令の分岐ターゲットアドレスが計算される。
[126] パワー濫費を減らすため(すなわち、アクティブ・リスト91にアクセスする回数を減らす)、分岐ターゲット命令の場所が、L1命令ブロック境界、L2命令ブロック境界そしてL2命令ブロックの次のレベルの命令ブロック境界の外にあるかを判断する事により、アクティブ・リスト91にアクセスする頻度が削減される。
[127] スキャナ12が分岐ターゲット命令アドレスを計算する時、分岐ターゲットの場所は以下の状況を含む。
[128] 状況1:分岐ターゲット・アドレスと分岐ソース・アドレスが同じL1命令ブロック内にある場合(つまり、分岐ターゲット命令と分岐ソース命令が同じBN1Xを持つ)、スキャナに記憶されたBN1Xと計算によって得られたBX1YがBN1に合成される。そのBN1が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス907とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。分岐ソース命令が実行されるとき、CPU10は直接に命令をL1キャッシュ16から実行のために読み出す。
[129] 状況2:分岐ターゲット・アドレスと分岐ソースアドレスが同じL2命令ブロック内にある場合(つまり、分岐ターゲット命令と分岐ソース命令が同じBN2Xを持つ)、スキャナに記憶されているBN2Xと計算によって得られたBN2YがBN2に合成される。BN2が用いられて、バス905とマルチプレクサ901を経て、メモリ902に記憶された該当するエントリーが探し出される。もしメモリ902の該当するエントリーに記憶されているBN1X値が有効ならば、BN1XとBN1Y(すなわち、計算によって得られたBN2Yからサブ・ブロック番号は取り除かれる)はBN1に合成される。そのBN1が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Yと、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。分岐ソース命令が実行されるとき、CPU10は直接に命令をL1キャッシュ16から実行のために読み出す。もしメモリ902の該当するエントリーに記憶されたBN1X値が無効であるならば、BN2が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。
[130] 状況3:分岐ターゲットアドレスが、分岐ソースアドレスの前のL2命令ブロックもしくは次のL2命令ブロックにある場合、BN2がバス905マルチプレクサ901を経てメモリ902とへ送られ、該当するエントリーの前のL2命令ブロックもしくは次のL2命令ブロックのBN2Xを探す。バス910を経て読み出されたBN2Xと計算によって得られたBN2Yが一緒にメモリ902の他のエントリーをポイントする。もしメモリ902のエントリーに記憶されているBN1X値が有効であるならば、BN1XとBN1Y(すなわち、計算によって得られたBN2Yからサブ・ブロック番号は取り除かれる)はBN1に合成される。そのBN1が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。もしメモリ902の該当するエントリーに記憶されたBN1X値が無効であるならば、該当するエントリーのBN2Xと計算によって得られた分岐ターゲット命令BN2YはBN2として一緒に接合される。このBN2が、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス910とマルチプレクサ911を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。
[131] 状況4:分岐ターゲットアドレスが、分岐ソースアドレスの前のL2命令ブロックもしくは次のL2命令ブロックの外にある場合、計算によって得られた分岐ターゲット命令アドレスは、マッチング操作を行なうため、バス907とマルチプレクサ912を経てアクティブ・リスト91とへ送られる。もしマッチング操作が成功であれば、後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。もしマッチング操作が不成功であれば、計算によって得られた分岐ターゲットアドレスにもとづいて、該当する命令ブロックが下位レベルメモリから取ってこられ、交換ロジックによって決定されたL2キャッシュブロックへ充填される。後続するオペレーションは前述の実施形態における対応するオペレーションと同様である。
[132] ここでは、命令アドレスは4つの部分に分割されているとする。図11は開示された実施形態と整合する、例示的な命令アドレスと分岐距離を表した概略図である。図11に示されるように、命令アドレスの下位ビット(すなわち、命令アドレスのオフセット50)はL1命令ブロックにおける命令の位置を表していて、それはすなわちBN1Yである。命令アドレスの中間セグメント(すなわち、命令アドレスのサブ・ブロック番号51)は、L2命令ブロックの中におけるL1命令ブロックの位置を表す。従って、サブ・ブロック番号51とオフセット50は一緒にBN2Y54を構成する。サブ・ブロック番号51の高位ビット52は、分岐ターゲットアドレスが分岐ソースアドレスの次のL2命令ブロックの場所の外にあるか、を判断するのに使われる。命令アドレスの高位ビット53は、マッチング情報を得るために、アクティブ・リスト91の該当するタグとマッチングするために使われる。3つの境界が、命令アドレスの4つの部分の接合部に作られる。それに応じて、分岐ターゲット・アドレスは3つの部分に分割される;低位ビット51はBN1Yに対応、中間セグメント56はサブ・ブロック番号に対応、高位ビット57は命令アドレスの高位ビット53に対応する。
[133] 命令ターゲットアドレスは分岐ソース命令アドレスに分岐距離を加える事で得られる。加算操作の最中、加法器は上記3つの境界に対応する3つのキャリー信号を持つ。もし上記のどこか境界において分岐距離が’0’で、境界における加法器のキャリーが’0’であるならば、それは分岐ターゲットアドレスが該当する境界内にあることを示す;そうでなけれ、それは分岐ターゲットアドレスが境界の外にあることを示す。もし上記のどこか境界において分岐距離が’1’で、境界における加法器のキャリーが’1’であるならば、それは分岐ターゲットアドレスが該当する境界内にあることを示す;そうでなけれ、それは分岐ターゲットアドレスが境界の外にあることを示す。
[134] 図12は開示された実施形態と整合する、例示的な、スキャナによって計算された分岐ターゲットアドレスを表した構造概略図である。図12に示されるように、構造概略図は第1レジスタ1201、第2レジスタ1202、第3レジスタ1203、第4レジスタ1204、第5レジスタ1205、インクリメンター1206、そして複数キャリー出力をもつ加法器1207を含む。
[135] バス907は分岐ターゲットアドレスをキャッシュ・システムの他のモジュールへ送るために用いられる。バス907はアドレス・フォーマットを区別するために用いられる制御シグナルも含む。
[136] 上記方法にもとづいて、3つのノン・オーバーフロー(境界内の)シグナルを得る。3つのシグナルはプライオリティ選択ロジックによって処理され、最小の有効なノン・オーバーフロー・シグナルが勝ち残り、大きな境界に対応するノン・オーバーフロー・シグナルを無効にする。この最小の境界に対応する有効なノン・オーバーフロー・シグナルがバス907に置かれ、アドレス・フォーマットを示す。
[137] 上記方法にもとづいて、もし分岐ターゲットアドレスが、分岐ソース命令を含むL1命令ブロック内にあると判別されたとき、スキャナ12に記憶されたBN1Xがバス1214を経て、計算によって得られたBN1Yがバス1212を経て、BN1として接合される。このBN1がバス907を経て、スキャナ12によって一時的に記憶されバス922を経たBN1X、さらにバス907を経たスキャナ12の分岐ソース命令のBN1Y、とによってポイントされたトラック・テーブル13のエントリーに書き込まれる。分岐ソース命令が実行されるとき、CPU10は、直接に命令をL1キャッシュ16から実行のために読み出す。
[138] もし分岐ターゲット命令が現在の分岐ソース命令を含むL2命令ブロック内にあるならば、バス1213、バス1211、そしてバス1212はBN2アドレスとして接合される。BN2アドレスはバス907を経てメモリ902に送られ、後続するオペレーションは図9における上記実施形態と同質である。
[139] もし分岐ターゲット命令が現在の分岐ソース命令を含むL2命令ブロックの次のL2命令ブロック内にあるならば、バス1213、バス1211、そしてバス1212はBN2アドレスとして接合される。BN2アドレスは、次のL2命令ブロック情報を探すために、バス907を経てメモリ902に送られ、そして後続するオペレーションは図9における上記実施形態と同質である。
[140] もし分岐ターゲット命令が、現在の分岐ソース命令を含むL2命令ブロックの次のL2命令ブロックの外にあるならば、バス1210、バス1211、そしてバス1212は分岐ターゲットアドレスとして接合される。分岐ターゲット・アドレスはバス907を経てアクティブ・リスト91へ送られ、後続するオペレーションは図9における上記実施形態と同質である。加えて、分岐距離のサイン・ビットに応じて、分岐ターゲット・アドレスが現在の分岐ソース命令の前か後かが決定される。
[141] 上記の技術的解決は、データ・キャッシュに対しても適用することができる。図13は開示された実施形態と整合する、例示的な、 データアクセス命令に先んじてデータを準備する仕組みの概略図である。データに関する部分が図13に描かれている。命令に関する部分は図13から省かれている。
[142] CPU10、アクティブ・リスト91、コリレーション・テーブル14、トラッカー15、2番目のマルチプレクサ912、そしてメモリ902は図9のそれらと同じである。L1キャッシュとL2キャッシュはデータキャッシュ、すなわち、L1データキャッシュ116とL2データキャッシュ117である。加えて、データエンジン112のデータキャッシュに対する役割は、スキャナ12の命令キャッシュに対する役割と同等であり、そして3ユニット・マルチプレクサ1101は最初の4インプット・マルチプレクサ901を取り替えたものである。
[143] L1データキャッシュ116のキャッシュ・ブロック(すなわちL1データ・ブロック)はDBN1Xでポイントされる。L2データキャッシュ117のキャッシュ・ブロック(すなわちL2データ・ブロック)はアクティブ・リスト91のエントリーに対応しており、同じDBN2Xでポイントされる。
[144] 図9の実施形態と同様に、L2データキャッシュ117はL1データキャッシュ116の全てのデータを含んでいる。1つのL2データキャッシュ・ブロックは幾つかのL1データキャッシュ・ブロックに対応することができる。具体的には、ここでの実施形態においては、1つのL2データキャッシュ・ブロックは4のL1データキャッシュ・ブロックに対応することができる。L1データブロックのDBN1XとL2データブロックのDBN2Xとの対応関係はメモリ902に記憶されてる。従って、DBN2Yによって、対応するDBN1X が、メモリ902内でDBN2Xによりポイントされている行から見つけ出される。DBN1XとDBN2Yの下部(すなわちDBN1Y)は一緒にDBN1を構成し、よってDBN2がDBN1に翻訳される。加えて、この構造はメモリ1102をも含む。メモリ1102の行はL1データキャッシュ116のL1データブロックに対応し、各行は、対応するL1データキャッシュ・ブロックのL2データブロック番号と、該当するBN2Xの中のBN1Xのサブ・ブロック番号とを記憶する。従って、DBN1XはDBN2Xに翻訳される。サブ・ブロック番号とバス30を経て送られたDBN1YはDBN2Yに融合される。
[145] トラック・テーブル13のトラック・ポイントの命令タイプも、分岐命令(分岐ポイントに対応する)に加えて、データアクセス命令(データポイントに対応する)をも含む。分岐ポイントと同様に、データ・ポイント・フォーマット1188は4つの部分を含む: TYPE、L1データ・ブロック番号(DBN1X)、L1ブロック・オフセット(DBN1Y)そしてストライドである。データアクセス命令タイプはさらにロード命令と記憶命令に分類される。
ストライドとは、CPU10が連続的に同じデータアクセス命令を2回実行するときの、対応するデータアドレスの差異である。
[146] データエンジン112はストライド計算モデュールを含む。ストライド計算モデュールは、CPU10が連続的に同じデータアクセス命令を2回実行するときの対応するデータアドレスの値に対して減法操作を行なう。取得された差異がストライドである。ストライドにもとづいて、CPU10が同じデータ・アクセス命令を再び将来実行する際に、可能な予測データアドレスが予測される。
[147] この実施形態において、予測データアドレスに対応するL1データ・ブロックはL1データキャッシュ116にあらかじめ充填されている。ロード命令においては、予測データアドレスに対応するデータはさらに読み出され、そしてバス125に置かれる。CPU10がデータアクセス命令を実行する時、L1データキャッシュ116はアクセスされる必要がなく、データは直接バス125から取得される。記憶命令においては、CPU10が命令を実行するとき、出力されたデータは一時的に書き込みバッファー(図13には示されていない)に記憶され、そしてL1データキャッシュ116が休んでいる時に該当する場所に書き込まれる。例示目的のために、ここではロード命令を用いる。
[148] トラッカー15のリード・ポインタ19がデータ・ポイントをポイントしている場合、バス30から読み出されたデータ・ポイントの中身のDBN1(つまり、DBN1XとDBN1Y)にもとづいて、該当するデータがL1データキャッシュ116から直接読み出され、CPU10で実行されるためにバス125に置かれる。同時にバス30のDBN1とストライドがデータエンジン112へ送られる。データエンジン112 は予測データアドレスと現在のデータアドレスとの位置関係を、上記実施形態において分岐ターゲットアドレスが同じL1/L2命令ブロック内にあるか否かを調べる際に使った予測方法と同様の方法で、決定する。具体的には、現在のデータアドレスに対応するBN1Yがストライドに加算され、合計がキャリーを持つか否かに従って、データエンジン112が位置関係を決定する。ここではストライドは正の数であると仮定する。他の状況に関しては、図9に置ける実施形態を参照することとし、ここでは繰り返さない。
[149] データエンジン112は、図12の実施形態と同様に加法器を含む。加法器は、DBN1YまたはDBN2Yとストライドの対応する部分との合計を計算し、ストライドの該当する高位ビットセグメントが’0’であるか、そして加法器の結果が境界の外になるか、を決定するように設計される。具体的には、DBN1Yを越えたストライドの高位ビットセグメントの各ビットが’0’であり、DBN1Yに対応する加法がキャリー出力を持たず(それは予測データアドレスとデータアドレスが同じL1データ・ブロックに置かれている事を示す)、この時、現在のデーターアドレスに対応するDBN1Xと加法器によって計算されたDBN1Yが一緒になってDBN1を構成する。DBN1は、トラック・テーブル13のデータポイントへ、バス1107と最初のマルチプレクサ911を経て、元々の中身を書き換えるために充填される。
[150] DBNY1に対する加算がキャリー出力を持つ場合(それは予測データアドレスと現在のデータアドレスがL1キャッシュの異なるデータブロックに位置する事を示す)、データエンジン112はデータアドレスのDBN1Xをバス1121を経てメモリ1102へ送り、対応するDBN2Xとサブ・ブロック番号を読み出す。対応するDBN2Xとサブ・ブロック番号はバス1123を経てデータエンジン112 へ送られる。サブ・ブロック番号とバス30を経て送られたDBN1Yは一緒にDBN2Yを構成する。DBN2Yはストライドに加算される。もしストライドのDBN2Yを越えた高位ビットセグメントの各ビットが’0’で、DBN2Yに対する加算がキャリー出力を持たなければ(それは予測データアドレスとデータアドレスが同じL2データブロックに置かれていることを示す)、現在のデータアドレスに対応するバス1123を経て送られたDBN2Xと加法器によって計算されたDBN2Yが、一緒にDBN2を構成する。データエンジン112 はDBN2をバス1107に置く。DBN2はマルチプレクサ1101を経てメモリ902へ送られ、DBN1へと翻訳される。
DBN1は、トラック・テーブル13のデータポイントへ、バス1107と最初のマルチプレクサ911を経て、元々の中身を書き換えるために充填される。
[151] もしストライドのDBN1Yを越えた高位ビットセグメントの各ビットが’0’で、DBN2Yに対する加算がキャリー出力を持つがしかし高位ビットがキャリー出力を持たないならば(それは予測データアドレスが、現在のデータアドレスを含むL2データブロックの次のL2データブロックの中に置かれている事を示す)、データエンジン112はバス1123を経て送られたDBN2Xをバス1107に置く。DBN2Xはマルチプレクサ1101を経てメモリ902へ送られる。次のL2データブロックのDBN2は上記方法によって読み出される。DBN2はバス906を経てメモリ902と最初のマルチプレクサ911へ送り返され、DBN1へと翻訳される。DBN1は、トラック・テーブル13のデータポイントへ、バス910と最初のマルチプレクサ911を経て、元々の中身を書き換えるために充填される。
[152] もしDBN2Yに対する加算の高位ビットもキャリー出力を持つ場合(それは予測データアドレスが、データアドレスに対応するL2データブロックの次のL2データブロックの外に置かれている事を示す)、データエンジン112は、バス1123を経て送られたデータアドレスに対応するDBN2Xを、L2データ・ブロック・アドレスを読み出すために、アクティブ・リスト91にバス1107を経て送る。データ・ブロック・アドレスはバス920を経て、データエンジン112へ送り返される。データ・ブロック・アドレスと、バス1123を経て送られたサブ・ブロック番号とバス30を経て送られたDBN1Yを含むDBN2Y、これらが一緒になりこのときデータアドレスを構成する。それから、データアドレスをストライドに加えることにより、予測データアドレスが得られる、予測データアドレスは、マッチング操作のために、バス1107と2番目のマルチプレクサ912を経てアクティブ・リスト91とへ送り返される。マッチング操作が成功した場合、成功したマッチング結果に対応するDBN2Xが得られる。後続するオペレーションは上記実施形態における該当するオペレーションと同様である。最後に、DBN1は、トラック・テーブル13のデータポイントへ、元々の中身を書き換えるために充填される。マッチング操作が不成功である場合、予測データアドレスが、対応するデータブロックを得るために、バス18を経て低位メモリへ出力される。後続するオペレーションは上記実施形態における該当するオペレーションと同様である。最後に、DBN1は、トラック・テーブル13のデータポイントへ、元々の中身を書き換えるために充填される。
[153] 従って、トラッカー15のリード・ポインタ19がデータ・ポイントを再びポイントする時、バス30に読み出されるデータ・ポイントの内容はDBN1を含む。DBN1にもとづいて、該当するデータは、L1データキャッシュにアクセスすることで直接読み出され、CPU10で実行されるためバス125に置かれる。CPU10がデータアクセス命令を実行しデータアドレスを生成した時、データアドレスはバス908を経てデータエンジン112へ送られ、予測データアドレスと比較される。もし比較結果がイコールであれば、CPU10は前もって用意されたデータを直接読み出す。もし比較結果がイコールでなければ(それは予測データアドレスが間違いであったことを示す)、この時マッチング操作を行なうために、データアドレスがバス908を経てアクティブ・リスト91へ送られる。後続するオペレーションは上記実施形態における該当するオペレーションと同様である。最後に、正しいデータがCPU10で実行されるために提供される。
[154] 上記プロセスは繰り返される。CPU10がデータアクセス命令を実行する前に、データアドレスが予測される。該当するデータがL1データキャッシュ116へ前もって充填され、よってデータキャッシュ・ミスを減らす。CPU10がデータアクセス命令を再び実行する時、該当するデータがすでにバス125に置かれており、従ってデータキャッシュ・ヒットのアクセス時間をさらに削減する。
[155] 図14は開示された実施形態と整合する、例示的な、CPUとアクティブ・リストの間の変換索引バッファー(Translation Lookaside Buffer = TBL)の構造概略図である。図14に示されているように、構造はCPU10、アクティブ・リスト91、スキャナ12、トラック・テーブル13、コリレーション・テーブル14、トラッカー15、レベル1キャッシュ16(第1レベルメモリ、すなわち、最も速いアクセススピードをもつメモリ)、レベル2キャッシュ17(第2レベルメモリ、すなわち、最もアクセススピードの遅いメモリ)、マルチプレクサ911、メモリ902そしてTLB1301を含む。
[156] TBL1301はCPU10とアクティブ・リスト91の間に置かれている。従って、アクティブ・リスト91に記憶されているL2命令ブロックアドレスは物理アドレスである。L2キャッシュ17とL1キャッシュ16のアドレスは全て物理アドレスである。CPU10によって計算されたアドレスは仮想アドレスである。仮想アドレスはTLB1301によって物理アドレスに翻訳される。
[157] トラッカー15のリード・ポインタ19がトラック・テーブル13のエントリーをポイントする時、エントリーの内容がバス30から読み出される。もし命令が間接分岐命令であり命令フォーマットがBN2であるなら、トラッカー15はエントリーに留り、CPU10が分岐ターゲットアドレスを計算するのを待つ。BRANCH-シグナル20がCPU10によって送られ、バス908にあるアドレスは有効な仮想分岐ターゲット・アドレスであることを、システムに知らせる。アドレスが、対応する物理アドレスにマップするために、TLB30に送られた後、該当する物理アドレスがアクティブ・リスト18に送られる。アクティブ・リスト18がアドレスを対応するBN2にマップした後、BN2はバス903とマルチプレクサ901を経てメモリ902へと送られ、対応するBN1と整合される。もしBN1が無効である場合、L2キャッシュの対応するサブ・キャッシュ・ブロックが、BN2のブロック・アドレスBN2XによってL2キャッシュ17から取り出され、L1キャッシュへ充填される。充填されたL1キャッシュのブロック番号BN1はそれに対応したメモリ902へ充填される。
[158] もし物理アドレスがアクティブ・リスト18の中でマッチングされない場合、物理アドレスを使って下位レベルメモリから読み込まれた命令ブロックが、L2交換ロジックによってポイントされたL2キャッシュブロックへ充填され、そしてL1交換ロジックによってポイントされたL1キャッシュブロックへ充填される。同時にBN1が、メモリ902のBN2XによってポイントされているエントリーのL2キャッシュのサブ・ブロック番号によってポイントされたL1ブロック番号領域(すなわち、物理アドレスにおけるBN2Yに等しい高位ビットセグメント)へ充填される。もし上記仮想アドレスがTLB1301の中でマッチングされない場合、オペレーティング・システムに対応するようリクエストするために、TLBミス・シグナルが生成される。
[159] BN2によってポイントされたBN1Xと物理アドレスの低位ビットBN1Yはメモリ902においてBN1として接合される。BN1はトラック・テーブル13のリード・ポインタ19によってポイントされたエントリーに(このエントリーは元々間接分岐ターゲットBN2アドレスのテーブル・エントリーを記憶している)記憶される。テーブル・エントリーはバス30を経て読み出され、フォーマットがBN1であることを決定される。もし分岐タイプが無条件分岐であるか、あるいは分岐タイプが条件分岐でかつCPU10によって出力されたBRANCHシグナル40が’分岐を取っている’というものであれば、BN1はレジスタ21に記憶され、バス19に置かれ、L1キャッシュを制御し、CPU10が実行するための対応する分岐ターゲット命令を読み出す。もし分岐タイプが条件分岐で、しかしCPU10によって出力されたBRANCHシグナル40が’非分岐’というものであれば、インクリメンター22のアウトプットがレジスタ21に記憶され、バス19に置かれ、L1キャッシュを制御し、CPU10が実行するための分岐ソース命令の次の命令を読み出す。
[160] 同じ間接分岐命令が次回実行されるとき、バス30の命令タイプは間接分岐命令であるが、しかしアドレス・フォーマットはBN1である。この時、もし分岐が分岐タイプまたはCPU10の分岐判断にもとづいて取られるならば、BN1がバス19に置かれ、L1キャッシュを制御し、CPU10で投機的に実行されるために対応する分岐ターゲット命令を読み出す。そして、分岐ターゲット命令の命令タイプにもとづいて、命令は引続き投機的に実行される。CPU10によってマッピング・プロセスの際に生成された分岐ターゲット仮想アドレスによって生成された正確なBN1は、トラック・テーブルから読み出された 投機的BN1と比較される。もし比較結果が同等ということであれば、命令は続行される;もし比較結果が同等でないということであれば、CPU10による 投機的な実行結果と中間結果はクリアされる。マッピング・プロセスによって得られた正確なBN1は分岐ソースエントリーに記憶され、トラッカーは分岐ソースエントリーに記憶された正確なBN1からの命令を実行し始める。
[161] トラッカー15のリード・ポインタ19がトラック・テーブル13のエントリーをポイントしている時、エントリーの内容がバス30から読み出される。もし命令が直接分岐命令である場合(すなわち、分岐ターゲット命令アドレスBN2またはBN1が正しいアドレスである)、後続するオペレーションは前述実施形態における該当するオペレーションと同様である。
[162] L2キャッシュ・サブ・ブロックがL1キャッシュに充填された時、L2キャッシュ・サブ・ブロックの命令は、L1キャッシュ・ブロックに対応するトラック・テーブル13のトラックに充填するための情報を抽出するために、スキャナ12によって吟味される。分岐命令の分岐ターゲットはスキャナ12によって計算される。アクティブ・リスト91から読み出されるブロック・アドレスは物理アドレスであるため、スキャナ12が分岐ターゲットアドレスを計算するとき、スキャナ12はアドレスがTLBページの外にあるか(分岐ターゲットと分岐ソースが同じページに無い)を決定する必要がある。アドレスは、ページ・サイズによって、高位ビットの外部ページ部分と低位ビットの内部ページ部分とに分類できる。分岐ターゲット命令が計算されるとき、ページ外の分岐オフセットの全てのビットが’0’または’1’であるか、そしてページ境界の加法器のキャリー、にもとづいて、該当するオペレーションが、分岐ターゲットがページの外にあるかを判断するために、実行される。
分岐ターゲットと分岐ソースが同じページ内にある時、オペレーションは図9の実施形態におけるオペレーションと同様であり、ここでは繰り返さない。もし分岐ターゲットアドレスがページ外にある時、バス907を経てスキャナ12から送られたPCアドレスは、物理アドレスのページ番号は必ずしも連続していないので、誤りかもしれない。それゆえ、分岐ターゲットがページ外にある場合、エラーを防止する仕組みが必要である。以下の方法は上記のエラーを防止することができる。
[163] 最初の方法は図14を参照する。スキャナ12が直接分岐命令の分岐ターゲットを計算し、分岐ターゲットがページ外であることを発見したとき、スキャナ12は分岐命令のタイプを間接分岐命令として変換しアドレス・フォーマットをBN2に設定する。変換された分岐命令は、アドレスをBN1に変換するメモリ902を探す代わりに、トラック・テーブル13の該当する直接分岐命令のエントリーに、直接書き込まれる。バス30からテーブル・エントリーが読み出された時、命令は間接分岐命令として取り扱われる。分岐アドレスはCPU10によって計算される。得られた仮想アドレスはTBL1301において物理メモリにマップされる。最後に、アドレスはメモリ902においてBN1にマップされる。そしてBN1はトラック・テーブル13のテーブル・エントリーへ書き込まれる。後続するオペレーションは前述実施形態における該当するオペレーションと同様である。すなわち、テーブル・エントリーのBN1のアドレスにもとづいて、分岐は投機的に実行され、CPU10によって生成された正確な分岐ターゲットアドレスによって確認される。
[164] さらに、トラック・テーブル13の該当するテーブル・エントリーの直接分岐命令が間接分岐としてマークされている状況を表すために、新しい命令タイプDirect-Marked-As-Indirect(DMAI)を定義する。DMAI BN2がバス30から読み出された時、分岐は投機的に実行され、CPU10によって生成された正確な分岐ターゲットアドレスによって確認される。
よって、分岐ターゲット・アドレスがBN1タイプに変換された後、DMAI BN1がバス30から読み出された時、システムはアドレス確認操作をしない。その代わりに、テーブル・エントリーが実行される直接分岐タイプとみなされる。
[165] 2番目の方法は図15を参照する。物理アドレスとスレッド番号(TID)に対応する余分な仮想アドレスがアクティブ・リスト18の全てのテーブル・エントリーに追加される。図15は開示された実施形態と整合する、もう1つの例示的な、仮想アドレスから物理アドレスへの変換装置の構造概略図である。図15に示されるように、アクティブ・リスト91は、物理アドレス(PA)を記憶するメモリ・ブロック1501、仮想アドレス(VA)を記憶するメモリ・ブロック1502、そしてスレッド番号(TID)を記憶するメモリ・ブロック1503を含む。TLB1301は物理アドレス(PA)と仮想アドレス(VA)を記憶するように設計される。さらに、TLB1301は、TLBにおけるPAの前ページ番号の指標アドレスを記憶するためのメモリ・ブロック1510、そしてTLBにおけるPAの次ページ番号の指標アドレスを記憶するためのメモリ・ブロック1511をも含む。他の必須の構造は図14に示された構造と同じである。加えて、前述と同様の方法が、分岐ターゲット・アドレスが現在のページ内にあるかを決定するために用いられる。
[166] アクティブ・リスト91のためのアドレス指定操作がバス30のBN2Xを経て行なわれるとき、メモリ・ブロック1501とメモリ・ブロック1502に記憶されているPAとVAが読み出され、それぞれバス1505とバス1504を経て、スキャナ12へ送られる。つまり、スキャナ12は分岐ターゲット物理アドレスを直接計算するだけでなく、仮想アドレスにもとづいて分岐ターゲット仮想アドレスをも計算する。スキャナ12によって計算された分岐ターゲットアドレスが現在のページ内であるとき、計算によって得られた分岐ターゲット・アドレスが、バス1506とマルチプレクサ1508とバス1509を経てマッチング操作を行なうために、アクティブ・リスト91のメモリ・ブロック1501へ送られる。後続するオペレーションは上記実施形態と一致する。
[167] スキャナ12によって計算された分岐ターゲットアドレスが現在のページに隣接するページの中にあるとき、計算によって得られた分岐ターゲット・アドレスが、マッチング操作を行なうために、バス1506とマルチプレクサ1508とバス1509を経て、アクティブ・リスト91のメモリ・ブロック1501へ送られる。アドレス・タイプは図12に示された方法によって、次または前のページ内にあると、マークされる。テーブル・エントリーのマッチングされたメモリ・ブロック1510またはメモリ・ブロック1511が読み出される。そして、メモリ・ブロック1510またはメモリ・ブロック1511の値に応じて、TLB1301の該当する行が見つけられる。後続するオペレーションは上記実施形態と同様である。
[168] スキャナ12によって計算された分岐ターゲットアドレスが現在のページの中にないとき、計算によって得られた分岐ターゲット仮想アドレスが、バス1512を経て、マッチング操作を行なうために、TLB1301へ送られる。もしマッチング操作が成功であれば、該当する分岐ターゲット物理アドレスが、マッチング操作を行なうために、バス1507とマルチプレクサ1508とバス1509を経て、アクティブ・リスト91へ送られ、後続するオペレーションは上記実施形態と一致する。もしTLB1301またはメモリ・ブロック1501でのマッチング操作が成功でなければ、後続するオペレーションは上記実施形態と一致する。
[169] 3番目の方法は図16を参照する。図16は開示された実施形態と整合する、もう1つの例示的な、仮想アドレスから物理アドレスへの変換の構造概略図である。図16に示されるように、アクティブ・リスト91は、物理アドレス(PA)を記憶するメモリ・ブロック1601、TLB内の対応する行をポイントするポインタ(PT)を記憶するメモリ・ブロック1602を含む。仮想アドレス(VA)を記憶するメモリ・ブロックは図16には含まれていない。他の必須の構造は図15に示されている構造と同様である。
[170] バス30のBN2Xがアクティブ・リスト91に対してアドレス指定操作を行なうとき、メモリ・ブロック1601に記憶されている該当する物理アドレスが、バス1505を経てスキャナ12に送られる。計算によって得られた分岐ターゲットアドレスが現在のページ内にある場合、後続するオペレーションは上記実施形態と一致する。計算によって得られた分岐ターゲットアドレスが現在のページ外にある場合、バス30のBN2X値にもとづいて、メモリ・ブロック1602に記憶されたポインタにバス1605を経てポイントされたTLB1301の該当する行が読み出される。そして、TLB1301に記憶された該当する行の仮想アドレスが読み出され、分岐ターゲットアドレスを計算するために、バス1604を経てスキャナ12へ送られる。取得された分岐ターゲット仮想アドレスはバス1512を経てTLB1301へ送られ、後続するオペレーションは上記実施形態と一致する。
[171] 4番目の方法は図17を参照する。図17は開示された実施形態と整合する、分岐ターゲットアドレスを計算する仕組みの1つの構造概略図である。図17に示されるように、アクティブ・リスト91は、仮想アドレス(VA)を記憶するメモリ・ブロック1701、物理アドレス(PA)を記憶するメモリ・ブロック1702を含む。メモリ・ブロック1701は仮想アドレスと該当するスレッド番号(TID)をも記憶するように設計される。メモリ・ブロック1702の構造は、ダイレクト・マップ・メモリ、セット・アソシアティブ・メモリ、そしてフル・アソシアティブ・メモリのいずれでも良い。図17においてはTLBはもう必須ではなく、仮想アドレスから物理アドレスへの変換はアクティブ・リスト91の中で完了する。
[172] バス30のBN2Xがアクティブ・リスト91に対してアドレス指定操作を行なうとき、メモリ・ブロック1701とメモリ・ブロック1702に記憶されている仮想アドレスと物理アドレスが読み出され、分岐ターゲット仮想アドレスと分岐ターゲット物理アドレスを計算するために、それぞれバス1705とバス1703を経てスキャナ12に送られる。
[173] 分岐ターゲット物理アドレスが現在のページ内にあるとき、計算によって得られた分岐ターゲット物理アドレスが、マッチング操作のために、バス1708を経てメモリ・ブロック1702へ送られ、後続するオペレーションは上記実施形態と一致する。分岐ターゲット物理アドレスが現在のページ外にあるとき、分岐ターゲット仮想アドレスが、マッチング操作を行なうために、バス1506とマルチプレクサ1508とバス1509を経て、メモリ・ブロック1701へ送られる。もしメモリ・ブロック1701またはメモリ・ブロック1702におけるマッチング操作が不成功であれば、プロセスは上記実施形態と同様である。従って、該当する分岐ターゲットBN2が得られ、後続するオペレーションは上記実施形態と一致する。
[174] 5番目の方法は図18を参照する。図18は開示された実施形態と整合する、もう1つの例示的な、仮想アドレスから物理アドレスへの変換の構造概略図である。
この構造概略図は図9の構造概略図と類似している。違いは、アクティブ・リスト91の各テーブル・エントリーが、L2命令キャッシュ17のL2命令ブロックに対応する、仮想アドレスと物理アドレスのタグ部分を記憶する点で、各各テーブル・エントリーは有効ビットを持つ。記憶された仮想アドレスはスレッド番号(TID)も含む。アクティブ・リスト91の構造は、ダイレクト・マップ・アクティブ・リスト、セット・アソシアティブ・アクティブ・リスト、そしてフル・アソシアティブ・アクティブ・リストのいずれでも良い。加えて、分岐ターゲットアドレスを計算するために、アクティブ・リスト91の物理ページ番号はバス1801を経てスキャナ12に送られる。アクティブ・リスト91の仮想ページ番号とタグ部分の低位ビットは、分岐ターゲットアドレスを計算するために、バス1803を経てスキャナ12へ送られる。アクティブ・リスト91のマッチング操作によって得られた物理ページ番号はバス907を経てスキャナ12へ直接送られる。仮想アドレスはバス1807を経て送られる。バス1807は二つのソースを持つ:スキャナ12のバス907とCPU10のバス908である。
[175] アクティブ・リスト91の役割は伝統的キャッシュ・システムのタグ・ユニットとTLBの役割と同等である。図19は開示された実施形態と整合する、例示的な、アドレス・フォーマット1900の概略図である。ここでアクティブ・リスト91はダイレクト・マップ・アクティブ・リストとする。セット・アソシアティブ・アクティブ・リストとフル・アソシアティブ・アクティブ・リストのアドレス・フォーマットは、ダイレクト・マップ・アクティブ・リストのアドレス・フォーマットと同様である。アドレス・フォーマット1900は、高位ビットから低位ビットまで(左から右へ)幾つかのセグメントに分割される。セグメント1988はスレッド番号;セグメント1987はページ番号(仮想アドレス・ページ番号もしくは物理アドレス・ページ番号);セグメント1986はタグの低位ビット;セグメント1987とセグメント1986はアドレス・タグとして接合;セグメント1985は指標ビット;セグメント1984はL2キャッシュ・サブ・ブロック番号(すなわち、BN2Yの高位ビットセグメント);そしてセグメント1983はL1キャッシュ・ブロックのオフセットBN1Yである。セグメント1986、セグメント1985、セグメント1984、そしてL1キャッシュ・ブロック・オフセットBN1Yは、仮想アドレスか物理アドレスであるかに関わらず同じであり、従ってこれらのセグメントは共有されうる。スレッド番号1988は、仮想アドレス指定操作が行なわれるときに、異なるスレッドの同じ仮想アドレスを区別するために用いられる。
[176] アクティブ・リスト91はアクティブ・リスト・メモリ1960を含む。アクティブ・リスト・メモリ1960は複数のテーブル・エントリーによって構成されている。テーブル・エントリーはL2キャッシュに記憶されているキャッシュ・ブロックに1つずつ対応している。テーブル・エントリーの読み取りはバス1939(BN2Xアドレス・フォーマット)によってアドレス指定され、テーブル・エントリーの書き込みはレベル2キャッシュ交換アルゴリズム(例えばLRU)によってアドレス指定される。テーブル・エントリーの記憶アドレスは、Least Recently Used (LRU) のような交換ロジックにもとづいた、L2の交換ロジックによって与えられる。各エントリーにおいて、セグメント1908は仮想アドレスのスレッド番号;セグメント1906は仮想アドレスのページ番号;セグメント1902は物理アドレスのページ番号;そしてセグメント1904は、仮想アドレスと物理アドレスの共通のタグ部分である、タグの低位ビット部分である。セグメント1908、セグメント1906、そしてセグメント1904は接合によって一緒に仮想アドレスラベルを構成する。セグメント1902とセグメント1904 は接合によって物理タグアドレスを構成する。
[177] アクティブ・リスト91の内容と比較される仮想アドレスはバス1807に置かれる。アクティブ・リスト91の内容と比較される物理ページ番号はバス907に置かれる。バス1807のアドレスはスレッド番号1988、仮想ページ番号1987、タグ1986の低位ビット、そして指標ビット1985、指標ビットはアクティブ・リスト91のエントリーに対してダイレクト・マップ方式またはセット・アソシエティブ方式によるアドレス指定操作を行なうのに用いられる、を含む。指標ビットはさらにメモリ1960の内容とフルアソシアティブ方式によって比較されるために用いられる。バス1807の内容はバス907から来るため、バス907 は仮想ページ番号、物理ページ番号、L2キャッシュのサブ・ブロック番号1984、そしてBN1Y1983を含むアドレスの全セグメントを含む。
[178] 加えて、アクティブ・リスト91はアンチエイリアシング・テーブル1950をも含む。アンチエイリアシング・テーブル1950は複数のテーブル・エントリーから構成される。各テーブル・エントリーはセグメント1910を含み、それはスレッド番号と仮想ページ番号とBNX2の値を含むセグメント1912を記憶する。
[179] BNX2はL2キャッシュ17に記憶されている仮想ページ中のL2キャッシュ・ブロック番号である。アンチエイリアシング・テーブル1950のロードアドレスはバス1939によって提供される。アンチエイリアシング・テーブル1950の記憶アドレスは交換アルゴリズム(例えばLRU)にもとづいてカスタマイズされた交換ロジックによって提供される。
[180] アンチエイリアシング・テーブルの機能は通常のTLBの機能とは異なる。アンチエイリアシング・テーブルは、対応する同じ物理ページ番号が実行されているときに、仮想ページ番号の2回目の発生と次の仮想ページ番号しか記憶しない。加えて、アンチエイリアシング・テーブルは、コンパレーター1922、1924、1926そして1928;レジスタ1918、1919;マルチプレクサ1932、1934、1936、1938そして1940をも含む。マルチプレクサ1932はコンパレーター1924のアウトプットと、コンパレーター1924のアウトプットがレジスタ1919で記憶されたの後のアウトプットとを選択する。マルチプレクサ1934はアクティブ・リスト1960の物理ページ番号のセグメント1902とバス1909のアウトプットとを選択する。マルチプレクサ1936はレジスタ1918のアウトプットとバス907のインプットを選択する。マルチプレクサ1938は、バス1807から指標ビット1985と、アンチエイリアシング・テーブルのセグメント1912に記憶されている指標ビットとを選択し、バス1939を生成する。マルチプレクサ1940はレジスタ1918のアウトプットもしくはバス1909のインプットを選び、バス18に選ばれた結果を置く。
[181] アドレス指定操作はバス1807の指標ビット1985によって行なわれ、トラック・テーブル91のメモリ1960からの指標ビット・アドレスに対応するテーブル・エントリーを読み出す。セグメント1908、1906、1904そして1902はそれぞれコンパレーター1922、1924、1926へ送られ、バス1807の他のセグメントとバス907の物理ページ番号とに比較される。
[182] コンパレーター1922は、セグメント1908とセグメント1906から読み出されたスレッド番号と仮想アドレスページ番号と、バス1807から送られたスレッド番号1988と仮想アドレスページ番号1987とを比較するように設計される。比較結果はシグナル1901として送り出される。もし比較結果が’同等’であれば、それはTLBヒットの仮想アドレスを示す。
[183] コンパレーター1924は、セグメント1904から読み出されたタグの低位ビット部分と、バス1807から送られた仮想アドレスのタグの低位ビット部分1986とを比較するように設計される。比較結果とレジスタ1911が’AND’操作を行なった後、操作結果がシグナル1903によって送られる。もし結果が’1’であれば。それはキャッシュ・ヒットの仮想アドレスを示す。
[184] 同様にコンパレーター1926は、セグメント1902から読み出されマルチプレクサ1934によって選ばれた物理ページ番号と、バス907にありマルチプレクサ1936によって選ばれた物理ページ番号部分1987とを比較するように設計される。比較結果はシグナル1907から送り出される。もし比較結果が’同等’であれば、それはTLBヒットの物理アドレスを示す。仮想アドレスのタグと物理アドレスのタグの低位ビット1986は同じであるから、マルチプレクサ1932によって選ばれたコンパレーター1924の比較結果とシグナル1907は’AND’操作を行なう。操作結果がシグナル1905から送られる。もし結果が’1’であれば、それはキャッシュ・ヒットの物理アドレスを示す。
[185] 図18と図19において実施形態の操作が図示される。1つのL2キャッシュ・サブ・ブロックがL1キャッシュに充填されるとき、サブ・ブロックの命令がスキャナ12によって吟味される。吟味された命令のタイプが、トラック・テーブル13の命令に対応するテーブル・エントリーに充填される。もし吟味された命令が分岐命令であれば、スキャナ12は分岐ターゲットアドレスを計算する。もし分岐ターゲット命令と分岐ソース命令が隣り合うL2キャッシュ・ブロックの内側にあるならば、分岐ターゲットアドレスが前述実施形態と同じように計算される。もし分岐ターゲットが境界の外ならば、スキャナ12は物理アドレスもしくは仮想アドレスをバス907を経てアクティブ・リスト91に送り、対応するBN2アドレスを生成するためにマッチング操作を行なう。対応するBN2アドレスは、マッチング操作を行いBN1を得るために、メモリ902に送られる。BN1はトラック・テーブル13に記憶される。
[186] 加えて、アクティブ・リスト91の内部ストレージの状態と、バス907とバス1807のインプットに応じて、アクティブ・リスト91はL2キャッシュとアクティブ・リスト自身に対する操作を決定する。スキャナ12によってアウトプットされたバス907は仮想アドレスと物理アドレスのページ番号を比較のために同時に提供できる。物理アドレスのページ番号はトラック・テーブル91に直接送られ、トラック・テーブル91の物理アドレスのページ番号とのマッチング操作が行なわれる。マルチプレクサ1806によって仮想アドレス部分が選ばれた後、選ばれた結果はバス1807を経てトラック・テーブルへ送られ、トラック・テーブル91の仮想アドレスとのマッチング操作が行なわれる。マルチプレクサ1806のもう1つのインプットは、CPU10からバス908を経て送られた分岐ターゲット仮想アドレスである。
[187] まず最初に、スキャナ12はアドレスがページ外にあるかを判定する。判定方式に関しては前述の実施形態を参照されたい。もしアドレスがページ外でなければ、スキャナ12は物理アドレス・ブロック番号1987、タグの低位ビット1986、指標ビット1985をバス907に置き、それらをマッチング操作のためにアクティブ・リスト91に送る。加えて、L2キャッシュ・サブ・ブロック番号1984とL1キャッシュ・ブロック・オフセット1983も、将来CPUで実行されるめに、マルチプレクサ1806を経てバス907に置かれる。指標ビット1985(BNX2)はマルチプレクサ1938によって選ばれ、バス1939に置かれる。バス1939のBN2Xは、バス907とバス1807のアドレスとを整合するために、メモリ1960からテーブル・エントリーを読み出すためのアドレスとして用いられる。
[188] マルチプレクサ1936によって選ばれたバス907の物理ページ番号1987と、マルチプレクサ1934によって選ばれたテーブル・エントリーのセグメント1902の物理ページ番号はコンパレーター1926において比較される。比較結果は1907である。バス1807のタグの低位ビット1986がマルチプレクサ1806によって選択された後、バス1807に置かれた選択結果とテーブル・エントリーのセグメント1904の低位ビットがコンパレーター1924において比較される。マルチプレクサ1932によって選ばれた比較結果と結果1907は’AND’操作にかけられる。’AND’操作結果1905が’1’の場合(それは分岐ターゲット命令がL2キャッシュ17に記憶されていることを示す)、この時、バス1939の指標ビット(すなわちBN2X)と、バス1807のL2キャッシュ・サブ・ブロック1984は接合され、バス903を経てメモリ902とマルチプレクサ901へ送られ、該当するBN1Xをマップする。バス907の取得されたBN1XとBN1Y1983は一緒に、トラック・テーブル13の分岐ソース命令に対応するエントリーへ書き込まれる。
[189] もしメモリ902が対応するBN1Xを持たなければ、バス1807のBN2XとBN2Y(1984、1983)がBN2として接合される。BN2はトラック・テーブル13の分岐ソースに対応するテーブル・エントリーに書き込まれる。トラック・テーブル13のエントリーは、スキャナ12に一時的に記憶されているL1キャッシュのL1キャッシュ・ブロックへ書き込まれているBN1Xと、バス922を経て分岐ソースに対応するBN1Y、とによってポイントされている。このシナリオをシナリオ1と呼ぶことにする。
[190] マッチング結果1905が’0’でマッチング結果1907が’1’のとき、それは分岐ターゲット命令はまだL2キャッシュ17に記憶されていないが、TLBの物理ページ番号はヒットしていることを示す。つまり、物理ページ番号は知られている。このとき、マルチプレクサ1936とマルチプレクサ1940によって選ばれたバス907の物理ページ番号、バス1807のタグの低位ビット1986、そして指標ビット1985が、物理アドレスとして一緒に接合される。接合された物理アドレスが、対応する命令ブロックを読むために、低レベルメモリに送られた後、命令ブロックはL2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。BN2はL2キャッシュ・ブロック番号BN2Xによって生成され、トラック・テーブル13の分岐ソース命令に対応するテーブル・エントリーに書き込まれる。このとき、バス907とバス1807のアドレスはBN2Xによってポイントされたアクティブ・リスト・メモリ160の対応するセグメントに書き込まれる。このシナリオをシナリオ2と呼ぶことにする。
[191] もしスキャナ12が分岐ターゲットアドレスがページ外にあると判定した場合、スキャナ12はスレッド番号1988、仮想アドレスブロック番号1987、タグの低位ビット1986そして指標ビット1985をバス907に置く。バス907のスレッド1988、仮想アドレス・ブロック番号1987、タグの低位ビット1986そして指標ビット1985はマルチプレクサ1806によって選ばれ、バス1807を経てマッチングするためにアクティブ・リスト91に送らる。加えてL2キャッシュ・サブ・ブロック番号1984とL1キャッシュ・ブロック・オフセット1983もバス907に置かれ、マルチプレクサ1806によって選択される。選択された結果は、CPU10が将来使うために、バス1807に置かれる。マッチング結果1903が’1’のとき、それは分岐ターゲット命令がL2キャッシュ17に記憶されている事を示す。バス1939のBN2Xとバス1807のL2キャッシュ・サブ・ブロック番号1984はメモリ902における該当するBN1Xにマップされる。BN1またはBN2(マッピングは無効)はトラック・テーブル13のテーブル・エントリーに記憶される。このシナリオをシナリオ3と呼ぶ。
[192] マッチング結果1903が’0’でマッチング結果1901が’1’のとき、それは分岐ターゲット命令はまだL2キャッシュ17に記憶されていないがTLBの仮想ページ番号はヒットしていることを示す。つまり、仮想ページ番号は知られている。ヒットしたテーブル・エントリーの物理ページ番号セグメント1902は正しい物理ページ番号を記憶する。このとき、マルチプレクサ1934とマルチプレクサ1940によって選ばれたヒットしたテーブル・エントリーの物理ページ番号セグメント1902、バス1807のタグの低位ビット1986、そして指標ビット1985は物理アドレスとして一緒に接合される。接合された物理アドレスが、対応する命令ブロックを読むために、バス18を経て低レベルメモリに送られた後、命令ブロックはL2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。BN2はL2キャッシュ・ブロック番号BN2Xによって生成され、トラック・テーブル13の分岐ソース命令に対応するテーブル・エントリーに書き込まれる。このとき、バス907とバス1807のアドレスはBN2Xによってポイントされたアクティブ・リスト・メモリ160の対応するセグメントに書き込まれる。このシナリオをシナリオ4と呼ぶことにする。
[193] マッチング結果1903が’0’でマッチング結果1901が’0’のとき、それは分岐ターゲット命令はまだL2キャッシュ17に記憶されていない、そしてアクティブ・リスト・メモリ1960は対応する仮想ページ番号を持たないことを示す。この時、コンパレーター1924の比較結果(タグの低位ビットと比べる)は一時的にレジスタ1919に記憶され、そしてバス18で読み出されたテーブル・エントリーの物理ページ番号はCPU10で将来用いられるためにレジスタ1918に一時的に記憶される。該当するテーブル・エントリーはアンチエイリアシング・テーブル1950の中からバス1939を経て読み出される。スレッド番号とテーブル・エントリーの仮想ページ番号セグメント1910は、バス1807のスレッド番号1988と仮想ページ番号1987に対してコンパレーター1928によて比較される。比較結果がヒットであれば、テーブル・エントリーのL2キャッシュ・ブロック番号(BN2X)のセグメント1912がバス1911を経て、マルチプレクサー1938に送られ、アクティブ・リスト・メモリ1960をポイントする新しい指標値1939として選ばれる。新しい指標値によって、マルチプレクサ1934によって選ばれたアクティブ・リスト・メモリ1960のテーブル・エントリーから読み出された物理ページ番号セグメント1902が、マルチプレクサ1936によって選ばれレジスタ1918に一時的に記憶された物理ページ番号と、比較される。比較結果1907と、マルチプレクサ1932によって選ばれレジスタ1919に一時的に記憶された比較結果が、’AND’操作を行なう。もし結果1905が’1’ならば、それはアンチエイリアシング・テーブル1950から読み出された仮想ページ番号が、アクティブ・リスト・メモリ1960に記憶された対応する物理ページ番号を持つことを示す。物理ページ番号の同じテーブル・エントリーの中のタグの低位ビット1904と、マッチングされるべきアドレスの中のタグの低位ビット1904は同じであるので、それは命令ブロックがL2キャッシュの中にあることを示す。この時点で、バス1939のBN2Xがバス903を経てメモリ902へBN1Xとマッチングするために送られ、そして記憶されるべくトラック・テーブル13へ送られる。従ってエイリアシングとキャッシュ汚染を回避する。このシナリオをシナリオ5と呼ぶ。
[194] 比較結果1905が’0’であるとき、それはバス1807から送られた分岐ターゲット仮想アドレスに対応する命令を含む命令ブロックがまだL2キャッシュ17に記憶されていないことを示す。これをキャッシュミスと呼ぶ。このシナリオをシナリオ6と呼ぶ。このとき、マルチプレクサ1936とマルチプレクサ1940によって選ばれ一時的にレジスタ1918に記録された物理ページ番号、バス1807のタグの低位ビット1986と指標ビット1985が一緒に物理アドレスとして接合される。接合された物理アドレスが該当する命令ブロックを読むために低レベルメモリに送られた後、命令ブロックは、L2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。
[195] 同時に、スレッド番号1988、仮想ページ番号1987、バス1807のタグの低位ビット1986、そしてマルチプレクサ1934とマルチプレクサ1940によって選ばれ一時的にレジスタ1918に記憶された物理ページ番号が、アクティブ・リスト・メモリ1960のL2メモリ・ブロックに対応するテーブル・エントリーのセグメント1908、1906、1904、1902にそれぞれ書き込まれる。それと同時に、L2メモリ・ブロック・アドレスBN2Xはバス903に置かれ、BN1Xにマッチングするためにメモリ902に送られる。結果BN1かBN2はトラック・テーブル13に送られ、トラック・テーブル13に記憶される。
[196] あるいは、アンチエイリアシング・テーブルの中身が、バス1807の仮想ページ番号とコンパレーター1928において比較される。もし比較結果がミスであれば、それはバス1807の仮想ページ番号に対応する物理ページ番号がアクティブ・リスト・メモリ1960に記憶されていないことを示す。それは伝統的なキャッシュ・システムのTLBミスと同等である。
このシナリオをシナリオ7と呼ぶ。このとき、CPUはTLBミス例外を生成する。オペレーティング・システムは現行テクノロジーにもとづいて例外を取り扱う。オペレーティング・システムはバス1807の仮想アドレスに対応する物理ページ番号を探し、TLB充填操作を行なう。バス1909からの物理ページ番号はアクティブ・リスト91へ送られ、マルチプレクサ1934によって選択される。選ばれた結果は、マルチプレクサ1936によって選ばれ一時的にレジスタ1918に記憶された物理ページ番号と比較される。比較結果1907と、マルチプレクサ1932によって選ばれレジスタ1919に一時的に記録された比較結果(タグの低位ビットと比べる)は’AND’操作を行い、比較結果1905を生成する。もし結果が’1’であれば、それは複数のスレッド番号と仮想ページ番号が同じ物理ページ番号にマップされること(すなわち、エイリアシング・シナリオ)を示す。これをシナリオ7と呼ぶ。このとき、バス1807のスレッド番号1988と仮想ページ番号1987は、アンチエイリアシング・テーブル1950で交換ロジックによって特定されたテーブル・エントリーのセグメント1910に書き込まれる。
マルチプレクサ1938によって選ばれたバス1807の指標セグメントBNX2は、アンチエイリアシング・テーブル1950のセグメント1912にバス1939を経て書き込まれる。同時にバス1939の指標セグメント1985(BNX2)とバス1807のL2キャッシュ・サブ・ブロック番号1984は一緒に接合され、バス903を経てメモリ902へ送られる。前述の実施形態を参考に、BN1Xとのマッチングの後、結果がトラック・テーブル13に書き込まれる。
[197] 比較結果1905が’0’であるとき、それはエイリアシングが無いこと、しかしバス1807から送られた分岐ターゲット仮想アドレスに対応する命令を含む命令ブロックが、まだL2キャッシュ17に記憶されていないことを示す。それはキャッシュ・ミスと同様である。このシナリオをシナリオ8と呼ぶ。このとき、バス1909を経たマルチプレクサ1934とマルチプレクサ1940によって選ばれた物理ページ番号、バス1807のタグの低位ビット1986そして指標ビット1985は一緒に物理アドレスとして接合される。接合された物理アドレスが該当する命令ブロックを読むために低レベルメモリへ送られた後、命令ブロックは、L2キャッシュ交換ロジックによって特定されたL2キャッシュ17のL2キャッシュ・ブロックに記憶される。同時に、スレッド番号1988、仮想ページ番号1987、バス1807のタグの低位ビット1986、そしてマルチプレクサ1934とマルチプレクサ1940によって選ばれたバス1919の物理ページ番号が、アクティブ・リスト・メモリ1960のL2メモリ・ブロックに対応するテーブル・エントリーのセグメント1908、1906、1904、1902にそれぞれ書き込まれる。それと同時に、L2メモリ・ブロック・アドレスBN2Xとバス1807のL2キャッシュ・サブ・ブロック番号1984は接合され、接合結果はバス903に置かれ、BN1Xとマッチングするためにメモリ902へ送られる。結果はトラック・テーブル13に送られ、トラック・テーブル13に記憶される。
[198] 上記8つのシナリオは、分岐ターゲットアドレスと分岐ソースが隣接するL2キャッシュ・ブロックに無いときに、分岐ターゲットアドレスを生成するために、スキャナ12がL1キャッシュに充填された命令をスキャンするシナリオを示している。シナリオ1−2は物理アドレス・マッチングのシナリオであり、そしてシナリオ3−8は仮想アドレス・マッチングのシナリオである。
[199] トラッカー15のリード・ポインタ19はトラック・テーブル13のリードポートを制御して、バス30の1つのテーブル・エントリーの内容を読み出す。テーブル・エントリーが間接分岐タイプであるとき、リード・ポインタ19はそのテーブル・エントリーに留まって待つ。このとき、CPU10によって生成されバス908とマルチプレクサ1806を経た分岐ターゲット仮想アドレスがバス1807に置かれ、マッチング操作のためにアクティブ・リスト91へ送られる。マッチング操作は上記シナリオ3−8と同様である。違いは該当する分岐ターゲット命令がまさに実行されようとしている点である。もしアクティブ・リスト91のマッチング操作で得られたBN2がメモリ902にてマッチング操作によって有効なBN1X分岐ターゲットを得られなければ(すなわち、分岐ターゲット命令がL1キャッシュに記憶されていない)、分岐ターゲットを含むL2キャッシュ・ブロックはすぐにL1キャッシュに充填され、対応するL1キャッシュ・ブロック・アドレスがCPU10で実行されるためにトラック・テーブル13に充填される。BN1Xはまた、後続するマッチング操作のために、BN2によってポイントされたメモリ902のテーブル・エントリーに記憶される。L2キャッシュのキャッシュ・サブ・ブロックがL1キャッシュに充填されるときのプロセスは上記プロセスと同様である。仮想ページ番号、タグの低位ビット、L2キャッシュ・サブ・ブロックに対応する物理ページ番号が、BN2によってポイントされたアクティブ・リスト1960のテーブル・エントリーによって、スキャナ12にバス1801とバス1803を経て提供される。他のセグメント(例えば、指標ビット)はバス908によってスキャナ12に直接提供される(図18には示されていない)。
[200] バス30によって読み出されたトラック・テーブル13の命令が直接分岐タイプであるとき(アドレス・フォーマットはBN2)、該当する命令は少なくともL2キャッシュに記憶されている。従って、BN2はバス30とマルチプレクサ901を経て直接メモリ902へ送られる(アクティブ・リスト91を抜きにして)。このプロセスは上記実施形態のBN1マッチング操作を参照する。もしアクティブ・リスト91におけるマッチングによって得られたBN2が、マッチング操作によってメモリ902にて有効なBN1X 分岐ターゲットを得られないならば(すなわち、分岐ターゲット命令がL1キャッシュに記憶されていない)、分岐ターゲットを含むL2キャッシュ・ブロックがL1キャッシュに即座に充填される。L2キャッシュ・ブロックを充填するプロセスは上記プロセスと同様である。仮想ページ番号、タグの低位ビット、L2キャッシュ・サブ・ブロックに対応する物理ページ番号が、BN2によってポイントされたアクティブ・リスト1960のテーブル・エントリーによって、スキャナ12にバス1801とバス1803を経て提供される。他のセグメント(例えば、指標ビット)はバス908によってスキャナ12に直接提供される(図18には示されていない)。
[201] 命令キャッシュは図18と図19に示されている。上記技術的解決とアクティブ・リスト91はデータキャッシュに対しても適用することができる。主な違いはスキャナ12がデータキャッシュのデータエンジンに取って代わられる点である。トラック・テーブルからデータキャッシュ・アドレスDBN1が読み出されたとき、アドレスはCPU10にデータを提供するためにL1データキャッシュを制御し、DBN1がデータエンジンに送られる。投機的アドレスがDBN1をストライド(読み出されたエントリーはストライドを含む)に加えることにより得られる。投機的ロード・アドレスまたは記憶アドレスが境界外であるとき、データエンジンは対応する物理アドレスもしくは/それと仮想アドレスを、マッチング操作を行なうために、アクティブ・リスト91に送る。図18と図19における実施形態と同じオペレーションがアクティブ・リストで行なわれDBN2を生成する。生成されたDBN2はDBN1とマッチングするためにメモリ902へ送られる。
それから、DBN1あるいはDBN2がトラック・テーブルに送られ、読み出されたエントリーの中に記憶される。同様のプロセスはここでは繰り返さない。
[202] 図20は開示された実施形態と整合する例示的な命令プロセスシステムの構造概略図である。図20に示されるように、命令プロセスシステムはCPU10、アクティブ・リスト91、スキャナ12、コリレーション・テーブル14、トラッカー15、メモリ902、レベル1命令キャッシュ16、レベル1データキャッシュ116、そしてデータエンジン112を含む。なお、L2キャッシュ217は命令とデータのための共有L2キャッシュである。共有L2キャッシュは命令もしくはデータを記憶する。それに応じて、アクティブ・リスト91はL2キャッシュ217のL2キャッシュ・ブロックに対応するブロック・アドレスを記憶し、テーブル・エントリーは同じBN2XによってポイントされるL2キャッシュ217のL2キャッシュ・ブロックに一対一に対応する。スキャナ12によって出力された分岐ターゲットアドレスとデータエンジン112によって出力された予測データアドレスはマッチング操作のためにアクティブ・リスト91に送られる可能性があるため、3インプット・マルチプレクサ1112が2番目のマルチプレクサ912に取って代わる。スキャナ12によって出力されたBNとデータエンジン112によって出力されたDBNはメモリ902もしくはトラック・テーブル13に送られる可能性があるため、5インプット・マルチプレクサ1105が4インプット・マルチプレクサ901に取って代わり、3インプット・マルチプレクサ1111が一番目の2インプット・マルチプレクサ911に取って代わる。
[203] アクティブ・リスト91は図18と図19で記された実施形態のアクティブ・リスト91と同じである。アクティブ・リスト91は仮想アドレスを物理アドレスに変換するTLBの機能を含む。なお、図18と図19で記された実施形態におけるTLBの実装がここで用いられるが、前述実施形態のどのTLB実装でも、構造を調整し用ることができる。加えて、表記の簡便にため、図20のバス1120は図18のバス1801とバス1803を表す。
[204] この実施形態において、CPU10が不正確な予測データアドレスとともに間接分岐命令とデータアクセス命令を実行するとき、分岐ターゲットアドレスもしくはデータアドレスが、マッチング操作を行なうために、バス908とマルチプレクサ1112を経てアクティブ・リスト91に送られ、後続するオペレーションは上記実施形態と同様である。しかし、バス907を経てスキャナ12より送られたBN2X、もしくはバス1107を経てデータエンジン112から送られたDBN2Xにもとづいて、アクティブ・リスト91は該当するL2命令ブロックアドレスまたはL2データブロックアドレスをスキャナ12もしくはデータエンジン112にバス1120を経て出力する。これに加えて、命令に関わる全てのオペレーションは図18と図19におけるオペレーションと同様であり、全てのデータに関わるオペレーションは図13、図18または図19のオペレーションと同様である。特に、データエンジン112には決定ロジックが含まれている。決定ロジックはアドレスがページ外にあるかを決定する。予測データアドレスが現在のデータアドレスの同じL2データブロックの中にあるとき、もしくは現在のデータアドレスのL2データブロックの前のデータブロックまたは次のデータブロックの中にあるとき、プロセスは図13のプロセスと同様である。予測データアドレスが上記の範囲外であるとき、データエンジン112 は、対応する仮想アドレス/物理アドレスを読み出すために、データアドレスに対応するDBN2Xをバス1107を経てアクティブ・リスト91へ出力する。該当する仮想アドレス/物理アドレスはデータエンジン112にバス1120を経て送り返され、後続するオペレーションは図19の実施形態と同様である。プロセスは図19に参照でき、ここでは繰り返さない。
[205] 加えて、トラック・テーブル13の全てのデータポイントはDBN1を含む。しかし、トラック・テーブル13のデータ・ポイントは図20の構造を調整することによりDBN1もしくはDBN2を含む。例えば、予測データアドレスに対応するデータがL2データキャッシュに記憶されていて、しかし予測データアドレスに対応するデータがL1データキャッシュに記憶されていないとき、該当するDBN2がトラック・ポイントの中身としてデータポイントに書き込まれる。トラッカー15のリード・ポインタ19がデータポイントをポイントしているとき、L2データキャッシュ’から読み出された該当するデータブロックがL1データキャッシュに充填され、該当するデータがバイパスによってCPU10に送られる。プロセスの詳細は前述実施形態に参照でき、ここでは繰り返さない。
[206] 分岐ターゲット命令アドレス(もしくは次のデータアドレス)が、分岐ソース命令(もしくは現在のデータ)を含むメモリ・ブロックに置かれているか否かを決定する方法は沢山ある。基本的に、図12に示されるように、分岐距離のBN2Yに対応する部分に分岐ソース命令のBN2Yを加えた加算結果を得る。そして得られた加算結果のBN2Yに対応する部分と他の部分の境界をCH1と呼ぶ。分岐距離が正であるとき、もしBN2Yに対応する部分の外側の全てのビットが分岐距離において’0’であり、加算からのキャリーがCH1において’1’ならば、分岐ターゲット命令は分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にある。
[207] しかしながら、もしBN2Yに対応する部分の外側の分岐距離の最低ビットが’1’ なら、分岐ターゲット命令は、分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にある可能性がある。例えば、BN2Yに対応する部分の外側の分岐距離の最低ビットが’1’で全ての他のビットが’0’、そしてCH1においてキャリーが無いとき、分岐ターゲット命令はまた分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にある。従って、CH1におけるキャリー出力とBN2Yに対応する部分の外側の分岐距離の最低ビットは一緒に、分岐ターゲット命令が分岐ソースを含むL2命令ブロックの次のL2命令ブロックの中にあるか否かを決定する。この方法は負の分岐距離の場合にも適用できる。
[208] さらに、この方法はもっと階層的なキャッシュシステムに対しても拡張できる。
あるレベルのキャッシュ(例えばBN1Y、BN2Y..)の分岐ソース命令に対応するキャッシュ・ブロック・オフセットの外側の最低ビットと、分岐距離の該当するビットの合計が、分岐ターゲット命令が、分岐ソース命令を含むレベル(例えばL2)命令ブロックの次もしくは前の命令ブロックの中にあるか否かを決定する。同様に、あるレベルのキャッシュ(例えばDBN1Y、DBN2Y..)のデータ自身に対応するキャッシュ・ブロック・オフセットの外側の最低ビットとストライドの合計が、次のデータが、現在のデータを含むレベル(例えばL2)データブロックの次もしくは前のデータ・ブロックに中にあるか否かを決定する。
[209] スキャナは高レベルキャッシュに充填された命令から命令タイプを抜き出し、分岐命令の分岐ターゲットアドレスを計算する。つまり、コントロール・フロー情報がプログラムから抜き出される。抽出された該当するコントロール・フロー情報は少なくとも命令タイプを含む。分岐命令においては、抽出されたコントロール・フロー情報は分岐ターゲット命令アドレスをも含む。分岐ターゲット命令アドレスはアクティブ・リストのトラック・アドレス(キャッシュ・アドレス)にマップされる。コントロール・フロー情報はトラック・テーブルにタイプとトラック・アドレス・モードによって記憶される。トラック・テーブルの分岐ポイントは分岐ソース命令のトラック・アドレスに対応する。分岐ポイントは分岐ターゲット命令のトラック・アドレスを記憶する。さらに、分岐ソース命令の次の命令の場所はトラック・テーブルの組織構造の中に暗に含まれている。従って、分岐ソース命令の後続命令の二つの可能な分かれ目が構成される。
[210] トラッカーのリード・ポインタによってポイントされたトラック・ポイントの命令タイプが非分岐命令であるとき、リード・ポインタは順次次のトラック・ポイントに移動する;
トラッカーのリード・ポインタによってポイントされたトラック・ポイントの命令タイプが無条件分岐命令であるとき、リード・ポインタは分岐ターゲット・トラック・ポイントへ移動する;
トラッカーのリード・ポインタによってポイントされたトラック・ポイントの命令タイプが条件付き分岐命令であるとき、CPUによって生成されたTAKENシグナルにもとづいて、リード・ポインタは次のトラック・ポイントまたは分岐ターゲット・トラック・ポイントへ移動する。トラッカーのリード・ポインタはどの分岐ポイントからでもスタートできる。トラック・ポイント・タイプおよびまたはCPUによって実行された分岐ポイントの実行状況にもとづいて、リード・ポインタは、次の連続した命令の最初の分岐ポイント、もしくは分岐ターゲット命令と後続する命令の最初の分岐ポイント、へ到達する。従ってトラック・テーブルでのコントロール・フロー情報は二分木の形で存在し、各分岐ポイントが分岐命令に対応する。二分木は完全二分木であり、隣接する分岐ポイント間の径路情報を含み、各分岐ポイントから後続の分岐ポイントまでその2つの又を経て到達できる。
[211] 加えて、図13のメモリ902は図9のメモリ902と同様であり、メモリ902の各行はL1データブロックのDBN1XとL2データブロックのDBN2Xとの間の対応関係を含んでいる。メモリ902の各行はまた、各DBN2Xの前のL2データブロックもしくは次のL2データブロックのアクティブ・リスト91における位置情報を含む。よって、次のデータアドレスが、現在のデータアドレスに対応するL2データブロックの前のデータブロックもしくは次のデータブロックの中にあるとき、現在のデータアドレスに対応するL2データブロックのブロック番号が、メモリ902でアドレス指定操作を行なうためにアドレス指定アドレスとして用いられ、メモリ902に記憶されている前のもしくは次のデータブロック番号を読み出す。これによって、アクティブ・リストにおけるマッチング操作の数を削減する。
[212] さらに、アクティブ・リストが、前のメモリ・ブロック(命令ブロックもしくはデータブロック)そして連続したアドレスの次のメモリ・ブロックの位置情報を記憶しているとき、位置情報にもとづいて、前のメモリ・ブロック(命令ブロックもしくはデータブロック)内の分岐ターゲット命令もしくは次のデータ、そして分岐ソース命令もしくは現在のデータを含むメモリ・ブロックの次のメモリ・ブロックが見つけられる。分岐ターゲット命令または、さらに遠くの場所に位置している次のデータを見つけるために、同様の方法が何回か繰り返される。これによって、アクティブ・リストにおけるマッチング操作の数を削減する。
[213] 例えば、図9に示されるように、分岐ターゲット命令が分岐ソース命令を含む命令ブロックの後続する2番目の命令ブロックの中にあるということを、加算器の計算結果にもとづいて見い出した場合(キャリー出力の場合)、スキャナはアクティブ・リストにてアドレス指定操作を行なうために分岐ソース命令に対応するBN2Xを出力し、そして次の命令ブロックに対応するBN2Xを読み出す。
[214] それから、次の命令ブロックに対応するBN2Xにもとづいてアドレス指定操作がアクティブ・リストにて行なわれ、次の命令ブロックの次の命令ブロックに対応するBN2Xが読み出される。すなわち、分岐ソース命令を含む命令ブロックの後続する2番目の命令ブロックに対応するBN2Xが読み出される。したがって、アクティブ・リストにおけるマッチング操作が、アドレス指定操作を2回行うことによって回避される。分岐ターゲットが分岐ソースよりもずっと離れているとき、各命令ブロックの前の命令ブロックもしくは次の命令ブロックの場所情報が存在しかつ有効である限り、分岐ターゲット命令に対応するBN2Xはアドレス指定操作を複数回行なうことでアクティブ・リストより見つけられる。
[215] より多くの階層のキャッシュもしくはデータキャッシュにおいて、同様の方法を用いることができ、ここでは繰り返さない。加えて、TLBモジュールあるいは仮想アドレスから物理アドレスへの変換を含むアクティブ・リストに関しても、遠くのページ(例えば、前の前のページ、もしくは次の次のページ)を見つけるために同じ方法を用いることができる。具体的なオペレーションはここでは繰り返さない。
[216] 間接分岐命令において、分岐ターゲット命令アドレスはCPUが間接分岐命令を実行する時に生成される。そして、分岐ターゲット命令アドレスはアクティブ・リストに送られ、アクティブ・リストにおいてトラック・アドレスに変換される。もしくは、分岐ターゲット命令アドレスはTLBによって変換され、そしてアクティブ・リストにおいてトラック・アドレスに変換される。異なるフォーマットのトラック・アドレスは異なるレベルのキャッシュと対応している、そしてBNXは該当するレベルキャッシュにおけるメモリ・ブロックに対応し、BNYはメモリ・ブロックにおけるメモリ・セルに対応しているから、トラック・アドレスはキャッシュアドレスである。つまり、トラック・アドレスに応じて、該当する命令が該当するレベルのメモリから直接見いだされ、タグマッチングを回避する。しかしながら、別の特別モジュールがシステムに追加されうる。特別モジュールは間接分岐ターゲット命令アドレスを生成する。
[217] 例えば、もし間接分岐ターゲットアドレスがレジスタ値と即値によって生成されるなら、特別モジュールは該当するレジスタファイルのレジスタ値をCPUから取得し、スキャナは抽出された間接分岐命令の即値を特別モジュールに送る。特別モジュールは間接分岐ターゲットアドレスを、即値にレジスタ値を加えることにより、得る。あるいは、特別モジュールはレジスタファイルのコピーを含む。CPUの中のレジスタファイルのレジスタが更新されたとき、レジスタファイルのコピーの中の対応するレジスタも同時に更新される。従って、もしスキャナが抽出された間接分岐命令の即値を特別モジュールに送るなら、間接分岐ターゲットアドレスが計算される。よって、全ての分岐命令の分岐ターゲットアドレスはCPUによって生成されない。
[218] 分岐ターゲット命令または次のデータが置かれているキャッシュの場所のレベルの違いに応じて、トラック・テーブルのトラック・ポイントの中身に含まれているトラックアドレスが異なる。分岐ポイントを例にとると、分岐ターゲット命令がL1キャッシュにあるとき、分岐ポイントに含まれるトラックアドレスはBN1である;
分岐ターゲット命令がL2キャッシュにあるとき、分岐ポイントに含まれるトラックアドレスはBN2である;
分岐ターゲット命令が他のレベルのキャッシュにあるとき、トラックアドレスは同じパターンをたどる;
データポイントのトラックアドレスも分岐ポイントのトラックアドレスと同様である。
[219] 加えて、分岐ターゲット命令または次のデータは、少なくとも最下位レベルのキャッシュには前もって充填されている。従って、トラックポイントはキャッシュに直接宛てられるトラックアドレスのみを含み、しかしメイン・メモリ・アドレス(例えば命令アドレスPCまたはデータアドレス)を含まない。スキャナによって出力されたアドレスはトラックアドレスもしくは命令アドレスでありうる、そしてデータエンジンによって出力されたアドレスもトラックアドレスもしくは命令アドレスでありうる。図9で示されたように、スキャナ12によって出力されたアドレスはバス907を経たBN1、BN2または分岐ターゲット命令アドレスである。
[220] 具体的には、分岐ターゲット命令と分岐ソース命令が同じL1命令ブロックにあるとき、スキャナ12は直接、分岐ターゲット命令に対応するBN1をバス907を経て出力し、BN1はトラック・テーブル13に書き込まれる。分岐ターゲット命令と分岐ソース命令が同じL2命令ブロックの異なるL1命令ブロックにあるとき、スキャナ12はバス907を経てBN2を出力する。BN2はメモリ902にて分岐ターゲット命令に対応するBN1に変換され、BN1はトラック・テーブル13に書き込まれる。分岐ターゲット命令が分岐ソース命令を含むL2命令ブロックの前のL2命令ブロックもしくは次のL2命令ブロックにあるとき、スキャナ12はバス907を経てBN2を出力する。前のL2命令ブロックもしくは次のL2命令ブロックのBN2Xはアクティブ・リスト91のBN2を用いて読み出される。そして、分岐ターゲット命令に対応するBN1が取得され、上記方法によりトラック・テーブル13に書き込まれる。他の状況においては、スキャナ12は計算によって取得された分岐ターゲット命令アドレスを、マッチング操作を行なうために、アクティブ・リスト91にバス907を経て出力する。そして、分岐ターゲット命令に対応するBN1が取得され、上記方法によりトラック・テーブル13に書き込まれる。
[221] 従って、スキャナ12が分岐ターゲット命令の場所を決定した後、スキャナ12はアドレスタイプ番号を生成できる。アドレスタイプ番号はバス907のアドレスのアドレスタイプを表すことに用いられ、それによって該当するモジュールが後続するオペレーションを行なうのを制御する。例えば、上記4つの状況は2桁のアドレスタイプ番号で表現できる。バス907がトラック・アドレスもしくは分岐ターゲット・アドレスを出力するとき、バス907はアドレスタイプ番号もトラック・テーブル13、アクティブ・リスト91、メモリ902そして関係するモジュールに出力する。よって、異なるタイプのアドレスが同じバス907を経て送信され、バスの総数を削減することができる。
[222] もっとビット数の多いアドレスタイプ番号はもっと多くの状況を表現できる。
例えば、図17に示されるように、BN1とBN2以外にも(3つの状況を含む: 同じL2命令ブロック内、前のL2命令ブロック内、次のL2命令ブロック内)、バス1506のアドレス・フォーマットは仮想アドレスまたは物理アドレスでありうる。従って、全部で6つの状況がある。3ビットのアドレスタイプ番号は6つの状況を表現できる。より多くのビットのアドレスタイプ番号はより多くの階層のキャッシュ(すなわち、より多くのトラック・アドレス)、データ・エンジンによって出力されたアドレス、などなどに適用できる。詳細はここでは繰り返さない。
[223] 加えて、分岐ターゲット命令アドレスもしくは次のデータのアドレスが、分岐ソース命令アドレスもしくは現在のデータのアドレスに対応する同じページ内にあるとき、TLB変換を実装するためにもっと柔軟な方法を用いることができる。図15に示されるように、アクティブ・リスト91は分岐ソース命令の物理アドレスと仮想アドレスをバス1505とバス1504を経てスキャナ12へそれぞれ出力する。それからスキャナ12は、分岐ターゲット命令の仮想アドレスと物理アドレスを、出力された分岐ソースアドレスの物理アドレスと仮想アドレスを用いて、計算する。
[224] スキャナ12が分岐ターゲットアドレスの物理アドレスを計算するとき、もしスキャナ12が分岐ターゲット命令アドレスと分岐ソースアドレスが同じページ内にあることを見つけた場合、スキャナ12は分岐ターゲット命令の物理アドレスをバス1506を経て出力する。マルチプレクサ1508とバス1509を経た分岐ターゲット命令の物理アドレスはアクティブ・リスト91へ送られ、アクティブ・リスト91において記憶された物理アドレスとマッチングされる。後続するオペレーションは上記実施形態と一致する。
[225] もしスキャナ12が、分岐ターゲット命令アドレスが分岐ソースアドレスに対応するページの前もしくは次のページ内にあることを見つけた場合、スキャナ12は、アクティブ・リスト91から送られた分岐ターゲット命令の物理アドレスの物理アドレスページ番号をバス1512を経て出力する。物理アドレスページ番号が選ばれた後、選ばれたページ番号はTLB1301へ送られ、TLB1301に記憶された物理アドレスページ番号とマッチングされる。
[226] もしマッチングが成功の場合、メモリ1510もしくはメモリ1511に記憶されている、マッチしたページの前もしくは後のページを含む行番号はアドレス指定アドレスであり、前もしくは次のページを含む行はTLB1301におけるアドレスによって見つけられる。物理アドレスページ番号は行から読み取られ、バス1507を経て送り出される。物理アドレスページ番号がマルチプレクサ1508によって選ばれた後、選ばれた物理アドレスページ番号とバス1506を経てスキャナ12によって出力されたタグの低位ビットは融合される。融合された結果は物理アドレスを構成する。物理アドレスはバス1509を経てアクティブ・リスト91へ送られ、アクティブ・リスト91に記憶された物理アドレスとマッチングされ、そして後続するオペレーションは上記実施形態と一致する。もしマッチングが不成功の場合、後続するオペレーション(例えば、充填操作)は上記実施形態と一致する。
[227] もしスキャナ12が、分岐ターゲット命令アドレスは分岐ソースアドレスに対応するページ内に無い、そして分岐ソースアドレスに対応するページの前もしくは次のページ内にも無い、ということを発見したとき、スキャナ12は計算によって得た分岐ターゲット命令の仮想アドレスの仮想ページ番号を、バス1512を経てTLB1301に出力する。分岐ターゲット命令の取得された仮想アドレスの選ばれた仮想ページ番号は、TLB1301に記憶された仮想ページ番号とマッチングする。後続するオペレーションは上記実施形態と一致する。
[228] 図19に示されるように、アンチエイジング・テーブル1950のセグメント1910は仮想ページ番号を記憶する。仮想ページ番号と、セグメント1912のBN2Xにポイントされたアクティブ・リストの行の物理アドレスページ番号は併せて仮想と物理アドレスのペアを構成し(仮想ページ番号とアクティブ・リストの行の物理アドレスページ番号も、併せて仮想と物理アドレスのペアを構成し、よって複数の仮想アドレスが1つの物理アドレスページに対応する)、よってアンチエイジング・テーブル1950を含むアクティブ・リスト91はTLBの役割を果たすことができる。さらに、セグメント1910は対応するタグの低位ビット(セグメント1904の該当するタグの低位ビットに対応する)をも記憶し、L2メモリブロックの仮想アドレスを構成する。一度マッチングがアンチエイジング・テーブル1950にて成功ならば、該当するL2命令ブロックは直接発見され、図19で示されたいくつかの操作、例えば物理アドレスページ番号を読み出し、L2命令ブロックの物理アドレスを構成し、そしてマッチングする、などを省くことができる。
[229] 図20で示されるように、L2キャッシュ21は命令とデータによって共有されることができ、それぞれが個別のL1キャッシュ(L1命令キャッシュ116とL1データキャッシュ16)を持つ。このとき、アクティブ・リスト91は、L2キャッシュの様々なメモリブロックに含まれている命令キャッシュ・ブロックあるいはデータキャッシュ・ブロックのブロック・アドレスを記憶する。L2キャッシュ217において、命令とデータは共にBN2フォーマットのトラック・アドレスを用いる。メモリ902は、BN2のL1キャッシュ・トラック・アドレス(BN1もしくはDBN1)への変換関係を記憶するから、トラック・テーブル13のトラック・ポイントに含まれるアドレスはBN1、DBN1もしくはBN2である。BN2は前述の方法によってBN1もしくはDBN1へ変換される。もっと多くの階層のキャッシュに関しても、どれだけ多くのレベルの低レベル・キャッシュが命令とデータのための共有キャッシュであるかに関わらず、同じ方法がトラック・アドレスを決定するのに用いられ、低レベルキャッシュ・トラック・アドレスが対応する高レベルキャッシュ・トラック・アドレスに変換されうる。
[230] 開示されたシステムと方法は様々なプロセッサ関連アプリケーション、例えば汎用プロセッサ、専用プロセッサ、システム・オン・チップ(SOC)アプリケーション、特定用途向け集積回路(ASIC)アプリケーション、そして他のコンピューティング・システムにて用いることができる。例えば、開示された装置と方法は高性能プロセッサにおいてシステム全体の効率をあげるために用いることができる。
[231] ここで開示された実施形態はあくまで例示的であり、この開示の範囲を限定しない。この発明の精神と範囲から離れることなく、開示された実施形態に対する他の修正、等価な置き換え、あるいは改善はこの分野に精通した者には自明であり、ここの開示の範囲に含まれることが意図されている。
[232] すべてのクレームまた仕様の範囲を制限することなく、開示された実施形態の産業上の利用可能性と一定の効果の例が、例示目的でここに記載される。
開示された実施形態の技術的解決法に対する様々な代替、修正、または等価な置き換えはこの分野に精通した者には自明であり、この開示に含むことができる。
[233] 開示されたシステムと方法は、パイプライン・プロセッサの分岐命令処理に対して根本的解決を提供する。開示されたシステムと方法は、分岐ターゲット命令のアドレスを、対応する分岐ポイントの実行に先立って取得し、そして様々な分岐決定ロジックによる計らいによって、不正確に予測された分岐決定による効率損失を取り除く。
[234] 開示された装置と方法はまた、様々なプロセッサ関連アプリケーション、例えば汎用プロセッサ、専用プロセッサ、システム・オン・チップ(SOC)アプリケーション、特定用途向け集積回路(ASIC)アプリケーション、そして他のコンピューティング・システムにて用いることができる。例えば、開示された装置と方法は高性能プロセッサにおいて、パイプラインの効率およびシステム全体の効率をあげるために用いることができる。