【文献】
黒澤泰彦、渡辺幸男、田胡治之,次世代プロセッサ Cell Broadband Engine,東芝レビュー,日本,株式会社東芝,2006年 6月,Vol.61 No.6 ,第9-15ページ
(58)【調査した分野】(Int.Cl.,DB名)
命令ストリームのフェッチアドレスを提供するプロセッサコアであって、前記命令ストリームは1つ以上の命令を含み、前記フェッチアドレスは、タグ及びインデックスを含むプロセッサコアと;
前記プロセッサコアから前記フェッチアドレスを受信する命令ループキャッシュと
を具えたマイクロプロセッサであって、
前記命令ループキャッシュは、
前記プロセッサコアに結合され、第1所定数のキャッシュエントリを記憶するキャッシュアレイであって、前記キャッシュエントリの各々がタグ識別番号(ID)を含むキャッシュアレイと、
前記プロセッサコア及び前記キャッシュアレイに結合されたタグ記憶部とを具え、
前記キャッシュアレイは、前記フェッチアドレスの前記インデックスが示す前記キャッシュエントリの前記タグIDを出力し、
前記タグ記憶部は、第2所定数のタグ値を記憶して、前記キャッシュアレイが出力する前記タグIDが示す前記タグ値を出力するように構成され、
前記命令ループキャッシュは、前記フェッチアドレスの前記タグと、前記タグ記憶部が出力する前記タグ値とのビット単位の比較に基づいて、キャッシュヒットが発生するかキャッシュミスが発生するかを判定する
ことを特徴とするマイクロプロセッサ。
前記プロセッサコアは、後方分岐命令を取得する毎に、当該後方分岐命令に関係する少なくとも1つの前記タグ値を、前記命令ループキャッシュに送信することを特徴とする請求項1に記載のマイクロプロセッサ。
前記後方分岐命令に関係する前記少なくとも1つのタグ値が、前記後方分岐命令のターゲットアドレスのタグから始まる連続したタグ値であることを特徴とする請求項2に記載のマイクロプロセッサ。
前記プロセッサコアは、ヒント命令をフェッチして認識する毎に、当該ヒント命令に関係する前記タグ値を前記命令ループキャッシュに送信することを特徴とする請求項1に記載のマイクロプロセッサ。
前記ヒント命令は、分岐条件が常に偽である条件分岐命令であり、前記ヒント命令に関係する前記タグ値は、前記条件分岐命令のターゲットアドレスの前記タグであることを特徴とする請求項4に記載のマイクロプロセッサ。
前記ターゲットアドレスは、前記プロセッサコアが前記ヒント命令を実行した後に、前記プロセッサコアが実行すべき命令ループを指示することを特徴とする請求項5に記載のマイクロプロセッサ。
前記ターゲットアドレスは、前記プロセッサコアが前記ヒント命令を実行した後に、前記プロセッサコアが実行すべき命令ループによって呼び出される関数を指示することを特徴とする請求項5に記載のマイクロプロセッサ。
前記ヒント命令がノーオペレーション命令であり、前記ヒント命令は、前記プロセッサコアが実行する命令ループの直前に配置され、前記ヒント命令に関係する前記タグ値は、前記命令ループの最初の命令のフェッチアドレスの前記タグ値であることを特徴とする請求項4に記載のマイクロプロセッサ。
前記キャッシュアレイが出力する前記タグIDが所定値に等しい際に、前記タグ記憶部が無効タグ値を出力し、この無効タグ値は、あらゆる前記フェッチアドレスの前記タグ値と異なる一意的な値であり、前記命令ループキャッシュが、さらに、
前記プロセッサコア及び前記タグ記憶部に結合された比較器であって、前記フェッチアドレスの前記タグが、前記タグ記憶部が出力する前記タグ値に等しい際に、ヒット信号をアサートしてキャッシュヒットを示し、さもなければ、前記ヒット信号をデアサートしてキャッシュミスを示すことを特徴とする請求項1〜8のいずれかに記載のマイクロプロセッサ。
前記コントローラは、前記プロセッサコアから受信した前記タグ値が、前記タグ記憶部に前から記憶されているすべての前記タグ値と異なる際に、前記タグ記憶部を、前記プロセッサコアから受信した前記タグ値で更新することを特徴とする請求項11に記載のマイクロプロセッサ。
前記コントローラは、前記プロセッサコアから受信した前記タグ値を前記タグ記憶部内に追加することによって、あるいは、前記タグ記憶部に前から記憶されている前記タグ値を、前記プロセッサコアから受信したタグ値に置き換えて、前記キャッシュエントリの各々の前記タグIDまたは有効ビットをクリアすることによって、前記タグ記憶部を更新することを特徴とする請求項12に記載のマイクロプロセッサ。
前記コントローラが、通常状態及び内側状態を含む有限状態マシンに関連し、前記コントローラが前記通常状態であり、前記プロセッサコアから受信した前記タグ値が、前記タグ記憶部に前から記憶されているすべての前記タグ値と異なる際に、前記コントローラは、前記タグ記憶部を、前記プロセッサコアから受信した前記タグ値で更新し、前記コントローラが前記内側状態であり、前記プロセッサコアから受信した前記タグ値が、前記タグ記憶部に前から記憶されているすべての前記タグ値と異なる際に、前記コントローラは前記通常状態に入り、前記コントローラが前記通常状態であり、内側信号を受信すると、前記コントローラは前記内側状態に入ることを特徴とする請求項12または13に記載のマイクロプロセッサ。
【発明を実施するための形態】
【0011】
以下に、本発明の実施形態を詳しく参照し、それらの例を、添付する図面に示す。可能であれば常に、図面及び説明中では、同じ参照番号を用いて同一または同様の部分を参照する。
【0012】
図1に、本発明の実施形態によるマイクロプロセッサ100を示す。マイクロプロセッサ100は、プロセッサコア120及び命令ループキャッシュ140を含む。命令ループキャッシュ140は、プロセッサ120及び外部メモリ160に結合されている。プロセッサコア120は、命令ストリームの1つ以上のフェッチアドレスを、命令ループキャッシュ140に与えることができる。命令ストリームは、1つ以上の命令を含むことができる。各フェッチアドレスは、タグ及びインデックスを含む。ここで、命令のフェッチアドレスとは、その命令がメモリ160に記憶されているアドレスを意味する。フェッチアドレスは、命令のオペランドに含まれるアドレスではない。
【0013】
命令ループキャッシュ140は、プロセッサコア120が提供するフェッチアドレスを受信し、次に、このフェッチアドレスに応答して、キャッシュヒットが発生するかキャッシュミスが発生するかを判定する。キャッシュヒットが発生すると、命令ループキャッシュ140は、フェッチアドレスに対応する命令を、命令ループキャッシュ140自体からプロセッサコア120に直接提供する。キャッシュミスが発生すると、命令ループキャッシュ140は、フェッチアドレスに対応する命令をメモリ160からフェッチして、この命令を記憶すると共にプロセッサコア120に提供する。
【0014】
プロセッサコア120は、後方分岐命令またはヒント命令に応答して、1つ以上のタグ値を、ループ−タグ信号125を介して命令ループキャッシュ140に提供することができる。ループ−タグ信号125で送信されるタグ値は、プロセッサコア120が命令ループキャッシュ140に送信するフェッチアドレスのタグと異なることができる。ループ−タグ信号125で送信されるタグ値は、プロセッサコア120が命令ループキャッシュ140に送信するフェッチアドレスに関連することもできる。こうした場合に、ループ−タグ信号を制御信号により実現して、フェッチアドレスがタグ値に関連することを示すことができる。より詳細なことは以下に開示する。
【0015】
図2は、本発明の実施形態による、メモリ160内のキャッシュラインを示す概略図である。メモリ160のアドレスは、タグとインデックスに分割される。本実施形態では、アドレスが32ビットを有し、タグは30ビットを有し、インデックスは2ビットを有する。他の実施形態では、アドレスのビット数、タグのビット数、及びインデックスのビット数を異ならせることができる。同じキャッシュライン中のアドレスは、同じタグを有する。例えば、命令I0〜I3はアドレス0〜3に位置し、これらは同じキャッシュラインに属し、同じタグ0を有する。命令I4〜I7はアドレス4〜7に位置し、これらは同じキャッシュラインに属し、同じタグ1を有する。
【0016】
図3は、本発明の実施形態による、マイクロプロセッサ100の命令ループキャッシュ140を示す概略図である。命令ループキャッシュ140は、キャッシュアレイ320、タグ記憶部340、比較器360、及びコントローラ380を含む。キャッシュアレイ320は、プロセッサコア120及びメモリ160に結合されている。タグ記憶部340は、プロセッサコア120及びキャッシュアレイ320に結合されている。比較器360は、キャッシュアレイ320及びタグ記憶部340に結合されている。コントローラ380は、プロセッサコア120、メモリ160、キャッシュアレイ320、タグ記憶部340、及び比較器360に結合されている。簡単のため、タグ記憶部340とコントローラ380との結合は、
図3に示していない。
【0017】
キャッシュアレイ320は2
N個のキャッシュエントリを記憶することができ、ここにNは、プロセッサコア120が提供するフェッチアドレスのインデックスのビット数である。従って、本実施形態では、キャッシュアレイ320のサイズが、ちょうど1つのキャッシュラインである。キャッシュラインが小さいと、命令ループキャッシュは比較的微小である。
【0018】
図3では、キャッシュアレイ320内の各キャッシュエントリを行として表す。各キャッシュエントリは、3つのフィールド、即ちタグ識別番号(ID)322、有効ビット324、及び命令326を含む。タグID322を用いて、タグ記憶部340に記憶されたタグ値のうち1つを選択する。有効ビット324は、キャッシュエントリが有効であるか否かを示す。キャッシュエントリは、その有効ビット324がセットされている際に有効である。命令326は、以前にメモリ160からフェッチされ、現在はキャッシュエントリに記憶されている命令である。キャッシュアレイ320は、プロセッサコア120が提供するフェッチアドレスのインデックスが示すキャッシュエントリのID322を出力する。換言すれば、キャッシュエントリは0〜2
N−1の番号を付けることができ、キャッシュアレイ320は、フェッチアドレスのインデックスに一致する番号を有するキャッシュエントリのID322を出力することができる。
【0019】
タグ記憶部340は、2
M個のタグ値を記憶し、ここにMは、各キャッシュエントリのタグID322のビット数である。タグ記憶部340内のタグ値は、0から2
M−1まで番号付けされている。本実施形態ではMが1である。タグ値はプロセッサコア120によって、上述したフェッチアドレスではなくループタグ信号125を介して提供される。タグ記憶部340は、アレイ320が出力したタグID322が示すタグ値を出力する。換言すれば、タグ記憶部30は、キャッシュアレイ320が出力するタグID322と値が一致するタグ値を出力する。
【0020】
比較器360は、プロセッサコアが提供するフェッチアドレスのタグと、タグ記憶部340が出力するタグ値との、ビット単位の比較を実行する。キャッシュアレイ320は、フェッチアドレスのインデックスが示すキャッシュエントリの有効ビット324を比較器360に出力する。比較器360は、フェッチアドレスのタグが、キャッシュ記憶部340が出力するタグ値に等しく、かつ、キャッシュアレイ320が出力する有効ビット324がセットされている際に、ヒット信号365をアサート(「真」の値に)してキャッシュヒットを示す。さもなければ、比較器360は、ヒット信号365をデアサート(「偽」の値に)してキャッシュミスを示す。
【0021】
コントローラ380は、ヒット信号365に応じて、フェッチアドレスに対応する命令をプロセッサコア120に提供する。
図3では、コントローラ380をマルチプレクサとして表しているが、コントローラ380は、実際にはマルチプレクサだけではない。より詳細なことは以下に開示する。
【0022】
図4は、本発明の実施形態によるメモリ160内の命令ループを示す概略図である。メモリ160内に5つの命令I0〜I4が存在する。命令I0〜I3のアドレスは、同じタグAを有する。命令I4のアドレスのタグはA+1である。命令I4は後方分岐命令であり、その分岐ターゲットは命令I2である。従って、この命令ループは3つの命令I2〜I4を含む。
【0023】
プロセッサコア120が後方分岐命令を実行し、この後方分岐命令を取得する毎に、プロセッサ120は、この後方分岐命令に関係する少なくとも1つのタグ値を命令ループキャッシュ140に送信する。この後方分岐命令に関係する少なくとも1つの値は、この後方分岐命令のターゲットアドレスのタグから始まる1つ以上の連続したタグ値とすることができる。本実施形態では、プロセッサコア120が、2つの連続したタグ値を送信し、命令I4のターゲットアドレスが、I2のフェッチアドレスである。従って、プロセッサコア120は、タグ値A及びA+1を、ループタグ信号125によって命令ループキャッシュ140に送信する。
【0024】
図5は、本発明の実施形態による、命令ループキャッシュを使用する方法を示すフローチャートである。
図5の方法は、命令ループキャッシュ140のコントローラ380によって実行することができる。ステップ505では、マイクロプロセッサ100がリセットされると、コントローラ380が、すべてのキャッシュエントリの有効ビット324をクリアすることによって、すべてのキャッシュエントリを無効にする。ステップ510では、コントローラ380が、プロセッサコア120から送信された1つ以上のタグ値を受信して、プロセッサコア120から送信されたタグ値とタグ記憶部340に記憶されているタグ値とが異なるか否かを判定する。コントローラ380がプロセッサコア120から受信したタグ値のいずれかが、タグ記憶部340に前から記憶されているあらゆるタグ値と異なると、フローはステップ515に進む。さもなければ、フローはステップ520に進む。
【0025】
ステップ515では、コントローラ380が、タグ記憶部340を、プロセッサコア120から受信した少なくとも1つのタグ値で更新する。タグ記憶部340が、プロセッサコア120から受信した少なくとも1つのタグ値用の空きを有する際には、コントローラ380は、プロセッサコア120から受信した少なくとも1つのタグ値を単にタグ記憶部340に追加することによってタグ記憶部340を更新する。さもなければ、コントローラ380は、記憶部340に前から記憶されているタグ値を、プロセッサコア120から受信した少なくとも1つのタグ値に置き換えて、各キャッシュエントリの有効ビット324をクリアすることによって、すべてのキャッシュエントリを無効にする。次に、フローはステップ510に戻る。
【0026】
ステップ520では、コントローラ380が、命令のフェッチアドレスをプロセッサコア120から受信したか否かを判定する。フェッチアドレスを受信していないと、フローはステップ510に戻る。こうしたフェッチアドレスを受信すると、フローはステップ525に進む。ステップ525では、コントローラ380が、比較器360がヒット信号365をアサートしているか否かをチェックする。ヒット信号365がアサートされていないと、フローはステップ535に進む。ヒット信号365がアサートされていると、ステップ530では、コントローラ380が、プロセッサコア120が提供するフェッチアドレスのインデックスが示すキャッシュエントリの命令326を、プロセッサコア120に供給する。次に、フローはステップ510に戻る。
【0027】
ステップ535では、コントローラ380が、フェッチアドレスに位置する命令をメモリ160からフェッチして、この命令をプロセッサコア120に供給する。ステップ540では、コントローラ380が、このフェッチアドレスのタグが、タグ記憶部340に記憶されているタグ値のいずれかに等しいか否か、及びこのフェッチアドレスのインデックスが示すキャッシュエントリが無効であるか否かをチェックする。ステップ540でチェックした条件が偽であると、フローはステップ510に戻る。ステップ540でチェックした条件が真であると、ステップ545では、コントローラ380が、メモリ160内のこのフェッチアドレスに位置する命令を、このフェッチアドレスのインデックスが示すキャッシュエントリに入れる。これに加えて、コントローラ380は、タグID322、及びこのキャッシュエントリの有効ビット324をセットする。次に、フローはステップ510に戻る。
【0028】
次の表1は、マイクロプロセッサ100が、
図4に示すループの命令をキャッシュ記憶する方法を示す。以下の説明については、
図3、
図4及び
図5を参照されたい。
【0030】
表1中の「サイクル」は、マイクロプロセッサ100のクロックサイクルを意味する。サイクル4では、プロセッサ120が、後方分岐命令I4を実行してI4を取得する。その結果、プロセッサコア120がタグ値A及びA+1を命令ループキャッシュ140に送信し、コントローラ380は、タグ値A及びA+1をタグ記憶部340に記憶する。サイクル7、10及び13では、プロセッサコア120がタグ値A及びA+1の送信を反復し、コントローラ380は、同じタグ値が既にタグ記憶部340に記憶されているので、これらを無視するだけである。
【0031】
サイクル5〜7では、即ち、命令ループの2回目の反復では、まだキャッシュミスが存在する。しかし、コントローラ380は、フェッチアドレスが記憶部340内のタグ値と一致するので、メモリ160からフェッチした命令をキャッシュアレイ320に入れ始める。サイクル8、即ち、命令ループの3回目の反復からは、命令I2〜I4が既にキャッシュアレイ320に記憶されているので、キャッシュヒットが発生する。命令ループの3回目の反復、及びその後の反復の命令は、メモリ160の代わりに命令ループキャッシュ140から供給される。
【0032】
表1に示すように、命令ループキャッシュ140のキャッシュ機能は、命令ループの3回目の反復から始まる。この場合、命令ループを2回だけ実行するならば、命令ループキャッシュ140は無用になる。本発明の他のいくつかの実施形態では、ヒント命令を用いて、少数回反復される命令ループ向けの強化を提供することができる。
【0033】
図6は、本発明の実施形態による命令ループを示す概略図である。ヒント命令「ヒントA」が、2つの命令I0及びI1を含む命令ループの前に配置され、I1は後方分岐命令である。本実施形態では、ヒント命令が条件分岐命令であり、ターゲットアドレス及び分岐条件を有する。ヒント命令の分岐条件は常に偽である。例えば、ヒント命令は、「レジスタ0の値がレジスタ0”の値より大きければ、あるターゲットアドレスに分岐する」という形式にすることができる。互換性のため、ヒント命令は、マイクロプロセッサによって、命令ループキャッシュなしで、何の結果も影響もなしに安全に実行することができる。
【0034】
ヒント命令は、コンパイラによって自動的に、あるいはプログラマーが手作業で、命令ループを含む命令ストリーム内に追加することができる。ヒント命令は、対応する命令ループがプロセッサコア120によって実行される前に、プロセッサコア120によって実行すべきである。ヒント命令のターゲットアドレスは、対応する命令ループを指示する。ヒント命令は、対応する命令ループが当該ヒント命令のターゲットアドレスの範囲内で到達可能で有る限り、固定的に配置することができる。従って、ヒント命令を命令ループから遠くに配置して、パイプラインのレイテンシ(待ち時間)を解消することができる。
【0035】
プロセッサコア120がヒント命令をフェッチして認識する毎に、プロセッサコア120は、ヒント命令に関係するタグ値を命令ループキャッシュ140に送信する。本実施形態では、ヒント命令に関係するタグ値が、このヒント命令のターゲットアドレスのタグである。次の表2は、マイクロプロセッサ100が
図6に示す命令ループをキャッシュ記憶する方法を示す。
【0037】
サイクル0では、プロセッサコア120がヒント命令をフェッチして認識する。その結果、プロセッサコア120は、タグ値Aを命令ループキャッシュ140に送信し、コントローラ380は、タグ値Aをタグ記憶部340に記憶する。サイクル1及び2では、即ち、命令ループの1回目の反復では、キャッシュミスが存在する。しかし、フェッチアドレスのタグが、タグ記憶部340内のタグ値Aと一致するので、コントローラ380は、メモリ160からフェッチした命令をキャッシュアレイ320に入れ始める。サイクル2では、プロセッサコア120が後方分岐命令I1を実行してI1を取得する。その結果、プロセッサコア120は、タグ値A及びA+1を命令ループキャッシュに送信する。サイクル3、即ち、命令ループの2回目の反復からは、命令I0〜I1が既にキャッシュアレイ320に記憶されているので、キャッシュヒットが発生する。表2に示すように、命令ループキャッシュ140のキャッシュ機能は、表1に示す例よりも1回前の反復である2回目の反復から始まる。
【0038】
本発明の他のいくつかの実施形態では、ヒント命令がターゲットアドレスを有する必要がない。これらの実施形態では、ヒント命令をノーオペレーション(無演算)命令とすることができる。互換性のため、このノーオペレーション・ヒント命令は、マイクロプロセッサによって、命令ループキャッシュなしで、何の結果も影響もなしに安全に実行することができる。ターゲットアドレスなしのヒント命令は、対応する命令ループの直前に配置すべきである。プロセッサコア120がターゲットアドレスなしのヒント命令をフェッチして認識する毎に、プロセッサコア120は、このターゲットアドレスなしのヒント命令に関係するタグ値を、命令ループキャッシュ140に送信し続ける。しかし、こうしたヒント命令に関係するタグ値は、対応する命令ループの最初の命令のフェッチアドレスのタグであり、即ち、このヒント命令のフェッチアドレスの次のフェッチアドレスのタグである。
【0039】
図7は、本発明の実施形態による他の命令ループを示す概略図である。この実施形態は、関数呼出しを有する命令ループ向けの強化を提供する。
図7に示す命令ストリームは、ヒント命令、命令ループ、及び関数を含む。このループの命令は同じタグAを有するのに対し、関数の命令のアドレスは同じタグBを有する。このループは2つの命令を有する。ループの第1命令が関数を呼び出す。ループの第2命令は後方分岐命令である。
【0040】
本実施形態では、命令ループに関連するヒント命令「ヒントB」を用いて、プロセッサコア120がタグ値を事前に命令ループキャッシュ140に送信することができる。本実施形態では、ヒント命令が、分岐条件及びターゲットアドレスを有する条件分岐命令である。この分岐条件は常に偽である。ターゲットアドレスは、対応する命令ループ内で呼び出される関数を指示する。ヒント命令は、プロセッサコア120がこの命令ループを実行する前に、プロセッサコア120によって実行されるべきである。プロセッサコア120がヒント命令をフェッチして認識する毎に、プロセッサコア120は、このヒント命令に関係するタグ値を命令ループキャッシュ140に送信する。本実施形態では、ヒント命令に関係するタグ値が、対応する命令ループ内で呼び出される関数の第1命令のフェッチアドレスのタグである。
【0041】
プロセッサコア120がヒント命令をフェッチして認識すると、プロセッサコア120は、タグ値Bを命令ループキャッシュ140に送信する。コントローラ380は、タグ値Bを命令ループキャッシュ140に記憶する。プロセッサコア120が1回目の反復において命令ループを実行すると、コントローラ380は、ループの命令をメモリ160からフェッチして、これらの命令をプロセッサコア120に提供する。1回目の反復では、タグAがまだタグ記憶部340に記憶されていないので、コントローラ380は、ループの命令をキャッシュアレイ320に記憶しない。しかし、タグ値Bは既にタグ記憶部340に記憶されているので、コントローラ380は、1回目の反復中に呼び出される関数の命令をキャッシュアレイ320に記憶する。1回目の反復において、プロセッサコア120が後方分岐命令を実行すると、プロセッサコア120はタグ値Aを命令ループキャッシュ140に送信し、コントローラ380は、タグ値Aをタグ記憶部340に記憶する。その結果、2回目の反復では、コントローラ380が、ループの命令をキャッシュアレイ320に記憶する。この瞬間から、コントローラ380は、ループ及び関数の命令を、キャッシュアレイ320からプロセッサコア120に直接提供する。
【0042】
本実施形態では、タグ記憶装置340が、2つのタグ値、即ち命令ループのタグ値A及び関数のタグ値Bを記憶する。従って、キャッシュアレイ320は、ループの命令及び関数の命令を記憶することができる。
【0043】
図8は、本発明の他の実施形態による、命令ループキャッシュ140を使用する方法を示すフローチャートである。この実施形態は、ネスト(入れ子)化されたループ、即ち、他のループ内のループ向けの強化を提供する。
図8に示す方法は、コントローラ380によって実行することができる。本実施形態では、コントローラ380が、通常状態及び内側状態を含む有限状態マシンに関連する。内側状態が、ネスト化された(入れ子の)ループに相当する。
図8のフローチャート内の一部のステップは、
図5のフローチャート内の対応するものと同一である。これらのステップは、
図5及び
図8共に同じ番号を有し、ここではそれらの説明を省略する。以下の説明は、
図5のフローチャートとは異なるステップに焦点を当てる。
【0044】
ステップ805では、コントローラ380が通常状態に入り、キャッシュエントリの有効ビット324のすべてをクリアすることによって、キャッシュエントリを無効にする。ステップ812では、コントローラ380が、現在状態が通常状態であるか内側状態であるかをチェックする。コントローラ380が内側状態にある際には、ステップ818において、コントローラ380が通常状態に入り、フローはステップ510に戻る。コントローラ380が通常状態である際には、ステップ815において、コントローラ380が内側状態に入る。これに加えて、ステップ815では、コントローラ380が、ステップ515と同様の方法でタグ記憶部340を更新して、フローはステップ510に戻る。ステップ530後に、コントローラ380はステップ382において内側状態に入り、フローはステップ510に戻る。
【0045】
図9は、本発明の実施形態によるコントローラ380に関連する有限状態マシンを示す概略図である。
図8及び
図9に示すように、ステップ805において、コントローラ380は最初に通常状態に入る。コントローラ380が内側信号を受信すると、コントローラ380は通常状態から内側状態に入る。内側信号は、内側ループが実行されていることを示すことを意図している。本実施形態では、コントローラ380がプロセッサコア120から受信した少なくとも1つのタグ値が、タグ記憶部340に前から記憶されているあらゆるタグ値と異なる際に、コントローラ380は、ステップ815において内側信号をアサートする。比較器360がヒット信号365をアサートすると、コントローラ380も、ステップ832において内側信号をアサートする。その代わりに、コントローラ380が受信したタグ値が、タグ記憶部340に前から記憶されているいずれかのタグ値と同一である際に、コントローラ380は内部側信号をアサートすることができる。2つの例を示しているが、他の多数の例が可能であり、こうした内側信号発生のすべてが、本開示の範囲内であることを意図している。
【0046】
コントローラ380がプロセッサコア120から受信した少なくとも1つのタグ値が、タグ記憶部340に前から記憶されているあらゆるタグ値と異なる際に、ステップ818において、コントローラ380は内側状態から通常状態に入る。ステップ812及び818は、内側命令ループの命令を記憶しているキャッシュエントリを無効化することを回避する。ステップ812及び818により、コントローラ380は、内側状態においてタグ記憶部340に記憶されているタグ値を更新しない。コントローラ380は、通常状態のみにおいて、タグ記憶部340に記憶されているタグ値を更新する。
【0047】
図10は、本発明の実施形態による命令ループを示す概略図である。
図10の命令ループは、ネスト化された内側ループを含み、4つのキャッシュラインにわたり、それらのタグは、それぞれA、A+1、A+2及びA+3である。命令JBは、内側命令ループの後方分岐命令であるのに対し、命令JAは、外側命令ループの後方分岐命令である。次の表3は、マイクロプロセッサ100が
図10の命令をキャッシュ記憶する方法を示す。
【0049】
サイクルC
22では、プロセッサコア120が後方分岐命令JBを実行してJBを取得する。その結果、プロセッサコア120は、タグ値A+2及びA+3を命令ループキャッシュ140に送信し、コントローラ380は、タグ値A+2及びA+3をタグ記憶部340に記憶する。これに加えて、コントローラ330は、通常状態から内側状態に入る。サイクルC
23及びC
24では、即ち、内側命令ループの2回目の反復では、フェッチアドレスのタグがタグ記憶部340内のタグ値と一致するので、コントローラ380は、メモリ160からフェッチした命令をキャッシュアレイ320に入れる。
【0050】
サイクルC
31では、マイクロプロセッサ120が後方分岐命令JAをフェッチし、キャッシュミスが存在する。アレイのエントリが命令Bによって占有されているので、コントローラ380は、メモリ160からフェッチした命令JAをキャッシュアレイ320に入れない。プロセッサコア120が後方分岐命令JAを実行してJAを取得すると、プロセッサコア120は、タグA及びA+1を命令ループキャッシュ140に送信する。コントローラ380が内側状態であるので、コントローラ380は、これらのタグ値を無視して通常状態に入る。フェッチアドレスのタグAが、タグ記憶部340内のタグ値とは異なるので、サイクルC
32ではキャッシュミスが存在する。
【0051】
サイクルC
41〜C
44では、3回目及び4回目の反復において、内側命令ループが実行される。フェッチアドレスのタグが既にタグ記憶部340に記憶されているので、キャッシュヒットが存在する。サイクルC
42では、このキャッシュヒットにより、コントローラ380が通常状態から内側状態に入る。
【0052】
サイクルC
51では、命令JAがキャッシュアレイ320に記憶されていないので、キャッシュミスが存在する。プロセッサコア120が後方分岐命令JAを実行してJAを取得すると、プロセッサコア120は、タグ値A及びA+1を命令ループキャッシュに送信する。コントローラ380は内側状態であるので、コントローラ380は、これらのタグ値を無視して通常状態に入る。フェッチアドレスのタグAがタグ記憶部340のタグ値と異なるので、サイクルC
52ではキャッシュミスが存在する。
【0053】
本実施形態では、最も内側のループの命令が、すべて命令ループキャッシュ140内にキャッシュ記憶される。最も内側のループが最も頻繁に実行されるので、このことは最も効率的な方法である。
【0054】
図11は、本発明の他の実施形態による、マイクロプロセッサ100の命令ループキャッシュ140を示す概略図である。この実施形態は、複数のキャッシュライン境界にまたがるループ向けの強化を提供する。本実施形態では、命令ループキャッシュ140が、キャッシュアレイ1120、タグ記憶部1140、比較器1160、及びコントローラ1180を含む。
【0055】
タグ記憶部1140は、より長い命令ループ用に、より多数のタグ値を記憶するための、より大きな容量を有する。従って、プロセッサコア120は、後方分岐命令を実行して取得する際に、より多数のタグ値を命令ループキャッシュ140に送信することができる。さらに、すべてのキャッシュエントリの有効ビットをまとめて、同じキャッシュエントリのタグIDにする。
図11に示すように、キャッシュアレイ1120内の各キャッシュエントリが、2つのフィールド、即ちタグID1122及び命令1126を含む。命令フィールド1126は、
図3の命令フィールド326と同じである。各キャッシュエントリのタグID1122はMビットを有するのに対し、タグ記憶部1140は2
M−1個のタグ値の容量を有する。本実施形態では、Mが2に等しい。タグ記憶部1140内のタグ値は、1〜2
M−1に番号付けされている。キャッシュエントリのタグID1122を用いて、タグID1122と同じ数を有するタグ値を選択する。キャッシュアレイ1120は、プロセッサコア120が提供するフェッチアドレスのインデックスが示すキャッシュエントリのタグID1122を、タグ記憶部1140に対して出力する。タグ記憶部1140は、キャッシュアレイ1120が出力するタグID1122が示すタグ値を出力する。
【0056】
キャッシュアレイ1120が出力するタグID1122が、本実施形態では0である所定値に等しい際に、タグ記憶部1140は、所定の無効タグ値を出力する。この無効タグ値は、あらゆるフェッチアドレスのタグと異なる一意的な値であり、このため、タグ記憶装置1140がこの無効タグ値を出力する際には、キャッシュヒットが存在しない。キャッシュエントリのタグID1122のタグ値が、この無効タグ値に相当する所定値である際に、このことは、このキャッシュエントリが無効であることを意味する。従って、コントローラ1180がキャッシュエントリを無効化する際に、コントローラ1180は、このキャッシュエントリのタグID1122をクリアして、上記無効タグ値に相当する所定値にする
【0057】
比較器1160は、タグ記憶部1140が出力するタグ値と、プロセッサコア120が提供するフェッチアドレスのタグとのビット単位の比較を実行する。比較器1160は、フェッチアドレスのタグが、タグ記憶部1140が出力するタグ値に等しい際に、ヒット信号365をアサートしてキャッシュヒットを示す。さもなければ、比較器1160は、ヒット信号365をデアサートしてキャッシュミスを示す。
【0058】
図11の命令ループキャッシュ140についての他の詳細事項は、
図3の命令ループキャッシュ140についての詳細事項と同じである。
【0059】
図12は、本発明の実施形態による命令ループを示す概略図である。
図12の命令ループは、分岐ターゲットが命令I2である前方分岐命令、及び分岐ターゲットが命令I0である後方分岐命令を含む。この実施形態は、
図4に示す実施形態と似ているが、いくつかの相違がある。第1の相違は、タグ記憶部1140が、2つのタグ値の代わりに3つまでのタグ値を記憶することができる、ということである。第2の相違は、プロセッサコア120が後方分岐命令を実行して、この後方分岐命令を取得すると、プロセッサコア120は、2つの連続したタグ値の代わりに、3つの連続したタグ値を命令ループキャッシュ140に送信することである。従って、プロセッサコア120が
図12の後方分岐命令を実行して、この後方分岐命令を取得すると、プロセッサコア120は、3つの連続したタグ値A、A+1及びA+2を命令ループキャッシュ140に送信する。従って、2回目の反復では、命令ループキャッシュ140が、命令I0及びI2、即ち前方分岐命令及び後方分岐命令を記憶する。次に、3回目の反復では、命令ループキャッシュ140は、これらの命令を、キャッシュアレイ1120から直接供給することができる。
【0060】
本発明の範囲を逸脱することなしに、本発明の構造に種々の変更及び変形を加えることができることは、当業者にとって明らかである。以上を考慮すれば、本発明の変更及び変形が以下の特許請求の範囲及びその等価物の範囲内に入るのであれば、本発明は、これらの変更及び変形をカバーすることを意図している。