JP2007207246A - 命令ラインのための自己プリフェッチl2キャッシュ機構 - Google Patents
命令ラインのための自己プリフェッチl2キャッシュ機構 Download PDFInfo
- Publication number
- JP2007207246A JP2007207246A JP2007020489A JP2007020489A JP2007207246A JP 2007207246 A JP2007207246 A JP 2007207246A JP 2007020489 A JP2007020489 A JP 2007020489A JP 2007020489 A JP2007020489 A JP 2007020489A JP 2007207246 A JP2007207246 A JP 2007207246A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- branch
- cache
- line
- instruction line
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0897—Caches characterised by their organisation or structure with two or more cache hierarchy levels
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/6028—Prefetching based on hints or prefetch instructions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】 キャッシュされたメモリを用いるプロセッサにおいて命令及びデータを取り出すことについて改善された方法を提供する。
【解決手段】 本発明の実施形態は、命令ラインをプリフェッチするための方法及び装置を提供する。方法は、レベル2キャッシュから第1の命令ラインをフェッチするステップと、第1の命令ラインにおいて、第1の命令ラインの外部にある命令をターゲットとする分岐命令を識別するステップと、識別された分岐命令からアドレスを抽出するステップと、抽出されたアドレスを用いて、レベル2キャッシュから、ターゲットとされた命令を含む第2命令ラインをプリフェッチするステップを含む。
【選択図】 図2
【解決手段】 本発明の実施形態は、命令ラインをプリフェッチするための方法及び装置を提供する。方法は、レベル2キャッシュから第1の命令ラインをフェッチするステップと、第1の命令ラインにおいて、第1の命令ラインの外部にある命令をターゲットとする分岐命令を識別するステップと、識別された分岐命令からアドレスを抽出するステップと、抽出されたアドレスを用いて、レベル2キャッシュから、ターゲットとされた命令を含む第2命令ラインをプリフェッチするステップを含む。
【選択図】 図2
Description
本発明は、一般に、コンピュータ・プロセッサの分野に関する。より具体的には、本発明は、コンピュータ・プロセッサによって用いられるキャッシュ機構に関する。
現代のコンピュータ・システムは、一般的に、コンピュータ・システム内の情報を処理するために使用することができるプロセッサを含む、数個の集積回路(IC)を備える。プロセッサによって処理されたデータは、プロセッサによって実行されるコンピュータ命令を含み、さらに、そのコンピュータ命令を用いるプロセッサによって取り扱われるデータを含むことができる。一般的に、コンピュータ命令およびデータは、コンピュータ・システムのメイン・メモリに格納される。
プロセッサは、一般的に、一連の小ステップに分けて命令を実行することによって命令を処理する。プロセッサによって処理される命令の数を増やす(そしてプロセッサの速度を上げる)ために、プロセッサをパイプラインすることができる場合がある。ここで、「パイプラインする」とは、各々が1つの命令を実行するために必要な小ステップの1以上を行う独立した段を、プロセッサに提供することをいう。パイプラインは(他の回路に加えて)、プロセッサ・コアと呼ばれるプロセッサの一部に配置することができる。プロセッサは、複数のプロセッサ・コアを有することができる場合がある。
パイプラインにおける命令実行の1つの例として、第1の命令が受信されたときに、第1のパイプライン段はその命令の小部分を処理することができる。第1のパイプライン段がその命令の小部分の処理を終了したときに第2のパイプライン段が第1の命令の別の小部分の処理を開始することができ、その間に第1のパイプライン段は第2の命令を受信し、その小部分の処理を開始する。このようにして、プロセッサは、2以上の命令を同時に(並行して)処理することができる。
データおよび命令へのより高速のアクセス、および、プロセッサのより良好な活用を提供するために、プロセッサは、数個のキャッシュを有することができる。キャッシュとは、一般的に、メイン・メモリより小さく、プロセッサと同じダイ(すなわちチップ)上に製造されるメモリである。現代のプロセッサは、一般的に、複数のレベルのキャッシュを有する。プロセッサ・コアの最も近辺に設置される最も高速のキャッシュは、レベル1キャッシュ(L1キャッシュ)と呼ばれる。プロセッサは、一般的に、L1キャッシュに加えて、レベル2キャッシュ(L2キャッシュ)と呼ばれる、第2のより大型のキャッシュを有する。プロセッサは、他の付加的なレベルのキャッシュを有することもある(例えば、L3キャッシュおよびL4キャッシュ)。
プロセッサにプロセッサのパイプラインの各段を満たすのに十分な命令を与えるために、プロセッサは、L2キャッシュから命令ラインと呼ばれる複数の命令を含んだグループの形で命令を取り出すことができる。取り出された命令ラインはL1命令キャッシュ(I−キャッシュ)に配置することができ、プロセッサ・コアは命令ラインにある命令にアクセスすることができる。同様に、プロセッサによって処理されるべきデータ・ブロックは、L2キャッシュから取り出し、L1キャッシュ・データ・キャッシュ(D−キャッシュ)に配置することができる。
より上位レベルのキャッシュから情報を取り出し、その情報をより下位レベルのキャッシュに配置するプロセスは「フェッチする」と称され、一般的に、ある程度の時間(待ち時間)を要する。例えば、プロセッサ・コアが情報を要求し、その情報がL1キャッシュに存在しなかった場合(これはキャッシュ・ミスと呼ばれる)、その情報をL2キャッシュからフェッチすることができる。要求された情報のために次のレベルのキャッシュ/メモリが検索されることから、キャッシュ・ミスは付加的な待ち時間をもたらす。例えば、要求された情報がL2キャッシュに存在しなかった場合には、プロセッサは、L3キャッシュやメイン・メモリの中にその情報を探すであろう。
プロセッサは、ある命令およびデータを、キャッシュおよび/またはメモリから取り出される命令およびデータよりも速く処理することができる場合がある。例えば、命令ラインが処理された後で、処理されるべき次の命令ラインにアクセスするために時間がかかる場合がある(例えば、次の命令を含む命令ラインを求めてL1キャッシュが検索された時に、キャッシュ・ミスがあった場合など)。プロセッサがより上位レベルのキャッシュまたはメモリから次の命令ラインを取り出している間に、パイプライン段は前の命令の処理を終了し、それ以上処理する命令が残っていない場合がある(これは、パイプライン停止と呼ばれる)。パイプラインが停止したときには、プロセッサは活用されておらず、パイプラインされたプロセッサ・コアによって得られる利益を失うことになる。
命令(そして命令ライン)は、一般的に、逐次的に処理されることから、プロセッサは、逐次的にアドレスされた命令ラインのブロックをフェッチすることによって、パイプライン停止を防ぐことを試みる場合がある。逐次的にアドレスされた命令ラインのブロックをフェッチすることにより、次の命令ラインは必要とされた時に既にL1キャッシュにおいて利用可能となることができ、したがって、プロセッサ・コアは、現行の命令ラインにある命令の処理を終了したときに、次の命令ラインにある命令に容易にアクセスすることができることとなる。
逐次的にアドレスされた命令ラインのブロックをフェッチしても、パイプライン停止を防ぐことができない場合がある。例えば、出口分岐(exit branch)命令と呼ばれる命令は、プロセッサを、逐次的にアドレスされた命令ラインのブロックの外部にある命令(ターゲット命令と呼ばれる)へ分岐させる場合がある。ここで、出口分岐命令は、現行の命令ラインに存在しないかまたは次の逐次的にアドレスされ既にフェッチされた命令ラインに存在するターゲット命令へ分岐する場合がある。したがって、分岐が行われるとプロセッサが判定したときに、出口分岐のターゲット命令を含む次の命令ラインは、L1キャッシュにおいて利用可能とならない場合がある。その結果として、パイプラインが停止し、プロセッサが非効率的に動作する場合がある。
データをフェッチすることに関して、命令がデータにアクセスする場合に、プロセッサが、L1キャッシュにあるデータを含むデータ・ラインを見つけることを試みる場合がある。データ・ラインがL1キャッシュにおいて見つけられなかった場合には、所望のデータ・ラインを求めてL2キャッシュ、および、上位のメモリが検索されている間、プロセッサが停止する場合がある。所望のデータのアドレスは命令が実行されるまで知られないことから、プロセッサは、その命令が実行されるまで所望のデータ・ラインを検索することができない場合がある。プロセッサが実際にデータ・ラインを検索したときに、キャッシュ・ミスが起こってパイプラインが停止することがある。
プロセッサは、現行のアクセスされているデータ・アドレスに近いデータ・アドレスを含むデータ・ラインのブロックをフェッチすることによって、こうしたキャッシュ・ミスを防ぐようにされる場合がある。近傍のデータ・ラインをフェッチすることは、あるデータ・ラインに存在するデータ・アドレスがアクセスされたときに、その近傍のデータ・アドレスもまた通常アクセスされるという仮定に依拠している(この仮定は「参照の局所性」と呼ばれる)。しかし、この仮定が正しくない場合もあり、そのような場合、命令により現行のデータ・ラインの近傍に位置していないデータ・ラインにあるデータがアクセスされることによって、キャッシュ・ミスおよびプロセッサの非効率性がもたらされる。
したがって、キャッシュされたメモリを用いるプロセッサにおいて命令およびデータを取り出すことについて改善された方法に対する必要性が存在する。
本発明の実施形態は、命令ラインをプリフェッチするための方法および装置を提供する。本発明の実施形態において、方法は、(a)レベル2キャッシュから第1の命令ラインをフェッチするステップと、(b)第1の命令ラインにおいて、第1の命令ラインの外部にある命令をターゲットとする分岐命令を識別するステップと、(c)識別された分岐命令からアドレスを抽出するステップと、(d)抽出されたアドレスを用いて、レベル2キャッシュから、ターゲットとされた命令を含む第2の命令ラインをプリフェッチするステップを含む。
本発明の実施形態においては、プロセッサが提供される。プロセッサは、レベル1キャッシュと、レベル2キャッシュと、プロセッサ・コアと、回路とを備える。レベル1キャッシュは、レベル2キャッシュから、1以上の命令を含む命令ラインを受信するように構成される。プロセッサ・コアは、レベル1キャッシュから取り出された命令を実行するように構成される。回路は、(a)レベル2キャッシュから第1の命令ラインをフェッチし、(b)第1の命令ラインにおいて、第1の命令ラインの外部にある命令をターゲットとする分岐命令を識別し、(c)識別された分岐命令からアドレスを抽出し、(d)抽出されたアドレスを用いて、レベル2キャッシュから、ターゲットとされた命令を含む第2の命令ラインをプリフェッチするように構成される。
本発明の実施形態においては、命令ラインに出口分岐アドレスを格納する方法が提供される。命令ラインは1以上の命令を含む。方法は、命令ラインにある1以上の命令のうちの1つを実行するステップと、1以上の命令のうちの1つが別の命令ラインにある命令に分岐するかどうかを判定するステップと、分岐すると判定されたことを条件に、他の命令ラインに対応する命令ラインに出口アドレスを格納するステップを含む。
本発明の上記の特徴、利点、および目的が得られる手法が詳細に理解できるように、上記で要約された本発明のより具体的な説明が、添付の図面に示されている本発明の実施形態を参照することによってなされる。
しかし、添付の図面は本発明の典型的な実施形態のみを図示するものであって、本発明の範囲を限定するものと見なされるべきではないことに留意すべきである。
本発明の実施形態は、命令ラインをプリフェッチするための方法および装置を提供する。本発明の実施形態においては、命令ラインの外部にあるターゲット命令に分岐する「出口分岐命令」について、フェッチされている命令ラインを検査することができる。このような出口分岐命令のターゲット・アドレスを抽出して、ターゲットにされた命令を含む命令ラインをL2キャッシュからプリフェッチするために用いることができる。その結果として、出口分岐がとられた場合に、ターゲットにされた命令ラインは、既にL1命令キャッシュ(「I−キャッシュ」)に存在するようにすることができ、そうすることによって、コストのかかる命令キャッシュ・ミスをなくして全体の性能を向上させることができる。
本発明の実施形態においては、プリフェッチ・データは、プリフェッチ・データが属する対応する情報ブロック(例えば命令ラインまたはデータ・ライン)の形で従来のキャッシュ・メモリに格納することができる。対応する情報ブロックがキャッシュ・メモリからフェッチされる際に、情報ブロックを検査して、他の関連する情報ブロックをプリフェッチするために用いることができる。次いで、各々の他のプリフェッチされた情報ブロックに格納されたプリフェッチ・データを用いて、プリフェッチを行うことができる。フェッチされた情報ブロック内の情報を用いて、フェッチされた情報ブロックに関連する他の情報ブロックをプリフェッチすることにより、フェッチされた情報ブロックに関係するキャッシュ・ミスを防ぐことができる。
本発明の実施形態によれば、プリフェッチ・データおよび予測データを情報ブロックの一部として従来のキャッシュに格納することにより、プリフェッチ・データおよび予測データ(例えば、データ・ラインおよび/または命令ラインのためのプリフェッチ・データおよび予測データ)を排他的に格納する特別なキャッシュまたはメモリの不要とすることができる。しかし、かかる情報を命令ラインに格納することに関して以下に説明するが、かかる情報は、履歴情報の格納を専門とする特別なキャッシュまたはメモリを含むいかなる位置に格納してもよい。異なるキャッシュ(およびキャッシュ・ライン)、バッファ、専用キャッシュ、および他の位置の組み合わせを用いて、ここに説明された履歴情報を格納することができる場合がある。
以下は、添付の図面に図示された本発明の実施形態の詳細な説明である。本発明の実施形態はあくまで例示であり、本発明を明確に教示するため、詳細なものとなっている。しかし、開示された詳細な説明は、実施形態の予期される変形物を排除することを意図しておらず、逆に、添付の特許請求の範囲によって定められる本発明の精神および範囲内にある全ての修正物、均等物、および代替物を包含することを意図している。
本発明の実施形態は、例えばコンピュータ・システムなどのシステムとともに用いることができ、そのようなシステムに関して説明される。本明細書において用いられるシステムという用語は、パーソナル・コンピュータ、インターネット機器、ディジタル・メディア機器、携帯情報端末(PDA)、携帯型音楽/映像再生機、およびビデオゲーム機を含めた、プロセッサおよびキャッシュ・メモリを用いるいかなるシステムも含む。キャッシュ・メモリは、そのキャッシュ・メモリを使用するプロセッサと同じダイに設置することができるが、プロセッサとキャッシュ・メモリは、異なるダイ(例えば、独立したモジュール内の独立したチップ、または単一のモジュール内の独立したチップ)に設置することもできる。
本発明の実施形態は、各々がパイプラインを用いて命令を実行する複数のプロセッサ・コアと複数のL1キャッシュとを有するプロセッサに関して以下で説明されるが、単一の処理コアを有するプロセッサおよび/または命令の実行にパイプラインを用いないプロセッサを含む、キャッシュを用いるいずれかのプロセッサとともに用いることもできる。一般的に、本発明の実施形態は、いかなるプロセッサとも用いることができ、特定の構成に限定されない。
本発明の実施形態は、以下で、L1命令キャッシュ(L1 I−キャッシュ)とL1データ・キャッシュ(L1 D−キャッシュ)に分割されたL1キャッシュを有するプロセッサに関して説明されるが、統合されたL1キャッシュが用いられるような構成において用いることができる。さらに、本発明の実施形態は、命令ラインおよびデータ・ラインをL2キャッシュからプリフェッチすること、および、プリフェッチされたラインをL1キャッシュに配置することに関して説明されるが、いずれかのキャッシュまたはメモリ・レベルから別のいずれかのキャッシュまたはメモリ・レベルへ命令ラインおよびデータ・ラインをプリフェッチするために用いることもできる。
(例示的なシステムの概要)
図1は、本発明の実施形態によるシステム100を図示するブロック図である。システム100は、命令およびデータを格納するためのシステム・メモリ102、グラフィックス処理のためのグラフィックス処理装置104、外部デバイスと通信するためのI/Oインターフェース、命令およびデータを長期格納するためのストレージ・デバイス108、命令およびデータを処理するためのプロセッサ110を含むことができる。
図1は、本発明の実施形態によるシステム100を図示するブロック図である。システム100は、命令およびデータを格納するためのシステム・メモリ102、グラフィックス処理のためのグラフィックス処理装置104、外部デバイスと通信するためのI/Oインターフェース、命令およびデータを長期格納するためのストレージ・デバイス108、命令およびデータを処理するためのプロセッサ110を含むことができる。
本発明の実施形態により、プロセッサ110は、L2キャッシュ112、複数のL1キャッシュ116を有することができ、L1キャッシュ116の各々は、複数のプロセッサ・コア114の1つによって用いられる。ある実施形態によれば、プロセッサ・コア114の各々はパイプラインすることができ、命令の各々は一連の小ステップの形で実施され、ステップの各々は異なるパイプライン段によって実施される。
図2は、本発明の実施形態によるプロセッサ110を図示するブロック図である。簡略化のために、図2は、プロセッサ110の単一のコア114を図示し、これに関して説明される。ある実施形態においては、コア114の各々は、同一のものとすることができる(例えば、同一のパイプライン段を伴う同一のパイプラインを含む)。別の実施形態においては、コア114の各々は異なるものとすることができる(例えば、異なる段を伴う異なるパイプラインを含む)。
本発明の実施形態においては、L2キャッシュは、プロセッサ110によって使用される命令およびデータの一部を格納することができる。プロセッサ110は、L2キャッシュ112に格納されていない命令およびデータを要求する場合がある。要求された命令およびデータがL2キャッシュ112に格納されていない場合には、要求された命令およびデータを(上位のレベルのキャッシュまたはシステム・メモリ102から)取り出して、L2キャッシュに配置することができる。プロセッサ・コア114がL2キャッシュ112から命令を要求したときに、その命令を、まずプリデコーダおよびスケジューラ220で処理することができる(以下でより詳細に説明する)。
本発明の実施形態においては、図1に図示されたL1キャッシュ116は、2つの部分、すなわち、命令ラインを格納するためのL1命令キャッシュ222、および、データ・ラインを格納するためのL1データ・キャッシュ224に分割することができる。L2キャッシュ112から取り出された命令ラインがプリデコーダおよびスケジューラ220によって処理された後で、命令ラインを命令キャッシュ222に配置することができる。
本発明の実施形態においては、命令は、命令ラインと呼ばれるグループとしてL2キャッシュ112および命令キャッシュ222からフェッチして、プロセッサ・コア114が命令ラインにある命令にアクセスすることができる命令ライン・バッファ226に配置することができる。ある実施形態においては、命令キャッシュ222および命令ライン・バッファ226の一部は、有効アドレスおよび制御ビット(EA/CTL)を格納するために用いることができ、それらは、命令ラインの各々を処理して、例えば以下で説明される命令プリフェッチ機構を実行するために、コア114および/またはプリデコーダおよびスケジューラ220によって用いられることができる。
(L2キャッシュからの命令ラインのプリフェッチ)
図3は、本発明の実施形態による、例示的な複数の命令ラインを示す図である。ある実施形態においては、各々の命令ラインは、複数の命令(例えば、I1、I2、I3・・・、など)、並びに、有効アドレスおよび制御ビットなどの制御情報を格納することができる。ある規模においては、命令ラインの各々にある命令は順番に実行され、それにより、命令I1が第一に実行され、I2が第二に実行され、以下続くことになる。命令が順番に実行され、命令ラインもまた順番に実行される。したがって、いくつかの場合においては、命令ラインがL2キャッシュ112から命令キャッシュ222に移動される度ごとに、プリデコーダおよびスケジューラ220は、命令ライン(例えば命令ライン1)を検査して、次の逐次的な命令ライン(例えば命令ライン2)をプリフェッチし、そのことにより、次の命令ラインが命令キャッシュ222に配置され、プロセッサ・コア114によりアクセスできるようにすることができる。
図3は、本発明の実施形態による、例示的な複数の命令ラインを示す図である。ある実施形態においては、各々の命令ラインは、複数の命令(例えば、I1、I2、I3・・・、など)、並びに、有効アドレスおよび制御ビットなどの制御情報を格納することができる。ある規模においては、命令ラインの各々にある命令は順番に実行され、それにより、命令I1が第一に実行され、I2が第二に実行され、以下続くことになる。命令が順番に実行され、命令ラインもまた順番に実行される。したがって、いくつかの場合においては、命令ラインがL2キャッシュ112から命令キャッシュ222に移動される度ごとに、プリデコーダおよびスケジューラ220は、命令ライン(例えば命令ライン1)を検査して、次の逐次的な命令ライン(例えば命令ライン2)をプリフェッチし、そのことにより、次の命令ラインが命令キャッシュ222に配置され、プロセッサ・コア114によりアクセスできるようにすることができる。
プロセッサ・コア114によって実行される命令ラインは、分岐命令(例えば、条件付き分岐命令)を含むことができる場合がある。分岐命令は、別の命令(ここではターゲット命令と呼ばれる)に分岐する命令である場合がある。ターゲット命令は、分岐命令と同じ命令ライン内にある。例えば、図3に示される命令I21は、特定の条件が満たされる場合に(例えば、メモリに格納された値がゼロである場合に)ターゲット命令I41が実行されるべきであることを指定する。ターゲット命令を含む命令ライン(命令ライン1)は既に命令キャッシュ222に存在するので、命令I41への分岐がとられる場合に、命令キャッシュ・ミスはおこらず、プロセッサ・コア114が効率的に命令を処理し続けることができる。
分岐命令は、分岐命令を含む現在の命令ラインの外部にある命令に分岐することができる場合がある。現在の命令ライン以外の命令ラインに分岐する分岐命令は、ここでは出口分岐命令または出口分岐と呼ばれる。出口分岐命令は、無条件分岐命令(例えば、常に分岐する)かまたは条件付き分岐命令(例えばゼロに等しい場合に分岐する)とすることができる。例えば、命令ライン1にある命令I51は、対応する条件が満たされる場合に命令ライン2にある命令I42に分岐する条件付き分岐命令とすることができる。いくつかのケースでは、命令ライン2のフェッチが成功し、既に命令キャッシュ222に配置されているとみなす条件付き分岐がとられる場合、プロセッサ・コア114は、命令キャッシュ・ミスなしに命令キャッシュ222からの命令I42の要求に成功することができる。
しかし、条件付き分岐命令(例えば命令I61)が、命令キャッシュ222に配置されていない命令ラインにある命令(例えば命令ラインXにある命令I4x)に分岐して、キャッシュ・ミスを引き起こし、プロセッサ110の動作が非効率になる場合がある。
本発明の実施形態によれば、現在フェッチされている命令ラインから抽出された出口分岐アドレスによってターゲット命令ラインをプリフェッチすることにより、命令キャッシュ・ミスの数を減少させることができる。
図4は、本発明の実施形態による、命令キャッシュ・ミスをなくすためのプロセス400を図示する流れ図である。プロセス400は、L2キャッシュ112から命令ラインがフェッチされるステップ404で開始することができる。ステップ406において、命令ラインから抜け出す分岐命令を識別することができ、ステップ408において、出口分岐命令のターゲットとされた命令のアドレス(分岐出口アドレスと呼ばれる)を抽出することができる。次いで、ステップ410において、分岐出口アドレスを用いて、L2キャッシュ112からターゲットとされた命令を含む命令ラインをプリフェッチすることができる。ターゲットとされた命令を含む命令ラインをプリフェッチし、プリフェッチされた命令を命令キャッシュ222に配置することにより、出口分岐がとられた場合のキャッシュ・ミスを防ぐことができる。
ある実施形態においては、分岐出口アドレスは、直接、命令ラインに格納する(付加する)ことができる。図5は、本発明の一実施形態に係る命令ライン分岐出口アドレス(EAI)を含む命令ライン(命令ライン1)を示すブロック図である。格納される分岐出口アドレスEA1は、有効アドレスまたは有効アドレスの一部とすることができる。図示されたように、分岐出口アドレスEA1は、分岐命令I61のターゲットとされた命令I4Xを含む命令ラインを識別することができる。
ある実施形態により、命令ラインはまた、他の有効アドレス(例えばEA2)および制御ビット(例えばCTL)を格納することもできる。以下で説明されるように、他の有効アドレスは、命令ラインにあるデータ・アクセス命令に対応するデータ・ラインまたは付加的な分岐命令アドレスをプリフェッチするために用いることができる。制御ビットCTLは、分岐命令の履歴(CBH)を示す1以上のビット、および、命令ライン内の分岐命令の位置(CB−LOC)を示す1以上のビットを含むことができる。命令ラインに格納される情報の用途もまた以下で説明される。
(例示的なプリフェッチ回路)
図6は、本発明の実施形態による、命令およびデータ・ラインをプリフェッチするための回路を図示するブロック図である。本発明の実施形態においては、回路は、データ・ラインのみまたは命令ラインのみをプリフェッチすることができる。本発明の別の実施形態においては、回路は、命令ラインとデータ・ラインの両方をプリフェッチすることができる。
図6は、本発明の実施形態による、命令およびデータ・ラインをプリフェッチするための回路を図示するブロック図である。本発明の実施形態においては、回路は、データ・ラインのみまたは命令ラインのみをプリフェッチすることができる。本発明の別の実施形態においては、回路は、命令ラインとデータ・ラインの両方をプリフェッチすることができる。
命令ラインまたはデータ・ラインがL2キャッシュ112からフェッチされて命令キャッシュ222またはデータ・キャッシュ224に配置されるたびに、命令/データ(I/D)によって制御される選択回路620は、フェッチされた命令ラインまたはデータ・ラインを、適切なキャッシュに送ることができる。
プリデコーダおよびスケジューラ220は、L2キャッシュ112によって出力された情報を検査することができる。複数のプロセッサ・コア114が用いられるある実施形態においては、複数のプロセッサ・コアの間で単一のプリデコーダおよびスケジューラ220を共有することができる。別の実施形態においては、プリデコーダおよびスケジューラ220は、プロセッサ・コア114の各々に個別に提供される。
ある実施形態においては、プリデコーダおよびスケジューラ220は、L2キャッシュ112によって出力された情報が命令ラインであるかデータ・ラインであるかを判定するプリデコーダ制御回路610を有することができる。例えば、L2キャッシュ112は、L2キャッシュ112に格納された情報ブロックの各々に特定のビットを設定することができ、プリデコーダ制御回路610はその特定のビットを検査して、L2キャッシュ112によって出力された情報ブロックが命令ラインであるかデータ・ラインであるかを判定することができる。
プリデコーダ制御回路610が、L2キャッシュ112によって出力された情報が命令ラインであると判定した場合、プリデコーダ制御回路610は、命令ライン・アドレス選択回路604およびデータ・ライン・アドレス選択回路606を使って、命令ラインに格納されるいずれかの適切な有効アドレス(例えばEA1、またはEA2)を選択することができる。次いで、選択(SEL)信号を用い、選択回路608によって、有効アドレスを選択することができる。次いで、選択された有効アドレスを、例えば対応する命令ラインまたはデータ・ラインをL2キャッシュ112からプリフェッチするために使われる32ビットのプリフェッチ・アドレスとして、プリフェッチ回路602に出力することができる。
フェッチされた命令ラインは、メイン・メモリ(例えば出口分岐命令によってターゲットとされた命令を含む)からプリフェッチされるべき第2の命令ラインに対応する単一有効アドレスを格納することができる場合がある。他の場合には、命令ラインは、メイン・メモリからプリフェッチされるべきターゲット命令ラインの有効アドレス、および、メイン・メモリからプリフェッチされるべきターゲットデータ・ラインの有効アドレスを格納することができる。他の実施形態においては、各命令ラインは、メイン・メモリからプリフェッチされるべき複数の命令ラインおよび/または複数のデータ・ラインについての有効アドレスを格納することができる。ある実施形態によれば、命令ラインがプリフェッチされるべき複数の有効アドレスを格納している場合、アドレスは、プリフェッチ回路602に有効アドレスの各々が送信されている間、(例えば、プリデコーダ制御回路610、または命令ライン・アドレス選択回路604、または何らかの他のバッファに)アドレスを一時的に格納することができる。別の実施形態においては、プリフェッチ・アドレスは、プリフェッチ回路602および/またはL2キャッシュ112に並列に送信することができる。
プリフェッチ回路602は、要求された有効アドレスがL2キャッシュ112にあるか否かを判定することができる。例えば、プリフェッチ回路602は、要求された有効アドレスがL2キャッシュ112にあるか否かを判定することができる変換索引バッファ(TLB)のような内容アドレス可能メモリ(content addressable memory)(CAM)を格納することができる。要求された有効アドレスがL2キャッシュ112にあった場合には、プリフェッチ回路602は、要求された有効アドレスに対応する実アドレスをフェッチする要求を、L2キャッシュに発行することができる。次いで、実アドレスに対応する情報ブロックを選択回路620に出力し、適切なL1キャッシュ(例えば命令キャッシュ222、またはデータ・キャッシュ224)に向けることができる。プリフェッチ回路602が、要求された有効アドレスはL2キャッシュ112に存在しないと判定した場合には、プリフェッチ回路は、より上位レベルのキャッシュおよび/またはメモリに信号を送信することができる。例えば、プリフェッチ回路602はL3キャッシュにアドレスのプリフェッチ要求を送信することができ、次いでL3キャッシュは要求されたアドレスを検索される。
プリデコーダおよびスケジューラ220が命令ラインまたはデータ・ラインをL2キャッシュ112からプリフェッチすることを試みる前に、プリデコーダおよびスケジューラ220(または随意的にプリフェッチ回路602)は、要求されプリフェッチされる命令ラインまたはデータ・ラインが既に命令キャッシュ222またはデータ・キャッシュ224に格納されているか否かを判定することができる場合がある。要求された命令ラインまたはデータ・ラインが既に命令キャッシュ222またはデータ・キャッシュ224に設置されていた場合には、L2キャッシュ・プリフェッチは必ずしも必要ではなく、したがって、行われない場合もある。プリフェッチが不必要となる場合においては、現行の有効アドレスを命令ラインに格納することは、やはり必ずしも必要ではなく、命令ラインに他の有効アドレスが格納されることが可能となる(以下で説明する)。
ある実施形態においては、プリフェッチされた情報ラインの各々がL2キャッシュ112からフェッチされる際に、プリフェッチされた情報はまた、プリフェッチされた情報ラインが命令ラインであるかどうかを判定するためにプリデコーダおよびスケジューラ回路220によって試験することができる。プリフェッチされた情報が命令ラインである場合には、プリフェッチされた命令ラインが、例えば、プリフェッチされた命令ラインにある分岐命令によってターゲットとされた命令を格納している別の命令ラインに対応するいずれかの有効アドレスを格納するかどうかを判定するために、プリデコーダ制御回路610によって命令ラインを試験することができる。プリフェッチされた命令ラインが別の命令ラインを指す有効アドレスを含む場合には、他の命令ラインをプリフェッチしても良い。第2のプリフェッチされた命令ラインに対して同じプロセスを繰り返して、各命令ラインに格納された分岐出口アドレスに基づいて複数の命令ラインのチェーンをプリフェッチすることができる。
本発明の実施形態においては、プリデコーダおよびスケジューラ220は、所定の数(閾値数)の命令ラインおよび/またはデータ・ラインがフェッチされるまで、命令ライン(およびデータ・ライン)のプリフェッチを続行することができる。閾値は、いずれかの適切な方法で選択することができる。例えば、閾値は、命令キャッシュに配置することができる命令ラインの数および/またはデータ・キャッシュに配置することができるデータ・ラインの数に基づいて選択することができる。命令キャッシュおよび/またはデータ・キャッシュがより大きな容量を有する場合には大きなプリフェッチ所定の数を選択することができるが、命令キャッシュおよび/またはデータ・キャッシュがより小さな容量を有する場合には小さなプリフェッチ所定の数を選択することができる。
別の例として、プリフェッチの所定の数は、フェッチされた命令ライン内の条件付き分岐命令の予測可能性に基づいて選択することができる。いくつかの場合においては、条件付き分岐命令の結果(その分岐が取られるか否か)が予測可能となることがあり、したがって、プリフェッチするべき適正な命令ラインが予測可能となることがある。しかし、命令ラインの間の分岐予測の数が増大するに従い、全体の予測精度は小さくなることがあり、そのことにより、与えられた命令ラインがアクセスされることになる可能性は小さくなる場合がある。予測不可能性のレベルは、予測不可能な分岐命令を用いるプリフェッチの数が増大するにしたがって、増大する場合がある。
したがって、ある実施形態においては、プリフェッチの所定の数は、予測された、プリフェッチされた命令ラインにアクセスする可能性が、所定の率を下回らないように選び出される。選び出された閾値は、サンプル命令のテスト・ランにより選択された固定の数とすることができる場合がある。テスト・ランおよび閾値の選択は設計時に行うことができ、閾値は、プロセッサ110に予めプログラムすることができる場合がある。随意的に、テスト・ランは、プログラム実行の最初の「トレーニング」フェーズの間に起こることがある(以下で詳細に説明される)。別の実施形態においては、プロセッサ110は、予測不可能な分岐命令を格納しているプリフェッチされた命令ラインの数を追跡して、予測不可能な分岐命令を格納している所定の数の命令ラインがフェッチされた後にのみ命令ラインのプリフェッチを止め、そのことにより、プリフェッチされた命令ラインの所定の数が命令ラインの内容に基づいて動的に変化するようにすることができる。また、いくつかのケースでは、予測不可能な分岐(例えば分岐についての予測可能性の値が予測可能性の閾値を下回る場合の分岐)に達する場合、分岐命令の両方のパスについて(例えば予測された分岐パスと予測されていない分岐パスとの両方について)命令ラインをフェッチすることができる。
(命令ラインのための分岐出口アドレスの格納)
本発明の実施形態により、命令ライン内の分岐命令と、かかる分岐命令のターゲットに対応する分岐出口アドレスを、命令ラインにある命令を実行することによって判定することができる。命令ラインにある命令の実行はまた、分岐命令の分岐履歴を記録し、それにより分岐が別の命令ラインにあるターゲット命令へ続いて命令キャッシュ・ミスを引き起こす可能性を判定するために用いることができる。
本発明の実施形態により、命令ライン内の分岐命令と、かかる分岐命令のターゲットに対応する分岐出口アドレスを、命令ラインにある命令を実行することによって判定することができる。命令ラインにある命令の実行はまた、分岐命令の分岐履歴を記録し、それにより分岐が別の命令ラインにあるターゲット命令へ続いて命令キャッシュ・ミスを引き起こす可能性を判定するために用いることができる。
図7は、本発明の実施形態による、出口分岐命令に対応する分岐出口アドレスを格納するためのプロセス700を図示する流れ図である。プロセス700は、例えば命令キャッシュ222から命令ラインがフェッチされるステップ704で開始することができる。ステップ706において、フェッチされた命令ラインの中の出口分岐を実行することができる。ステップ708において、出口分岐がとられた場合に、出口分岐によってターゲットとされた命令がフェッチされた命令ラインに位置するか否かの判定を行うことができる。出口分岐によってターゲットとされた命令が命令ラインに存在しない場合には、ステップ710において、ターゲットとされた命令の有効アドレスが出口アドレスとして格納される。ターゲットとされた命令に対応する分岐出口アドレスを記録することにより、次にL2キャッシュ112から命令ラインがフェッチされたときに、L2キャッシュ112から、ターゲットとされた命令を格納している命令ラインをプリフェッチすることができる。
本発明の実施形態においては、分岐出口アドレスは、その分岐出口アドレスに分岐する分岐命令が実行されるまで、算出されない場合がある。例えば、分岐命令は、その分岐が行われるはずの現在の命令のアドレスからのオフセット値を指定することができる。分岐命令が実行され、分岐がとられたときに、分岐ターゲットの有効アドレスを算出し、分岐出口アドレスとして格納することができる。全ての有効アドレスを格納することができる場合がある。しかし、他の場合においては、有効アドレスの一部のみを格納することができる。例えば、有効アドレスの高位の32ビットのみを用いて、分岐のターゲット命令を格納しているキャッシュされた命令ラインを見つけることができる場合に、命令ラインをプリフェッチする目的のために、これら32ビットのみを分岐出口アドレスとして保管することができる。
(分岐履歴の追跡および記録)
本発明の実施形態においては、種々の量の分岐履歴情報を格納することができる。いくつかの場合においては、分岐履歴は、命令ラインに存在するどの分岐がとられることになるかまたはとられたかを示すことができる。どの分岐出口アドレスが命令ラインに格納されるのかは、リアルタイム実行の間に、または実行前の「トレーニング」期間の間に生成され格納された分岐履歴情報に基づいて判定することができる。
本発明の実施形態においては、種々の量の分岐履歴情報を格納することができる。いくつかの場合においては、分岐履歴は、命令ラインに存在するどの分岐がとられることになるかまたはとられたかを示すことができる。どの分岐出口アドレスが命令ラインに格納されるのかは、リアルタイム実行の間に、または実行前の「トレーニング」期間の間に生成され格納された分岐履歴情報に基づいて判定することができる。
上記で説明されたように、ある実施形態により、命令ラインにおいて最後にとられた出口分岐命令に対応する分岐出口アドレスのみを格納することができる。命令ラインにおいて最後にとられた分岐に対応する分岐出口アドレスのみを格納することは、後でその命令ラインがフェッチされたときに同じ出口分岐がとられることを効果的に予測する。よって、前にとられた出口分岐命令のためのターゲット命令を格納している命令ラインをプリフェッチすることができる。
1以上のビットを用いて、命令ラインから抜け出す出口分岐の履歴を記録し、フェッチされた命令ラインにある命令が実行されたときにどの出口分岐がとられるかを予測することができる場合がある。例えば、図5に図示されたように、命令ライン(命令ライン1)に格納されている制御ビットCTLは、その命令ラインに存在するどの出口分岐が前にとられたかを示す情報(CB−LOC)、および、いつ分岐がとられたかの履歴を示す情報(CBH)(例えば、前の数回の実行において分岐が何回取られたか)を格納することができる。
ここで、分岐位置CB−LOCおよび分岐履歴CBHをどのようにして用いることができるかの例として、L2キャッシュ112にあって、まだL1キャッシュ222にフェッチされていない命令ラインを考える。命令ラインがL1キャッシュ222にフェッチされたときに、プリデコーダおよびスケジューラ220は、命令ラインが分岐出口アドレスを持たないと判定して、別の命令ラインをプリフェッチしないことがある。随意的に、プリデコーダおよびスケジューラ220は、現在の命令ラインから次の順番のアドレスに位置する命令ラインをプリフェッチすることがある。
フェッチされた命令ラインにある命令が実行される際に、プロセッサ・コア114は、その命令ライン内の分岐が別の命令ラインにあるターゲット命令に分岐するか否かを判定することができる。そうした出口分岐が検出された場合には、分岐出口アドレスをEA1に格納することに加えて、CB−LOCにその分岐の命令ライン内の位置を格納することができる。命令ラインの各々が32の命令を格納する場合、出口分岐命令を示す(可能性ある命令位置の各々に対応する)0−31の番号をCB−LOCに格納することができるように、CB−LOCを5ビットのバイナリ数とすることができる。
ある実施形態においては、CB−LOCに設置された出口分岐命令がとられたことを示す値を、CBHに書込むことができる。例えば、CBHが単一ビットであった場合には、命令ラインにある命令の最初の実行の間に、出口分岐命令が実行されたときにCBHに0を書込むことができる。CBHに格納された0は、CB−LOCに設置された出口分岐命令が、その後その命令ラインに格納されている命令を実行する間にとられることの、弱い予測を示すことができる。
命令ラインにある命令のその後の実行の間に、CB−LOCに設置された出口分岐が再びとられた場合には、CBHを1に設定することができる。CBHに格納された1は、CB−LOCに設置されたその出口分岐命令が再びとられることの強い予測を示すことができる。
しかし、同一の命令ラインが再びフェッチされ(CBH=1)、かつ、異なる分岐出口命令が取られる場合には、CB−LOCおよびEA1の値は同じままとすることができるが、CBHは、命令ラインに格納されている命令のその後の実行の間に、前に取られた分岐が取られることの弱い予測を示す0にクリアされる。
CBHが0であり(弱い分岐予測を示す)、かつ、CB−LOCによって示されている出口分岐以外の出口分岐がとられる場合には、分岐出口アドレスEA1を、そのとられた出口分岐のターゲット・アドレスで上書きすることができ、CB−LOCを、その命令ラインにある、とられた出口分岐に対応する値に変更することができる。
このようにして、分岐履歴ビットが用いられる場合においては、命令ラインは、予測された出口分岐に対応する格納された分岐出口アドレスを格納することができる。このような定期的にとられる出口分岐は、それほど頻繁にとられない出口分岐よりも優先される場合がある。しかし、出口分岐が弱く予測され、かつ別の出口分岐がとられた場合には、分岐出口アドレスを、とられた出口分岐に対応するアドレスに変更して、他の出口分岐が定期的にとられる時に、弱く予測された出口分岐が優先されないようにすることができる。
ある実施形態においては、CBHは、CB−LOCによって示される分岐命令のより長い履歴を格納することができるように、複数の履歴ビットを格納することができる。例えば、CBHが2つのバイナリ・ビットである場合には、00は非常に弱い予測に対応することができ(その場合には他の分岐をとることは、分岐出口アドレスおよびCB−LOCを上書きすることになる)、一方、01は弱い予測、10は強い予測、11は非常に強い予測に対応することができる(その場合には他の分岐命令をとることは、分岐出口アドレスまたはCB−LOCを上書きしない)。例として、出口分岐の強い予測に対応する分岐出口アドレスを置換するためには、命令ラインにある命令の3回の連続実行において3つの他の出口分岐がとられることを必要とする場合がある。
本発明の実施形態においては、複数の分岐履歴(例えばCBH1、CBH2など)、複数の分岐位置(例えばCB−LOC1、CB−LOC2など)、および/または複数の有効アドレスを用いることができる。例えば、ある実施形態においては、CBH1、CBH2などを用いて複数の分岐履歴を追跡することができるが、CBH1、CBH2などのうち最も予測可能性が高い分岐に対応する1つの分岐出口アドレスのみを、EA1に格納することができる。随意的に、複数の分岐履歴および複数の分岐出口アドレスを単一の命令ラインに格納することができる。ある実施形態においては、CB−LOCによって示される所定の分岐が予測可能であることを分岐履歴が示した場合においてのみ、分岐出口アドレスを用いて命令ラインをプリフェッチすることができる。随意的に、いくつかの格納されたアドレスの中から最も予測可能性が高い分岐出口アドレスに対応する命令ラインのみを、プリデコーダおよびスケジューラ220によってプリフェッチすることができる。
本発明の実施形態においては、出口分岐命令が命令キャッシュ・ミスを引き起こすかどうかを用いて、分岐出口アドレスを格納するか否かを判定することができる。例えば、与えられた出口分岐が稀にしか命令キャッシュ・ミスを引き起こさない場合には、その出口分岐が命令ラインにある他の出口分岐よりも頻繁にとられるような場合であっても、その出口分岐に対応する分岐出口アドレスを格納しなくてもよい。命令ラインにある別の出口分岐が、とられる頻度は低いが、全体的により多くの命令キャッシュ・ミスを引き起こす場合には、他の出口分岐に対応する分岐出口アドレスを、その命令ラインに格納することができる。上述されたように、命令キャッシュ「ミス」フラグのような履歴ビットを用いて、どの出口分岐が命令キャッシュ・ミスを引き起こす可能性が最も高いかを判定することができる。
命令ラインに格納されたビットを用い、命令キャッシュ・ミスまたはプリフェッチに起因して命令キャッシュ222に命令ラインが配置されるか否かを示すことができる場合がある。ビットは、プロセッサ110により、キャッシュ・ミスを防ぐに当たって、プリフェッチの有効性を判定するために用いることができる。また、プリデコーダおよびスケジューラ220(または随意的に、プリフェッチ回路602)も、プリフェッチが不必要であると判定し、したがって命令ラインのビットを変更することができる場合がある。例えば、プリフェッチされた情報が既に命令キャッシュ222またはデータ・キャッシュ224に存在するなどの理由で、プリフェッチが不必要である場合においては、より多くの命令キャッシュ・ミスおよびデータ・キャッシュ・ミスを引き起こす命令に対応する他の分岐出口アドレスを命令ラインに格納することができる。
ある実施形態においては、出口分岐が命令キャッシュ・ミスを引き起こすかどうかを、出口分岐のための分岐出口アドレスを格納するか否かを判定するために用いられる唯一の要因とすることができる。別の実施形態においては、出口分岐の予測可能性と、その出口分岐が命令キャッシュ・ミスを引き起こすかどうかの予測可能性の両方をともに用いて、分岐出口アドレスを格納するか否かを判定することができる。例えば、分岐履歴および命令キャッシュ・ミス履歴に対応する値を加算するか、乗算するか、または他の計算式の中で(例えば加重として)用いて、分岐出口アドレスを格納するか否か、および/または、その分岐出口アドレスに対応する命令ラインをプリフェッチするか否かを判定することができる。
本発明の実施形態においては、分岐出口アドレス、出口分岐履歴、および出口分岐位置を実行時に継続的に追跡し、更新して、命令ラインに格納された分岐出口アドレスおよび他の値が、与えられた命令の組が実行されるに従い時間が経つにつれて変化するようにすることができる。このようにして、例えばプログラムが実行されるに従い、分岐出口アドレスおよびプリフェッチされた命令ラインを動的に修正することができる。
本発明の別の実施形態においては、命令の組の最初の実行フェーズの間に(例えばプログラムが実行される最初の期間の間に)、分岐出口アドレスを選択し、格納することができる。最初の実行フェーズは、初期化フェーズ、またはトレーニング・フェーズと呼ばれることもある。初期化フェーズの間に、分岐履歴および分岐出口アドレスを追跡することができ、1以上の分岐出口アドレスを(例えば、上述された基準によって)命令ラインに格納することができる。最初の実行フェーズが完了したときに、格納された分岐出口アドレスは、引き続き、L2キャッシュ112から命令ラインをプリフェッチするために用いることができるが、しかし、フェッチされた命令ラインにある分岐出口アドレス(単数または複数)は、それ以上追跡されたり更新されたりしないであろう。
ある実施形態においては、分岐出口アドレス(単数または複数)を格納している命令ラインの1以上のビットを用いて、その分岐出口アドレスが最初の実行フェーズの間に更新されたか否かを示すことができる。例えば、トレーニング・フェーズの間に、1つのビットをクリアすることができる。ビットがクリアされている間に、命令ラインにある命令が実行されるに従い、分岐履歴を追跡することができ、分岐出口アドレス(単数または複数)を更新することができる。トレーニング・フェーズが完了したときに、ビットを設定することができる。ビットが設定されたときに、分岐出口アドレス(単数または複数)はそれ以上更新されない場合があり、最初の実行フェーズが完了となるであろう。
ある実施形態においては、最初の実行フェーズは、特定の期間にわたって(例えばある数のクロック周期が経過するまで)続行することができる。ある実施形態においては、格納された最新の分岐出口アドレスは、指定の期間が経過し、最初の実行フェーズが終了するまで、命令ラインに格納されたままでいることができる。別の実施形態においては、最も頻繁にとられた出口分岐に対応する分岐出口アドレスか、または最も頻繁に命令キャッシュ・ミスを引き起こした出口分岐に対応する分岐出口アドレスを命令ラインに格納して、その後のプリフェッチに用いることができる。
本発明の別の実施形態においては、最初の実行フェーズは、1以上の出口基準が満たされるまで続行することができる。例えば、分岐履歴が格納されるような場合においては、最初の実行フェーズは、命令ラインにある分岐の1つが予測可能になる(または強く予測可能になる)までか、または命令キャッシュ・ミスが予測可能になる(または強く予測可能になる)まで、続行することができる。与えられた出口分岐が予測可能になったときに、最初のトレーニング・フェーズが完了したことと、その命令ラインがL2キャッシュ112からフェッチされる時に行われるその後のプリフェッチの各々において、強く予測可能な出口分岐の分岐出口アドレスを用いることができることを示すロック・ビットを、命令ラインに設定することができる。
本発明の別の実施形態においては、断続的なトレーニング・フェーズにおいて、命令ラインにある分岐出口アドレスを修正することができる。例えば、トレーニング・フェーズの各々について、頻度および期間の値を格納することができる。頻度に対応しているある数のクロック周期が経過するたびに、トレーニング・フェーズは初期化され、指定の期間値にわたって続行することができる。別の実施形態においては、頻度に対応しているある数のクロック周期が経過する度ごとに、トレーニング・フェーズは初期化され、指定の条件が満たされるまで(例えば、上述されたように、分岐についての指定のレベルの分岐予測可能性に到達するまで)、続行することができる。
本発明の実施形態においては、システム100において用いられる各々のレベルのキャッシュおよび/またはメモリは、命令ラインに格納されている情報のコピーを格納することができる。本発明の別の実施形態においては、指定のレベルのキャッシュおよび/またはメモリのみが、命令ラインに格納されている情報(例えば、分岐履歴および出口分岐)を格納することができる。ある実施形態においては、当業者には公知のキャッシュの一貫性原則を用いて、各々のレベルのキャッシュおよび/またはメモリにある命令ラインのコピーを更新することができる。
命令キャッシュを用いる従来型のシステムにおいては、一般的には、命令はプロセッサ110によって修正されないことに注意されたい。よって、一般的には、従来型のシステムにおいては、命令ラインは、処理された後に命令キャッシュに書き戻されるのではなく廃棄されることになる。しかし、ここで説明されるように、本発明の実施形態においては、修正された命令ラインを命令キャッシュ222に書戻すことができる。
例として、命令ラインにある命令がプロセッサ・コアにより既に処理された(分岐出口アドレスおよび他の履歴情報が更新されることを引き起こす可能性がある)ときに、その命令ラインを、おそらくは命令キャッシュ222に格納されたより古いバージョンの命令ラインを上書きする形で、命令キャッシュ222に書込むことができる(書戻しと呼ばれる)。ある実施形態においては、命令ラインは、その命令ラインに格納された情報に対して変更が為された場合においてのみ、命令キャッシュ222に配置される。
本発明の実施形態により、修正された命令ラインが命令キャッシュ222に書戻されたときに、命令ラインを変更されたものとしてマークすることができる。命令ラインが命令キャッシュ222に書戻され、変更されたものとしてマークされる場合においては、命令ラインは異なった時間にわたって命令キャッシュに留まることができる。例えば、命令ラインがプロセッサ・コア114によって頻繁に使用される場合には、命令ラインは命令キャッシュ222へフェッチされ、戻されることが何度かあり、おそらくはそのたびに更新されるであろう。しかし、命令ラインが頻繁に使用されない場合には(エージングと呼ばれる)、その命令ラインを命令キャッシュ222から除去(パージ)することができる。命令ラインが命令キャッシュ222からパージされたときに、その命令ラインをL2キャッシュ112に書戻すことができる。ある実施形態においては、命令ラインが修正されたものとしてマークされた場合にのみ、L2キャッシュ112に書戻すことができる。別の実施形態においては、命令ラインは常にL2キャッシュ112に書戻すことができる。ある実施形態においては、命令ラインは、随意的に、いくつかのキャッシュ・レベルに(例えばL2キャッシュ112および命令キャッシュ222に)一度に書戻すか、または命令キャッシュ222以外のレベルに(例えばL2キャッシュ112に直接)書戻すことができる。
上述されたように、第1の命令ラインに格納されている出口分岐命令のターゲットとされた命令のアドレスを格納し、ターゲットとされた命令を格納している第2の命令ラインを、L2キャッシュからプリフェッチするために用いることができる。その結果として、命令キャッシュ・ミス、および対応する、命令にアクセスする待ち時間の数を減少させることができ、プロセッサ性能を向上させることができる。
以上、本発明の実施形態を一例として説明したが、本発明の他のさらなる実施形態をその基本的な範囲を逸脱することなく考案することができる。本発明の範囲は、添付の特許請求の範囲によって定められる。
Claims (18)
- 命令ラインをプリフェッチする方法であって、
(a)レベル2キャッシュから第1の命令ラインをフェッチするステップと、
(b)前記第1の命令ラインにおいて、前記第1の命令ラインの外部にある命令をターゲットとする分岐命令を識別するステップと、
(c)前記識別された分岐命令からアドレスを抽出するステップと、
(d)前記抽出されたアドレスを用いて、前記レベル2キャッシュから前記ターゲットとされた命令を含む第2の命令ラインをプリフェッチするステップと、
を含む、方法。 - 前記第2の命令ラインにおいて(a)から(d)の前記ステップを繰り返して、分岐命令によってターゲットとされた命令を含む第3の命令ラインをプリフェッチするステップをさらに含む、請求項1に記載の方法。
- 所定の数の命令ラインがプリフェッチされるまで(a)から(d)の前記ステップを繰り返すステップをさらに含む、請求項1の記載の方法。
- 所定の数の予測不可能な出口分岐命令を含む、複数のプリフェッチされた命令ラインが前記レベル2キャッシュからプリフェッチされるまで、(a)から(d)の前記ステップを繰り返すステップをさらに含む、請求項1に記載の方法。
- 前記第1の命令ラインにおいて、前記第1の命令ラインの外部にある第2の命令をターゲットとする第2の分岐命令を識別するステップと、
前記識別された第2の分岐命令から第2のアドレスを抽出するステップと、
前記抽出された第2のアドレスを用いて、前記レベル2キャッシュから、前記ターゲットとされた第2の命令を含む第3の命令ラインをプリフェッチするステップと、
をさらに含む、請求項1の記載の方法。 - 前記抽出されたアドレスが、前記第1の命令ラインに付加された有効アドレスとして格納される、請求項1に記載の方法。
- 前記有効アドレスが、前の識別された分岐命令の実行の間に算出される、請求項6に記載の方法。
- 前記第1の命令ラインが、前記第1の命令ラインの外部にある2以上の命令をターゲットとする2以上の分岐命令を含み、前記第1の命令ラインに格納されている分岐履歴値が、前記識別された分岐命令が前記第1の命令ラインについての予測された分岐であることを示す、請求項1に記載の方法。
- レベル2キャッシュと、
1以上の命令を含む命令ラインを前記レベル2キャッシュから受信するように構成されたレベル1キャッシュと、
前記レベル1キャッシュから取り出された命令を実行するように構成されたプロセッサ・コアと、
(a)レベル2キャッシュから第1の命令ラインをフェッチし、
(b)前記第1の命令ラインにおいて、前記第1の命令ラインの外部にある命令をターゲットとする分岐命令を識別し、
(c)前記識別された分岐命令からアドレスを抽出し、
(d)前記抽出されたアドレスを用いて、前記レベル2キャッシュから前記ターゲットとされた命令を含む第2の命令ラインをプリフェッチするように構成された回路と、
を備える、プロセッサ。 - 1以上の命令を含む命令ラインに出口分岐アドレスを格納する方法であって、
命令ラインに含まれる1以上の命令を実行するステップと、
前記1以上の命令のうちの1つが別の命令ラインにある命令に分岐するかどうかを判定するステップと、
分岐すると判定されたことを条件に、前記他の命令ラインに対応する命令ラインに出口アドレスを格納するステップと、
を含む方法。 - 前記格納された出口アドレスを有する前記命令ラインを、レベル2キャッシュに書戻すステップをさらに含む、請求項10に記載の方法。
- 前記1以上の命令のうちの1つに対応する分岐履歴情報を前記命令ラインに格納するステップをさらに含む、請求項10に記載の方法。
- 前記命令ラインにある1以上の命令のその後の実行の間に、前記命令ラインにある1以上の命令のうちの第2の命令を実行するステップと、
前記1以上の命令のうちの第2の命令が第2の命令ラインにある第2の命令に分岐する場合に、前記1以上の命令のうちの1つに対応する前記分岐履歴情報が、前記分岐が予測可能であることを示すかどうかを判定するステップと、
前記分岐が予測可能ではなかった場合に、前記第2の命令ラインに対応する命令ラインに第2の出口アドレスを格納するステップと、
をさらに含む、請求項12に記載の方法。 - 前記出口アドレスを格納するステップは、複数の命令ラインが繰り返し実行される最初の実行フェーズの間に行われる、請求項10に記載の方法。
- 前記格納された出口アドレスを有する前記命令ラインをレベル2キャッシュに格納するステップと、
前記レベル2キャッシュから前記付加された出口アドレスを有する前記命令ラインをフェッチし、前記命令ラインをレベル1キャッシュに配置するステップと、
前記命令ラインに付加された前記出口アドレスを用いて、他の命令ラインをプリフェッチするステップと、
をさらに含む、請求項10に記載の方法。 - 前記出口アドレスは、前記出口分岐命令の実行がキャッシュ・ミスを引き起こす場合にのみ前記命令ラインに付加される、請求項17に記載の方法。
- 前記出口アドレスは、前記1以上の命令のうちの1つの実行の間に算出された有効アドレスである、請求項10に記載の方法。
- 命令ラインに含まれる1以上の命令を実行するように構成されたプロセッサ・コアと、
前記1以上の命令のうちの1つが別の命令ラインにある命令に分岐するかどうかを判定し、分岐すると判定されたことを条件に、前記他の命令ラインに対応する命令ラインに出口アドレスを格納するように構成された回路と、
を備える、プロセッサ。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/347,412 US20070186049A1 (en) | 2006-02-03 | 2006-02-03 | Self prefetching L2 cache mechanism for instruction lines |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2007207246A true JP2007207246A (ja) | 2007-08-16 |
Family
ID=38335338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007020489A Pending JP2007207246A (ja) | 2006-02-03 | 2007-01-31 | 命令ラインのための自己プリフェッチl2キャッシュ機構 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20070186049A1 (ja) |
JP (1) | JP2007207246A (ja) |
CN (1) | CN101013360A (ja) |
TW (1) | TW200821924A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012502367A (ja) * | 2008-09-05 | 2012-01-26 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 疎及び密予測を伴うハイブリッド分岐予測デバイス |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8756404B2 (en) * | 2006-12-11 | 2014-06-17 | International Business Machines Corporation | Cascaded delayed float/vector execution pipeline |
WO2008097710A2 (en) * | 2007-02-02 | 2008-08-14 | Tarari, Inc. | Systems and methods for processing access control lists (acls) in network switches using regular expression matching logic |
US8332587B2 (en) * | 2009-05-28 | 2012-12-11 | International Business Machines Corporation | Cache line use history based done bit modification to I-cache replacement scheme |
US8291169B2 (en) | 2009-05-28 | 2012-10-16 | International Business Machines Corporation | Cache line use history based done bit modification to D-cache replacement scheme |
US8171224B2 (en) * | 2009-05-28 | 2012-05-01 | International Business Machines Corporation | D-cache line use history based done bit based on successful prefetchable counter |
US8140760B2 (en) * | 2009-05-28 | 2012-03-20 | International Business Machines Corporation | I-cache line use history based done bit based on successful prefetchable counter |
CN102687128B (zh) * | 2009-12-25 | 2014-12-10 | 富士通株式会社 | 运算处理装置 |
WO2013101121A1 (en) * | 2011-12-29 | 2013-07-04 | Intel Corporation | Managed instruction cache prefetching |
US9361103B2 (en) * | 2012-11-02 | 2016-06-07 | Advanced Micro Devices, Inc. | Store replay policy |
US10140210B2 (en) | 2013-09-24 | 2018-11-27 | Intel Corporation | Method and apparatus for cache occupancy determination and instruction scheduling |
EP3183685A1 (en) * | 2014-08-20 | 2017-06-28 | Intel Corporation | Encrypted code execution |
CN112579175B (zh) * | 2020-12-14 | 2023-03-31 | 成都海光微电子技术有限公司 | 分支预测方法、分支预测装置和处理器核 |
CN117093271A (zh) * | 2023-09-06 | 2023-11-21 | 上海耀芯电子科技有限公司 | 一种分支指令的预取方法及装置 |
Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5374857A (en) * | 1976-12-15 | 1978-07-03 | Fujitsu Ltd | Data processor |
JPS62235658A (ja) * | 1986-03-27 | 1987-10-15 | Yokogawa Hewlett Packard Ltd | キヤツシユ・メモリ制御方式 |
JPH02100740A (ja) * | 1988-10-07 | 1990-04-12 | Nec Corp | キャッシュ・メモリユニットのブロック・ロード動作方式 |
JPH03111936A (ja) * | 1989-09-26 | 1991-05-13 | Nec Corp | 条件分岐命令の分岐結果保存方式 |
JPH04205448A (ja) * | 1990-11-30 | 1992-07-27 | Matsushita Electric Ind Co Ltd | 情報処理装置 |
JPH0588891A (ja) * | 1991-09-30 | 1993-04-09 | Toshiba Corp | キヤツシユメモリ制御装置 |
JPH05143456A (ja) * | 1991-11-20 | 1993-06-11 | Toshiba Corp | キヤツシユメモリ装置 |
JPH07200406A (ja) * | 1993-12-27 | 1995-08-04 | Toshiba Corp | キャッシュシステム |
JPH0863356A (ja) * | 1994-06-14 | 1996-03-08 | Mitsubishi Electric Corp | 分岐予測装置 |
JPH08123723A (ja) * | 1994-08-30 | 1996-05-17 | Mitsubishi Electric Corp | 先行読出機能付命令キャッシュメモリ |
JPH08286914A (ja) * | 1995-04-07 | 1996-11-01 | Nec Corp | メモリ制御装置 |
JPH09218825A (ja) * | 1996-02-13 | 1997-08-19 | Meidensha Corp | 可変キャッシュ方式 |
JPH09319652A (ja) * | 1996-03-28 | 1997-12-12 | Hitachi Ltd | 先読み制御方法 |
JPH10228377A (ja) * | 1996-12-09 | 1998-08-25 | Matsushita Electric Ind Co Ltd | 分岐予測する情報処理装置 |
JP2003030046A (ja) * | 2001-07-11 | 2003-01-31 | Hitachi Ltd | 命令キャッシュのプリフェッチ機構を備えたキャッシュ制御装置 |
JP2003509733A (ja) * | 1997-10-23 | 2003-03-11 | インテル・コーポレーション | トレースに基づく命令キャッシング |
US20040015683A1 (en) * | 2002-07-18 | 2004-01-22 | International Business Machines Corporation | Two dimensional branch history table prefetching mechanism |
JP2007207240A (ja) * | 2006-02-03 | 2007-08-16 | Internatl Business Mach Corp <Ibm> | データ・ラインのための自己プリフェッチl2キャッシュ機構 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6446197B1 (en) * | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
-
2006
- 2006-02-03 US US11/347,412 patent/US20070186049A1/en not_active Abandoned
-
2007
- 2007-01-29 CN CNA2007100077376A patent/CN101013360A/zh active Pending
- 2007-01-31 JP JP2007020489A patent/JP2007207246A/ja active Pending
- 2007-02-01 TW TW096103736A patent/TW200821924A/zh unknown
Patent Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5374857A (en) * | 1976-12-15 | 1978-07-03 | Fujitsu Ltd | Data processor |
JPS62235658A (ja) * | 1986-03-27 | 1987-10-15 | Yokogawa Hewlett Packard Ltd | キヤツシユ・メモリ制御方式 |
JPH02100740A (ja) * | 1988-10-07 | 1990-04-12 | Nec Corp | キャッシュ・メモリユニットのブロック・ロード動作方式 |
JPH03111936A (ja) * | 1989-09-26 | 1991-05-13 | Nec Corp | 条件分岐命令の分岐結果保存方式 |
JPH04205448A (ja) * | 1990-11-30 | 1992-07-27 | Matsushita Electric Ind Co Ltd | 情報処理装置 |
JPH0588891A (ja) * | 1991-09-30 | 1993-04-09 | Toshiba Corp | キヤツシユメモリ制御装置 |
JPH05143456A (ja) * | 1991-11-20 | 1993-06-11 | Toshiba Corp | キヤツシユメモリ装置 |
JPH07200406A (ja) * | 1993-12-27 | 1995-08-04 | Toshiba Corp | キャッシュシステム |
JPH0863356A (ja) * | 1994-06-14 | 1996-03-08 | Mitsubishi Electric Corp | 分岐予測装置 |
JPH08123723A (ja) * | 1994-08-30 | 1996-05-17 | Mitsubishi Electric Corp | 先行読出機能付命令キャッシュメモリ |
JPH08286914A (ja) * | 1995-04-07 | 1996-11-01 | Nec Corp | メモリ制御装置 |
JPH09218825A (ja) * | 1996-02-13 | 1997-08-19 | Meidensha Corp | 可変キャッシュ方式 |
JPH09319652A (ja) * | 1996-03-28 | 1997-12-12 | Hitachi Ltd | 先読み制御方法 |
JPH10228377A (ja) * | 1996-12-09 | 1998-08-25 | Matsushita Electric Ind Co Ltd | 分岐予測する情報処理装置 |
JP2003509733A (ja) * | 1997-10-23 | 2003-03-11 | インテル・コーポレーション | トレースに基づく命令キャッシング |
JP2003030046A (ja) * | 2001-07-11 | 2003-01-31 | Hitachi Ltd | 命令キャッシュのプリフェッチ機構を備えたキャッシュ制御装置 |
US20040015683A1 (en) * | 2002-07-18 | 2004-01-22 | International Business Machines Corporation | Two dimensional branch history table prefetching mechanism |
JP2007207240A (ja) * | 2006-02-03 | 2007-08-16 | Internatl Business Mach Corp <Ibm> | データ・ラインのための自己プリフェッチl2キャッシュ機構 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012502367A (ja) * | 2008-09-05 | 2012-01-26 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 疎及び密予測を伴うハイブリッド分岐予測デバイス |
Also Published As
Publication number | Publication date |
---|---|
CN101013360A (zh) | 2007-08-08 |
TW200821924A (en) | 2008-05-16 |
US20070186049A1 (en) | 2007-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5084280B2 (ja) | データ・ラインのための自己プリフェッチl2キャッシュ機構 | |
JP2007207246A (ja) | 命令ラインのための自己プリフェッチl2キャッシュ機構 | |
JP5089186B2 (ja) | データ・キャッシュ・ミス予測およびスケジューリング | |
US7447879B2 (en) | Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss | |
JP5357017B2 (ja) | 高速で安価なストア−ロード競合スケジューリング及び転送機構 | |
US6611910B2 (en) | Method for processing branch operations | |
US7958317B2 (en) | Cache directed sequential prefetch | |
US8812822B2 (en) | Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss | |
EP2035920B1 (en) | Local and global branch prediction information storage | |
US6134634A (en) | Method and apparatus for preemptive cache write-back | |
US20080148028A1 (en) | Predicting branch instructions | |
US20070288733A1 (en) | Early Conditional Branch Resolution | |
US20080140934A1 (en) | Store-Through L2 Cache Mode | |
KR20240023151A (ko) | 범위 프리페치 명령어 | |
US11249762B2 (en) | Apparatus and method for handling incorrect branch direction predictions | |
US20050198439A1 (en) | Cache memory prefetcher | |
US20080162907A1 (en) | Structure for self prefetching l2 cache mechanism for instruction lines | |
US11526356B2 (en) | Prefetch mechanism for a cache structure | |
US20080162819A1 (en) | Design structure for self prefetching l2 cache mechanism for data lines | |
US20200285477A1 (en) | Branch predictor | |
US20070239939A1 (en) | Apparatus for Performing Stream Prefetch within a Multiprocessor System | |
JPH0588891A (ja) | キヤツシユメモリ制御装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20091030 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120821 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20130205 |