(57)【特許請求の範囲】
【請求項１】
実行ユニットのプロセッサに命令を供給するための装置であって、
バッファにロードされた命令を受け取るためのキャッシュメモリと、
前記プロセッサが要求した第１の命令を含む命令ラインを取出すためのコントローラと、
前記命令ライン内のすべての命令が順になっているか否かを決定するための、かつ、前記命令ライン内の前記すべての命令が順になっているか否かを示す順命令信号を出力するための、命令プリデコードユニットとを含み、もし前記順命令信号が、前記命令ライン内の前記すべての命令が順になっていることを示せば、前記コントローラが、すぐ次の命令ラインのアドレスで始まる命令ラインを、もし前記すぐ次の命令ラインが前記キャッシュメモリ内に記憶されていなければ、外部のメモリからバッファにロードし、
前記命令プリデコードユニットは、前記命令ライン内の前記命令のいずれかを前記実行ユニットが実行する前に、前記命令ライン内の前記すべての命令が順になっているか否かを決定する、装置。
【請求項２】
前記第１の命令を含む前記命令ラインは前記キャッシュメモリから取出される、請求項１に記載の装置。
【請求項３】
前記第１の命令を含む前記命令ラインは外部から前記装置に取出される、請求項１に記載の装置。
【請求項４】
タグアレイをさらに含み、前記タグアレイは、前記コントローラによって前記第１の命令のアドレスと比較するために、前記キャッシュメモリ内に記憶されるラインのアドレスのリストを記憶する、請求項１に記載の装置。
【請求項５】
前記比較によって、前記第１の命令が前記キャッシュメモリ内に記憶される命令ライン内にあることが表示されるとき、前記コントローラは、前記キャッシュメモリから前記第１の命令を引出し前記第１の命令を前記プロセッサに転送し、
前記命令ラインは、前記順命令信号に基づいて前記バッファに書き込まれる、請求項４に記載の装置。
【請求項６】
前記キャッシュメモリ内に記憶される各命令ラインについて記憶された印を含み、前記記憶された各印は、前記対応する命令ラインが順になっているときは第１の状態を有し、それ以外の場合は第２の状態を有する、請求項５に記載の装置。
【請求項７】
前記コントローラは、前記要求された命令ラインに対する前記記憶された印が前記第１の状態にあるときのみ、前記バッファをロードする、請求項６に記載の装置。
【請求項８】
前記コントローラは、もし、前記次に要求された命令が前記バッファ内の前記命令ライン内で見つかれば、前記バッファ内の前記命令ラインを前記キャッシュメモリにコピーし、前記プロセッサに次に要求された命令を転送し、もしそうでなければ、前記バッファ内の前記命令ラインを放棄する、請求項７に記載の装置。
【請求項９】
前記コントローラは、前記命令プリデコードユニットによる前記順命令信号出力に基づいて、前記キャッシュメモリにコピーされた命令ライン内のすべての命令が順になっているか否かを決定し、それに従って、対応する記憶された印を前記第１の状態および第２の状態のいずれか一方に設定する、請求項８に記載の装置。
【請求項１０】
前記コントローラは、前記装置の外部にあるメモリから前記バッファへ前記第１の命令を含む命令ラインを引出し、すぐに前記第１の命令を前記プロセッサに転送する、請求項４に記載の装置。
【請求項１１】
前記コントローラは、前記コントローラが前記第１の命令を含む前記命令ラインを前記バッファに引出すのと同時に、前記すぐ次の命令ラインのアドレスを前記タグアレイ内のアドレスと比較する、請求項１０に記載の装置。
【請求項１２】
前記コントローラは、前記第１の命令を含む前記すぐ次の命令ライン内のすべての命令が順になっており、前記キャッシュメモリが前記すぐ次の命令ラインをまだ含んでいなければ、前記すぐ次の命令ラインを前記バッファにロードする、請求項１１に記載の装置。
【請求項１３】
前記コントローラは、もし、前記次に要求された命令が前記バッファ内の前記すぐ次の命令ライン内に含まれていれば、前記バッファ内の前記すぐ次の命令ラインを前記キャッシュメモリにコピーし、前記プロセッサに次に要求された命令を転送し、もしそうでなければ、前記バッファ内の前記すぐ次の命令ラインを放棄する、請求項１２に記載の装置。
【請求項１４】
前記キャッシュメモリ内に記憶される各命令ラインに対して記憶された印をさらに含み、前記記憶された印は各々、もし前記対応する命令ライン内のすべての命令が順になっていれば第１の状態を、そうでなければ第２の状態を有する、請求項１３に記載の装置。
【請求項１５】
前記コントローラ、前記キャッシュメモリ、および前記プロセッサはすべて単一の半導体チップ上にある、請求項１に記載の装置。
【請求項１６】
命令を引出すためにキャッシュメモリとメインメモリとを使用する実行ユニットのプロセッサに命令を供給する方法であって、
ａ）前記プロセッサが要求した第１の命令を含む命令ラインを取出すステップと、
ｂ）プリデコードユニットによって、前記命令ライン内のすべての命令が順になっているか否かを決定するステップと、
ｃ）もし、前記命令ライン内のすべての命令が順になっていれば、そして、もしすぐ次の命令ラインがまだ前記キャッシュメモリ内に記憶されていなければ、前記すぐ次の命令ラインのアドレスで始まる命令ラインを前記メインメモリからバッファにロードするステップとを含み、前記決定するステップｂ）は、前記実行ユニットが、前記命令ライン内のいずれかの命令の実行を行う前に行われる、方法。
【請求項１７】
前記命令ラインは、ステップａ）において前記メインメモリおよび前記キャッシュメモリの一方から取出される、請求項１６に記載の方法。
【請求項１８】
ｄ）前記プロセッサの第２の命令への要求を受取るステップと、
ｅ）前記第２の命令が前記キャッシュメモリ内に含まれているか否かを決定するステップとを含み、さらに、もし前記第２の命令が前記キャッシュメモリに含まれていなければ、
ｉ）前記第２の命令が前記バッファに含まれていれば、前記バッファから前記第２の命令を引出すステップと、
ｉｉ）もし前記第２の命令が前記バッファに含まれていなければ、前記バッファのすべての内容を放棄するステップとさらにを含む、請求項１６に記載の方法。
【請求項１９】
命令が引き出されるキャッシュメモリとメインメモリとを使用する実行ユニットのプロセッサに命令を供給する方法であって、
ａ）前記プロセッサから第１の命令に対する要求を受けるステップと、
ｂ）もし前記第１の命令が前記キャッシュメモリ内になければ、ステップｋ）に進むステップと、
ｃ）もし前記第１の命令がその時点で前記キャッシュメモリ内にあれば、前記キャッシュメモリから前記第１の命令を含む第１の命令ラインを取り出し、かつ、前記キャッシュメモリ内にその時点で記憶された命令の各ラインについて前記キャッシュメモリ内に記憶された順状態ビットをチェックすることにより、前記第１の命令ライン内のすべての命令が順になっているか否かを決定するステップと、
ｄ）もし前記第１の命令が前記キャッシュメモリ内にあり、前記対応する順状態ビットが前記第１の命令ライン内のすべての命令が順になっていると示すならば、前記第１の命令ライン内の最後の命令と順になった命令もその時点で前記キャッシュメモリ内に記憶されているか否かを決定するステップと、
ｅ）もし前記第１の命令が、前記キャッシュメモリ内にあり、前記対応する順状態ビットが、前記第１の命令ライン内のすべての命令が順になってはいないと示すならば、ステップｎ）に進むステップと、
ｆ）もし前記第１の命令が前記キャッシュメモリ内にあり、前記対応する順状態ビットが前記第１の命令ライン内のすべての命令が順になっていると示すならば、そして、もし、前記第１の命令ラインの中の前記最後の命令と順になった前記命令がその時点で前記キャッシュメモリ内に記憶されていなければ、前記メインメモリから、前記第１の命令ライン内の前記最後の命令と順になった前記命令を含む第２の命令ラインを引き出し、かつ、キャッシュラインバッファ内に前記第２の命令ラインを位置付けるステップと、
ｇ）もし前記第１の命令が前記キャッシュメモリ内にあり、前記対応する順状態ビットが、前記第１の命令ライン内のすべての命令が順になっていると示し、かつ、もし前記第１の命令ライン内の前記最後の命令と順になった前記命令がその時点で前記キャッシュメモリ内に記憶されていれば、ステップｎ）に進むステップと、
ｈ）前記プロセッサから第２の命令に対する要求を受け取り、かつ、前記第２の命令が前記キャッシュラインバッファ内に記憶される前記第２の命令ライン内にあるか否かを決定するステップと、
ｉ）もし前記第２の命令が、前記キャッシュラインバッファ内にあれば、前記キャッシュラインバッファからの前記第２の命令ラインを前記キャッシュメモリへコピーし、同時に、前記第２の命令ラインを前記プロセッサに与えるステップと、
ｊ）もし前記第２の命令が、前記キャッシュラインバッファ内になければ、前記キャッシュラインバッファ内のすべての情報を廃棄し、前記キャッシュメモリおよび前記プロセッサに送られるよう、前記メインメモリから前記第２の命令を引き出し、ステップｎ）に進むステップと、
ｋ）もし前記第１の命令が、前記キャッシュメモリ内になければ、前記メインメモリから前記第１の命令を含む第３の命令ラインを引き出し、前記キャッシュラインバッファ内に前記第３の命令ラインを位置付け、前記第３の命令ライン内のすべての命令が順になっているか否かを決定するため、前記プロセッサの外部の前記第３の命令ラインのデコーディングを同時に行い、さらに、前記第１の命令がその時点で前記キャッシュメモリ内に記憶されていたならば前記第１の命令を含んでいたであろうキャッシュラインについて、次の順になったキャッシュラインを、前記キャッシュメモリが含むか否かを同時に決定するステップと、
ｌ）もし前記次の順になったキャッシュラインがその時点で前記キャッシュメモリ内に記憶されていれば、ステップｎ）に進むステップと、
ｍ）もし前記次の順になったキャッシュラインがその時点で前記キャッシュメモリ内に記憶されていなければ、そして、もしステップｋ）で行われる前記第３の命令ラインの前記デコーディングが、前記第３の命令ライン内のすべての命令が順になっていると決定したならば、前記キャッシュラインバッファへの前記第３の命令ラインに関して次の順になった命令ラインに対応する、第４の命令ラインを書き込むための動作を開始するステップと、
ｎ）前記プロセッサからの前記第２の命令に対する要求を待つステップとを含む、実行ユニットのプロセッサに命令を供給する方法。
【発明の詳細な説明】
発明の背景
この発明は、プロセッサのコアに要求された命令を供給するために必要とされる時間を低減するための装置および方法に関する。より特定的には、プロセッサのコアが実際に命令を要求するよりも前に、プロセッサのコアが要求しそうな命令をキャッシュにロードするための装置および方法に関する。
システムのプロセッサが命令およびデータを要求するときに、システムのプロセッサが要求するそのような命令およびデータがキャッシュメモリ内に記憶されていると、キャッシュメモリを使用することでコンピュータシステムの性能が高められる。キャッシュメモリ内に記憶されていない命令またはデータをプロセッサが要求するたびに、外部アクセス動作を実行し、要求された命令またはデータをプロセッサおよびキャッシュメモリにロードせねばならない。このような外部アクセスごとに、コンピュータシステムの効率性が減じられる。
ＥＰ−Ａ−０  ６１２  ０１３は、命令キャッシュと先取りバッファとの組合せを有する公知のキャッシュメモリシステムを開示している。
ＥＰ−Ａ−０  ４５７  ４０３は、先取りバッファ、使用バッファ、およびヘッドバッファを含むメインメモリと処理ユニットとの間で使用するための、公知の多重レベル命令キャッシュを開示している。
上記のことに鑑みて、プロセッサが要求する情報が、その情報が要求されるときに、キャッシュメモリ内に記憶されている尤度を高めるための装置および方法を提供することが望ましい。さらには、その時点で実行中の命令の実行が完了したときプロセッサが最も要求しそうな命令をキャッシュメモリにプリロードするための装置および方法を提供することが望ましい。
発明の概要
この発明の一局面により、複数の順序になった命令の中から命令をプロセッサコアに供給するために必要とされる時間を減じるための方法を提供する。プロセッサのコアは、第１の記憶手段および第２の記憶手段を有するシステム内にある。第１の記憶手段は、バスによって第２の記憶手段と動作可能に接続される。キャッシュメモリなどの第１の記憶手段の記憶容量は、システムメモリなどの第２の記憶手段の記憶容量よりも小さい。この方法は、順序になった命令の中から特定の命令をプロセッサコアに要求させるステップと、その特定の命令が第１の記憶手段内にあるか否かを決定するステップとを含む。
もし、その特定の命令が第１の記憶手段内になければ、第２の記憶手段からバスを通って第１の記憶手段へ、第１の複数の隣接する命令が引出される。この第１の複数の隣接する命令は、この特定の命令を含む。次に、第１の複数の隣接する命令の中のすべての命令が順になっているか否かを決定する。
もし、第１の複数の隣接する命令内のすべての命令が順になっていれば、第２の複数の隣接する命令が第１の記憶手段内にあるか否かが決定される。第２の複数の隣接する命令は、第１の複数の隣接する命令に隣接して順序になった命令を含む。もし、第２の複数の隣接する命令が第１の記憶手段内になく、第１の複数の隣接する命令内のすべての命令が順になっていれば、第２の記憶手段からバスをとおって第１の記憶手段へと第２の複数の隣接する命令をコピーする動作が始められる。
この発明の別の局面により、複数の順序になった命令の中から選択された命令をプロセッサのコアに供給するために必要とされる時間を低減するための装置が提供される。この装置は、複数の順序になった命令を記憶するための第２の記憶手段と、第２の記憶手段と動作可能に接続されたバッファなどの一時記憶手段と、一時記憶手段と動作可能に接続された命令プリデコード手段と、命令プリデコード手段およびプロセッサコアと動作可能に接続された第１の記憶手段と、プロセッサのコアおよび第１の記憶手段と動作可能に接続された制御手段とを含む。制御手段は、プロセッサのコアから、選択された命令の中の第１の命令に対する第１の要求を受取る。そして制御手段は、この第１の命令が第１の記憶手段内にあるか否かを決定する。
もしこの第１の命令が第１の記憶手段内になければ、制御手段によって、命令の第１のサブセットが、第２の記憶手段から一時記憶手段へと転送される。命令のこの第１のサブセットは第１の命令を含む。命令プリデコード手段は、一時記憶手段から命令のこの第１のサブセットを受取り、命令の第１のサブセットが少なくとも１つの順になっていない命令を含むか否かを決定し、命令の第１のサブセットを第１の記憶手段に伝送し、命令の第１のサブセットが少なくとも１つの順になっていない命令を含むか否かを示す第１の制御信号を生成する。制御手段は、プリデコード手段から第１の制御信号を受取り、命令の第１のサブセットが少なくとも１つの順になっていない命令を含むか否かを示す第２の制御信号を生成する。
第１の記憶手段は、命令プリデコード手段から命令の第１のサブセットを、および、制御手段から第２の制御信号を受取り、命令の第１のサブセットを記憶し、第２の制御信号に応答して命令のサブセットが少なくとも１つの順になっていない命令を含むか否かを示す表示を記憶する。
この発明のまた別の局面により、キャッシュメモリおよびコントローラを使用して実行ユニットのプロセッサに命令を供給するための装置および方法を提供する。コントローラは、プロセッサが要求した第１の命令を含む命令のラインをメモリから取出す。もし、プロセッサが要求した命令のライン内の命令がすべて順になっており、次の命令のラインがキャッシュメモリ内に記憶されていなければ、コントローラは、すぐ次のアドレスから始まる命令のラインをバッファにロードする。第１の命令を含む命令ラインが取出されるこのメモリは、装置の外部にある他のメモリのキャッシュメモリであってもよい。命令がキャッシュメモリ内に記憶されているか否かを決定するため、キャッシュ内に記憶される命令ラインのアドレスのリストを記憶するタグアレイが設けられる。要求されたアドレスとキャッシュ内に記憶された命令ラインのアドレスとを比較することで、コントローラは、要求された命令がキャッシュ内のラインの１つから見つかるか否かを決定できる。比較の結果要求された命令がキャッシュメモリ内に記憶されたライン内にあるということが表示される、キャッシュヒットの場合には、コントローラは要求された命令をプロセッサへ転送する。もし、要求された命令が中から見つかったラインに対するビットなどの、記憶された印がライン内のすべての命令が順になっていることを示し、次のラインがキャッシュ内に記憶されていなければ、キャッシュコントローラはラインの補充を要求し、次のラインをバッファにコピーする。次の命令のアクセスに際して、もし、要求された命令がバッファ内の命令ライン内から見つかれば、バッファの内容はキャッシュにコピーされ、命令は実行ユニットへ転送される。この場合には、キャッシュにコピーされた命令はデコードされ、対応するエントリがタグアレイに加えられる。さらに、ラインに対して、ライン内のすべての命令が順になっていれば第１の状態を、それ以外の場合には第２の状態を有する標識が記憶される。もし次に要求された命令がバッファ内で見つからなければ、バッファの内容は放棄される。
プロセッサが要求した命令がキャッシュ内で見つからない、読出ミスの場合には、キャッシュコントローラはキャッシュの外部にあるメモリからバッファへ、要求された命令を引出し、すぐさま要求された命令をプロセッサに転送する。同時に、キャッシュコントローラは、すぐ次の命令ラインのアドレスをタグアレイ内のアドレスと比較する。もし次のラインがキャッシュ内になく、要求されたライン内のすべての命令が順になっていれば、キャッシュコントローラは次のラインをバッファへロードする。もし、次のラインのアドレスが次に要求された命令内で見つからなければ、バッファの内容は放棄される。そうでない場合には、バッファの内容はキャッシュにコピーされ要求された命令は実行ユニットへ転送される。命令がキャッシュに記憶されていくとき、タグアレイ内に新しいエントリが作られ、もしライン内のすべての命令が順になっていれば第１の状態で、そうでなければ第２の状態で標識が記憶される。
【図面の簡単な説明】
添付した図面とともに以下の説明を参照することで、この発明によるシステムならびにこの発明のさらなる目的および利点が理解されるであろう。
図１は、この発明によるコンピュータシステムを示す。
図２は、この発明の実施例による、プロセッサコアが命令を要求し、その命令がその時点ではキャッシュメモリ内に記憶されていないときの、コンピュータシステムの動作の方法のフロー制御図である。
図３は、この発明の実施例による、プロセッサコアが命令を要求し、その命令がその時点でキャッシュメモリ内に記憶されていたときの、コンピュータシステムの動作の方法のフロー制御図である。
好ましい実施例の詳細な説明
図１を参照して、この発明の好ましい実施例によりコンピュータシステム１０が示される。コンピュータシステム１０は一般に、プロセッサコア１２、キャッシュ配置１４、バスインターフェイスユニット１６、およびメモリ１８を含む。
プロセッサコア１２は、一般に、実行ユニットまたはプロセッサの、命令を実行する部分を表わす。プロセッサコア１２によって実行されるべき命令は、メモリ１８内の複数の記憶場所２０内に記憶される。複数の記憶場所２０の各記憶場所は各々に関連する一意のアドレスを有する。複数の記憶場所２０は複数のライン２１に分割され、各ラインは複数の隣接する記憶場所からなる。各ライン２１はまた、それと関連するアドレスを有する。たとえば、所定のライン２１のアドレスは所定のライン２１の第１の記憶場所のアドレスであってよい。メモリ場所２０の所定のライン２１内に記憶される命令を、集合的に、命令ラインと呼ぶ。
プロセッサコア１２は、アドレスおよび制御バス２４ならびに命令バス２６によってキャッシュ配置１４と接続される。キャッシュ配置１４はバス２８によりメモリ１８と、そして、アドレスおよび制御バス３０によりバスインターフェイスユニット１６と接続する。バスインターフェイスユニット１６はまたバス２８によりメモリ１８と接続する。
キャッシュ配置１４は、一般に、キャッシュコントローラ３２、デュアルポートタグアレイ３４、命令キャッシュ３６、命令プリデコードユニット３８、およびキャッシュラインバッファ４０を含む。キャッシュコントローラ３２は、アドレスおよび制御バス２４によってプロセッサコア１２と、アドレスおよび制御バス３０によってバスインターフェイスユニット１６と、そして、制御ライン４２によって命令プリデコードユニット３８と接続する。
タグアレイ３４は好ましくは第１のポート４５と第２のポート４７とを有するが、単一ポートアレイを使用することもできる。タグアレイ３４は、第２のポート４７からアドレスおよび制御バス２４によりプロセッサコア１２へ、第１のポート４５からアドレスおよび制御バス４４によりキャッシュコントローラ３２へ、そして、信号ライン４６により命令キャッシュ３６へ接続される。命令キャッシュ３６は、命令バス２６によりプロセッサコア１２へ、そして、バス５４により命令プリデコードユニット３８へ接続する。キャッシュラインバッファ４０は、バス４８により命令プリデコードユニット３８へ、そして、バス２８によりメモリ１８へ接続する。キャッシュラインバッファ４０はまた、バス５０によりバスインターフェイスユニット１６に接続する。
命令キャッシュ３６は、命令を保持するための複数の記憶場所５２を含む。命令キャッシュ３６内の記憶場所はメモリ１８内の記憶場所よりも少ない。したがって、いかなる所定の時点においても、メモリ１８内に含まれる命令の比較的小さなサブセットが命令キャッシュ３６内に記憶できるにすぎない。タグアレイ３４は、その時点で命令キャッシュ３６内に記憶されている命令ラインに関する情報を含む。たとえば、タグ状態アレイ３５内のタグアレイ３４は、その時点で命令キャッシュ３６内に記憶されている命令ラインの各々のアドレスを記憶する。各命令ラインについてここでさらに説明するように、タグアレイ３４はまた、対応するライン内のすべての命令が順になっているか否かを示す対応するＳＥＱ＿ＬＩＮＥ  Ｂｉｔを記憶する。
プロセッサコア１２が命令を必要とするときは、プロセッサコア１２はアドレスおよび制御バス２４を通って要求された命令のアドレスを伝送することにより、命令（「要求された命令」）を要求する。タグアレイ３４は要求された命令のアドレスを受取り、受取ったアドレスとタグアレイ３４内に記憶されたアドレスとを比較することにより、要求された命令が命令キャッシュ３６内にあるか否かを決定する。
プロセッサコア１２に要求された命令を供給するためコンピュータシステム１０が次に実行するステップのシーケンスは、要求された命令が、その時点で命令キャッシュ３６内に記憶されている命令ライン内に含まれているか否かによって決定される。要求された命令が、その時点で命令キャッシュ３６内に記憶されていた命令ラインから見つからなかったときの、プロセッサコア１２に要求された命令を供給するためのステップシーケンスは以下に図２を参照して説明する。要求された命令が、その時点で命令キャッシュ３６内に記憶された命令ライン内にあるときの、プロセッサコア１２に要求された命令を供給するためのステップシーケンスは、以下に、図３を参照して説明する。
以下の説明においては、要求された命令を含む命令ラインをＬＩＮＥ１と呼び、メモリ１８内にＬＩＮＥ１のすぐ後に記憶されている命令ラインをＬＩＮＥ２と呼び、この要求された命令の後にプロセッサコア１２が要求する命令を第２の要求された命令と呼ぶ。
図２を参照し、プロセッサコア１２が要求した命令がその時点では命令キャッシュ３６内にない場合のコンピュータシステム１０の動作のフロー制御図が示される。したがって、ステップ９０で生じるキャッシュ探索の結果、ステップ９２に示す読出ミス状態となる。ブロック１００で、キャッシュコントローラ３２はキャッシュラインバッファ４０をＬＩＮＥ１で補充する動作を開始する。この動作の間に、要求された命令を含むＬＩＮＥ１内に含まれる命令はバス２８によりラインバッファ４０へ送られる。特定的には、キャッシュコントローラ３２は要求された命令のアドレスをバスインターフェイスユニット１６に送り、バスインターフェイスユニット１６は要求された命令のアドレスをバス２８により同報通信する。バス２８上のアドレスに応答して、メモリ１８は（要求された命令を含む）ＬＩＮＥ１からバス２８によりキャッシュラインバッファ４０への命令の伝送を開始する。
ブロック１０２では、ＬＩＮＥ１に含まれる命令がキャッシュラインバッファ４０に到達し信号ライン４８で伝送されるに伴い、命令プリデコードユニット３８がＬＩＮＥ１に含まれる命令を処理し、バス２６によりたとえばプロセッサコア１２などの適切な実行ユニットへ要求された命令を転送する。ステップ１０４においては、命令プリデコードユニット３８が、各命令をオンザフライで調べ、命令のいくつかが順になっていないか否かを決定することで、ＬＩＮＥ１の命令を処理する。所定の命令を実行すると、実行ユニットが所定の命令のすぐ次の命令以外の命令を要求するならば、その所定の命令は順になっていない。順になっていない命令の例には、ジャンプ、呼出、サブに進む、および分岐命令が含まれよう。命令プリデコードユニット３８は、たとえば、命令の操作コードをデコードするなどの、当業者には周知の方法により、命令が順になった命令であるかまたは順になっていない命令であるかを決定する。
ブロック１０６で、命令プリデコードユニット３８はＬＩＮＥ１の処理を完了し、ＬＩＮＥ１内の命令のいずれかが順になっていないか否かを示す信号をライン４２で伝送する。キャッシュコントローラ３２はライン４２上で制御信号を受取り、アドレスおよび制御バス４４によって信号を送り、ＬＩＮＥ１が順になっていない命令を含むか否かを示す表示をタグアレイ３４内に記憶する。好ましくは、ステップ１０８に示すように、タグアレイ３４内のビット（ＳＥＱ＿ＬＩＮＥ）を使用して、各命令ラインのすべての順序の状態を表示してもよい。たとえば、もし所定の命令ラインのすべての命令が順になっていれば、この所定の命令ラインに対応するタグアレイ３４内のＳＥＱ＿ＬＩＮＥビットは論理「１」状態に設定されよう。逆に、所定の命令ライン内の１つの命令でも順になっていなければ、タグアレイ３４内の対応するＳＥＱ＿ＬＩＮＥビットは論理「０」状態に設定される。ステップ１０７におけるように、順序ビットが論理「０」状態に設定されると、さらなる動作は起こらず、ステップ１０９に示すようにシステムは次のアクセスを待つ。
ブロック１１０、１１２、および１１４のステップは、上述のステップ１００から１０９と並行して実行される。ステップ１１０では、キャッシュコントローラ３２がＬＩＮＥ１のすぐ後に続く命令ラインのアドレス（すなわちＬＩＮＥ２のアドレス）を決定する。これは、たとえば、ＬＩＮＥ１の長さを反映した予め定められた値をＬＩＮＥ１のアドレスに加え（たとえばＡＤＲline1＋１０hex）、この次のラインを第２のタグ状態ポート４７で探索することにより達成されよう。一旦ＬＩＮＥ２のアドレスが決定すれば、キャッシュコントローラ３２はＬＩＮＥ２のアドレスをタグアレイ３４に送る。こうして、タグアレイ３４内の探索動作が開始され、ステップ１１２で、ＬＩＮＥ２が命令キャッシュ３６内にあるか否かが決定される。もしＬＩＮＥ２が命令キャッシュ３６内にあれば、ブロック１１４に示すようにさらなる動作は必要ない。他方、もしＬＩＮＥ２が命令キャッシュ３６内になければ、キャッシュコントローラ３２は、命令プリデコードユニット３８がＬＩＮＥ１を完全に調べるまで待つ（ステップ１１６）。
上述したように、もし命令プリデコードユニット３８が、ＬＩＮＥ１内のたとえ１つの命令でも順になっていないと決定したならば、ステップ１０６、１０７、１０９に示すようにさらなる動作は必要ない。しかし、もしステップ１０６でＬＩＮＥ１内のすべての命令が順になっていると決定されたならば、そして、それに従ってステップ１０８で順序ラインビットが設定されたならば、処理はブロック１１８に進み、ここで、プロセッサコア１２による要求がなくとも、キャッシュコントローラ３２は次のラインのライン補充を要求する。有効な順序ラインビットがこの時点のライン補充が完了していることを示すので、このアクションをすぐ実行できる。したがって、ステップ１２０では、キャッシュコントローラ３２がアドレスおよび制御バス３０によりＬＩＮＥ２のアドレスをバスインターフェイスユニット１６に送り、キャッシュラインバッファ４０をバス２８を通じてＬＩＮＥ２で補充するための探索動作を開始する。ＬＩＮＥ１は既に命令キャッシュ３６に転送されてしまっているので、キャッシュラインバッファ４０をすぐに補充することができよう。ＬＩＮＥ２はすぐに命令キャッシュ３６にコピーされるわけではない。そうではなく、プロセッサコア１２が第２の要求された命令を要求する（次のアクセスをする）のをキャッシュコントローラ３２は待つ。
ステップ１２２で、キャッシュコントローラ３２は要求された命令のアドレスがキャッシュラインバッファ４０内のＬＩＮＥ２内にあるか否かを決定する。もし、第２の要求された命令がＬＩＮＥ２内になければ、この方法はブロック１２４に進む。ブロック１２４で、この時点でキャッシュラインバッファ４０内にある情報（ＬＩＮＥ２）は放棄される。キャッシュコントローラ３２は実命令アドレスでキャッシュライン補充を実行し、プロセッサコア１２などの適切な実行ユニットに命令を転送する。
もしブロック１２２で、次に要求された命令のアドレスがキャッシュラインバッファ４０の内容（ＬＩＮＥ２）をヒットすると、キャッシュコントローラ３２が決定すれば、ステップ１３０に示すように、キャッシュラインバッファ内の情報はキャッシュ３６にコピーされ、すぐにたとえばプロセッサコア１２などの実行ユニットに転送される。ステップ１０４から１０９の処理と同様の処理がコントローラ３２で行なわれ、ＬＩＮＥ２内のすべての命令が順になっているか否かが決定される。特定的には、ブロック１３２で命令プリデコードユニット３８は、オンザフライでＬＩＮＥ２をデコードし、ＬＩＮＥ２が順になっていない命令を含むか否かを示す制御信号をライン４２によってキャッシュコントローラ３２へ送る。ブロック１３３では、キャッシュコントローラ３２はアドレスおよび制御バス４４により制御信号をタグアレイ３４に送り、ＬＩＮＥ２が順になっていない命令を含むか否かに基づいて、ステップ１３４および１３５に示すように命令キャッシュ３６内のＬＩＮＥ２に対応するＳＥＱ＿ＬＩＮＥビットをタグアレイ３４内に設定する。一旦、ＬＩＮＥ２が命令キャッシュ３６内に記憶され、ＬＩＮＥ２に対応するＳＥＱ＿ＬＩＮＥビットが適切にタグアレイ３４内に設定されると、さらなる動作は必要なく、処理はステップ９０に戻る。
次に図３を参照し、ステップ９０でのキャッシュ探索の結果、要求された命令（ＬＩＮＥ１）を含むラインが初めに命令キャッシュ３６内にある、読出ヒット状態になった場合のキャッシュ配置１４の動作のフロー制御図を示す。ブロック１５０で、キャッシュコントローラ３２は第１のポート４５を通じてタグアレイ３４にアクセスし、タグアレイ３４内のＬＩＮＥ１に対応するＳＥＱ＿ＬＩＮＥビットの状態を決定する。ブロック１５２で、キャッシュコントローラ３２は、アクセスされたＳＥＱ＿ＬＩＮＥビットの状態に基づいて、ＬＩＮＥ１が順になっていない命令を含むか否かを決定する。もしＬＩＮＥ１が少なくとも１つの順になっていない命令を含めば、ブロック１５４に示すようにさらなる動作は必要ない。
もしＬＩＮＥ１が順になっていない命令を含まなければ（すなわち命令が順になっていれば）、ブロック１５６でキャッシュコントローラ３２は第２のポート４７を通じてタグアレイ３４にアクセスし、ブロック１５８で、次のラインたとえばＡＤＲline1＋１０hexのＬＩＮＥ２がその時点でキャッシュ３６内にあるか否かを決定する。もし次のラインがキャッシュ３６内にあれば、ブロック１６０に示すようにさらなる動作は必要ない。
もし次のラインがキャッシュ３６内になければ、外部メモリ１８からライン（ＬＩＮＥ２）を引出さねばならない。ステップ１６２で、キャッシュコントローラ３２は、バスインターフェイスユニット１６にＬＩＮＥ２のアドレスを送り、すぐに次のラインでのライン補充を要求する。ブロック１６４に示すよう、バスインターフェイスユニット１６はバス２８を通じてのメモリ１８からのＬＩＮＥ２でのキャッシュラインバッファ４０（キャッシュ３６ではない）のロードのための動作を開始する。プロセッサコア１２がまだＬＩＮＥ２からいかなる命令も要求していなくとも、ステップ１６２およびステップ１６４でＬＩＮＥ２が引出される。
ＬＩＮＥ２はすぐさまキャッシュラインバッファ４０から命令キャッシュ３６にコピーされるのではない。むしろ、ステップ１６６に示すように、プロセッサコア１２などの実行ユニットが次の命令にアクセスするのをキャッシュコントローラ３２は待つ。ステップ１６８で、次の命令アクセスにおいて、キャッシュコントローラ３２は、次に要求された命令アクセスのアドレスがキャッシュラインバッファ４０でヒットするか、すなわち次の命令がＬＩＮＥ２にあるか否かを決定する。
もしＬＩＮＥ２が次に要求された命令を含まなければ、この方法はステップ１７０に進み、ここでキャッシュラインバッファ４０内にある情報が放棄される。そして処理はステップ９０のキャッシュ探索に戻る。
もしステップ１６８で、次に要求された命令のアドレスがキャッシュラインバッファ４０でのヒットになることが決定されれば、ステップ１７０に示すように、キャッシュラインバッファ４０内の情報はキャッシュ３６にコピーされ、実行ユニットに転送される。このステップに続いて、図２に関して説明した読出ミスコアにおけるステップ１０６−１０９および１３２−１３５で使用された処理と同様の順序ライン決定処理が行なわれる。ステップ１７２で、命令はオンザフライでデコードされ、ライン内のすべての命令が順になっているか否かが決定される。もしステップ１７４で、すべての命令が順になっているとわかれば、ステップ１７６で、ＬＩＮＥ２に対するＳＥＱ＿ＬＩＮＥビットが適切に設定される（すなわち論理「１」状態）。もし、ステップ１７４で、ＬＩＮＥ２内のすべての命令が順になっていなければ、ステップ１７８でＬＩＮＥ２に対するＳＥＱ＿ＬＩＮＥビットが適切に設定される（すなわち論理「０」状態）。いずれの場合にも、処理はステップ９０のキャッシュ探索に戻る。
他方、もしステップ１６８で、次に要求された命令のアドレスがキャッシュラインバッファ４０でのヒットにならないと決定されれば、ステップ１７１に示すようにキャッシュラインバッファ４０内に記憶された情報は放棄され、処理は終わる。
上述の説明を簡単にするため、コンピュータシステム１０は単一のキャッシュレベルを有し、メモリ１８は直接バス２８と接続され、メモリ１８はバス２８を通じて同報通信されるアドレスに応答してライン補充動作のため命令を供給するものと仮定している。しかし、より複雑なコンピュータシステムにおいては、キャッシュラインバッファ４０は直接システムメモリ１８に接続されていなくともよく、命令はシステムメモリ１８以外のソースから供給されてもよい。
たとえば、多重レベルキャッシュシステムでは、キャッシュ配置１４がバス２８によって（図示しない）第２レベル（Ｌ２）キャッシュ配置に接続されていてもよい。このような構成においては、第２レベルキャッシュ配置はバス２８上で同報通信される要求された命令のアドレスを受取り、対応する命令ラインをバス２８を通してキャッシュラインバッファ４０に送る。もし、対応する命令ラインがその時点で第２レベルキャッシュ内に記憶されていなければ、第２レベルキャッシュは第２レベルキャッシュを含む記憶構成要素から命令ラインを引出し、キャッシュ配置１４に命令ラインを送る。
さらに、もしコンピュータシステム１０内でバスマスタとして作用することができる、キャッシュを備えたプロセッサが他にもあるならば、メモリ１８が要求された命令ラインの最も最近に変更された型を含んでいなくともよい。このような場合には、要求された命令ラインの最も最近に変更された型を含む、キャッシュを備えた記憶構成要素または装置によりバス２８を通じてキャッシュラインバッファ４０に命令ラインが供給される。
上に詳細に説明したように、プロセッサコア１２がじきにＬＩＮＥ２から命令を要求しそうなときには、実行ユニット内のプロセッサコア１２がＬＩＮＥ２からのいずれかの命令を要求する前に、この発明のキャッシュ配置１４はＬＩＮＥ２をキャッシュバッファ４０にプリロードする。キャッシュ配置１４は、ＬＩＮＥ１からの命令がすべて順になっているとき、プロセッサコア１２がじきにＬＩＮＥ２からの命令を要求するであろうと判断する。その結果、プロセッサコア１２が所定の命令を要求するとき、命令キャッシュ３６がその所定の命令を含んでいる尤度が大いに増加する。順になっていない命令が少なくなればなるほど、この発明による性能の向上も増す。さらに、入来命令ストリームが順になっていない命令を含んでいるときでも性能上のペナルティは全くない。
ＬＩＮＥ２がキャッシュラインバッファ４０にロードされてしまうと、次に要求された命令がＬＩＮＥ２内にはないと決定されたならば、放棄されてしまうだけであるという、小さなペナルティがバス２８で生じる。しかし、次に要求された命令がＬＩＮＥ２内にないと決定されればできるだけ早くＬＩＮＥ２のキャッシュラインバッファ４０への転送をやめることにより、この小さなペナルティが最小化される。また、コンピュータシステム１０は、たとえば、第２のレベル２（Ｌ２）キャッシュメモリがキャッシュ配置１４とバス２８との間に配置された、多重レベルキャッシュシステムであってもよい。この構成においては、キャッシュ配置１４、プロセッサコア１２、バスインターフェイスユニット１６、およびレベル２キャッシュ（図示せず）のためのコントローラはすべて、同じ半導体チップ上にあってよい。キャッシュ配置１４とレベル２キャッシュのためのキャッシュコントローラとの間のバス２８で帯域幅が若干増加したとしても、コンピュータシステム１０の性能および効率性にはごく少しの影響しかないであろう。
典型的なプロセッサのパイプライン内では、第１の命令に対する命令取出動作は、第１の命令が実行されるよりも少なくとも２クロックサイクル前に完了する。ここで説明したこの発明による処理を実現する装置は、第１の命令のための命令取出が完了するとすぐに次に要求される命令を含みそうな命令ラインの取出を始める。したがって、取出されたラインが次に要求される命令を含んでいれば、次に要求される命令のための命令取出は第１の命令の実行と並行して実行されることになる。プロセッサは第１の命令の実行の結果を待って次の命令の取出を始める必要はないので、システムの全体としてのキャッシュラインミス待ち時間（すなわち命令要求から命令供給までにかかる待ち時間）は大きく減じられる。
この詳細な説明と特定の例とは、この発明の好ましい実施例を説明するものであり、例示的なものであって、この発明の装置は、ここに開示した厳密な細部および状態に限定されるものではなく、以下の請求項によって規定されるこの発明の精神から逸脱することなく、さまざまな変更を行ない得ることが理解されよう。
【図１】
0003763579.tif 000002
【図２】
0003763579.tif 000003
【図３】
0003763579.tif 000004