(57)【要約】【課題】  キャッシュされたメモリを用いるプロセッサにおいて命令及びデータを取り出すことについて改善された方法を提供すること。【解決手段】  方法は、レベル２キャッシュから第１命令ラインをフェッチするステップと、第１の命令ラインから、第１の命令ラインまたは異なる命令ラインに含まれているデータ・アクセス命令のターゲットとされたデータを含む第１のデータ・ラインの識別アドレスを抽出するステップと、抽出されたアドレスを用いて、レベル２キャッシュから第１のデータ・ラインをプリフェッチするステップを含む。【選択図】      図２
2007207240.tif 000002
【特許請求の範囲】
【請求項１】
データ・ラインをプリフェッチする方法であって、
（ａ）レベル２キャッシュから第１の命令ラインをフェッチするステップと、
（ｂ）前記第１の命令ラインから、当該第１の命令ラインまたは異なる命令ラインに含まれているデータ・アクセス命令のターゲットとされたデータを含む第１のデータ・ラインの識別アドレスを抽出するステップと、
（ｃ）前記抽出されたアドレスを用いて、前記レベル２キャッシュから第１のデータ・ラインをプリフェッチするステップと、
を含む方法。
【請求項２】
前記第１の命令ラインにおいて、当該第１の命令ラインの外部にある命令をターゲットとする分岐命令を識別するステップと、
前記識別された分岐命令に対応する出口アドレスを抽出するステップと、
前記抽出された出口アドレスを用いて、前記レベル２キャッシュから、前記ターゲットとされた命令を含む第２の命令ラインをプリフェッチするステップと、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記第２の命令ラインについて（ａ）から（ｃ）の前記ステップを繰り返し、第２のデータ・アクセス命令のターゲットとされた第２のデータを含む第２のデータ・ラインをプリフェッチするステップをさらに含む、請求項２の記載の方法。
【請求項４】
前記第２のデータ・アクセス命令が前記第２の命令ラインに存在する、請求項３に記載の方法。
【請求項５】
前記第２のデータ・アクセス命令が前記第１の命令ラインに存在する、請求項３に記載の方法。
【請求項６】
所定の数のデータ・ラインがプリフェッチされるまで（ａ）から（ｃ）の前記ステップを繰り返すことをさらに含む、請求項１に記載の方法。
【請求項７】
第１の命令ラインにおいて、第２のデータをターゲットとする第２のデータ・アクセス命令を識別するステップと、
前記識別された第２のデータ・アクセス命令から第２のアドレスを抽出するステップと、
前記抽出された第２のアドレスを用いて、前記レベル２キャッシュから、前記ターゲットとされた第２のデータを含む第２のデータ・ラインをプリフェッチするステップと、
をさらに含む、請求項１に記載の方法。
【請求項８】
前記抽出されたアドレスが、命令ラインに含まれる有効アドレスとして格納される、請求項１に記載の方法。
【請求項９】
前記命令ラインが第１の命令ラインである、請求項８に記載の方法。
【請求項１０】
前記有効アドレスが、前の識別された分岐命令の実行の間に算出される、請求項８に記載の方法。
【請求項１１】
前記第１の命令ラインが、２以上のデータをターゲットとする２以上のデータ・アクセス命令を含み、前記第１の命令ラインに格納されているデータ・アクセス履歴値が、識別されたデータ・アクセス命令がキャッシュ・ミスを引き起こすと予測されることを示す、請求項１に記載の方法。
【請求項１２】
前記第１の命令ラインにおいて、第１のデータをターゲットとするデータ・アクセス命令を識別することをさらに含む、請求項１に記載の方法。
【請求項１３】
レベル２キャッシュと、
各々が１以上の命令を含む命令ラインを前記レベル２キャッシュから受信するように構成されたレベル１キャッシュと、
前記レベル１キャッシュから取り出された命令を実行するように構成されたプロセッサ・コアと、
（ａ）レベル２キャッシュから第１の命令ラインをフェッチし、
（ｂ）前記第１の命令ラインにおいて、前記第１の命令ラインまたは異なる命令ラインに含まれているデータ・アクセス命令のターゲットとされたデータを含む第１のデータ・ラインの識別アドレスを識別し、
（ｃ）前記抽出されたアドレスを用いて、前記レベル２キャッシュから第１のデータ・ラインをプリフェッチするように構成された回路と、
を備える、プロセッサ。
【請求項１４】
前記抽出されたアドレスが、命令ラインに含まれる有効アドレスとして格納される、請求項１３に記載のプロセッサ。
【請求項１５】
前記有効アドレスが、前の識別された分岐命令の実行の間に算出される、請求項１４に記載のプロセッサ。
【請求項１６】
前記有効アドレスが、トレーニング・フェーズの間に算出される、請求項１５に記載のプロセッサ。
【請求項１７】
データ・ターゲット・アドレスを命令ラインに格納する方法であって、
命令ラインにある１以上の命令を実行するステップと、
前記１以上の命令がデータ・ラインの中のデータにアクセスし、キャッシュ・ミスをもたらすかどうかを判定するステップと、
キャッシュ・ミスをもたらすと判定された場合に、前記データ・ラインに対応するデータ・ターゲット・アドレスを、プリフェッチ機構によってアクセス可能な位置に格納するステップと、
を含む方法。
【請求項１８】
前記プリフェッチ機構によってアクセス可能な位置が前記命令ラインである、請求項１７に記載の方法。
【請求項１９】
前記命令ラインおよび前記ターゲット・データ・アドレスを、レベル２キャッシュに書戻すことをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記データ・ターゲット・アドレスを伴う命令ラインをレベル２キャッシュに格納するステップと、
前記レベル２キャッシュから、前記データ・ターゲット・アドレスを伴う命令ラインをフェッチし、当該命令ラインをレベル１キャッシュに配置するステップと、
前記格納されたデータ・ターゲット・アドレスを用いて、前記データ・ラインをプリフェッチするステップと、
をさらに含む、請求項１８に記載の方法。
【請求項２１】
前記プリフェッチ機構によってアクセス可能な位置はシャドウ・キャッシュである、請求項１７に記載の方法。
【請求項２２】
前記プリフェッチ機構によってアクセス可能な位置に、前記１以上の命令に対応するデータ・アクセス履歴情報を格納するステップをさらに含む、請求項１７に記載の方法。
【請求項２３】
前記命令ラインにある１以上の命令のその後の実行の間に、前記命令ラインにある第２の１以上の命令を実行するステップと、
前記第２の１以上の命令が第２のデータ・ラインの中のデータにアクセスし、当該アクセスが第２のキャッシュ・ミスをもたらす場合に、前記１以上の命令に対応する前記データ・アクセス履歴情報が、前記キャッシュ・ミスが予測可能であることを示すかどうかを判定するステップと、
前記キャッシュ・ミスが予測可能ではなかった場合には、前記第２のデータ・ラインに対応する前記命令ラインに、第２のデータ・ターゲット・アドレスを付加するステップと、
をさらに含む、請求項２２に記載の方法。
【請求項２４】
前記データ・アクセス・アドレスを格納するステップは、複数の命令ラインが繰り返し実行される最初の実行フェーズの間に行われる、請求項１７に記載の方法。
【請求項２５】
前記命令ラインにある第２の１以上の命令を実行するステップと、
前記第２の１以上の命令が、別の命令ラインにある命令へ分岐するかどうかを判定するステップと、
分岐すると判定された場合に、他の命令ラインに対応する出口アドレスを前記位置に格納するステップと、
をさらに含む、請求項１７に記載の方法。
【請求項２６】
前記データ・アクセス・アドレスは、前記１以上の命令のうちの１つの実行の間に算出された有効アドレスである、請求項１７に記載の方法。
【請求項２７】
命令ラインにある１以上の命令を実行するプロセッサ・コアと、
前記１以上の命令がデータ・ラインの中のデータにアクセスし、キャッシュ・ミスをもたらすかどうかを判定し、キャッシュ・ミスをもたらすと判定された場合に、前記データ・ラインに対応するデータ・ターゲット・アドレスを、プリフェッチ機構によってアクセス可能な位置に格納する回路と、
を備える、プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、コンピュータ・プロセッサの分野に関する。より具体的には、本発明は、コンピュータ・プロセッサによって用いられるキャッシュ機構に関する。
【背景技術】
【０００２】
現代のコンピュータ・システムは、一般的に、コンピュータ・システム内の情報を処理するために使用することができるプロセッサを含む、数個の集積回路（ＩＣ）を備える。プロセッサによって処理されたデータは、プロセッサによって実行されるコンピュータ命令を含み、さらに、そのコンピュータ命令を用いるプロセッサによって取り扱われるデータを含むことができる。一般的に、コンピュータ命令およびデータは、コンピュータ・システムのメイン・メモリに格納される。
【０００３】
プロセッサは、一般的に、一連の小ステップに分けて命令を実行することによって命令を処理するの。プロセッサによって処理される命令の数を増やす（そしてプロセッサの速度を上げる）ために、プロセッサをパイプラインすることができる場合がある。ここで、「パイプラインすること」とは、各々が１つの命令を実行するために必要な小ステップの１以上を行う独立した段を、プロセッサに提供することをいう。パイプラインは（他の回路に加えて）、プロセッサ・コアと呼ばれるプロセッサの一部に配置することができる。プロセッサは、複数のプロセッサ・コアを有することができる場合がある。
【０００４】
パイプラインにおける命令実行の１つの例として、第１の命令が受信されたときに、第１のパイプライン段はその命令の小部分を処理することができる。第１のパイプライン段がその命令の小部分の処理を終了したときに第２のパイプライン段が第１の命令の別の小部分の処理を開始することができ、その間に第１のパイプライン段は第２の命令を受信し、その小部分の処理を開始する。このようにして、プロセッサは、２以上の命令を同時に（並行して）処理することができる。
【０００５】
データおよび命令へのより高速のアクセス、および、プロセッサのより良好な活用を提供するために、プロセッサは、数個のキャッシュを有することができる。キャッシュとは、一般的に、メイン・メモリより小さく、プロセッサと同じダイ（すなわちチップ）上に製造されるメモリである。現代のプロセッサは、一般的に、複数のレベルのキャッシュを有する。プロセッサ・コアの最も近辺に設置される最も高速のキャッシュは、レベル１キャッシュ（Ｌ１キャッシュ）と呼ばれる。プロセッサは、一般的に、Ｌ１キャッシュに加えて、レベル２キャッシュ（Ｌ２キャッシュ）と呼ばれる、第２のより大型のキャッシュを有する。プロセッサは、他の付加的なレベルのキャッシュを有することもある（例えば、Ｌ３キャッシュおよびＬ４キャッシュ）。
【０００６】
プロセッサにプロセッサのパイプラインの各段を満たすのに十分な命令を与えるために、プロセッサは、Ｌ２キャッシュから命令ラインと呼ばれる複数の命令を含んだグループの形で命令を取り出すことができる。取り出された命令ラインはＬ１命令キャッシュ（Ｉ−キャッシュ）に配置することができ、プロセッサ・コアは命令ラインにある命令にアクセスすることができる。同様に、プロセッサによって処理されるべきデータ・ブロックは、Ｌ２キャッシュから取り出し、Ｌ１キャッシュ・データ・キャッシュ（Ｄ−キャッシュ）に配置することができる。
【０００７】
より上位レベルのキャッシュから情報を取り出し、その情報をより下位レベルのキャッシュに配置するプロセスは「フェッチする」と称され、一般的に、ある程度の時間（待ち時間）を要する。例えば、プロセッサ・コアが情報を要求し、その情報がＬ１キャッシュに存在しなかった場合（これはキャッシュ・ミスと呼ばれる）、その情報をＬ２キャッシュからフェッチすることができる。要求された情報のために次のレベルのキャッシュ／メモリが検索されることから、キャッシュ・ミスは付加的な待ち時間をもたらす。例えば、要求された情報がＬ２キャッシュに存在しなかった場合には、プロセッサは、Ｌ３キャッシュやメイン・メモリの中にその情報を探すであろう。
【０００８】
プロセッサは、ある命令およびデータを、キャッシュおよび／またはメモリから取り出される命令およびデータよりも速く処理することができる場合がある。例えば、命令ラインが処理された後で、処理されるべき次の命令ラインにアクセスするために時間がかかる場合がある（例えば、次の命令を含む命令ラインを求めてＬ１キャッシュが検索された時に、キャッシュ・ミスがあった場合など）。プロセッサがより上位レベルのキャッシュまたはメモリから次の命令ラインを取り出している間に、パイプライン段は前の命令の処理を終了し、それ以上処理する命令が残っていない場合がある（これは、パイプライン停止と呼ばれる）。パイプラインが停止したときには、プロセッサは活用されておらず、パイプラインされたプロセッサ・コアによって得られる利益を失うことになる。
【０００９】
命令（そして命令ライン）は、一般的に、逐次的に処理されることから、プロセッサは、逐次的にアドレスされた命令ラインのブロックをフェッチすることによって、パイプライン停止を防ぐことを試みる場合がある。逐次的にアドレスされた命令ラインのブロックをフェッチすることにより、次の命令ラインは必要とされた時に既にＬ１キャッシュにおいて利用可能となることができ、したがって、プロセッサ・コアは、現行の命令ラインにある命令の処理を終了したときに、次の命令ラインにある命令に容易にアクセスすることができる。
【００１０】
逐次的にアドレスされた命令ラインのブロックをフェッチしても、パイプライン停止を防ぐことができない場合がある。例えば、出口分岐（ｅｘｉｔ  ｂｒａｎｃｈ）命令と呼ばれる命令は、プロセッサを、逐次的にアドレスされた命令ラインのブロックの外部にある命令（ターゲット命令と呼ばれる）へ分岐させる場合がある。ここで、出口分岐命令は、現行の命令ラインに存在しないかまたは次の逐次的にアドレスされ既にフェッチされた命令ラインに存在するターゲット命令へ分岐する場合がある。したがって、分岐が行われるとプロセッサが判定したときに、出口分岐のターゲット命令を含む次の命令ラインは、Ｌ１キャッシュにおいて利用可能とならない場合がある。その結果として、パイプラインが停止し、プロセッサが非効率的に動作する場合がある。
【００１１】
データをフェッチすることに関して、命令がデータにアクセスする場合に、プロセッサが、Ｌ１キャッシュにあるデータを含むデータ・ラインを見つけることを試みる場合がある。データ・ラインがＬ１キャッシュにおいて見つけられなかった場合には、所望のデータ・ラインを求めてＬ２キャッシュ、および、上位のメモリが検索されている間、プロセッサが停止する場合がある。所望のデータのアドレスは命令が実行されるまで知られないことから、プロセッサは、その命令が実行されるまで所望のデータ・ラインを検索することができない場合がある。プロセッサが実際にデータ・ラインを検索したときに、キャッシュ・ミスが起こってパイプラインが停止することがある。
【００１２】
プロセッサは、現行のアクセスされているデータ・アドレスに近い（連続する）データ・アドレスを含むデータ・ラインのブロックをフェッチすることによって、こうしたキャッシュ・ミスを防ぐようにされる場合がある。近傍のデータ・ラインをフェッチすることは、あるデータ・ラインに存在するデータ・アドレスがアクセスされたときに、その近傍のデータ・アドレスもまたアクセスされる可能性が高いという仮定に依拠している（この仮定は、一般に、「参照の局所性」と呼ばれる）。しかし、この仮定が正しくない場合もあり、そのような場合、命令により現行のデータ・ラインの近傍に位置していないデータ・ラインにあるデータがアクセスされることによって、キャッシュ・ミスおよびプロセッサの非効率性がもたらされる。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
したがって、キャッシュされたメモリを用いるプロセッサにおいて命令およびデータを取り出すことについて改善された方法に対する必要性が存在する。
【課題を解決するための手段】
【００１４】
本発明の実施形態は、データ・ラインをプリフェッチするための方法および装置を提供する。方法は、レベル２キャッシュから第１の命令ラインをフェッチするステップと、第１の命令ラインから、第１の命令ラインまたは異なる命令ラインに含まれているデータ・アクセス命令のターゲットとされたデータを含む第１のデータ・ラインの識別アドレスを抽出するステップと、抽出されたアドレスを用いて、レベル２キャッシュから第１のデータ・ラインをプリフェッチするステップとを含む。
【００１５】
ある実施形態においては、プロセッサが提供される。プロセッサは、レベル１キャッシュと、レベル２キャッシュと、プロセッサ・コアと、回路とを備える。レベル１キャッシュは、レベル２キャッシュから、１以上の命令を含む命令ラインを受信するように構成される。プロセッサ・コアは、レベル１キャッシュから取り出された命令を実行するように構成される。回路は、レベル２キャッシュから第１の命令ラインをフェッチし、第１の命令ラインまたは異なる命令ラインに含まれているデータ・アクセス命令のターゲットとされたデータを含む第１のデータ・ラインの識別アドレスをその第１の命令ラインにおいて識別し、抽出されたアドレスを用いて、レベル２キャッシュから第１のデータ・ラインをプリフェッチするように構成される。
【００１６】
ある実施形態においては、命令ラインにデータ・ターゲット・アドレスを格納する方法が提供される。方法は、命令ラインにある１以上の命令を実行するステップと、１以上の命令がデータ・ラインの中のデータにアクセスし、キャッシュ・ミスをもたらすかどうかを判定するステップと、キャッシュ・ミスをもたらすと判定された場合に、データ・ラインに対応するデータ・ターゲット・アドレスを、プリフェッチ機構によってアクセス可能な位置に格納するステップとを含む。
【００１７】
ある実施形態においては、プロセッサが提供される。プロセッサは、命令ラインにある１以上の命令を実行するプロセッサ・コアと、１以上の命令がデータ・ラインの中のデータにアクセスし、キャッシュ・ミスをもたらすかどうかを判定し、キャッシュ・ミスをもたらすと判定された場合に、データ・ラインに対応するデータ・ターゲット・アドレスを、プリフェッチ機構によってアクセス可能な位置に格納する回路を備える。
【発明を実施するための最良の形態】
【００１８】
本発明の上記の特徴、利点、および目的が得られる手法が詳細に理解できるように、上記で要約された本発明のより具体的な説明が、添付の図面に示されている本発明の実施形態を参照することによってなされる。
【００１９】
しかし、添付の図面は本発明の典型的な実施形態のみを図示するものであって、本発明の範囲を限定するものと見なされるべきではないことに留意すべきである。
【００２０】
本発明の実施形態は、データ・ラインをプリフェッチするための方法および装置を提供する。本発明の実施形態においては、データ・ラインにあるデータをターゲットにするデータ・アクセス命令（例えばロード命令または格納命令）について、フェッチされている命令ラインを検査することができる。このようなデータ・アクセス命令のターゲット・データ・アドレスを抽出して、ターゲットにされたデータを含むデータ・ラインをＬ２キャッシュからプリフェッチするために用いることができる。その結果として、データ・ターゲティング命令が実行された場合に、ターゲットにされたデータ・ラインは、既にＬ１データ・キャッシュ（「Ｄ−キャッシュ」）に存在するようにすることができ、そうすることによって、コストのかかるデータ・キャッシュ・ミスをなくして全体の性能を向上させることができる。
【００２１】
本発明の実施形態においては、プリフェッチ・データ（例えば、ターゲット・アドレス）は、プリフェッチ・データが属する（例えば命令ラインまたはデータ・ラインに付加された）対応する情報ブロックの形で従来のキャッシュ・メモリに格納することができる。例えば、対応する情報のラインがキャッシュ・メモリからフェッチされる際に、そこに含まれているプリフェッチ・データを検査して、他の関連する情報のラインをプリフェッチするために用いることができる。次いで、各々の他のプリフェッチされた情報のラインに格納されたプリフェッチ・データを用いて、同様のプリフェッチを行うことができる。フェッチされた命令ライン内の情報を用いて、命令ラインにある命令によってターゲットとされたデータを含むデータ・ラインをプリフェッチすることにより、フェッチされた情報ブロックに関連付けられたキャッシュ・ミスを防ぐことができる。
【００２２】
本発明の実施形態によれば、プリフェッチ・データを命令ラインの一部としてキャッシュに格納することにより、プリフェッチ・データおよび予測データを排他的に格納する特別なキャッシュまたはメモリを不要とすることができる。しかし、上述されたように、かかる情報は、そうした履歴情報の格納を専門とする特別なキャッシュまたはメモリを含むいかなる位置に格納してもよい。また、異なるキャッシュ（およびキャッシュ・ライン）、バッファ、専用キャッシュ、および他の位置の組み合わせを用いて、ここに説明された履歴情報を格納することができる場合がある。
【００２３】
以下は、添付の図面に図示された本発明の実施形態の詳細な説明である。本発明の実施形態はあくまで例示であり、本発明を明確に教示するため、詳細なものとなっている。しかし、開示された詳細な説明は、実施形態の予期される変形物を排除することを意図しておらず、逆に、添付の特許請求の範囲によって定められる本発明の精神および範囲内にある全ての修正物、均等物、および代替物を包含することにあることを意図している。
【００２４】
本発明の実施形態は、例えばコンピュータ・システムなどのシステムとともに用いることができ、また、そうしたシステムに関して説明される。本明細書において用いられるシステムという用語は、パーソナル・コンピュータ、インターネット機器、ディジタル・メディア機器、携帯情報端末（ＰＤＡ）、携帯型音楽／映像再生機、およびビデオゲーム機を含めた、プロセッサおよびキャッシュ・メモリを用いるいかなるシステムも含むことができる。キャッシュ・メモリは、そのキャッシュ・メモリを使用するプロセッサと同じダイに設置することができるが、プロセッサとキャッシュ・メモリは、異なるダイ（例えば、独立したモジュール内の独立したチップ、または単一のモジュール内の独立したチップ）に設置することもできる。
【００２５】
本発明の実施形態は、各々がパイプラインを用いて命令を実行する複数のプロセッサ・コアと複数のＬ１キャッシュとを有するプロセッサに関して以下で説明されるが、単一の処理コアを有するプロセッサおよび／または命令の実行にパイプラインを用いないプロセッサを含む、キャッシュを用いるいずれかのプロセッサとともに用いることもできる。一般的に、本発明の実施形態は、いかなるプロセッサとも用いることができ、特定の構成に限定されない。
【００２６】
本発明の実施形態は、以下で、Ｌ１命令キャッシュ（Ｌ１  Ｉ−キャッシュ２２２）とＬ１データ・キャッシュ（Ｌ１  Ｄ−キャッシュ２２４）に分割されたＬ１キャッシュを有するプロセッサに関して説明されるが、統合されたＬ１キャッシュが用いられるような構成において用いることができる。さらに、本発明の実施形態は、以下で、命令ラインおよびデータ・ラインをＬ２キャッシュからプリフェッチすること、および、プリフェッチされたラインをＬ１キャッシュに配置することに関して説明されるが、いずれかのキャッシュまたはメモリ・レベルから別のいずれかのキャッシュまたはメモリ・レベルへ命令ラインおよびデータ・ラインをプリフェッチするために用いることもできる。
【００２７】
（例示的なシステムの概要）
図１は、本発明の実施形態によるシステム１００を図示するブロック図である。システム１００は、命令およびデータを格納するためのシステム・メモリ１０２、グラフィックス処理のためのグラフィックス処理装置１０４、外部デバイスと通信するためのＩ／Ｏインターフェース、命令およびデータを長期格納するためのストレージ・デバイス１０８、および、命令およびデータを処理するためのプロセッサ１１０を含むことができる。
【００２８】
本発明の実施形態により、プロセッサ１１０は、Ｌ２キャッシュ１１２、複数のＬ１キャッシュ１１６を有することができ、Ｌ１キャッシュ１１６の各々は、複数のプロセッサ・コア１１４の１つによって用いられる。ある実施形態によれば、プロセッサ・コア１１４の各々はパイプラインすることができ、命令の各々は一連の小ステップの形で実施され、ステップの各々は異なるパイプライン段によって実施される。
【００２９】
図２は、本発明の実施形態によるプロセッサ１１０を図示するブロック図である。簡略化のために、図２は、プロセッサ１１０の単一のコア１１４を図示し、これに関して説明される。ある実施形態においては、コア１１４の各々は、同一のものとすることができる（例えば、同一のパイプライン段を伴う同一のパイプラインを含む）。別の実施形態においては、コア１１４の各々は異なるものとすることができる（例えば、異なる段を伴う異なるパイプラインを含む）。
【００３０】
本発明の実施形態においては、Ｌ２キャッシュは、プロセッサ１１０によって使用される命令およびデータの一部を格納することができる。プロセッサ１１０は、Ｌ２キャッシュ１１２に格納されていない命令およびデータを要求する場合がある。要求された命令およびデータがＬ２キャッシュ１１２に格納されていない場合には、要求された命令およびデータを（上位のレベルのキャッシュまたはシステム・メモリ１０２から）取り出して、Ｌ２キャッシュに配置することができる。プロセッサ・コア１１４がＬ２キャッシュ１１２から命令を要求したときに、その命令を、まずプリデコーダおよびスケジューラ２２０で処理することができる（以下でより詳細に説明する）。
【００３１】
本発明の実施形態においては、図１に図示されたＬ１キャッシュ１１６は、２つの部分、すなわち、命令ラインを格納するためのＬ１命令キャッシュ２２２（Ｌ１  Ｉ−キャッシュ）２２２、および、データ・ラインを格納するためのＬ１データ・キャッシュ（Ｌ１  Ｄ−キャッシュ）２２４に分割することができる。Ｌ２キャッシュ１１２から取り出された命令ラインがプリデコーダおよびスケジューラ２２０によって処理された後で、命令ラインを命令キャッシュ２２２に配置することができる。同様にして、Ｌ２キャッシュ１１２からフェッチされたデータ・ラインは、データ・キャッシュ２２４に配置することができる。Ｌ２キャッシュ１１２にある情報のラインが命令ラインであるかデータ・ラインであるかを追跡するために、命令ラインおよびデータ・ラインの各々の１ビットを使うことができる。
【００３２】
本発明の実施形態においては、命令は、命令ラインと呼ばれるグループとしてＬ２キャッシュ１１２および命令キャッシュ２２２からフェッチして、プロセッサ・コア１１４が命令ラインにある命令にアクセスすることができる命令ライン・バッファ２２６に配置することができる。同様にして、データは、データ・ラインと呼ばれるグループとしてＬ２キャッシュ１１２およびデータ・キャッシュ２２４からフェッチすることができる。ある実施形態においては、命令キャッシュ２２２および命令ライン・バッファ２２６の一部は、有効アドレスおよび制御ビット（ＥＡ／ＣＴＬ）を格納するために用いることができ、それらは、命令ラインの各々を処理して、例えば以下で説明されるデータ・プリフェッチ機構を実行するために、コア１１４および／またはプリデコーダおよびスケジューラ２２０によって用いられることができる。
【００３３】
（Ｌ２キャッシュからのデータ・ラインのプリフェッチ）
図３は、本発明の実施形態による、データ・ラインにあるデータ（Ｄ４１）をターゲットとするデータ・アクセス命令（Ｉ５１）を格納している例示的な命令ラインを示す図である。ある実施形態においては、命令ライン（命令ライン１）は、複数の命令（例えば、Ｉ１１、Ｉ２１、Ｉ３１、など）、並びに、有効アドレスおよび制御ビットなどの制御情報を格納することができる。同様にして、データ・ライン（データ・ライン１）は、複数のデータ・ワード（例えば、Ｄ１１、Ｄ２１、Ｄ３１、など）を格納することができる。ある規模においては、命令ラインの各々にある命令は順番に実行され、それにより、命令Ｉ１１が第一に実行され、Ｉ２１が第二に実行され、以下続くことになる。命令が順番に実行されるので、一般的に命令ラインもまた順番に実行される。したがって、命令ラインがＬ２キャッシュ１１２から命令キャッシュ２２２に移動されるたびに、プリデコーダおよびスケジューラ２２０は、命令ライン（例えば命令ライン１）を検査して、次の逐次的な命令ライン（例えば命令ライン２）をプリフェッチし、そのことにより、次の命令ラインが命令キャッシュ２２２に配置され、プロセッサ・コア１１４によりアクセスできるようにすることができる場合がある。
【００３４】
プロセッサ・コア１１４によって実行される命令ラインは、命令Ｉ５１のようなデータ・アクセス命令（例えば、ロード命令または格納命令）を含むことができる。データ・アクセス命令は、あるアドレス（例えばＤ４１）に存在するデータをターゲットとして（例えばロードまたは格納の）動作を行う。データ・アクセス命令は、データ・アドレスを、（例えばデータ・レジスタに格納されたアドレスなどの）何らかの他のアドレスからのオフセットとして要求することがあり、それにより、データ・アドレスは、データ・アクセス命令が実行された時に算出される。
【００３５】
命令Ｉ５１がプロセッサ・コア１１４によって実行されるときに、プロセッサ・コア１１４は、その命令によりデータＤ４１がアクセスされるかどうかを判定することができる。プロセッサ・コア１１４は、データＤ４１を含んだデータ・ライン（データ・ライン１）を、データ・キャッシュ２２４からフェッチすることを試みることができる。いくつかの場合においては、データ・ライン１は、データ・キャッシュ２２４に存在せず、それによりキャッシュ・ミスを引き起こす場合がある。データ・キャッシュにおいてキャッシュ・ミスが検出されたときに、Ｌ２キャッシュ１１２に対して、データ・ライン１を求めるフェッチ要求を発行することができる。フェッチ要求がＬ２キャッシュ１１２によって処理されている間、コア１１４のプロセッサ・パイプラインが停止し、それにより、プロセッサ・コア１１４による命令の処理を中止させる場合がある。データ・ライン１がＬ２キャッシュ１１２に存在しない場合には、データ・ラインが上位のレベルのキャッシュおよび／またはメモリからフェッチされる間、プロセッサ・パイプラインがより長期間停止する場合がある。
【００３６】
本発明の実施形態によれば、現在フェッチされている命令ラインから抽出されたデータ・ターゲット・アドレスによってデータ・ラインをプリフェッチすることにより、データ・キャッシュ・ミスの数を減少させることができる。
【００３７】
図４は、本発明の実施形態による、データ・キャッシュ・ミスを減少させるためのプロセス４００を図示する流れ図である。プロセス４００は、Ｌ２キャッシュ１１２から命令ラインがフェッチされるステップ４０４で開始することができる。ステップ４０６において、データ・アクセス命令を識別することができ、ステップ４０８において、データ・アクセス命令のターゲットとされたデータのアドレス（データ・ターゲット・アドレスと呼ばれる）を抽出することができる。次いで、ステップ４１０において、データ・ターゲット・アドレスを用いて、Ｌ２キャッシュ１１２からターゲットとされたデータを含むデータ・ラインをプリフェッチすることができる。ターゲットとされたデータを含むデータ・ラインをプリフェッチし、プリフェッチされたデータをデータ・キャッシュ２２４に配置することにより、データ・アクセス命令が実行された場合のキャッシュ・ミスを防ぐことができる。データ・ターゲット・アドレスは、実際にデータ・キャッシュ・ミスまたはデータ・キャッシュ・ミスの履歴が存在する場合にのみ格納することができる場合がある。
【００３８】
ある実施形態においては、図５に図示されたように、データ・ターゲット・アドレスは、直接、命令ラインに格納する（付加する）ことができる。格納されるデータ・ターゲット・アドレスＥＡ１は、有効アドレスまたは有効アドレスの一部（例えば、有効アドレスの高位の３２ビット）とすることができる。図示されたように、データ・ターゲット・アドレスＥＡ１は、データ・アクセス命令Ｉ５１のターゲットとされたデータＤ４１のアドレスを含むデータ・ラインを識別することができる。
【００３９】
ある実施形態により、命令ラインはまた、他の有効アドレス（例えばＥＡ２）および制御ビット（例えばＣＴＬ）を格納することもできる。以下で説明されるように、他の有効アドレスは、命令ラインまたは付加的なデータ・ラインにある分岐命令のターゲットとされた命令を含む命令ラインをプリフェッチするために用いることができる。制御ビットＣＴＬは、データ・アクセス命令の履歴（ＤＡＨ）を示す１以上のビット、および、データ・アクセス命令の位置（ＬＯＣ）を示す１以上のビットを含むことができる。命令ラインに格納されるそのような情報の用途もまた以下で説明される。
【００４０】
本発明の実施形態においては、ここで説明される有効アドレス・ビットおよび制御ビットは、他の形では使用されない命令ラインのビットに格納することができる。例えば、Ｌ２キャッシュ１１２にある情報のラインの各々は、異なるキャッシュ・レベルの間で転送されるデータのエラー訂正に用いることができる追加のデータ・ビット（例えば、転送されたデータが破損されていないことを保証し、実際に起こったいずれかの破損を修復するために用いられるエラー訂正コードＥＣＣなど）を有することができる。各々のレベルのキャッシュ（例えばＬ２キャッシュ１１２および命令キャッシュ２２２）は、各々の命令ラインの同一コピーを格納することができる。各々のレベルのキャッシュが所与の命令ラインの同一コピーを格納する場合には、ＥＣＣは、用いなくともよい。代わって、例えば、キャッシュ間で命令ラインが適切に転送されたかどうかを判定するために、例えばパリティ・ビットを用いることができる。キャッシュ間で命令ラインが不適切に転送されたことをパリティ・ビットが示した場合には、（キャッシュにそのラインが含まれているため）、エラー確認を行う代わりに転送キャッシュからその命令ラインを再フェッチすることができる。
【００４１】
アドレスおよび制御情報を、他の形では用いられない命令ラインのビットに格納することの例として、格納された２ワードごとにエラー訂正用に１１ビットを用いるエラー訂正プロトコルを考える。１つの命令ラインにおいて、２つの命令ごとにパリティ・ビットを格納するために、１１ビットのうちの１つを用いることができる（１ワードごとに１つの命令が格納される場合）。残りの命令１つにつき５ビットを、各命令の制御ビットおよび／またはアドレス・ビットを格納するために用いることができる。例えば、５ビットのうちの４ビットを、その命令についての履歴情報（例えば、その命令が前に取られた分岐命令であるか否か、または、その命令が前にデータ・キャッシュ・ミスを引き起こしたデータ・アクセス命令であるか否か）といった、命令の制御ビット（履歴ビットなど）を格納するために用いることができる。命令ラインが３２の命令を含む場合には、残りの３２ビット（命令の各々につき１ビット）は、例えばデータ・ターゲット・アドレスまたは分岐出口アドレスの全てまたは一部を格納するために用いることができる。
【００４２】
（例示的なプリフェッチ回路）
図６は、本発明の実施形態による、命令およびデータ・ラインをプリフェッチするための回路を図示するブロック図である。本発明の実施形態においては、回路は、データ・ラインのみをプリフェッチすることができる。本発明の別の実施形態においては、回路は、命令ラインとデータ・ラインの両方をプリフェッチすることができる。
【００４３】
命令ラインまたはデータ・ラインがＬ２キャッシュ１１２からフェッチされて命令キャッシュ２２２またはデータ・キャッシュ２２４に配置されるたびに、命令／データ（Ｉ／Ｄ）によって制御される選択回路６２０は、フェッチされた命令ラインまたはデータ・ラインを、適切なキャッシュに送ることができる。
【００４４】
プリデコーダおよびスケジューラ２２０は、Ｌ２キャッシュ１１２によって出力された情報を検査することができる。複数のプロセッサ・コア１１４が用いられるある実施形態においては、複数のプロセッサ・コアの間で単一のプリデコーダおよびスケジューラ２２０を共有することができる。別の実施形態においては、プリデコーダおよびスケジューラ２２０は、プロセッサ・コア１１４の各々に個別に提供される。
【００４５】
ある実施形態においては、プリデコーダおよびスケジューラ２２０は、Ｌ２キャッシュ１１２によって出力された情報が命令ラインであるかデータ・ラインであるかを判定するプリデコーダ制御回路６１０を有することができる。例えば、Ｌ２キャッシュ１１２は、Ｌ２キャッシュ１１２に格納された情報ブロックの各々に特定のビットを設定することができ、プリデコーダ制御回路６１０はその特定のビットを検査して、Ｌ２キャッシュ１１２によって出力された情報ブロックが命令ラインであるかデータ・ラインであるかを判定することができる。
【００４６】
プリデコーダ制御回路６１０が、Ｌ２キャッシュ１１２によって出力された情報が命令ラインであると判定した場合、プリデコーダ制御回路６１０は、命令ライン・アドレス選択回路６０４およびデータ・ライン・アドレス選択回路６０６を使って、命令ラインに格納されるいずれかの適切な有効アドレス（例えばＥＡ１、またはＥＡ２）を選択することができる。次いで、選択（ＳＥＬ）信号を用い、選択回路６０８によって、有効アドレスを選択することができる。次いで、選択された有効アドレスを、例えば対応する命令ラインまたはデータ・ラインをＬ２キャッシュ１１２からプリフェッチするために使われる３２ビットのプリフェッチ・アドレスとして、プリフェッチ回路６０２に出力することができる。
【００４７】
上述されたように、第１の命令ラインにあるデータ・ターゲット・アドレスは、第１のデータ・ラインをプリフェッチするために用いることができる。第１のフェッチされた命令ラインは、また、第２の命令ラインにあるターゲット命令へ分岐する分岐命令（出口分岐命令と呼ばれる）を格納することができる場合がある。ある実施形態においては、第２の命令ラインに対応するアドレス（出口アドレスと呼ばれる）はまた、第１のフェッチされた命令ラインに格納することもできる。第１の命令ラインがフェッチされたときに、格納された出口アドレスを用いて、第２の命令ラインをプリフェッチすることができる。第１の命令ラインにある分岐が続行され、第２の命令ラインにあるターゲット命令が命令キャッシュから要求された場合には、第２の命令ラインをプリフェッチすることによって命令キャッシュ・ミスをなくすことができる。
【００４８】
したがって、フェッチされた単一の命令ラインに基づいて、命令ラインおよびデータ・ラインのグループ（チェーン）を命令キャッシュ２２２およびデータ・キャッシュ２２４へプリフェッチすることができる場合があり、そのことにより、フェッチされた命令ラインまたはプリフェッチされた命令ラインにある出口分岐命令またはデータ・アクセス命令が命令キャッシュ・ミスまたはデータ・キャッシュ・ミスを引き起こす機会を減少させることができる。
【００４９】
出口アドレスによって示された第２の命令ラインがＬ２キャッシュ１１２からプリフェッチされたときに、第２の命令ラインを検査して、その第２の命令ラインが、第２の命令ライン内のデータ・アクセス命令によってアクセスされた第２のデータ・ラインに対応するデータ・ターゲット・アドレスを格納するか否かを判定することができる。プリフェッチされた命令ラインが第２のデータ・ラインに対応するデータ・ターゲット・アドレスを格納する場合には、第２のデータ・ラインをプリフェッチすることもできる。
【００５０】
ある実施形態においては、プリフェッチされた第２の命令ラインは、やはりプリフェッチすることができる第３の命令ラインの有効アドレスを格納することができる。ここでも、第３の命令ラインは、プリフェッチすることができるターゲットデータ・ラインの有効アドレスを格納することができる。命令ラインおよび対応するデータ・ラインをプリフェッチするプロセスは、繰り返すことができる。プリフェッチされた命令ラインの各々は、メイン・メモリからプリフェッチされるべき複数の命令ラインおよび／または複数のデータ・ラインのどちらについての有効アドレスも格納することができる。
【００５１】
例示として、ある実施形態においては、データ・キャッシュ２２４は、Ｌ２キャッシュ１１２から同時に２つのデータ・ラインがフェッチされ、２ポート・データ・キャッシュに配置されるように、２ポート・キャッシュとすることができる。そのような構成が用いられる場合、２つのデータ・ラインに対応する２つの有効アドレスを命令ラインの各々に格納することができ、その命令ラインがＬ２キャッシュ１１２からフェッチされた場合には、その有効アドレスを用いて両方のデータ・ラインを同時にＬ２キャッシュ１１２からプリフェッチし、データ・キャッシュ２２４に配置して、恐らくはデータ・キャッシュ・ミスをなくすことができる。
【００５２】
したがって、フェッチされた単一の命令ラインに基づいて、命令ラインおよびデータ・ラインのグループ（チェーン）を、命令キャッシュ２２２およびデータ・キャッシュ２２４へプリフェッチすることができる場合があり、そのことにより、フェッチされた命令ラインまたはプリフェッチされた命令ラインにある出口分岐命令またはデータ・アクセス命令が命令キャッシュ・ミスまたはデータ・キャッシュ・ミスを引き起こす機会を減少させることができる。
【００５３】
ある実施形態により、プリフェッチされた命令ラインがプリフェッチされるべき複数の有効アドレスを格納している場合には、プリフェッチ回路６０２に有効アドレスの各々が送信されている間、（例えば、プリデコーダ制御回路６１０、命令ライン・アドレス選択回路６０４、または何らかの他のバッファに）アドレスを一時的に格納することができる。別の実施形態においては、プリフェッチ・アドレスは、プリフェッチ回路６０２および／またはＬ２キャッシュ１１２に並列に送信することができる。
【００５４】
プリフェッチ回路６０２は、要求された有効アドレスがＬ２キャッシュ１１２にあるか否かを判定することができる。例えば、プリフェッチ回路６０２は、要求された有効アドレスがＬ２キャッシュ１１２にあるか否かを判定することができる変換索引バッファ（ＴＬＢ）のような内容アドレス可能メモリ（ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）（ＣＡＭ）を格納することができる。要求された有効アドレスがＬ２キャッシュ１１２にあった場合には、プリフェッチ回路６０２は、要求された有効アドレスに対応する実アドレスをフェッチする要求を、Ｌ２キャッシュに発行することができる。次いで、実アドレスに対応する情報ブロックを選択回路６２０に出力し、適切なＬ１キャッシュ（例えば命令キャッシュ２２２、またはデータ・キャッシュ２２４）に向けることができる。プリフェッチ回路６０２が、要求された有効アドレスはＬ２キャッシュ１１２に存在しないと判定した場合には、プリフェッチ回路は、より上位レベルのキャッシュおよび／またはメモリに信号を送信することができる。例えば、プリフェッチ回路６０２はＬ３キャッシュにアドレスのプリフェッチ要求を送信することができ、次いでＬ３キャッシュは要求されたアドレスを検索される。
【００５５】
プリデコーダおよびスケジューラ２２０が命令ラインまたはデータ・ラインをＬ２キャッシュ１１２からプリフェッチすることを試みる前に、プリデコーダおよびスケジューラ２２０（または随意的にプリフェッチ回路６０２）は、要求されプリフェッチされる命令ラインまたはデータ・ラインが既に命令キャッシュ２２２またはデータ・キャッシュ２２４に格納されているか否かを判定することができ、または、要求された命令ラインまたはデータ・ラインのプリフェッチ要求が既に発行済みであるか否かを判定することができる場合がある。例えば、最近フェッチされまたはプリフェッチされた命令ラインまたはデータ・ラインのアドレスの履歴を格納する小型キャッシュを用いて、命令ラインまたはデータ・ラインに関するプリフェッチ要求が既に発行済みであるか否かを判定することができ、または、要求された命令ラインまたはデータ・ラインが既に命令キャッシュ２２２またはデータ・キャッシュ２２４にあるか否かを判定することができる。
【００５６】
要求された命令ラインまたはデータ・ラインが既に命令キャッシュ２２２またはデータ・キャッシュ２２４に設置されていた場合には、Ｌ２キャッシュ・プリフェッチは必ずしも必要ではなく、したがって、実施されない場合もある。前のプリフェッチ要求によって第２のプリフェッチ要求が不必要にされる場合においては、現行の有効アドレスを命令ラインに格納することは、やはり必ずしも必要ではなく、命令ラインに他の有効アドレスが格納することが可能となる（以下で説明する）。
【００５７】
本発明の実施形態においては、プリデコーダおよびスケジューラ２２０は、所定の数（閾値数）の命令ラインおよび／またはデータ・ラインがフェッチされるまで、命令ライン（およびデータ・ライン）のプリフェッチを続行することができる。閾値は、いずれかの適切な方法で選択することができる。例えば、閾値は、命令キャッシュに配置することができる命令ラインの数および／またはデータ・キャッシュに配置することができるデータ・ラインの数に基づいて選択することができる。命令キャッシュおよび／またはデータ・キャッシュがより大きな容量を有する場合には大きなプリフェッチ所定の数を選択することができるが、命令キャッシュおよび／またはデータ・キャッシュがより小さな容量を有する場合には小さなプリフェッチ所定の数を選択することができる。
【００５８】
別の例として、命令ライン・プリフェッチの所定の数は、フェッチされた命令ライン内の条件付き分岐命令の予測可能性に基づいて選択することができる。いくつかの場合においては、条件付き分岐命令の結果（その分岐が取られるか否か）が予測可能となることがあり、したがって、プリフェッチするべき適正な命令ラインが予測可能となることがある。しかし、命令ラインの間の分岐予測の数が増大するに従い、全体の予測精度は小さくなることがあり、そのことにより、与えられた命令ラインがアクセスされることになる可能性は小さくなる場合がある。予測不可能性のレベルは、予測不可能な分岐命令を用いるプリフェッチの数が増大するにしたがって、増大する場合がある。したがって、ある実施形態においては、命令ライン・プリフェッチの所定の数は、予測された、プリフェッチされた命令ラインにアクセスする可能性が、所与の率を下回らないように選び出される。また、予測不可能な分岐（例えば、その分岐に関する予測可能性の値が予測可能性の閾値を下回るような分岐）が到達されるようないくつかの場合においては、分岐命令の両方の経路に関する（例えば、予測される分岐経路と予測されない分岐経路の両方に関する）命令ラインをフェッチすることができる。
【００５９】
別の例として、フェッチされたデータ・ライン内のデータ・アクセスの予測可能性に基づいて、所定の数のデータ・ライン・プリフェッチを行うことができる。ある実施形態においては、前に実行された時にデータ・キャッシュ・ミスをもたらしたデータ・アクセス命令のターゲットとされているデータを格納しているデータ・ラインに関して、データ・ライン・プリフェッチを発行することができる。データ・キャッシュ・ミスを引き起こすデータ・アクセス命令に関して、予測可能性データを格納することもできる。予測可能性データが格納される場合には、プリフェッチされたデータ・ラインに関して起こるデータ・キャッシュ・ミスの相対的な予測可能性に基づいて、所定の数のプリフェッチを行うことができる。
【００６０】
命令ラインおよびデータ・ラインのプリフェッチに関して選び出された閾値は、サンプル命令のテスト・ランにより選択された固定の数とすることができる。テスト・ランおよび閾値の選択は設計時に行うことができ、閾値は、プロセッサ１１０に予めプログラムすることができる。随意的に、テスト・ランは、プログラム実行の最初の「トレーニング」フェーズの間に実施することができる（以下で詳細に説明する）。別の実施形態においては、プロセッサ１１０は、予測不可能な分岐命令および／または予測不可能なデータ・アクセスを格納しているプリフェッチされた命令ラインおよびデータ・ラインの数を追跡して、予測不可能な分岐命令または予測不可能なデータ・アクセス命令を格納している所与の数の命令ラインおよびデータ・ラインがフェッチされた後にのみ命令ラインおよびデータ・ラインのプリフェッチを止め、そのことにより、プリフェッチされた命令ラインの所定の数が命令ラインの実行履歴に基づいて動的に変化するようにすることができる。
【００６１】
本発明の実施形態においては、命令ラインにある命令のためのデータ・ターゲット・アドレスは、異なる命令ラインに格納することができる。図７は、本発明の実施形態による、複数の命令ラインに格納された単一の命令ラインにあるデータ・アクセス命令のための複数のデータ・ターゲット・アドレスを図示するブロック図である。図示されたように、命令ライン１は、３つの独立したデータ・ライン（実線の曲線で図示されたデータ・ライン１、データ・ライン２、データ・ライン３）にあるデータ・ターゲット・アドレスＤ２１、Ｄ４２、Ｄ５３にアクセスする３つのデータ・アクセス命令（Ｉ４１、Ｉ５１、Ｉ６１）を格納することができる。本発明の実施形態においては、１以上のデータ・アクセス命令のターゲット・アドレスに対応するアドレスは、フェッチ・シーケンスにおいてソース命令ライン（命令ライン１）と隣接する命令ライン（命令ライン０または命令ライン２）に格納することができる。
【００６２】
データ・アクセス命令Ｉ４１、Ｉ５１、Ｉ６１が命令ライン１において以下で説明されるように検出されたときに、データ・ライン１に対応するデータ・ターゲット・アドレスを命令ライン０の位置ＥＡ２に、データ・ライン２に対応するデータ・ターゲット・アドレスを命令ライン１の位置ＥＡ２に、データ・ライン３に対応するデータ・ターゲット・アドレスを命令ライン２の位置ＥＡ２に、格納することもできる（破線の曲線で図示される）。データ・アクセス命令Ｉ４１、Ｉ５１、Ｉ６１によるターゲット・データのターゲット・アドレスＤ２１、Ｄ４２、Ｄ５３へのアクセスを追跡する目的で、各々の命令ラインにおいて、例えばその命令ラインに付加される位置（ＬＯＣ）制御ビットに、そのデータ・ターゲット情報のソース（例えば命令ライン１）を示す位置情報を格納することができる。
【００６３】
このようにして、データ・ライン１および命令ライン１の有効アドレスを命令ライン０に格納し、データ・ライン２および命令ライン２の有効アドレスを命令ライン１に格納し、データ・ライン３の有効アドレスを命令ライン２に格納することができる。命令ライン０がフェッチされたときに、命令ライン０に格納された有効アドレスを用いて命令ライン１をプリフェッチすることができ、命令ライン１に格納された有効アドレスを用いて命令ライン２をプリフェッチすることができる。データ・ライン１にアクセスするデータ・アクセス命令を命令ライン０が格納していない場合があっても、命令ライン０に格納された有効アドレスを用いてデータ・ライン１をプリフェッチすることができ、そのことにより、命令ライン２にある命令Ｉ４１がデータ・ライン１にあるデータＤ２１へのアクセスを試みた場合／時のデータ・キャッシュ・ミスをなくすことができる。同様にして、命令ライン１および２がプリフェッチされたときに、データ・ライン２およびデータ・ライン３といったデータ・ラインをプリフェッチすることができ、そのことにより、命令ライン１にある命令Ｉ５１がデータ位置Ｄ４２にアクセスを試みた場合／時のデータ・キャッシュ・ミスをなくすことができ、命令ライン１にある命令Ｉ６１がデータ位置Ｄ５３にアクセスを試みた場合／時のデータ・キャッシュ・ミスをなくすことができる。
【００６４】
ある命令ラインに存在する命令のためのデータ・ターゲット・アドレスを、異なる命令ラインに格納することは、格納されるデータ・ターゲット・アドレスを必ずしも全ての命令ラインが格納していないようないくつかの場合には有用となろう。例えば、データ・ターゲット・アドレスが格納される場合において、そのターゲット・アドレスのデータへのアクセスがデータ・キャッシュ・ミスを引き起こすときに、１つの命令ラインがデータ・キャッシュ・ミスを引き起こす数個のデータ・アクセス命令（例えば３つの命令）を格納し、一方、他の命令ラインはデータ・キャッシュ・ミスを引き起こすようないかなるデータ・アクセス命令も格納しないようにすることができる。したがって、１つの命令ラインにおいてデータ・キャッシュ・ミスを引き起こすようなデータ・アクセス命令のための１以上のデータ・ターゲット・アドレスを他の命令ラインに格納し、そのことにより、データ・ターゲット・アドレスのストレージを他の命令ラインに分散することができる（例えば、３つのデータ・ターゲット・アドレスのうち２つを、２つの他の命令ラインに、それぞれ格納することができる）。
【００６５】
（命令ラインのためのデータ・ライン・プリフェッチ・アドレスの格納）
本発明の実施形態により、データ・アクセス命令を実行してデータ・ターゲット・アドレスを格納するデータ・ラインを要求することがデータ・キャッシュ・ミスにつながる時に、そのデータ・アクセス命令のデータ・ターゲット・アドレスを抽出して命令ラインに格納することができる。
【００６６】
図８は、本発明の実施形態による、データ・アクセス命令に対応するデータ・ターゲット・アドレスを格納するためのプロセス８００を図示する流れ図である。プロセス８００は、例えば命令キャッシュ２２２から命令ラインがフェッチされるステップ８０２で開始することができる。ステップ８０４において、フェッチされた命令ラインの中のデータ・アクセス命令を実行することができる。ステップ８０６において、データ・アクセス命令のターゲットとされたデータを格納しているデータ・ラインがデータ・キャッシュ２２４に位置するか否かの判定を行うことができる。データ・アクセス命令のターゲットとされたデータを格納しているデータ・ラインがデータ・キャッシュ２２４に存在しない場合には、ステップ８０８において、ターゲットとされたデータの有効アドレスがデータ・ターゲット・アドレスとして格納される。ターゲットとされたデータに対応するデータ・ターゲット・アドレスを記録することにより、次にＬ２キャッシュ１１２から命令ラインがフェッチされたときに、Ｌ２キャッシュ１１２から、ターゲットとされたデータを格納しているデータ・ラインをプリフェッチすることができる。データ・ラインをプリフェッチすることにより、データ・アクセス命令が実行された場合／時に、他の場合であれば起こり得るデータ・キャッシュ・ミスを、いくつかの場合においては防ぐことができる。
【００６７】
別の選択肢として、データ・アクセス命令のためのデータ・ターゲット・アドレスを、実行時に判定し、そのデータ・アクセス命令がデータ・キャッシュ・ミスを引き起こすか否かに拘わりなく命令ラインに格納することができる。例えば、データ・アクセス命令の各々のためのデータ・ターゲット・アドレスを抽出し、命令ラインに格納することができる。随意的に、最も頻繁に実行されるデータ・アクセス命令（単数または複数）のためのデータ・ターゲット・アドレスを抽出し、命令ラインに格納することができる。データ・ターゲット・アドレスを判定し格納する他の方法は、以下でより詳細に論じられる。
【００６８】
本発明の実施形態においては、データ・ターゲット・アドレスは、そのデータ・ターゲット・アドレスにアクセスするデータ・アクセス命令が実行されるまで、算出されない場合がある。例えば、データ・アクセス命令は、そのデータ・アクセスが行われるはずのアドレス・レジスタに格納されているアドレスからのオフセット値を指定することができる。データ・アクセス命令が実行されたときに、ターゲット・データの有効アドレスを算出し、データ・ターゲット・アドレスとして格納することができる。全部の有効アドレスを格納することができる場合もある。しかし、他の場合においては、一部の有効アドレスのみを格納することができる。例えば、有効アドレスのより高位の３２ビットのみを用いて、データ・アクセス命令のターゲット・データを格納しているキャッシュされたデータ・ラインを見つけることができる場合には、データ・ラインをプリフェッチする目的のために、これら３２ビットのみをデータ・ターゲット・アドレスとして保管することができる。
【００６９】
（データ・ラインのアクセス履歴の追跡および記録）
本発明の別の実施形態においては、データ・アクセス命令を実行することなしに、データ・ターゲット・アドレスを判定することができる。例えば、Ｌ２キャッシュ１１２からデータ・ラインがフェッチされる際に、フェッチされたデータ・ラインにあるデータ・アクセス命令から、データ・ターゲット・アドレスを抽出することができる。
【００７０】
本発明の実施形態においては、種々の量のデータ・アクセス履歴情報を格納することができる。データ・アクセス履歴は、命令ラインに存在するどのデータ・アクセス命令が実行されることになるか（または実行される可能性があるか）を示すことができる。随意的に、データ・アクセス履歴は、どのデータ・アクセス命令がデータ・キャッシュ・ミスを引き起こすことになるか（または既に引き起こしたか）を示すことができる。どのデータ・ターゲット・アドレスが命令ラインに格納されるのか（および／またはどのデータ・ラインがプリフェッチされるのか）は、リアルタイム実行の間に、または実行前の「トレーニング」期間の間に生成され格納されたデータ・アクセス履歴情報に基づいて判定することができる。
【００７１】
上記で説明されたように、ある実施形態により、命令ラインにおいて最後に実行されたデータ・アクセス命令に対応するデータ・ターゲット・アドレスのみを格納することができる。命令ラインにおいて最後に実行されたデータ・アクセス命令に対応するデータ・ターゲット・アドレスのみを格納することは、後でその命令ラインがフェッチされたときに同じデータがアクセスされることを効果的に予測する。よって、前に実行されたデータ・アクセス命令のためのターゲット・データを格納しているデータ・ラインをプリフェッチすることができる。
【００７２】
いくつかの場合においては、１以上のビットを用いてデータ・アクセス命令の履歴を記録することができる。ビットは、どのデータ・ラインが最も頻繁にアクセスされるか、またはどのデータ・ラインがアクセスされたときにデータ・キャッシュ・ミスを引き起こすかを判定するために用いることができる。例えば、図５に図示されたように、命令ライン（命令ライン１）に格納されている制御ビットＣＴＬは、その命令ラインに存在するどのデータ・アクセス命令が前に実行されたかまたは前にデータ・キャッシュ・ミスを引き起こしたかを示す情報（ＬＯＣ）を格納することができる。命令ラインはまた、データ・アクセス命令がいつ実行されたかまたはいつキャッシュ・ミスを引き起こしたかの履歴（ＤＡＨ）（例えば、監視された実行回数のうちの何回その命令が実行されたか、またはある回数の前の実行のうちの何回キャッシュ・ミスを引き起こしたか）を格納することができる。
【００７３】
データ・アクセス命令位置ＬＯＣおよびデータ・アクセス履歴ＤＡＨをどのようにして用いることができるかの例として、Ｌ２キャッシュ１１２にあって、まだＬ１キャッシュ２２２にフェッチされていない命令ラインを考える。命令ラインがＬ１キャッシュ２２２にフェッチされたときに、プリデコーダおよびスケジューラ２２０は、最初に、その命令ラインがいかなるデータ・ターゲット・アドレスも持たないと判定することができ、したがって、別のデータ・ラインをプリフェッチしないであろう。
【００７４】
フェッチされた命令ラインにある命令がトレーニングの間に実行される際に、プロセッサ・コア１１４は、その命令ライン内のデータ・アクセス命令が実行されているか否かを判定することができる。データ・アクセス命令が検出された場合には、データ・ターゲット・アドレスをＥＡ１に格納することに加えて、ＬＯＣにそのデータ・アクセス命令の命令ライン内の位置を格納することができる。命令ラインの各々が３２の命令を格納する場合には、ＬＯＣに（可能性ある命令位置の各々に対応する）０−３１の番号を格納して出口分岐命令を示すことができるように、ＬＯＣを５ビットのバイナリ数とすることができる。随意的に、（単一の命令ラインの有効アドレスを複数の命令ラインに格納することに関して上述されたように）ＬＯＣがソース命令およびソース命令ラインを示す場合には、ＬＯＣは、命令ライン内の位置と、そのデータ・アクセス命令がどの命令ラインに隣接して位置しているかの両方を示す、追加のビットを格納することができる。
【００７５】
ある実施形態においては、ＤＡＨに、ＬＯＣに設置されたデータ・アクセス命令が実行されたことまたはデータ・キャッシュ・ミスを引き起こしたことを示す値を書込むことができる。例えば、ＤＡＨが単一ビットであった場合には、データ・アクセス命令が実行されたときに、命令ラインにある命令の最初の実行の間に、ＤＡＨにその命令に関して０を書込むことができる。ＤＡＨに格納された０は、ＬＯＣに設置されたそのデータ・アクセス命令が、その後その命令ラインに格納されている命令を実行する間に実行されることの弱い予測を示す。随意的に、ＤＡＨに格納された０は、ＬＯＣに設置されたそのデータ・アクセス命令が、その後その命令ラインに格納されている命令を実行する間にデータ・キャッシュ・ミスを引き起こすことの弱い予測を示す。
【００７６】
命令ラインにある命令のその後の実行の間に、ＬＯＣに設置されたデータ・アクセス命令が再び実行された（またはデータ・キャッシュ・ミスを引き起こした）場合には、ＤＡＨを１に設定することができる。ＤＡＨに格納された１は、ＬＯＣに設置されたそのデータ・アクセス命令が再び実行されること、または再びデータ・キャッシュ・ミスを引き起こすことの強い予測を示す。
【００７７】
しかし、同一の命令ラインが再びフェッチされ（ＤＡＨ＝１）、かつ、異なる分岐出口命令が取られる場合には、ＬＯＣおよびＥＡ１の値は同じままとすることができるが、ＤＡＨは、命令ラインに格納されている命令のその後の実行の間に、前に取られた分岐が取られることの弱い予測を示す０にクリアされる。
【００７８】
ＤＡＨが０であり、かつ、ＬＯＣに示されているデータ・アクセス命令以外のデータ・アクセス命令が実行される（または実行されてデータ・キャッシュ・ミスを引き起こす）場合には、データ・ターゲット・アドレスＥＡ１を、そのデータ・アクセス命令のデータ・ターゲット・アドレスで上書きすることができ、ＬＯＣを、その命令ラインにある実行されるデータ・アクセス命令（またはデータ・キャッシュ・ミスを引き起こすデータ・アクセス命令）に対応する値に変更することができる。
【００７９】
このようにして、データ・アクセス履歴ビットが用いられる場合においては、命令ラインは、データ・ターゲット・アドレスに対応する格納されたデータ・ターゲット・アドレスを格納することができる。このような定期的に実行されるデータ・アクセス命令またはデータ・キャッシュ・ミスを引き起こすアクセス命令は、それほど頻繁に実行されないデータ・アクセス命令またはそれほど頻繁にデータ・キャッシュ・ミスを引き起こさないデータ・アクセス命令よりも優先される場合がある。しかし、データ・アクセス命令が弱く予測され、かつ別のデータ・アクセス命令が実行されまたはデータ・キャッシュ・ミスを引き起こした場合には、データ・ターゲット・アドレスを、そのデータ・アクセス命令に対応するアドレスに変更し、そのことにより、他のデータ・アクセス命令が定期的に実行されるか、または随意的に、定期的にキャッシュ・ミスを引き起こす時に、弱く予測されたデータ・アクセス命令が優先されないようにすることができる。
【００８０】
ある実施形態においては、ＤＡＨは、ＬＯＣによって示されるデータ・アクセス命令のより長い履歴を格納することができるように、複数の履歴ビットを格納することができる。例えば、ＤＡＨが２つのバイナリ・ビットである場合には、００は非常に弱い予測に対応することができ（その場合には他のデータ・アクセス命令を実行すること、または他のデータ・アクセス命令がデータ・キャッシュ・ミスを引き起こすと判定することは、データ・ターゲット・アドレスおよびＬＯＣを上書きすることになる）、一方、０１は弱い予測、１０は強い予測、１１は非常に強い予測に対応することができる（その場合には他のデータ・アクセス命令を実行すること、または他のデータ・キャッシュ・ミスを検出することは、必ずしもデータ・ターゲット・アドレスまたはＬＯＣを上書きするとは限らない）。例として、データ・キャッシュ・ミスの強い予測に対応するデータ・ターゲット・アドレスを置換するためには、プロセッサ構成１００は、３つの他のデータ・アクセス命令が命令ラインにある命令の３回の連続実行においてデータ・キャッシュ・ミスを引き起こすことを必要とする場合がある。
【００８１】
さらに、ある実施形態においては、データ・ターゲット・アドレスに対応するデータ・ラインは、いくつかの場合においては、（例えば、プロセッサ・コア１１４がデータ・ラインへのアクセスを試みた時に）データ・キャッシュ・ミスが非常に強く予測されることをＤＡＨビットが示した場合においてのみプリフェッチすることができる。随意的に、データ・ラインをプリフェッチする前提条件として、異なるレベルの予測可能性（例えば、非常に強い予測可能性に対して強い予測可能性）を選択することができる。
【００８２】
本発明の実施形態においては、複数のデータ・アクセス履歴（例えばＤＡＨ１、ＤＡＨ２など）、複数のデータ・アクセス命令位置（例えばＬＯＣ１、ＬＯＣ２など）、および／または複数の有効アドレスを用いることができる。例えば、ある実施形態においては、ＤＡＨ１、ＤＡＨ２などを用いて複数のデータ・アクセス履歴を追跡することができるが、ＤＡＨ１、ＤＡＨ２などのうち最も予測可能性が高いデータ・アクセスおよび／または予測されたデータ・キャッシュ・ミスに対応する１つのデータ・ターゲット・アドレスのみを、ＥＡ１に格納することができる。随意的に、複数のデータ・アクセス履歴および複数のデータ・ターゲット・アドレスを単一の命令ラインに格納することができる。ある実施形態においては、ＬＯＣによって示される所与のデータ・アクセス命令が予測可能である（例えば、実行される、および／またはデータ・キャッシュ・ミスを引き起こす）ことをデータ・アクセス履歴が示した場合においてのみ、データ・ターゲット・アドレスを用いてデータ・ラインをプリフェッチすることができる。随意的に、いくつかの格納されたアドレスの中から最も予測可能性が高いデータ・ターゲット・アドレスに対応するデータ・ラインのみを、プリデコーダおよびスケジューラ２２０によってプリフェッチすることができる。
【００８３】
上述されたように、ある実施形態においては、データ・アクセス命令がデータ・キャッシュ・ミスを引き起こすかどうかを用いて、データ・ターゲット・アドレスを格納するか否かを判定することができる。例えば、与えられたデータ・アクセス命令が稀にしかデータ・キャッシュ・ミスを引き起こさない場合には、そのデータ・アクセス命令が命令ラインにある他のデータ・アクセス命令よりも頻繁に実行されるような場合であっても、そのデータ・アクセス命令に対応するデータ・ターゲット・アドレスを格納しなくてもよい。命令ラインにある別のデータ・アクセス命令が、実行される頻度は低いが、全体的により多くのデータ・キャッシュ・ミスを引き起こす場合には、他のデータ・アクセス命令に対応するデータ・ターゲット・アドレスを、その命令ラインに格納することができる。上述されたように、１以上のデータ・キャッシュ「ミス」フラグのような履歴ビットを用いて、どのデータ・アクセス命令がデータ・キャッシュ・ミスを引き起こす可能性が最も高いかを判定することができる。
【００８４】
命令ラインに格納されたビットを用い、データ・キャッシュ・ミスまたはプリフェッチに起因してデータ・キャッシュ２２４にデータ・ラインが配置されるか否かを示すことができる場合がある。ビットは、プロセッサ１１０により、キャッシュ・ミスを防ぐに当たって、プリフェッチの有効性を判定するために用いることができる。また、プリデコーダおよびスケジューラ２２０（または随意的に、プリフェッチ回路６０２）も、プリフェッチが不必要であると判定し、したがって命令ラインのビットを変更することができる場合もある。例えば、プリフェッチされた情報が既に命令キャッシュ２２２またはデータ・キャッシュ２２４に存在するなどの理由で、プリフェッチが不必要である場合においては、より多くの命令キャッシュ・ミスおよびデータ・キャッシュ・ミスを引き起こすアクセス命令に対応する他のデータ・ターゲット・アドレスを命令ラインに格納することができる。
【００８５】
ある実施形態においては、データ・アクセス命令がデータ・キャッシュ・ミスを引き起こすかどうかを、データ・アクセス命令のためのデータ・ターゲット・アドレスを格納するか否かを判定するために用いられる唯一の要因とすることができる。別の実施形態においては、データ・アクセス命令を実行する予測可能性と、そのデータ・アクセス命令がデータ・キャッシュ・ミスを引き起こすかどうかの予測可能性の両方をともに用いて、データ・ターゲット・アドレスを格納するか否かを判定することができる。例えば、アクセス履歴およびミス履歴に対応する値を加算するか、乗算するか、または他の計算式の中で（例えば加重として）用いて、データ・ターゲット・アドレスを格納するか否か、および／または、そのデータ・ターゲット・アドレスに対応するデータ・ラインをプリフェッチするか否かを判定することができる。
【００８６】
本発明の実施形態においては、データ・ターゲット・アドレス、データ・アクセス履歴、およびデータ・アクセス命令位置を実行時に継続的に追跡し、更新して、命令ラインに格納されたデータ・ターゲット・アドレスおよび他の値が、与えられた命令の組が実行されるに従い時間が経つにつれて変化するようにすることができる。このようにして、例えばプログラムが実行されるに従い、データ・ターゲット・アドレスおよびプリフェッチされたデータ・ラインを動的に修正することができる。
【００８７】
本発明の別の実施形態においては、命令の組の最初の実行フェーズの間に（例えばプログラムが実行される最初の「トレーニング」期間の間に）、データ・ターゲット・アドレスを選択し、格納することができる。最初の実行フェーズは、初期化フェーズ、またはトレーニング・フェーズと呼ばれることもある。トレーニング・フェーズの間に、データ・アクセス履歴およびデータ・ターゲット・アドレスを追跡することができ、１以上のデータ・ターゲット・アドレスを（例えば、上述された基準によって）命令ラインに格納することができる。フェーズが完了したときに、格納されたデータ・ターゲット・アドレスは、引き続き、Ｌ２キャッシュ１１２からデータ・ラインをプリフェッチするために用いることができるが、しかし、フェッチされた命令ラインにあるデータ・ターゲット・アドレス（単数または複数）は、それ以上追跡されたり更新されたりしないであろう。
【００８８】
ある実施形態においては、データ・ターゲット・アドレス（単数または複数）を格納している命令ラインの１以上のビットを用いて、そのデータ・ターゲット・アドレスが最初の実行フェーズの間に更新されたか否かを示すことができる。例えば、トレーニング・フェーズの間に、１つのビットをクリアすることができる。ビットがクリアされている間に、命令ラインにある命令が実行されるに従い、データ・アクセス履歴を追跡することができ、データ・ターゲット・アドレス（単数または複数）を更新することができる。トレーニング・フェーズが完了したときに、ビットを設定することができる。ビットが設定されたときに、データ・ターゲット・アドレス（単数または複数）はそれ以上更新されない場合があり、最初の実行フェーズが完了となるであろう。
【００８９】
ある実施形態においては、最初の実行フェーズは、特定の期間にわたって（例えばある数のクロック周期が経過するまで）続行することができる。ある実施形態においては、格納された最新のデータ・ターゲット・アドレスは、指定の期間が経過し、最初の実行フェーズが終了するまで、命令ラインに格納されたままでいることができる。別の実施形態においては、最も頻繁に実行されたデータ・アクセス命令に対応するデータ・ターゲット・アドレスか、または最も頻繁にデータ・キャッシュ・ミスを引き起こしたデータ・アクセス命令に対応するデータ・ターゲット・アドレスを命令ラインに格納して、その後のプリフェッチに用いることができる。
【００９０】
本発明の別の実施形態においては、最初の実行フェーズは、１以上の出口基準が満たされるまで続行することができる。例えば、データ・アクセス履歴が格納されるような場合においては、最初の実行フェーズは、命令ラインにあるデータ・アクセス命令の１つが予測可能になる（または強く予測可能になる）までか、またはデータ・キャッシュ・ミスが予測可能になる（または強く予測可能になる）まで、続行することができる。与えられたデータ・アクセス命令が予測可能になったときに、最初のトレーニング・フェーズが完了したことと、その命令ラインがＬ２キャッシュ１１２からフェッチされる時に行われるその後のデータ・ラインのプリフェッチの各々において、強く予測可能なデータ・アクセス命令のデータ・ターゲット・アドレスを用いることができることを示すロック・ビットを、命令ラインに設定することができる。
【００９１】
本発明の別の実施形態においては、断続的なトレーニング・フェーズにおいて、命令ラインにあるデータ・ターゲット・アドレスを修正することができる。例えば、トレーニング・フェーズの各々について、頻度および期間の値を格納することができる。頻度に対応しているある数のクロック周期が経過する度ごとに、トレーニング・フェーズは初期化され、指定の期間値にわたって続行することができる。別の実施形態においては、頻度に対応しているある数のクロック周期が経過する度ごとに、トレーニング・フェーズは初期化され、指定の条件が満たされるまで（例えば、上述されたように、命令に関して、指定のレベルのデータ・アクセス予測可能性かまたは指定のレベルのキャッシュ・ミス予測可能性が到達されるまで）、続行することができる。
【００９２】
本発明の実施形態においては、システム１００において用いられる各々のレベルのキャッシュおよび／またはメモリは、命令ラインに格納されている情報のコピーを格納することができる。本発明の別の実施形態においては、指定のレベルのキャッシュおよび／またはメモリのみが、命令ラインに格納されている情報（例えば、データ・アクセス履歴およびデータ・ターゲット・アドレス）を格納することができる。ある実施形態においては、当業者には公知のキャッシュの一貫性原則を用いて、各々のレベルのキャッシュおよび／またはメモリにある命令ラインのコピーを更新することができる。
【００９３】
命令キャッシュを用いる従来型のシステムにおいては、一般的には、命令はプロセッサ１１０によって修正されないことに注意されたい。よって、従来型のシステムにおいては、命令ラインは、ある程度の時間が経過した後、Ｌ２キャッシュ１１２に書き戻されるのではなく、命令キャッシュ２２２からエージアウトされることが一般的にである。しかし、ここで説明されるように、本発明の実施形態においては、修正された命令ラインをＬ２キャッシュ１１２に書戻すことができ、それにより、上位レベルのキャッシュおよび／またはメモリにおいてプリフェッチ・データが維持されることが可能になる。
【００９４】
例として、命令ラインにある命令がプロセッサ・コアにより既に処理された（データ・ターゲット・アドレスおよび他の履歴情報が更新されることを引き起こす可能性がある）ときに、その命令ラインを、恐らくは命令キャッシュ２２２に格納されたより古いバージョンの命令ラインを上書きする形で、命令キャッシュ２２２に書込むことができる（書戻しと呼ばれる）。ある実施形態においては、命令ラインは、その命令ラインに格納された情報に対して変更が為された場合においてのみ、命令キャッシュ２２２に配置される。
【００９５】
本発明の実施形態により、修正された命令ラインがＬ２キャッシュ１１２に書戻されたときに、命令ラインを変更されたものとしてマークすることができる。命令ラインが命令キャッシュ２２２に書戻され、変更されたものとしてマークされる場合においては、命令ラインは異なった時間にわたって命令キャッシュに留まることができる。例えば、命令ラインがプロセッサ・コア１１４によって頻繁に使用される場合には、命令ラインは命令キャッシュ２２２へフェッチされ、戻されることが何度かあり、恐らくはその度に更新されるであろう。しかし、命令ラインが頻繁に使用されない場合には（エージングと呼ばれる）、その命令ラインを命令キャッシュ２２２からパージすることができる。命令ラインが命令キャッシュ２２２からパージされたときに、その命令ラインをＬ２キャッシュ１１２に書戻すことができる。ある実施形態においては、命令ラインが修正されたものとしてマークされた場合にのみ、Ｌ２キャッシュ１１２に書戻すことができる。別の実施形態においては、命令ラインは常にＬ２キャッシュ１１２に書戻すことができる。ある実施形態においては、命令ラインは、随意的に、いくつかのキャッシュ・レベルに（例えばＬ２キャッシュ１１２および命令キャッシュ２２２に）一度に書戻すか、または命令キャッシュ２２２以外のレベルに（例えばＬ２キャッシュ１１２に直接）書戻すことができる。
【００９６】
ある実施形態においては、命令ライン以外の位置にデータ・ターゲット・アドレス（単数または複数）を格納することができる。例えば、シャドウ・キャッシュにデータ・ターゲット・アドレスを格納することができる。図９は、本発明の実施形態による、命令およびデータ・ラインをプリフェッチするためのシャドウ・キャッシュ９０２を図示するブロック図である。
【００９７】
本発明の実施形態においては、（例えば、データ・アクセス命令が頻繁に実行されるかまたは頻繁にデータ・キャッシュ・ミスを引き起こすことに起因して、および／または上記で列挙された基準のいずれかにより）命令ラインにあるデータ・アクセス命令のためのデータ・ターゲット・アドレスが格納されるべきときに、命令ラインに対応するアドレスまたはアドレスの一部（例えば、命令ラインの有効アドレス、または有効アドレスの高位の３２ビット）、および、データ・ターゲット・アドレス（またはその一部）を、シャドウ・キャッシュ９０２の項目として格納することができる。いくつかの場合においてはシャドウ・キャッシュ９０２には、単一の命令ラインに関する複数のデータ・ターゲット・アドレス項目を格納することができる。随意的に、命令ラインに関する項目の各々は、複数のデータ・ターゲット・アドレスを格納することができる。
【００９８】
Ｌ２キャッシュ１１２から情報がフェッチされるときに、シャドウ・キャッシュ９０２（または、例えばプリデコーダ制御回路６１０のような、シャドウ・キャッシュ９０２を用いる他の制御回路）は、フェッチされた情報が命令ラインなのか否かを判定することができる。Ｌ２キャッシュ１１２による出力が命令ラインであるとの判定が為された場合には、シャドウ・キャッシュ９０２を検索して（例えば、シャドウ・キャッシュ９０２は内容アドレス可能とすることができる）、フェッチされた命令ラインに対応する項目（または複数の項目）（例えば、フェッチされた命令ラインと同一の有効アドレスを有する項目）を探すことかできる。対応する項目が見つかった場合には、その項目に関連するデータ・ターゲット・アドレス（単数または複数）は、プリデコーダ制御回路６１０、プリデコーダおよびスケジューラ２２０にある他の回路、および、プリフェッチ回路６０２により、シャドウ・キャッシュ９０２によって示されたデータ・ターゲット・アドレス（単数または複数）をプリフェッチするために用いられる。随意的に、シャドウ・キャッシュ９０２には、（専門に、またはデータ・ターゲット・アドレスとともに）分岐出口アドレスを格納することができる。上述されたように、シャドウ・キャッシュ９０２は、そこに格納された有効アドレス、および／または、フェッチされた命令ラインおよびプリフェッチされた命令ラインに格納された有効アドレスを使って、命令ラインおよびデータ・ラインのチェーン／グループをフェッチするために用いることができる。
【００９９】
本発明の実施形態においては、シャドウ・キャッシュ９０２はまた、上述された制御ビット（例えば、履歴ビットおよび位置ビット）を格納することができる。随意的に、こうした制御ビットは、上述されたように、命令ラインに格納することができる。どちらの場合においても、ある実施形態においては、シャドウ・キャッシュ９０２にある項目は、どの項目が命令ラインに格納されるのかを判定することに関して上記で列挙されたいずれかの基準にしたがって管理することができる。各々がシャドウ・キャッシュ９０２を伴って実装することができる、上述された多くの技術のうちの１つの例として、強く予測されたデータ・キャッシュ・ミスを引き起こすデータ・アクセス命令のためのデータ・ターゲット・アドレスはシャドウ・キャッシュ９０２に格納し、一方、弱く予測されたデータ・キャッシュ・ミスに対応するデータ・ターゲット・アドレスは上書きすることができる。
【０１００】
どの項目がシャドウ・キャッシュ９０２に格納されるのかを判定する上述された技術を用いることに加えて、ある実施形態においては、専門に、または上述された技術を含めて従来型のキャッシュ管理技術を用いて、シャドウ・キャッシュ９０２を管理することができる。例えば、シャドウ・キャッシュ９０２にある項目は、そのシャドウ・キャッシュ９０２にある項目がアクセスされた頻度を示すエージ・ビットを有することができる。与えられた項目が頻繁にアクセスされる場合には、エージ値は小さい（例えば、若い）まま留まることができる。しかし、項目が頻繁にアクセスされない場合には、エージ値は増大することができ、いくつかの場合においては、シャドウ・キャッシュ９０２から項目を廃棄することができる。
【０１０１】
上述したように、第１の命令ラインに格納されているデータ・アクセス命令のターゲットとされたデータのアドレスを格納し、ターゲットとされたデータを格納しているデータ・ラインを、Ｌ２キャッシュからプリフェッチするために用いることができる。その結果として、データ・キャッシュ・ミス、および対応する、データにアクセスする待ち時間の数を減少させることができ、プロセッサ性能を向上させることができる。
【０１０２】
以上、本発明の実施形態を一例として説明したが、本発明の他のさらなる実施形態をその基本的な範囲を逸脱することなく考案することができる。本発明の範囲は、添付の特許請求の範囲によって定められる。
【図面の簡単な説明】
【０１０３】
【図１】本発明の実施形態によるシステムを図示するブロック図である。
【図２】本発明の実施形態によるコンピュータ・プロセッサを図示するブロック図である。
【図３】本発明の実施形態による、データ・ラインにアクセスする命令ラインを図示する図である。
【図４】本発明の実施形態による、データ・キャッシュ・ミスを防ぐためのプロセスを図示する流れ図である。
【図５】本発明の実施形態によるデータ・アクセス・アドレスを含んだ命令ラインを図示するブロック図である。
【図６】本発明の実施形態による命令およびデータ・ラインをプリフェッチするための回路を図示するブロック図である。
【図７】本発明の実施形態による、複数の命令ラインに格納された単一の命令ラインにあるデータ・アクセス命令のための複数のデータ・ターゲット・アドレスを図示するブロック図である。
【図８】本発明の実施形態による、データ・アクセス命令に対応するデータ・ターゲット・アドレスを格納するためのプロセスを図示する流れ図である。
【図９】本発明の実施形態による、命令およびデータ・ラインをプリフェッチするためのシャドウ・キャッシュを図示するブロック図である。
【符号の説明】
【０１０４】
１１０：プロセッサ
１１２：Ｌ２キャッシュ
２２０：プリデコーダおよびスケジューラ
２２２：Ｌ１  命令キャッシュ
２２４：Ｌ１  データ・キャッシュ
２２６：命令ライン・バッファ
１１４：プロセッサ・コア
【図１】
2007207240.tif 000003
【図２】
2007207240.tif 000004
【図３】
2007207240.tif 000005
【図４】
2007207240.tif 000006
【図５】
2007207240.tif 000007
【図６】
2007207240.tif 000008
【図７】
2007207240.tif 000009
【図８】
2007207240.tif 000010
【図９】
2007207240.tif 000011