JP3798404B2 - 2レベルの分岐予測キャッシュによる分岐予測 - Google Patents

2レベルの分岐予測キャッシュによる分岐予測 Download PDF

Info

Publication number
JP3798404B2
JP3798404B2 JP2003521935A JP2003521935A JP3798404B2 JP 3798404 B2 JP3798404 B2 JP 3798404B2 JP 2003521935 A JP2003521935 A JP 2003521935A JP 2003521935 A JP2003521935 A JP 2003521935A JP 3798404 B2 JP3798404 B2 JP 3798404B2
Authority
JP
Japan
Prior art keywords
branch
branch prediction
instruction
prediction
level cache
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.)
Expired - Fee Related
Application number
JP2003521935A
Other languages
English (en)
Other versions
JP2005500616A (ja
Inventor
ディー. ズラスキー ジェラルド
エス. ロバーツ ジェイムズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2005500616A publication Critical patent/JP2005500616A/ja
Application granted granted Critical
Publication of JP3798404B2 publication Critical patent/JP3798404B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques

Description

本発明は、スーパースカラーマイクロプロセッサの分野に関するものであり、より詳細には、分岐予測のための方法およびメカニズム(機構)に関するものである。
IEEE Transactions on Computers, IEEE Inc, New York, US, vol. 42, no. 4, 1 April 1993, 396から412ページ,Perleberg CH et al, 題名"Branch Target Buffer Design and Optimization"(分岐ターゲットバッファの設計および最適化)には、マルチレベル分岐ターゲットバッファ(BTB)が説明されている。マルチレベルBTBの各レベルには、エントリ毎に異なった量/タイプの情報が含まれており、エントリの数的およびエントリ毎の情報の量のよりよいバランスを達成することによって、性能の最大化を達成する。
スーパースカラーマイクロプロセッサでは、1クロックサイクルに複数の命令を実行し、その設計に合わせた最も短いクロックサイクルを選択することによって高性能が実現されている。本明細書で使用されるように、「クロックサイクル」との用語は、マイクロプロセッサ内の命令処理パイプラインの各種ステージに与えられる時間間隔を指す。記憶装置(例えばレジスタやアレイ)は、クロックサイクルに従って値を取得する。例えば、記憶装置が、クロックサイクルを定義しているクロック信号の立ち上がりまたは立ち下がりに従って値を取得し得る。次に、記憶装置は、クロック信号の立ち上がりに値を取得した場合は次の立ち上がりまで、足り下がりで取得した場合は立ち下がりまでこの値をストアし得る。本明細書に使用する「命令処理パイプライン」との用語は、パイプライン方式での命令の処理に使用される論理回路を指す。パイプラインを、任意の数のステージに分割して、これらステージで命令処理の一部を実行することが可能であるが、一般に命令処理では、命令のフェッチ、命令のデコード、命令の実行、およびデスティネーションへの実行結果のストアが行われる。
発明の概要
スーパースカラーマイクロプロセッサ(およびスーパーパイプライン方式のマイクロプロセッサ)の重要な機能に、分岐予測メカニズムがある。分岐予測メカニズムは、分岐命令の予測された行き先(分岐の成立[taken]または不成立[not-taken])を示し、これにより、分岐予測によって示される予測された命令の流れに含まれる後続の命令のフェッチを続行できるようになる。分岐命令とは、分岐命令の直後の命令から始まる命令の流れを示す連続するアドレスか、メモリ内の任意の場所から始まる命令の流れを示すターゲットアドレスか、の2つ以上のアドレスの1つから後続の命令をフェッチさせる命令のことである。無条件分岐命令では、常にターゲットアドレスに分岐するのに対し、条件付き分岐命令では、先行する命令の結果によって、連続アドレスかターゲットアドレスかのいずれかが選択され得る。予測された命令の流れに含まれる命令は、分岐命令の実行前に投機的に実行され得、いずれの場合であっても分岐命令の実行前に命令処理パイプラインに投入される。予測された命令の流れが正しければ、1クロックサイクルに実行される命令数が増え有利となる。しかし、予測された命令の流れが外れた(つまり、1つ以上の分岐命令が誤って予測された)場合には、その予測された命令の流れに含まれる命令が命令処理パイプラインから破棄され、1クロックサイクルに実行される命令数が低下する。
分岐予測メカニズムが効果を発揮するには、予測された命令の流れができるだけ的中するように、分岐予測メカニズムの精度が極めて高くなければならない。過去の分岐の実行履歴を使用して、特定の分岐の挙動の精度を向上させることがよく行われる。通常、このような分岐予測履歴では、分岐命令に対応するデータを記憶域に保持しなければならない。分岐予測のデータが記憶域から排除されているかデータが失われている場合は、その分岐命令の実行履歴を後から再生成する必要がある。上記の問題に対する解決策の1つとして、分岐予測用の記憶域のサイズを増やすことが考えられる。しかし、分岐予測用の記憶域のサイズを増やすには、ゲート面積の大幅な拡張と、分岐予測メカニズムのサイズの拡張とが必要となることがある。このため、分岐の挙動に関する貴重なデータが失われるおそれがあり、再生成が必要となる。したがって、ゲート数および分岐予測メカニズムのサイズの大幅な拡張を必要としない、分岐予測の性能を向上させるためのメカニズムが求められている。
上記の問題は、ここに記載するマイクロプロセッサおよび方法によって大部分が解決される。一実施形態においては、命令の組に対応する分岐予測情報をストアするように構成された1次レベル分岐予測キャッシュが、プロセッサに設けられる。さらに、1次レベルキャッシュから排除された分岐予測情報をストアするために2次レベル分岐予測キャッシュが使用される。2次レベル分岐予測キャッシュは、1次レベルキャッシュから排除された情報の一部(subset)のみをストアするように構成されている。1次レベルキャッシュから排除され、2次レベルキャッシュにストアされない分岐予測情報は破棄される。1次レベルキャッシュでミスが発生すると、2次レベルキャッシュが、ミスに対応する分岐予測情報を格納しているかどうかが判定される。対応する分岐予測情報が2次レベルキャッシュで検出された場合、2次レベルキャッシュから検出された分岐予測情報がフェッチされて、完全な分岐予測情報の生成に使用される。この予測情報は、のちに分岐予測の作成に使用され得る。一実施形態においては、2次レベルキャッシュからフェッチした命令のデコードを実行するデコード回路系が設けられ得る。2次レベルキャッシュからフェッチした命令のデコードが、完全な分岐予測情報の再生成の際に使用され得る。サイズの小さいキャッシュを使用して、1次レベル分岐予測キャッシュから排除された分岐予測情報をストアすることができ有利である。さらに、1次レベルキャッシュでミスが発生した場合に、2次レベルキャッシュにストアされているデータから、完全な分岐予測を迅速に再生成することができる。
本発明の他の目的ならびに利点は、添付の図面を参照しつつ下記に記載する本発明の詳細な説明を参照すれば明白となる。
本発明は、様々に変形されたり代替形態を取り得るが、その特定の実施形態が、例として図中に図示され、かつ本明細書に詳細に記載される。しかし、図面および詳細な説明は、開示の実施形態に本発明を限定することを意図するものではなく、本発明が添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれる全ての変形例、均等物および代替例を含むことが意図にあることが理解されるべきである。
プロセッサの概略
図1を参照すると、プロセッサ10の一実施形態のブロック図が示される。別の実施形態も可能であり、考慮される。プロセッサ10は、プリフェッチユニット12、分岐予測ユニット14、命令キャッシュ16、命令整列ユニット18、複数個のデコードユニット20A〜20C、複数個のリザベーションステーション22A〜22C、複数個の機能ユニット24A〜24C、ロード/ストアユニット26、データキャッシュ28、レジスタファイル30、リオーダーバッファ32、MROMユニット34およびバスインターフェイスユニット37を備える。本明細書において、後に文字が付された参照符号によって参照される複数の要素は、参照符号のみによって集合的に参照される。例えば、デコードユニット20A〜20Cは、デコードユニット20として集合的に参照される。
プリフェッチユニット12は、バスインターフェイスユニット37から命令を受け取るために同ユニットに結合され、さらに命令キャッシュ16および分岐予測ユニット14にも結合されている。同様に、分岐予測ユニット14は命令キャッシュ16に結合されている。さらに、分岐予測ユニット14は、デコードユニット20および機能ユニット24に結合されている。命令キャッシュ16は、さらにMROMユニット34および命令整列ユニット18に結合されている。さらに、命令整列ユニット18は、デコードユニット20に結合されている。各デコードユニット20A〜20Cは、ロード/ストアユニット26と、それぞれ対応するリザベーションステーション22A〜22Cとに結合されている。リザベーションステーション22A〜22Cは、それぞれ対応する機能ユニット24A〜24Cにさらに結合されている。さらに、デコードユニット20とリザベーションステーション22とは、レジスタファイル30およびリオーダーバッファ32に結合されている。機能ユニット24は、ロード/ストアユニット26、レジスタファイル30およびリオーダーバッファ32とも結合されている。データキャッシュ28は、ロード/ストアユニット26とバスインターフェイスユニット37とに結合されている。バスインターフェイスユニット37は、L2キャッシュへのL2インターフェイスとバスとにさらに結合されている。最後に、MROMユニット34はデコードユニット20に結合されている。
命令キャッシュ16は、命令をストアするために設けられた高速キャッシュメモリである。命令キャッシュ16から命令がフェッチされて、デコードユニット20にディスパッチされる。一実施形態においては、命令キャッシュ16は、64バイト(1バイトは8つのバイナリビットを含む)のラインを有する2ウェイアソシエーティブ構造に、最大64キロバイトの命令をストアできるように構成されている。別法として、他の任意の構成およびサイズを使用してもよい。例えば、命令キャッシュ16は、フルアソシエーティブ構成、セットアソシエーティブ構成、ダイレクトマップド構成のいずれでも実装可能であるという点が注目される。
プリフェッチユニット12によって、命令が命令キャッシュ16にストアされる。プリフェッチ方式では、命令は、その命令が要求される前に命令キャッシュ16からプリフェッチされ得る。種々のプリフェッチ方式が、プリフェッチユニット12によって採用され得る。命令キャッシュからフェッチされた命令は、スキャナ/整列器(scanner/aligner)に渡される。命令は、初めてフェッチされるときには、プリデコードタグが付けられていない。この場合、スキャナ/整列器は、1クロックにつき4バイトをデコードユニット20に渡す。デコードユニット20がプリデコードされていない命令をコアにディスパッチすると、デコードユニットは、この命令に対応するプリデコードデータを生成し得る。このデータは命令の境界を示すものである。
次に、可変バイト長の命令セットを使用するプロセッサ10の一実施形態のプリデコードタグのエンコード方式(encoding)を以下に記載する。可変バイト長の命令セットとは、命令が占めるバイト数が命令によって変わり得る命令セットのことである。プロセッサ10の一実施形態が使用する可変バイト長の命令セットの例に、x86命令セットがある。
本例に示すエンコード方式においては、あるバイトが命令の最終バイトである場合、このバイトのエンドビットがセットされる。デコードユニット20が直接デコード可能な命令は「ファストパス」命令と呼ばれる。一実施形態によると、それ以外のx86命令はMROM命令と呼ばれる。例えば、Mod R/Mバイトおよび即値バイトの2つのプリフィックスバイトを含むファストパス命令は、下記のようなエンドビットを有し得る。
エンドビット 00001
MROM命令とは、複雑過ぎるためにデコードユニット20がデコードすることができないと判断された命令のことである。MROM命令は、MROMユニット34を呼び出すことにより実行される。より詳細には、MROMユニット34は、MROM命令が出現すると、この命令をパース(parse)し、定義済みのファストパス命令のサブセットを発行して、所望の操作が実行されるようにする。MROMユニット34は、ファストパス命令のサブセットをデコードユニット20にディスパッチする。
プロセッサ10は、条件付き分岐命令に後続する命令を投機的にフェッチするために分岐予測を使用する。分岐予測処理を実行するために分岐予測ユニット14が設けられる。一実施形態においては、分岐予測ユニット14は、命令キャッシュ16のキャッシュラインの16バイト部分につき、最大3個の分岐ターゲットアドレスと、分岐の成立/不成立の予測とをキャッシュ可能な分岐ターゲットバッファを使用する。例えば、分岐ターゲットバッファには、2048個のエントリが含まれていても、これ以外の適切な数のエントリが含まれていてもよい。プリフェッチユニット12は、特定のラインがプリデコードされたときに、最初の分岐ターゲットを決定する。その後、キャッシュライン内の命令の実行によって、このキャッシュラインに対応する分岐ターゲットが更新され得る。命令キャッシュ16は、フェッチされようとしている命令アドレスを示す情報(indication)を提供し、これによって分岐予測ユニット14は、選択すべき分岐ターゲットアドレスを決定して、分岐予測を作成し得る。デコードユニット20と機能ユニット24とは、分岐予測ユニット14に更新情報を提供する。デコードユニット20は、分岐予測ユニット14によって予測されなかった分岐命令を検出する。機能ユニット24は、分岐命令を実行して、予測した分岐方向が誤っているかどうかを判定する。この分岐方向を「辿る」可能性があり、この場合、後続の命令が、分岐命令のターゲットアドレスからフェッチされる。逆に、この分岐方向を「辿らない」可能性もあり、この場合、後続の命令が、分岐命令の後のメモリ場所からフェッチされる。予測誤りの分岐命令が検出されると、この誤って予測された分岐に後続する命令が、プロセッサ10の種々のユニットから破棄される。別法による構成においては、分岐予測ユニット14が、デコードユニット20および機能ユニット24の代わりにリオーダーバッファ32と結合されており、分岐予測ミスの情報をリオーダーバッファ32から受け取ってもよい。分岐予測ユニット14によって、種々の適切な分岐予測アルゴリズムが使用され得る。
命令キャッシュ16からフェッチされた命令は、命令整列ユニット18に送られる。命令キャッシュ16から命令がフェッチされる際に、これに対応するプリデコードデータがスキャンされ、フェッチされようとしている命令に関する情報が命令整列ユニット18に(およびMROMユニット34に)提供される。命令整列ユニット18はプリデコードデータをスキャンして、各デコードユニット20に送る命令を並び替える。一実施形態においては、命令整列ユニット18は、16個の命令バイトの組2つに含まれる命令を並び替えてデコードユニット20に送る。デコードユニット20Aは、(プログラムの順序において)デコードユニット20B,20Cが同時に受け取る命令に先行する命令を受け取る。同様に、デコードユニット20Bは、プログラムの順序においてデコードユニット20Cが同時に受け取る命令に先行する命令を受け取る。
デコードユニット20は、命令整列ユニット18から受け取った命令をデコードするように構成されている。レジスタオペランド情報が検出されて、レジスタファイル30およびリオーダーバッファ32に転送される。さらに、命令が1つ以上のメモリ操作の実行を要求する場合、デコードユニット20は、このメモリ操作をロード/ストアユニット26にディスパッチする。各命令がデコードされて、機能ユニット24用の制御値の組が生成される。この制御値は、オペランドアドレス情報、ならびに変位データまたは即値データ(命令に含まれていることがある)と共に、リザベーションステーション22にディスパッチされる。特定の実施形態においては、各命令がデコードされて最大2つの操作が生成され、これらの操作は機能ユニット24A〜24Cによって別個に実行され得る。
プロセッサ10はアウトオブオーダー実行に対応しており、このため、レジスタの読み出し操作および書き込み操作のために、プログラムの元のシーケンスを追跡するためにリオーダーバッファ32を使用して、レジスタリネーミングを実行し、投機的命令実行と分岐予測ミスから回復できるようにすると共に、正確な例外を可能にする。レジスタの更新を伴う命令がデコードされると、リオーダーバッファ32内に一時的な記憶場所が確保され、これにより投機的なレジスタの状態がストアされる。分岐予測が正しくない場合、誤って予測された経路に沿って投機的に実行された命令による結果が、レジスタファイル30に書き込まれる前に、これをバッファ内で無効化することができる。同様に、特定の命令が例外を発生させる場合、この特定の命令に後続する命令を破棄することができる。このように、例外は「厳密」である(すなわち、例外を発生させるこの特定の命令に後続する命令が、例外が発生する前に完了することはない)。特定の命令が、プログラムの順序においてこの命令に先行する命令より先に投機的に実行されるという点が注目される。先行する命令は、分岐命令のこともあれば、例外を発生させる命令のこともあり、この場合、投機的な実行の結果がリオーダーバッファ32によって破棄され得る。
デコードユニット20の出力において提供される命令制御値と、即値データまたは変位データとは、対応するリザベーションステーション22に直接転送される。一実施形態においては、各リザベーションステーション22は、対応する機能ユニットへの発行を待機している保留中の命令の命令情報(すなわち、命令制御値のほか、オペランド値、オペランドタグおよび/または即値データ)を、最大5つの命令分だけ保持することができる。図1に示す実施形態については、各リザベーションステーション22は、専用の機能ユニット24に対応しているという点が注目される。したがって、リザベーションステーション22および機能ユニット24によって、3つの専用の「発行位置(issue position)」が形成される。つまり、発行位置0がリザベーション22Aおよび機能ユニット24Aによって形成される。整列されてリザベーションステーション22Aにディスパッチされた命令は、機能ユニット24Aによって実行される。同様に、発行位置1がリザベーションステーション22Bおよび機能ユニット24Bによって形成され、発行位置2がリザベーションステーション22Cおよび機能ユニット24Cによって形成される。
特定の命令がデコードされたときに、要求されたオペランドがレジスタ位置である場合は、レジスタのアドレス情報が、リオーダーバッファ32とレジスタファイル30とに同時に転送される。一実施形態においては、リオーダーバッファ32は、デコードユニットからのオペランド要求を受け取るフューチャファイル(future file)も備える。x86レジスタファイルは、32ビットの実レジスタを8つ(すなわち、通常はEAX、EBX、ECX、EDX、EBP、ESI、EDIおよびESP)有するということを当業者は理解するであろう。x86プロセッサアーキテクチャを採用しているプロセッサ10の実施形態においては、レジスタファイル30は、32ビットの実レジスタの各々に対する記憶場所を有する。レジスタファイル30に、MROMユニット34が使用する付加的な記憶場所が設けられてもよい。リオーダーバッファ32は、これらのレジスタの内容を変更し、これによってアウトオブオーダー実行を可能にする結果用に、一時的な記憶場所を有する。リオーダーバッファ32内の一時的な記憶場所が、デコード時に、実レジスタのうちの1つの内容を変更するように判定される各命令のために確保される。このため、特定のプログラムの実行中のさまざまな点において、リオーダーバッファ32は、所定のレジスタの投機的に実行された内容を格納している場所を1つ以上有し得る。所定の命令のデコードの後に、リオーダーバッファ32が、所定の命令において、オペランドとして使用されているレジスタに割り当てられた以前の場所を1つ以上有することが判定された場合、リオーダーバッファ32は、1)最後に割り当てられた場所にある値か、または2)そのうち前の命令を実行する機能ユニットによって値が未だ生成されていない場合は最後に割り当てられた場所に対するタグ、のいずれかを対応するリザベーションステーションに転送する。リオーダーバッファ32が、所定のレジスタ用に確保されている場所を有する場合、オペランド値(またはリオーダーバッファタグ)は、レジスタファイル30ではなくリオーダーバッファ32から提供される。要求されるレジスタのために確保された場所がリオーダーバッファ32に存在しない場合、レジスタファイル30から値が直接取得される。このオペランドがメモリ場所に対応している場合、ロード/ストアユニット26を介して、このオペランドの値がリザベーションステーションに提供される。
特定の実施形態においては、リオーダーバッファ32は、並列的にデコードされた複数の命令を1つの単位としてストアおよび操作するように構成される。ここでは、この構成を「ライン指向型(line-oriented)」と呼ぶ。複数の命令をまとめて操作することによって、リオーダーバッファ32内に採用されているハードウェアを簡略化することができる。例えば、本実施形態に使用されているライン指向型のリオーダーバッファは、1つ以上の命令が命令整列ユニット20によって発行(issue)されたときは必ず、3つの命令(各デコードユニット20から1つずつ)に関する命令情報に十分足る記憶領域を割り当てる。これに対して、従来のリオーダーバッファでは、実際にディスパッチされる命令の数に応じて、割り当てられる記憶領域の大きさが変わる。可変の記憶領域を割り当てるために、比較的多くの論理ゲートが必要となることがある。並列的にデコードされた複数の命令のうちの各々が実行されると、これらの命令の結果が、レジスタファイル30に同時にストアされる。この記憶領域は解放されて、並列的にデコードされる複数の命令の別の組に割り当て可能になる。さらに、制御論理が、同時にデコードされたいくつかの命令に分散されるため、命令1つにつき使用される制御論理回路系の数が減る。特定の命令を識別するリオーダーバッファタグを、ラインタグとオフセットタグとの2つのフィールドに分けてもよい。ラインタグは、この特定の命令を含む、並列的にデコードされた複数の命令のセットを識別し、オフセットタグは、このセットの中のどの命令が特定の命令に対応しているかを識別する。命令の結果をレジスタファイル30にストアして、対応する記憶領域を解放する操作は、この命令の「リタイヤ」と呼ばれているという点が注目される。フューチャファイルを使用して、レジスタファイル30の投機的状態を保存するなど、プロセッサ10の様々な実施形態に、任意のリオーダーバッファ構成を使用し得るという点がさらに注目される。
上記したように、リザベーションステーション22は、対応する機能ユニット24によって命令が実行されるまで、その命令をストアする。(i)命令のオペランドが提供され、かつ(ii)同じリザベーションステーション22A〜22C内にあり、プログラムの順序においてこの命令に先行する命令にオペランドが提供されていない場合、命令が実行のために選択される。命令が機能ユニット24のうちの1つによって実行された場合、この命令の結果が、この結果を待機しているリザベーションステーション22のいずれかに直接転送されると同時に、この結果がリオーダーバッファ32を更新するために送られる(この方法は一般に「結果転送」と呼ばれる)という点が注目される。関連する結果が転送されるクロックサイクルの間に、命令が実行のために選択されて、機能ユニット24A〜24Cに送られ得る。この場合、リザベーションステーション22は、転送された結果を機能ユニット24に送信する。命令が、複数の操作にデコードされて、機能ユニット24によって実行される実施形態においては、これらの操作が互いに独立してスケジューリングされ得る。
一実施形態においては、各機能ユニット24は、加算および減算の整数演算操作のほか、シフト、ローテート、論理演算および分岐処理も実行するように構成されている。特定の命令について、デコードユニット20によってデコードされた制御値を受けて、操作が実行される。浮動小数点演算を処理するために、浮動小数点演算ユニット(図示せず)が使用され得るという点が注目される。この浮動小数点演算ユニットは、MROMユニット34またはリオーダーバッファ32から命令を受け取って、次にリオーダーバッファ32と通信を行って命令を遂行するコプロセッサとしても動作し得る。さらに、機能ユニット24は、ロード/ストアユニット26によって実行されるロードメモリ操作およびストアメモリ操作のために、アドレス生成を行うように構成され得る。特定の実施形態においては、各機能ユニット24は、アドレスを生成するアドレス生成ユニットと、それ以外の機能を実行する実行ユニットとを備え得る。この2つのユニットは、あるクロックサイクルの間に別の命令または操作を独立して処理することができる。
また、各機能ユニット24は、条件付き分岐命令の実行に関する情報を、分岐予測ユニット14に提供する。分岐予測が正しくない場合、分岐予測ユニット14は、命令処理パイプラインに既に入っている、予測ミスとなった分岐に後続する命令を破棄して、必要な命令を命令キャッシュ16またはメインメモリからフェッチさせる。このような場合、投機的に実行され、ロード/ストアユニット26とリオーダーバッファ32とに一時的にストアされた命令を含め、元のプログラムシーケンスにおいて、予測ミスとなった分岐命令に後続する命令の結果が破棄されるという点が注目される。機能ユニット24からリオーダーバッファ32に分岐の実行結果が提供されてもよく、この結果が、分岐予測ミスを機能ユニット24に通知し得るという点がさらに注目される。
レジスタ値が更新されようとしている場合、機能ユニット24によって生成された結果は、リオーダーバッファ32に送られ、メモリ場所の内容が変更される場合はロード/ストアユニット26に送られる。結果がレジスタにストアされる必要がある場合、リオーダーバッファ32は、命令がデコードされたときにレジスタの値のために確保された場所に、結果をストアする。機能ユニット24およびロード/ストアユニット26から結果を転送するために、複数の結果バス38が設けられる。結果バス38は、生成された結果のほかに、実行されようとしている命令を識別するリオーダーバッファタグを伝達する。
ロード/ストアユニット26は、機能ユニット24とデータキャッシュ28との間のインターフェイスを提供する。一実施形態においては、ロード/ストアユニット26は、2つのロード/ストアバッファを備えて構成される。第1のロード/ストアバッファは、データキャッシュ28に未だアクセスしていない実行待ちのロードおよびストアに対応するデータおよびアドレス情報用の記憶場所を備える。第2のロード/ストアバッファは、データキャッシュ28に既にアクセスしている実行待ちのロードおよびストアに対応するデータおよびアドレス情報用の記憶場所を備える。例えば、第1のバッファは12個の場所を備え得、第2のバッファは32個の場所を備え得る。デコードユニット20は、ロード/ストアユニット26へのアクセスを調停(arbitrate)する。第1のバッファが満杯の場合は、デコードユニットは、待機中のロード要求またはストア要求に関する情報を格納するための空きが、ロード/ストアユニット26に生じるまで待機する。また、ロード/ストアユニット26は、データの一貫性が確実に維持されるように、待機中のストアメモリ操作に対するロードメモリ操作の依存関係を検査する。メモリ操作とは、プロセッサ10とメインメモリサブシステムとの間で行われるデータ転送である。メモリ操作は、メモリにストアされているオペランドを利用する命令の結果生じることもあれば、データ転送のみを生じさせるが他の操作を生じさせないロード/ストア命令の結果生じることもある。さらに、ロード/ストアユニット26は、セグメントレジスタやx86プロセッサアーキテクチャによって規定されるアドレス変換機構に関わるその他のレジスタなどの特殊レジスタのための、特別なレジスタ記憶領域を備えていてもよい。
データキャッシュ28は、ロード/ストアユニット26とメインメモリサブシステムとの間で転送されるデータを一時的にストアするために設けられる高速キャッシュメモリである。一実施形態においては、データキャッシュ28は、2ウェイセットアソシエーティブ構造において、最大64キロバイトのデータをストアできるだけの容量を有する。データキャッシュ28は、セットアソシエーティブ構成、フルアソシエーティブ構成、ダイレクトマップド構成、または任意の構成かつ任意のサイズのその他の構成など、様々なメモリ構成に実装可能であるということが理解される。
x86プロセッサアーキテクチャを使用するプロセッサ10の特定の実施形態においては、命令キャッシュ16およびデータキャッシュ28は、リニアアドレス指定されて物理タグが付される。リニアアドレスは、命令によって指定されるオフセットと、x86のアドレス変換メカニズムのセグメント部分によって指定されるベースアドレスとから生成される。リニアアドレスは、メインメモリにアクセスするために、随意的に物理アドレスに変換されることがある。リニアアドレスから物理アドレスへの変換は、x86のアドレス変換メカニズムのページング部分によって指定される。物理アドレスと物理タグとが比較されて、ヒット/ミス状態が判定される。
バスインターフェイスユニット37は、バスを介して、プロセッサ10とコンピュータシステム内の他の部品とを通信させるように構成されている。例えば、バスは、デジタル イクイップメント コーポレーション(Digital Equipment Corporation)によって開発されたEV−6バスと互換性を有するバスであり得る。あるいは、パケットベースのリンク、一方向リンクまたは双方向リンクなど、任意の適した相互接続構造を使用することができる。また、オプションのL2キャッシュインターフェイスを使用して、レベル2キャッシュとインターフェイスを取ってもよい。
以下の説明では、x86マイクロプロセッサアーキテクチャを例に採り上げる。しかし、ここに記載する分岐予測技法(technique)は、どのようなマイクロプロセッサアーキテクチャ内でも使用することができ、そのような実施形態も考察される。x86マイクロプロセッサアーキテクチャでは、シングルバイトのオペコードからなるサブルーチンリターン命令(RET命令など)が定義されているという点が注目される。サブルーチンリターン命令は、その分岐ターゲットアドレスを、ESPレジスタによって示されるスタックの最上部から取得するように指示する。場合によっては、このシングルバイトのRET命令の処理が特別な問題を引き起こし得る。このような場合に対処するメカニズムを、下記に詳細に示す。
分岐予測の概略
図2に、分岐予測ユニット14の一実施形態の一部を示す。図2に示した部分のほか、分岐予測ユニット14の他の実施形態も可能であり、考慮される。図2に示すように、分岐予測ユニット14は、グローバル予測記憶域205、ローカル予測記憶域206、分岐ターゲット記憶域208、更新論理200,202、グローバル履歴シフトレジスタ(GHSR)204、ラインバッファ210、戻りアドレススタック(RAS)230、連続アドレス生成器(SEQ)232、予測論理220、犠牲キャッシュ260、分岐アドレス計算器270、命令キャッシュ16、L2キャッシュ1828、およびデコーダ回路400を備える。犠牲キャッシュ260は、ローカル予測記憶域206から排除された分岐予測情報をストアするように構成されたレベル2(L2)キャッシュである。一実施形態においては、犠牲キャッシュ260は、以前はローカル予測記憶域206に保持されていたが、別のデータを記憶する領域を確保するために排除されたデータのみをキャッシュするように構成されている。ローカル予測記憶域206と犠牲キャッシュ260とがデータを重複して記憶することがないため、より多くの分岐予測情報を保持することができ有利である。
グローバル予測記憶域205、ローカル予測記憶域206、分岐ターゲット記憶域208、命令キャッシュ16、予測論理220、分岐アドレス計算器270、およびラインバッファ210は、フェッチアドレスマルチプレクサ222から出力されるフェッチアドレスバス236に結合されている。グローバル履歴シフトレジスタ204は、バス234を介してグローバル予測記憶域205およびラインバッファ210に結合されている。更新論理200は、グローバル予測記憶域205、ローカル予測記憶域206および分岐ターゲット記憶域208に結合されている。ラインバッファ210は、バス248を介して更新論理200,202に結合されている。さらに、更新論理202は、バス246を介してグローバル履歴シフトレジスタ204に結合されている。リオーダーバッファ32は、選択制御を行い、マルチプレクサ222にアドレスを転送する。また、リオーダーバッファ32は、更新論理200および更新論理202に、分岐の予測された挙動と実際の挙動とに関する情報を提供する。グローバル予測記憶域205とローカル予測記憶域206とは、それぞれバス238,242を介して予測論理220に結合されている。予測論理220は、バス250を介して分岐アドレス計算器270に、選択信号240を介してマルチプレクサ212に結合されている。命令キャッシュ16は、バス241を介して分岐アドレス計算器270に結合されている。マルチプレクサ212の出力は、バス243を介して分岐アドレス計算器270およびマルチプレクサ221に結合されている。また、分岐アドレス計算器270は、バス245および選択信号223を介してマルチプレクサ221に結合されている。最後に、マルチプレクサ221からの出力はマルチプレクサ222に結合されている。
一般に、分岐予測ユニット14の図2に示す部分の基本的な操作は下記のとおりである。フェッチアドレス236が、ラインバッファ210、ローカル予測記憶域206、ターゲットアレイ記憶域208および分岐アドレス計算器270に送られる。さらに、フェッチアドレス236の一部がグローバル履歴234と結合されて、インデックスが生成され、グローバル予測記憶域205に送られる。さらに、フェッチアドレス236の部分225が予測論理220に送られる。グローバル予測記憶域205はグローバル予測238を送り、ローカル予測記憶域206はローカル予測242を送り、ターゲットアレイ208は受け取ったフェッチアドレスに対応するターゲットアドレスを送る。ローカル予測記憶域206から送られるローカル予測242は、予測論理220が分岐予測を作成するために使用する情報を提供する。同様に、グローバル予測記憶域205は、分岐予測の作成に使用されるグローバル予測238を予測論理220に送る。一実施形態においては、動的な挙動を示す分岐について、グローバル予測238によって、ローカル予測記憶域206から提供されるローカル予測242が無効にされ得る。動的な挙動を示す分岐の分類については後述する。最後に、予測論理220は、新しい命令のフェッチに使用される次のフェッチアドレス243を選択する信号をマルチプレクサ212に送る。場合によっては、マルチプレクサ212によって送信されるフェッチアドレス243が、現在の分岐予測の唯一のフェッチアドレスのこともある。しかし、分岐アドレス計算器270が、マルチプレクサ212によって送信されるフェッチアドレス243が誤っていたことを検出すると、現在の分岐予測に対応する第2のフェッチアドレス245を送信することもある。そのような場合、分岐アドレス計算器270は、フェッチアドレス245を選択して、マルチプレクサ221から出力させるための信号223を送信し得る。このように、予測ミスが初期の段階で検出されて訂正される。
動的な挙動およびグローバル分類
上記したように、一実施形態においては、分岐予測ユニット14にグローバル予測メカニズムが含まれ得る。グローバル予測メカニズムの詳細は、同時係属中であって譲受人が共通する特許出願「グローバル履歴分岐予測における条件付き分岐の動的分類(Dynamic Classification of Conditional Branches in Global History Branch Prediction)」、米国特許出願第09/441,630号、1999年11月16日出願、ズラスキー ジュニアら(Zuraski, Jr. et al.)に記載されている。同開示は、参照として本願に包含される。上記したように、プリフェッチユニット12は、分岐命令を検出して、分岐命令に対応する分岐情報を分岐予測ユニット14に送るように構成され得る。条件付き分岐が検出されると、更新論理200は、この分岐予測に対応するエントリをローカル予測記憶域206内に作成し、新たに作成したこの分岐予測エントリを「分岐不成立」に初期化し得る。一実施形態においては、ローカル予測記憶域206は、分岐マーカーを含む分岐予測情報をストアし得る。この情報は、分岐予測を作成して、分岐ターゲット記憶域208、連続アドレス232、または戻りスタックアドレス230にストアされている複数の分岐ターゲットアドレスのうちから行き先を選択するために使用される。ローカル予測記憶域206内に分岐のエントリを作成する際に、予測分岐方向が「分岐不成立」に初期化され、これと対応する分岐マーカーが、連続アドレス232を示すように初期化される。このほかに、条件付き分岐に対応するエントリがラインバッファ210内に作成される。ラインバッファのエントリには、グローバル履歴、フェッチアドレス、グローバル予測およびグローバルビットが含まれ得る。
ローカル予測記憶域206にある分岐予測が「分岐不成立」の場合、マルチプレクサ212から連続アドレス232が送られる。最終的な予測250が、更新論理202に送られ、更新論理202は、動的であると分類された予測分岐方向を、グローバル履歴シフトレジスタ204に移す。ローカル分岐予測のエントリが「分岐不成立」の場合、最終的な予測250は「分岐不成立」を示し、信号240は、マルチプレクサ212からの連続アドレス232を次のフェッチアドレスとして選択する。この分岐予測のエントリが分岐予測ユニット14から削除される前に、この分岐が次に実行されるとき、予測分岐方向は「分岐不成立」であり、次のフェッチアドレスとして連続アドレス232が送られる。リタイヤ時に、ラインバッファ210内の対応するエントリが、更新論理200および更新論理202に送られ、ラインバッファ210から削除される。ラインバッファのエントリが、分岐が非動的であると分類されていることを示し、リオーダーバッファ32が、分岐予測が的中したことを示す場合、更新論理200または202によって更新が実行されることはない。しかし、分岐が非動的であると分類されており、分岐予測が外れた場合、予測ミスとなった分岐に対応する分岐予測が更新されて、以下に記載するようにグローバル履歴シフトレジスタ204が更新される。
成立した非動的な分岐
リオーダーバッファ32は、リタイヤ時または予測ミスの発生時に、分岐の挙動に関する情報を更新論理200に送る。また、ラインバッファ210も、更新論理200,202にラインバッファのエントリを送る。ラインバッファの分岐のエントリが、分類が非動的であると分類されており、「分岐不成立」と予測されていることを示し、かつリオーダーバッファ32が、対応する分岐の予測が外れたことを示す場合、更新論理200は、予測ミスとなった分岐に対応する分岐予測のエントリを更新する。更新論理200は、ローカル予測記憶域206内の分岐予測を「分岐不成立」から「分岐成立」に更新し、分岐ターゲットアドレスを分岐ターゲット記憶域208にストアする。ストアした分岐ターゲットアドレスに対応する「動的」(すなわち「グローバル」)ビットが、分岐が静的すなわち非動的であることを示すように初期化される。この値は、2進数の0によって表され得る。この分岐予測のエントリが分岐予測ユニット14から削除される前に、この分岐が次に実行されたとき、分岐予測のエントリは「分岐成立」を示し、分岐は非動的として分類されている。分岐が「分岐成立」と予測され、非動的であると分類されている場合、予測論理220は、マルチプレクサ212からターゲットアドレスを選択する。上記と同様に、分岐予測が正しい場合は、更新論理200または202によって分岐予測を更新する必要はない。これに対して、「分岐成立」と予測された非動的な分岐が成立しなかった場合、分岐予測のエントリとグローバル履歴シフトレジスタ204とが更新される。
動的分岐
非動的であると分類され、かつ「分岐成立」と予測された分岐の予測が外れた場合、更新論理200は、ローカル予測記憶域206内の、予測ミスとなった分岐に対応する動的ビットを更新して、分岐を動的すなわちグローバルであると分類する。さらに、更新論理200は、グローバル予測記憶域204内の、予測ミスとなった分岐に対応するグローバル予測エントリを、「分岐不成立」に更新する。また、更新論理202は、分岐が不成立だったことを示すようにグローバル履歴シフトレジスタ204を更新する。一実施形態においては、グローバル履歴シフトレジスタ204は、最新の8個の動的分岐の挙動を記録する。
動的分岐がフェッチされると、ローカル予測記憶域206、ターゲットアレイ208およびラインバッファ210にフェッチアドレス236が送られる。さらに、このフェッチアドレスは、グローバル履歴シフトレジスタ204の内容と結合されて、インデックス203が生成され、これがグローバル予測記憶域205に送られる。また、グローバル履歴シフトレジスタ204の内容は、バス234を介してラインバッファ210にも送られる。一実施形態においては、フェッチアドレス236のビット9〜4と、グローバル履歴シフトレジスタ204の内容とを連結することによってインデックス203が生成される。論理和または排他的論理和を求めるなど、インデックスを生成する別の方法も同様に考察される。このインデックスを基にグローバル予測記憶域205のエントリが選択されて、このエントリがラインバッファ210、更新論理202およびマルチプレクサ220に送られる。グローバル予測記憶域204から送られた予測分岐方向が、更新論理202によってグローバル履歴シフトレジスタ204に移される。例えば、2進数の1は「分岐成立」を、2進数の0は「分岐不成立」を表し得る。対応する動的ビットが、分岐がグローバルであると分類されていることを示し、かつグローバル予測が「分岐成立」を示す場合、マルチプレクサ212から送られるターゲットアドレスが次のフェッチアドレスとして選択される。グローバル予測が「分岐不成立」を示す場合、マルチプレクサ212から、連続アドレス232が次のフェッチアドレスとして選択される。
リタイヤ時に、リオーダーバッファ32は更新論理200および更新論理202に分岐情報を送る。さらに、ラインバッファ210は、対応する分岐情報を更新論理202に送る。リオーダーバッファ32が、動的分岐の予測が正しいことを示す場合、更新論理200は、分岐のこの挙動を示すためにグローバル予測のエントリ205を変更する。一実施形態においては、グローバル分岐予測のエントリには飽和カウンタが含まれる。このカウンタは2ビット長で、分岐が成立するとインクリメントされ、分岐が成立しないとデクリメントされ得る。この指標(indicator)を使用して、「分岐成立の可能性大(strongly taken)」、「分岐成立の可能性小(weakly taken)」、「分岐不成立の可能性大(strongly not taken)」、「分岐不成立の可能性小(weakly not taken)」を表すことができる。動的分岐の予測が外れた場合、更新論理200は、分岐のこの挙動を示すためにグローバル予測のエントリ205を更新する。さらに、更新論理202は、予測ミスの発生時に、動的分岐の予測による挙動ではなく実際の挙動を反映するようにグローバル履歴シフトレジスタ204を修正する。
犠牲分岐予測用のキャッシュ
上記の分岐予測ユニット14の動作の概略は、対応するフェッチアドレスがローカル予測記憶域206に存在する場合の分岐予測を想定している。しかし、受け取ったフェッチアドレスに対応する分岐予測がローカル予測記憶域206にない場合もある。次に、このような状況に対処する方法を概説する。
図3は、1次レベル(L1)分岐予測用の記憶域206内に分岐予測のエントリを作成する方法の一実施形態を示すフローチャートであり、存在する分岐予測のエントリを排除することと、排除された分岐予測情報の一部(サブセット)を2次レベル(L2)記憶域にストアすることとが行われる。2次レベルの分岐予測記憶域260を利用することによって、L1予測記憶域206から排除された分岐予測情報を保持できるようになり有利である。特定の分岐に対して正確な予測を作成するには、数多くの分岐の実行を記録した分岐の実行履歴の作成が必要となり得ることを当業者は認めるであろう。このため、排除された分岐予測に対応する分岐予測情報をキャッシュに保持することにより、分岐予測の精度を向上させることができる。L1記憶域206へのデータの再ロードが要求されていることが検出される(判断ブロック301)と、分岐予測用の対応するエントリを作成するための空きがL1分岐予測記憶域206に存在するかどうかが判定される(判断ブロック303)。再ロードするデータに対応する、L1分岐予測記憶域206のエントリが既に占有されている場合、現在のエントリが排除され得(ブロック305)、排除された分岐予測情報の一部のみがL2記憶域260にストアされる(ブロック307)。再ロードするデータをL2記憶域260からフェッチする場合(判断ブロック309)、L2記憶域260からフェッチされるデータは分岐予測のエントリの一部を有しており、これが対応する分岐予測の完全なエントリ(ブロック311)の再生成に使用され得る。次に、再生成されたエントリがL1記憶域206にストアされ得る(ブロック315)。一方、再ロードするデータをL2記憶域260からフェッチしない場合(判断ブロック309)、新しい分岐予測のエントリが初期化され(ブロック313)、L1記憶域にストアされる(ブロック315)。
図4は、対応する分岐予測がL1分岐予測記憶域に存在しない場合の方法の別の実施形態である。初めに、フェッチアドレスがL1分岐予測記憶域206に提示される(ブロック400)。フェッチアドレスが提示されると、提示されたフェッチアドレスに対応する分岐予測がL1予測記憶域に存在するかどうかが判定される(判断ブロック402)。対応する分岐予測がL1記憶域に存在する場合、予測が送られる(ブロック418)。しかし、対応する分岐予測がL1記憶域206にない場合、フェッチアドレスに対応するL1予測記憶域206のエントリが、別のフェッチアドレスに対応する分岐予測のエントリによって占有されているかどうかが判定される(判断ブロック404)。L1予測記憶域206に別のエントリが存在する場合、現在のエントリがL1予測記憶域206から排除される(ブロック406)。L1予測記憶域の対応するエントリが有効なエントリによって占有されていない場合、L2予測記憶域260に対して、このフェッチアドレスに対応する分岐予測のエントリを要求する(ブロック408)。一実施形態においては、L1予測記憶域206とL2予測記憶域260とに対して同時に要求を行うことができる。対応するエントリがL2予測記憶域260に存在しない場合(ブロック410)、提示されたフェッチアドレス用の、新しい分岐予測のエントリがL1予測記憶域206に作成され得る(ブロック412)。一方、L2分岐予測記憶域260内にこのフェッチアドレスに対応するエントリが存在する場合、L2のエントリのデータが使用されて、フェッチアドレスに対応する完全な分岐予測が作成される(ブロック414)。次に、再作成された分岐予測がL1分岐予測記憶域にストアされ(ブロック416)、送られて分岐予測の作成に使用される(ブロック418)。分岐命令に対応する分岐予測情報を、L2分岐予測記憶域から復旧することができ、分岐実行の履歴から再生成する必要はなく有利である。さらに、分岐予測に対応する情報の一部のみをL2分岐予測用の記憶域260にストアするだけで済む。このようにして、L2分岐予測用の記憶域260のサイズを小さくすることができる。
ローカル分岐予測記憶域
一実施形態においては、ローカル予測記憶域206は、命令キャッシュ16と同様な方法によって編成され得る。ローカル予測記憶域206にストアされているデータは、ウェイに編成された記憶域のラインから構成され得る。一実施形態においては、ローカル予測記憶域206は、命令キャッシュ16内の全エントリを格納できるだけの十分なサイズを有する。別の実施形態においては、ローカル予測記憶域206のサイズは、命令キャッシュ16のサイズよりも小さくてもよい。例えば、ローカル予測記憶域206は、命令キャッシュ16のサイズの4分の1であり得る。このような実施形態においては、ローカル予測記憶域206内の、同じ記憶場所を指している複数のフェッチアドレスのエントリ同士を区別するために、ローカル予測記憶域206にローカル予測と共に追加ビットがストアされ得る。一実施形態においては、グローバル予測記憶域205が、複数のフェッチアドレスの予測を1つの記憶場所に格納できるように構成され得る。当業者は、ローカル予測記憶域206およびグローバル予測記憶域205を様々に構成可能であることを容易に理解するであろう。
図5を参照すると、連続する命令バイト50と、これに対応するローカル予測記憶域206のエントリとの組の例を表す図が示される。図5では、命令内の各バイトが、短い垂直線(参照符号54など)によって表される。さらに、組50にある命令同士を区切っている線(参照符号56など)もバイトの境界を示す。図5に示す命令は可変長であり、このため、図5に示す命令を含む命令セットは可変バイト長の命令セットである。換言すれば、この可変バイト長の命令セットの先頭の命令のバイト数は、この命令セットの2番目の命令のバイト数とは異なる。命令セット内の各命令のバイト数が全て等しくなるような固定長の命令セットもあり得る。
図5に示すように、組50には、非分岐命令IN0〜IN4が含まれる。命令IN0,IN3,IN4は2バイト命令である。命令IN1は1バイト命令であり、命令IN2は3バイト命令である。このほか、「分岐成立」と予測された3つの分岐命令PB0,PB1,PB2も示されており、これらは全て2バイトを占める。非分岐命令および分岐命令は様々なバイト数をとりうるという点が注目される。
本明細書で使用されるように、アドレスのオフセットは、アドレスの所定数の最下位ビット(least significant bit)を含む。この数は、オフセットが関連しているバイトの組に含まれる各バイトに対して、異なったビットのエンコーディング(コード化)を付与するのに十分な数である。例えば、組50は、バイト0〜15の16バイトを含む。このため、このグループにあるアドレスの最下位の4ビットが、そのアドレスのオフセットを形成している。このアドレスの残りのビットは、メインメモリ内の隣接する他の命令バイトの組から、組50を識別する。さらに、残りのビットのうちの所定数の最下位ビットが、命令キャッシュ16によって使用され、組50をストア可能な記憶場所の行を選択するためのインデックスを形成している。
セット52は9個の分岐マーカービット0〜8からなるセットの例で、組50に対応している。セット52内の9個の分岐マーカービットの各々は、組50の特定のバイト群に対応しており、「分岐成立」と予測された分岐命令が、対応するバイト群で終端しているかどうかを示す。本図の実施形態においては、分岐マーカービット0は命令バイト0に、分岐マーカービット1は命令バイト1〜2に、分岐マーカービット2は命令バイト3〜4に、分岐マーカービット3は命令バイト5〜6に、分岐マーカービット4は命令バイト7〜8に、分岐マーカービット5は命令バイト9〜10に、分岐マーカービット6は命令バイト11〜12に、分岐マーカービット7は命令バイト13〜14に、分岐マーカービット8は命令バイト15に対応している。分岐マーカービット52のほかに、分岐マーカービット52に対応する分岐予測情報450も含まれる。分岐予測情報450は、「分岐成立」と予測された分岐に対応する情報を含んでおり、以下に詳細に記載するように、分岐予測の作成に使用される。
図5の実施形態においては、成立予測分岐命令(predicted taken branch preduction)が、対応するバイト範囲で終端している場合は、分岐マーカービットが「1」にセットされる。成立予測分岐命令が、分岐マーカービットに対応するバイト範囲で終端していない場合は、この分岐マーカービットが「0」にセットされる。したがって、分岐マーカービット2は、成立予測分岐PB0が命令バイト範囲3〜4内で終端していることを示す。分岐マーカービット6は、成立予測分岐PB1が命令バイト範囲11〜12内で終端していることを示す。最後に、分岐マーカービット7は、成立予測分岐PB2が命令バイト範囲13〜14内で終端していることを示す。一実施形態においては、分岐マーカービット52によって、最大3つの成立予測分岐が示され得る。このような実施形態においては、分岐予測情報450は、3つの別個の分岐命令に関する情報を格納することができる。この情報450は、分岐命令の種類を含むほか、対応する分岐の過去の挙動に関する情報を示し得る。分岐予測情報450については、図15を説明する際に詳述する。
フェッチアドレスがローカル予測記憶域206に提示されると、分岐マーカービット52と分岐情報450とからなる組が予測論理220に送られ、分岐予測の作成に使用される。一実施形態においては、分岐予測の作成の際に考慮すべき分岐マーカービット52の識別に、フェッチアドレスのオフセットが使用される。図6を参照すると、分岐マーカービット52とフェッチアドレスのオフセットとの関係の一実施形態が示される。図6において、列602〜618を有するテーブルは、オフセットアドレスと、これと対応する分岐マーカービットとを有する。一般に、対応するオフセットが、テーブル内にある条件を満足するかどうかによって、分岐予測の作成の際に分岐マーカービットが考慮されるかどうかが決まる。例えば、列602は、アドレスのオフセットが0以下の場合、分岐予測の作成の際に全ての分岐マーカービットが考慮されることを示す。このように、このテーブルは、所定のオフセットについて、考慮される分岐マーカービットの番号の最小値を示している。したがって、オフセットが7の場合、分岐マーカービット4〜8が考慮される。オフセットが15の場合、分岐マーカービット8のみが考慮される。
図7を参照すると、上記した命令バイトと分岐マーカービットとの関係を表す図が示される。図7には、命令バイト50と、これと対応する分岐マーカービットとが記載されている。また、命令バイト#702、分岐マーカービット#704、各分岐マーカービットに対応する命令バイト706、および各分岐マーカービットに対応するフェッチアドレスのオフセット708も記載されている。分岐情報450は記載されていない。図5に関して上記したように、「分岐成立」と予測された3つの分岐命令PB0〜PB2に対応する分岐マーカービット2,6および7がセットされている。例として、オフセットが3のフェッチアドレスがローカル予測記憶域206に提示された場合を考える。この例では、分岐マーカービット2〜8は、全て各ビットの条件(つまり、分岐マーカービット2ではオフセット≦3、分岐マーカービット3ではオフセット≦5など)を満足している。したがって、分岐予測の作成時に、分岐マーカービット2〜8が使用される一方、分岐マーカービット0〜1は、命令シーケンスにおいて現在フェッチされようとしている命令に先行する命令に対応しているため、効率的に無視され得る。このようにして、分岐予測の作成時に考慮すべき分岐マーカービットを、容易に判定できるようになる。
図8は、予測の作成に分岐マーカービット52を使用する方法の一実施形態を示すものである。図8には、受け取ったフェッチアドレスのオフセット(本図で「a」として示される)と、図7に示すオフセット値708に相当する値0,1,3,5,7,9,11,13および15とを比較する回路系802が記載されている。受け取ったオフセットが、比較対象の値以下である度に、このことを示す信号808がANDゲート804に送られる。さらに、各分岐マーカービット52もANDゲート804に送られる。論理ANDゲート808は、論理ORゲート806に結合されており、その出力は、分岐予測が作成されようとしているかどうかを示す。図8の例でも上記と同様に、オフセットが値3に指定されたフェッチアドレスを受け取った場合を考える。図7に示すように、オフセットが3の命令は、成立予測分岐PB0に対応している。次に、対応する分岐マーカービット52が、ローカル予測記憶域206から図8に示す論理に送られる。回路系802は、値が3に指定されたオフセットを受け取って、信号808C〜808Iをアサートし、ゲート804C〜804Iが各々これらを受け取る。さらに、分岐マーカービット2,6および7は、2進数値の「1」をゲート804C,804Gおよび804Hのそれぞれに送る。残りの分岐マーカービットは、2進数値の「0」を送る。したがって、ゲート804C,804Gおよび804Hの各々は、ゲート806に2進数値の「1」を送り、この結果、ゲート806は、分岐予測が作成されようとしていることを示す2進数値の「1」を送る。
図9は、図8に示す回路系の、動的論理を使用した一実施形態900を示すものである。当業者は動的論理の動作を容易に理解するであろう。図9には、結合トランジスタ902A〜902Iが含まれており、これらは論理ANDゲート804A〜804Iにそれぞれ対応する。また、プリチャージされた値を動的論理に供給し得るトランジスタ904およびインバータ906も記載されている。まず、回路の評価段階の間に、インバータ906の出力908は、分岐予測が作成されようとしていないことを示す2進数の状態「0」を送る。しかし、少なくとも1つのゲート902の入力の両方がアサートされると、インバータ906の出力908が、分岐予測が作成されようとしていることを示す2進数値の「1」に遷移する。当業者は、同じ動作を達成するために、図9,10の論理を実装し得る多くの方法を容易に認めるであろう。
分岐マーカービットの更新
一般に分岐命令は、少なくとも1つのオペコード(マイクロプロセッサ10が使用する命令セット内で分岐命令を識別する)と、分岐ターゲットアドレスを生成するために分岐命令のアドレスに加算される変位(あるいは分岐命令の直後の命令のアドレス)とを有する。このため、分岐命令は、通常は少なくとも2バイトを占める。このことを利用すれば、全命令バイトに対する分岐マーカービットをストアする必要がなく、連続する命令バイトの組に対してストアされる分岐マーカービットのビット数を低減させることができる。しかし、分岐が「分岐成立」と予測されていることを示すように分岐マーカーがセットされていても、分岐予測が見落とされ得る、シングルバイトのRET命令が関与する留意すべき特定の場合が存在する。この特定の場合に対処するための実施形態を以下に記載する。
図11〜15には、分岐マーカービットを更新する例が示される。図10には、連続する命令バイト50、分岐マーカービット52および分岐情報450からなる組が示されている。図10の例においては、「分岐成立」と予測された分岐はなく、分岐マーカービット52もセットされていない。図11を参照すると、成立予測分岐が検出された後の、命令バイト50、マーカービット52および分岐情報450と、これに対応する分岐マーカービット52の更新の様子とが示される。図11では、命令バイト50内の命令バイト#8および#9で、成立予測分岐PB0 1201が検出されている。この成立予測分岐は、命令バイト#9で終端しているため、分岐マーカービット#5 1203を2進数値の「1」に設定して、分岐マーカービット52が更新される。さらに、一実施形態においては、分岐情報のエントリ500A〜500Cは、命令バイト50に存在する成立予測分岐の1番目、2番目および3番目にそれぞれ対応し得る。このような実施形態においては、成立予測分岐PB0 1201は、命令バイトの組50の、1番目の成立予測分岐であると検出され得る。したがって、分岐命令PB0 1201に対応する情報が分岐情報のエントリ500Aにストアされ得る。
図12に、2番目の成立予測分岐が検出されたときの、分岐マーカービット52の更新の様子が示される。成立予測分岐PB1 1301が組50で検出される。分岐PB1 1301が検出され、かつ分岐PB1 1301が命令バイト#3で終端しているため、分岐マーカービット#2 1303が2進数値の「1」にセットされる。さらに、本図の実施形態においては、新たに検出された分岐PB1 1301が、組50の、1番目の成立予測分岐であることが判定される。このため、分岐PB1 1301に対応する分岐情報は、分岐情報のエントリ500Aとなる。しかし、図11の説明で上記したように、分岐情報のエントリ500Aは、今は分岐PB0 120に対応する分岐情報を格納している。したがって、エントリ500A内のデータがエントリ500Bに移され、分岐PB1 1301に対応する新しい分岐情報がエントリ500Aにストアされる。
図13には、成立予測分岐のエントリの更新の様子が示される。図13の例では、分岐PB1 1301に対して、予測が「分岐不成立」であることがのちに判定される。「分岐成立」となっているPB1 1301の予測を更新するために、対応する動的ビット500Aが2進数値の「1」にセットされる。このため、分岐PB0およびPB1に対応する分岐予測が存在することになる。しかし、分岐PB1は動的500Aであると分類される一方で、分岐PB0はローカル500Bであると分類されたままである。
上記の議論においては、分岐情報のエントリ500A〜500Cのそれぞれが、組50の特定の成立予測分岐に対応しているものとして記載した。例えば、エントリ500Aは組50の1番目の成立予測分岐に対応し、エントリ500Bは2番目の分岐に対応し、エントリ500Cは3番目の分岐に対応している。したがって、更新後もこの対応関係を維持するには、エントリ500A〜500C内のデータをシフトさせる必要がある。一般に、新しいエントリが作成される場合、このエントリに対応するデータエントリと、このエントリの右にある全エントリとが右にシフトされて、新しいエントリが入る空きが作られる。例えば、エントリ500Aに対応する新たに成立予測分岐が検出され、エントリ500Aに既に有効なエントリがストアされている場合、エントリ500Aの内容がエントリ500Bにシフトされ、エントリ500Bの内容がエントリ500Cにシフトされ、エントリ500Cの内容が分岐情報450から排除されて失われる。一実施形態においては、ターゲットアレイ208にあるターゲットアドレスも同様にシフトされて、組50の成立予測分岐、エントリ500の分岐情報、およびターゲットアレイ208のターゲットの間の対応関係が保たれ得る。上記の実施形態では、エントリ間でデータをシフトすることによって対応関係を保っているが、別の実施形態も可能であり、考察される。例えば、エントリ間でデータを移動させるのではなく、エントリ500にストアされているビットとターゲットアレイ208のエントリとが特定の分岐のエントリに対応していてもよい。
上記したように、シングルバイトの分岐命令では特殊な場合が存在する。図14は、シングルバイトの分岐命令の予測が見落とされる例を示す。図14に、バイト位置8にシングルバイトのRET命令1501を含む連続する命令バイトの組が示される。分岐マーカービット#4 1503がセットされており、成立予測分岐であるRET命令1501が、命令バイト範囲7〜8で終端していることを示す。これ以外に、成立予測分岐はない。ここで、オフセット値に8が指定されたRET命令1501のフェッチアドレスが受信された場合を考える。分岐マーカービット#4は、この命令の分岐予測を作成する必要があることを示している。しかし、予測を作成するためにこの分岐マーカービットが送られる場合に、対応する分岐マーカービット#4は、考慮対象となるマーカービット位置の条件を満たさず(つまり、値が8のオフセットは≦7とならない)、分岐マーカービット#4が効果的に無視される。図8の論理に示されるように、分岐マーカービット#4のbが設定されて、ゲート804Eに送られる。しかし、「オフセット≦7」の条件が真とならないため、ゲート808Eに結合されている信号808Eがセットされない。したがって、図8の論理は、分岐予測を示さない。一般に、この予測の見落としの例は、シングルバイトのRET命令が命令バイト位置2,4,6,8,10,12,14のいずれにある場合にも発生する可能性がある。この特別な場合に対処するための様々な実施形態およびメカニズムを以下に記載する。
分岐命令の情報
図15を参照すると、分岐予測情報450の一実施形態が示される。上記のように、連続する命令バイト50の各組は、ローカル予測記憶域206にストアされている、対応する分岐マーカービット52と分岐予測情報450とのセットを有する。本図の実施形態においては、分岐予測情報450は、500A〜500Cの3つの分岐命令情報を有する。500A〜500Cの各々は6ビットであり、成立予測分岐に対応する情報を提供している。図15に示すように、分岐予測情報には、動的ビット502、エンド調整ビット504、および分岐命令の種類およびサイズの分類に使用する4つのビット506が含まれる。動的ビット502は、ローカル予測記憶域206にあるローカル分岐予測ではなく、グローバル予測記憶域205にあるグローバル分岐予測を使用すべきことを示し得る。エンド調整ビット504は、対応する分岐命令が偶数バイトで終端しているか奇数バイトで終端しているかを示し得る。最後に、分岐情報506は、分岐命令の種類およびサイズの分類に使用され得る。
図15には、分岐情報506のエンコーディング(encodings、コード化)の例が4つ記載されている。本図に示すように、各分岐命令には、エンドビット504(本例ではビット位置4)が含まれる。第1のコード508では、第2ビットおよび第3ビットがそれぞれ「0」、「0」に設定されることで、条件命令または無条件分岐命令を表し得る。第2のコード510では、第3ビットおよび第2ビットがそれぞれ「0」、「1」に設定されることで、call命令を表し得る。第3のコード512では、ビット3〜0が「1000」に設定されることで、return型の命令を表し得る。最後に、第4のコード(514)では、ビット3を「1」に、ビット2〜0を「000」以外の値に設定することで、偶数バイトで終端する1バイトのreturnオペコードを表し得る。最初の2つのコード508〜510には、命令の任意の即値データまたは変位データのサイズを示すフィールド(ビット1および0)もそれぞれ含まれる。一実施形態においては、1,2,4バイトのデータは、コード化ビット1,0を、それぞれ「00」、「01」、「10」に設定することによって表され得る。最後に、図15に示す第4のコード514には、シングルバイトのreturn命令が現れる、組50内の0以外の偶数命令バイトを示すフィールド(ビット2〜0)が含まれている。上記の実施形態においては、第4のコード514の位置フィールドは、「001」〜「111」の7つの値を取り得、これらは、バイト位置2,4,6,8,10,12,14にそれぞれ対応している。上記した分岐情報の使用方法を以下に記載する。
予測論理
図16を参照すると、予測論理の一実施形態220が示される。図16には、比較回路系802、ローカル予測回路900、ターゲット選択回路1100、および制御回路1102が記載されている。比較回路802はフェッチアドレスのオフセットを受信するように結合され、かつ予測回路900およびターゲット選択回路1100に信号1704を送るようにさらに結合されている。ターゲット選択回路1100および予測回路900は、ローカル予測記憶域206から分岐予測のエントリに関する情報を受信するように結合されている。制御回路1102は、予測回路900、ターゲット選択回路1100、ローカル予測記憶域206、およびグローバル予測記憶域205に結合されている。一般に、比較回路802は、上記のようにフェッチアドレスを受け取って回路900,1100に信号1704を送る。予測回路900は、ローカル予測記憶域206から受け取った分岐マーカービットおよび回路802から受け取った信号に基づいて分岐予測が作成されるかどうかを判定するように構成されており、得られた予測1710を制御回路1102に送る。また、ターゲット選択回路1100は、ローカル予測記憶域206から受け取った分岐マーカービットを使用して、分岐成立の際にどの分岐ターゲットを使用すべきかを示す情報(indication)1706を制御回路1102に送る。また、制御回路は、分岐ターゲット情報1714を受け取って、フェッチアドレスを選択する信号240をマルチプレクサ202に送る。さらに、一実施形態においては、回路1102は、分岐アドレス計算器270に分岐予測250を送る。また、本実施形態には特定の分岐について別の予測を提供し得るグローバル予測メカニズムが記載されているが、本メカニズムは、グローバル予測メカニズムがなくても使用することができる。
図16に示すターゲット選択回路1100は一般に、複数のターゲットのうちから、分岐予測に使用するターゲットを1つ選択するように構成され得る。一実施形態においては、ターゲット選択回路1100は、受け取ったフェッチアドレスのオフセットに先行するオフセットに対応する命令バイトに対して設定された分岐マーカービットの個数を決定し得る。この情報に基づいて、1番目〜3番目の分岐ターゲットが選択され得る(3つの分岐ターゲットが保持される一実施形態の場合)。例えば、可能性のある3つの分岐ターゲットを保持でき、値が6のオフセットを受け取る場合を考える。回路1100は、分岐マーカービット6に先行する分岐マーカービットの範囲(つまり、分岐マーカービット0〜5)内で、設定されている分岐マーカービットの個数を決定し得る。この範囲に、設定された分岐マーカービットがない場合は、この分岐が、1番目の成立予測分岐であると識別され、1番目のターゲットが選択される。分岐マーカービットがこの範囲で1つだけ設定されている場合、この分岐は2番目の成立予測分岐命令であると識別され、ターゲット2が選択される。2つの分岐マーカービットが設定されている場合、ターゲット3が選択される。
ターゲット選択回路1100の実装方法として、数多くの方法が考えられるが、図17に動的論理を使用した実施形態の一例1800を示する。図17の実施形態においては、トランジスタの行1202〜1216および列1220〜1234が、受け取った分岐マーカービットとオフセットアドレスとに基づいてターゲットが選択され得るように構成されている。回路1800では、T1 1212、T2 1214およびT3 1218の3通りのターゲット選択が可能である。一般に、回路系1800は、受け取った分岐マーカービットと、比較回路802から受け取った信号とを使用して、特定のターゲットが検出されると、これを考慮対象から除外する。例えば、フェッチアドレスのオフセットに先行して1つの分岐マーカーが出現することが検出されると、ターゲット1が考慮対象から除外されてターゲット2が選択される。フェッチアドレスのオフセットに先行して2つの分岐マーカービットの組が出現することが検出されると、ターゲット3が選択される。当業者は回路1800の動作を容易に理解するであろうが、以下に概略を記載する。
図17の第1の行1202は、トランジスタ対1220〜1234からなり、これらは受信したオフセットに先行して、セットされている分岐マーカービットがあるかどうかを判定する。標準では、ターゲットT1 1212の値は、真すなわち2進数の「1」である。T1 1212の値は、論理ANDゲートの反転された入力にもなり、T2 1214の値が提供される。したがって、T1 1212の値が2進数の「1」の場合、T2は2進数の「0」となる。行1202の各トランジスタ対は、このフェッチアドレスオフセットに対応する分岐マーカービットと比較回路802からの信号とを受け取る。例えば、列1220、行1202のトランジスタ対は、分岐マーカービット0(b)に対応する第1の入力と、受け取ったオフセットアドレスが0より大きいかどうか(つまり、受け取ったオフセットアドレスを「a」で表すとa>0)を示す第2の入力とを受け取る。2つの入力が共に2進数の「1」である場合、ターゲットT1 1212の値は2進数の「0」となり、受け取ったフェッチアドレスに先行して成立予測分岐が存在することを示し、ターゲットT1 1212が予測されたターゲットとして考慮対象から除外される。残りの行1204〜1216は、現在のオフセットに先行して2つの分岐マーカービットがセットされているかどうかを判定するように構成されており、2つの分岐マーカービットがセットされている場合、ターゲットT2 1214が考慮対象から除外される。行1204は、分岐マーカービットbと、分岐マーカービットb〜bとを比較する。行1206は、分岐マーカービットbと分岐マーカービットb〜bとを比較し、以下、同様の比較を行う。現在のオフセットに先行して2つの分岐マーカービットがセットされていることが検出された場合、ターゲットT3 1218の値は「1」となり、ターゲットT2 1214の値は「0」となる。しかし、先行する2つの分岐マーカービットがセットされていることが行1204〜1216によって検出されなければ、ターゲットT2 1214の値は2進数の「1」となる。既に説明したように、回路系1800は例示的なものに過ぎない。対応するターゲットの選択方法として数多くの方法が可能であり、考察される。
図18を参照すると、制御回路1102の一実施形態が示される。図18には、エンコーダ回路系1820およびマルチプレクサ1832,1830が記載されている。マルチプレクサ1832は、予測回路900からローカル予測1710を、グローバル予測記憶域205からグローバル予測1712を受信するように結合されている。マルチプレクサ1830は、3つの分岐命令に対応する分岐情報1714をローカル予測記憶域206から受け取るように結合されている。さらに、マルチプレクサ1830は、ターゲット選択回路1100からターゲット選択信号1706を受け取るように結合されている。選択信号1706は、マルチプレクサ1830からエンコーダ回路系1820に送る分岐情報1840を選択する。さらに、本図の実施形態においては、ローカル予測1710かグローバル予測1712かのいずれを予測1806としてマルチプレクサ1832からエンコーダ回路系1820に送るかを選択するために、分岐情報1840に含まれる動的ビット1808が使用される。エンコード回路系1820は、分岐情報1840および予測1806を使用して、分岐が「分岐成立」と予測されているか「分岐不成立」と予測されているかを決定し得る。「分岐成立」と予測されている分岐がない場合、エンコーダ回路系1820は、マルチプレクサ212から連続アドレス232を送る選択信号240をエンコードするように構成され得る。別法として、エンコーダ回路系1820が、戻りアドレス230かターゲットアレイ208から受信した分岐ターゲットアドレスかを選択するために信号240をエンコードしてもよい。本図の実施形態においては、ローカル予測1710かグローバル予測1712かを選択するために、動的ビット1808が使用され得る。一実施形態においては、分岐が、比較的予測不可能な挙動を示す場合、グローバル分岐予測履歴を使用して、その分岐の予測精度を向上させることができる。この場合、ローカル分岐予測ではなくグローバル分岐予測を使用すべきことを示すように動的ビットが設定され得る。
分岐アドレスの計算
上記したように、一実施形態においては、信号240によって選択されてマルチプレクサ212によって送信されるフェッチアドレス243は、所定のフェッチアドレスに関し、分岐予測ユニット16によって送信される最終的な分岐予測を提供し得る。しかし、別の実施形態においては、分岐予測ユニット14は、初期の段階で予測ミスを検出するために、分岐アドレスの計算を実行するように構成される。図19は、分岐アドレス計算器270のブロック図である。本図の実施形態においては、分岐アドレス計算器270は、マルチプレクサ222からアドレス236を、ローカル予測記憶域206から予測情報242を、命令キャッシュ16から命令バイトの組241を、マルチプレクサ212からターゲットアドレス243を受け取るように構成されている。分岐アドレス計算器270はフェッチアドレス245を送るようにも構成されている。
一般に、分岐アドレス計算器270は、受け取ったフェッチアドレス236と分岐命令の即値データ241とに基づいて、相対分岐ターゲットアドレスを計算するように構成されている。次に、新たに求めたターゲットアドレスと予測されたターゲットアドレス243とが比較される。新たに求めたターゲットアドレスと予測されたターゲットアドレス243とが一致しない場合、予測ミスが検出されて、新たに求めたターゲットが次のフェッチアドレス245として送られる。分岐予測ミスが早期に検出されて、新しいフェッチアドレスを早いうちに計算できるため有利である。
図19の実施形態においては、予測された分岐命令に対応する情報が、バス1850を介してローカル予測記憶域206から送られる。一実施形態においては、分岐情報1850には、命令バイトの組にある、対応する分岐命令のオフセットアドレスが含まれる。さらに、命令バイトの組241が、命令キャッシュ16からマルチプレクサ1406に送られる。受け取ったオフセットと、分岐情報1850に含まれるエンドビット504情報とが使用されて、選択信号1420がマルチプレクサ1406に送られ、対応する分岐命令がマルチプレクサ1406からマルチプレクサ1408に送られ得る。さらに、受け取った情報1850に含まれる受け取った分岐情報506が使用されて、マルチプレクサ1408に信号1422が送られ、マルチプレクサ1408は、予測された分岐命令に対応する即値データ1424を選択して送る。フェッチアドレス236が、マルチプレクサ1414と、フェッチアドレス236からベースアドレスを減算するように構成された回路1402とに送られる。一実施形態においては、ベースアドレスのベースは、86アドレス変換メカニズムの対応する部分によって指定されるアドレスに対応している。回路1402は、ベースを減算して、求めたアドレスを回路1404に送る。回路1404は、このアドレスに、マルチプレクサ1408から受け取った即値データ1424を加算し、この結果1413を回路1410に送るように構成されている。
上記に加え、予測されたターゲット243がマルチプレクサ1414および回路1412に送られる。回路1412は、予測されたフェッチアドレスからベースアドレスを減算してフェッチアドレスを調整し、得られたアドレス1415を回路1410に送るように構成されている。回路1410は、計算によって求めたアドレス1413と調整されたフェッチアドレス1415とを受け取ると、両者を比較するように構成されている。回路1410は、2つのアドレスが等しくない場合、フェッチアドレス236を選択して、マルチプレクサ1414から送信させる。回路1430は、両者が一致しない場合に、フェッチアドレス236を送るように構成され得る。回路1430は、計算によって求めたフェッチアドレスと調整済みのフェッチアドレスとが等しい場合に、新しいフェッチアドレスを送信しないように構成され得る。さらに、回路1430は、「分岐不成立」の予測を示す予測信号250を検出すると、新しいフェッチアドレスを送信しないように構成され得る。
一実施形態においては、フェッチアドレス236が受信されると、分岐予測ユニット14によって2つのフェッチアドレスが決定されて送信され得る。マルチプレクサ212から送られる第1のフェッチアドレスは、命令キャッシュ16から命令をフェッチするための新しいフェッチアドレスとして直ちに使用され得る。同時に、マルチプレクサ212から送られるフェッチアドレスは、分岐アドレス計算器270にも送られ、上記の比較が実行される。分岐アドレス計算器270は、マルチプレクサ212経由のフェッチアドレスと、分岐アドレス計算器270が上記のように算出したフェッチアドレスとが一致しない場合、命令キャッシュ16から命令をフェッチするために使用する第2のフェッチアドレスを送る。
分岐予測犠牲キャッシュ
上記したように、犠牲キャッシュ260を使用して、ローカル予測記憶域206から排除された分岐予測情報がストアされ得る。図20は、ローカル予測記憶域206と犠牲キャッシュ260との相互作用(interaction)の一実施形態を示すブロック図である。図20には、ローカル予測記憶域206および犠牲キャッシュ260のほかに、I(命令)キャッシュ16、L2キャッシュ1828およびデコーダ400が記載されている。本図の実施形態においては、犠牲キャッシュ260は、ローカル予測記憶域206から排除された分岐予測情報をストアするように構成され、L2キャッシュ1828は、プログラム命令を含め、データをストアするように構成されている。
ローカル予測記憶域206からエントリが排除される際には、排除されるエントリに対応する分岐マーカービットと動的ビットとが、バス2108を介して犠牲キャッシュ260に送られ、犠牲キャッシュ260にストアされる。エンド調整ビット504、分岐情報506など、排除されるエントリに対応する他の分岐予測情報は破棄される。同様に、本図の実施形態においては、Iキャッシュ16から排除されるデータが、バス2106を介して送られ、L2キャッシュ1828にストアされる。続いて、ローカル予測記憶域206およびIキャッシュ16にフェッチアドレス236が提示されると、提示されたフェッチアドレスに対応する分岐予測のエントリが、ローカル予測記憶域206に存在するかどうかが判定される。対応するエントリがローカル予測記憶域260にない場合、犠牲キャッシュ260に、対応するエントリが要求され得る。対応する有効なエントリが犠牲キャッシュ260で検出されると、分岐マーカービットおよび動的ビットが、バス2102を介してデコーダ400とローカル予測記憶域206とに送られる。ローカル予測記憶域は、受け取った分岐マーカービットおよび動的ビットを、これらに対応するエントリにストアするように構成されている。さらに、フェッチアドレス236に対応する命令の組が、バス2104を介してデコーダ400とIキャッシュ16とに送られる。
次にデコーダ400は、受け取った命令と分岐マーカービットとを使用して、ローカル予測記憶域206に分岐予測のエントリの残りの部分を再生成し得る。デコーダは、バス2102を介して受け取った分岐マーカービットを使用して、バス2104から受け取った命令の組内での成立予測分岐の位置を特定し得る。さらに、デコーダ400は、特定した成立予測分岐をデコードして、分岐の種類(無条件分岐、条件付き分岐など)、分岐の終端バイトが偶数バイトか奇数バイトかのほか、分岐命令に対応する即値データがあればそのサイズを決定し得る。デコーダ400は、この決定の結果を基に、ローカル予測記憶域206に、対応する分岐予測のエントリの残りの部分を再生成し得る。本図の実施形態においては、分岐予測のエントリの残りの部分は、分岐情報506およびエンド調整ビット504に該当する。対応する命令の組を実行することなく、ローカル予測記憶域206に分岐予測の完全なエントリを再生成することができ有利である。さらに、分岐予測のエントリの一部のみを犠牲キャッシュ260にストアするだけで済む。このため、犠牲キャッシュ260のサイズを小さくすることができる。
図21に、ローカル予測記憶域206への分岐予測のエントリの再生成をさらに詳細に示す。図21には、犠牲キャッシュ260、デコーダ400、およびローカル予測記憶域206のエントリ2100が記載されている。本図に示すように、分岐マーカービット2120および動的ビット2122はデータを構成しており、このデータは、バス2108を介して犠牲キャッシュへと排除されるほか、バス2102を介して犠牲キャッシュ260からリトリーブされる。分岐情報2130は、分岐情報506およびエンド調整ビット504に対応するデータを含む。分岐情報2130は、ローカル予測記憶域206からエントリ2100が排除される際に破棄される。上記したように、デコーダ400は、分岐情報2130を再生成し、2110を介して再生成されたデータを送るように構成されている。
上記したように、フェッチアドレス236が、ローカル予測記憶域206およびIキャッシュ16の双方に提示される。しかし、別の実施形態においては、フェッチアドレス236が、ローカル予測記憶域206およびIキャッシュ16に加えて、犠牲キャッシュ260およびL2キャッシュ1828の少なくともいずれかに提示されてもよい。さらに、L2キャッシュ1828が、上記したようにローカル予測記憶域206から排除されたデータをストアするように構成される実施形態もあり得る。図22に、L2キャッシュ1828が、プログラム命令と、対応する分岐予測情報とをストアするように構成されている実施形態を示す。本図の実施形態においては、ローカル予測記憶域206は、バス2206を介して排除された分岐予測情報をL2キャッシュ1828に送るように構成されている。Iキャッシュ16は、排除されたプログラム命令を、バス220を介してL2キャッシュ1828に送信するように構成され得る。プリフェッチユニット12は、L2キャッシュ1828からプログラム命令と分岐予測情報の両方をフェッチするように構成されている。プリフェッチユニットは、L2キャッシュ1828からフェッチした分岐情報およびプログラム命令に基づいて、分岐予測のエントリを完全に再生成するようにさらに構成されている。次に、分岐予測の完全なエントリが、バス2202を介してローカル予測記憶域206に送られると共に、対応するフェッチ済みのプログラム命令が、バス2204を介してIキャッシュ16に送られ得る。
見落とされた予測の検出
上記したように、シングルバイトのRET命令が関与する特別な場合がある。図14に示すように、特定の位置に現れる、「分岐成立」と予測されたシングルバイトのRET命令が、予測論理220によって見落とされ、その後「分岐不成立」と予測される可能性がある。下記に、このような見落とされた予測を検出するように構成された分岐予測ユニット14の一実施形態を記載する。図23は、分岐予測ユニット14の一実施形態を示すブロック図である。図23の実施形態は図2の実施形態と類似している。しかし、図23の実施形態においては、戻りアドレススタック230が、マルチプレクサ221Aに結合されているほか、分岐アドレス計算器270と比べて分岐アドレス計算器270Aが変更されており、信号223Aは、マルチプレクサ221Aへの3つの入力のうちの1つを選択するように構成されている。図23の実施形態は、全般に前の例と同じように動作する。しかし、分岐アドレス計算器270Aは、シングルバイトのRET命令に対応する見落とされた予測を検出すると、戻りスタック230から送られるフェッチアドレスを選択するように構成されている。
図24に、分岐アドレス計算器270Aの一実施形態を示す。分岐アドレス計算器270Aは、分岐アドレス計算器270と同様に構成されており、上記したように第2のフェッチアドレスを計算し、バス245を介してこれを送信し得る。しかし、分岐アドレス計算器270のように回路1430からアドレス245および制御信号223を送るのではなく、回路1430は、可能性のある第2のフェッチアドレス2410を制御回路2400に、選択信号2412をマルチプレクサ2402に送信するように構成されている。さらに、分岐アドレス計算器270Aは、シングルバイトのRET命令に対応する、見落とされた予測を検出するように構成された見落予測回路2450を備える。見落予測回路2450は、ローカル予測記憶域206から分岐ターゲット情報450を、予測論理220から予測250を受け取るほか、フェッチアドレス236を受信するように結合されている。さらに、回路2450は、選択信号2420,2422をマルチプレクサ2402に送るように結合されている。信号2422は、制御回路2400にさらに結合されている。
見落予測回路2450は、見落とされた予測を検出すると、マルチプレクサ221Aから送られる戻りアドレスを選択するように構成された選択信号2420と、見落とされた予測の検出を示し、信号2420を選択してマルチプレクサ2402から出力させるように構成された選択信号2422とを送信する。一実施形態においては、見落予測回路2450は、予測250が「分岐成立」の予測を示す場合には必ず、信号2412を選択してマルチプレクサ2402から送信させるように構成され得る。このように、予測論理220が「分岐不成立」の予測を示す場合には、見落予測回路2450が、見落とされた予測の検出のみを実行してもよい。マルチプレクサ2402は、信号2460を送るように構成されており、信号2460は、第2のフェッチアドレス245を選択してマルチプレクサ221Aから送信させるようにも、戻りアドレスを選択してマルチプレクサ221Aから送信させるようにも構成され得る。
制御回路2400は、予測ミスまたはRET命令の見落とされた予測のために、第2のフェッチアドレスが必要であるかどうかを判定し、対応する情報をバス245および信号223Aを介して送るように構成されている。一実施形態においては、信号2410には、フェッチアドレスと、回路1410による比較の結果が不一致となったことを示す情報とが含まれる。本図の実施形態においては、制御回路2400は、2つの条件のうちの1つを検出すると、第2のフェッチアドレスが必要であることを判定し得る。第2のフェッチアドレスが必要となる第1の条件は、「分岐成立」の予測250を検出し、かつ信号2410から、回路1410による比較の結果が不一致となったことを検出することである。制御回路は、第1の条件を検出すると、受け取ったアドレス2410をバス245を介して送るほか、対応する選択信号223Aを送るように構成されている。この場合、選択信号223Aは、回路1430から送られる信号2412に対応しており、信号245を選択してマルチプレクサ221Aから送信させるように構成されている。第2のフェッチアドレスを要求する第2の条件は、「分岐不成立」の予測250を検出し、かつ信号2422から、見落とされた予測が検出されたことを検出することである。制御回路2400は、第2の条件を検出すると、選択信号223Aを送り、これは見落予測回路2450によって送られる信号2420に対応している。第2の条件の場合、送信された選択信号223Aは、戻りアドレス230を選択してマルチプレクサ221Aから送信させるように構成されている。制御回路2400によって第1の条件も第2の条件も検出されない場合、第2のフェッチアドレスが送られることはない。
図25は、見落予測回路2450の一実施形態を示すブロック図である。見落予測回路2450は、候補回路2502、偶数バイト回路2504、照合回路2506、および制御回路2508を備える。候補回路2502は、分岐情報450を受信するように結合され、偶数バイト回路2504は、フェッチアドレス236を受信するように結合され、制御回路2508は、予測250を受信するように結合されている。さらに、照合回路2506は、候補回路2502から信号2520を、偶数バイト回路2504から信号2522をそれぞれ受信するように結合されている。制御回路2508は、照合回路2506から信号2530を受信するように結合されている。
図25の実施形態においては、候補回路2502は、分岐情報450の偶数バイト位置に、RET命令に対応する有効なエントリが含まれるかどうかを判定するように構成されている。上記したように、分岐情報450は、500A〜500Cの3つの分岐命令に対応する分岐情報を含み得る。図15に示すコードを使用して、RET命令が、分岐情報ビット#3が2進数の「1」である命令として特定され得る。さらに、エンド調整ビットによって、偶数バイトで終端する命令が検出され得る。次に、偶数バイトのRET命令に対応していると判定された分岐情報500A〜500Cが、見落とされた予測の候補とみなされ、候補を検出したことを示す肯定的な指示(positive indication)と共に照合回路2506に送られ得る。偶数バイト回路2504は、偶数アドレスに該当するフェッチアドレスを決定するように構成されている。一実施形態においては、偶数バイト回路2504は、この判断を行うために、受け取ったフェッチアドレス236の最下位ビットを比較し得る。フェッチアドレス236の最下位ビットが2進数の「0」である場合、偶数フェッチアドレスとして判定され、対応する肯定的な指示2522が照合回路2506に送信され得る。
照合回路2506は、回路2502,2504から肯定的な指示を受け取ると、フェッチアドレス236に対応する、見落とされた予測の候補を検出するように構成されている。一実施形態においては、フェッチアドレス236のオフセットのビット3〜1と、候補の分岐情報のビット2〜0とが比較される。上記したように、RET命令の分岐情報506のビット2〜0は、RET命令の偶数バイト位置を示している。下記の表に、偶数フェッチアドレスのオフセットと分岐情報のバイト位置との関係を示す。
Figure 0003798404
表1に示すように、偶数フェッチアドレスのオフセットのビット3〜1と、分岐情報506のビット2〜0とを直接対応付けることができる。このため、照合回路2506は、RET命令に対応する候補分岐情報とフェッチアドレスのオフセットとを照合することができる。照合回路2506は、この一致を検出すると、一致を検出したことを示す信号2530を制御回路2508に送るように構成されている。ここに示す例示的な実施形態では、制御回路2508は、「分岐不成立」の予測250と一致を示す情報2530とを検出すると、戻りアドレスを選択してマルチプレクサ221Aから送信させるように構成された信号を送信するように構成されている。制御回路2508は、戻りアドレス230を選択してマルチプレクサ221Aから送信させるために、信号2422および信号2420を送る。信号2420には、戻りアドレス230を選択してマルチプレクサ221Aから送信させるためのコードが含まれる。選択信号2422は、信号2412か信号2420かを選択してマルチプレクサ2422から出力させるように構成されている。信号2422は、「分岐不成立」の予測250と一致を示す情報2530とを検出すると、信号2420を選択してマルチプレクサ2402から出力させる。これらが検出されない場合、信号2422は、信号2412を選択してマルチプレクサ2402から出力させる。
図26に、バスブリッジ2602を介して種々のシステム部品に結合されたプロセッサ10を備えたコンピュータシステム2600の一実施形態のブロック図が示される。別の実施形態も可能であり、考慮される。図中のシステムにおいて、メインメモリ2604は、メモリバス2606を介してバスブリッジ2602に結合され、グラフィックコントローラ2608は、AGPバス2610を介してバスブリッジ2602に結合されている。最後に、複数のPCI機器2612A〜2612Bが、PCIバス2614を介してバスブリッジ2602に結合されている。さらに、EISA/ISAバス2620を介して1つ以上のEISA機器またはISA機器2618を電気的に接続できるように、セカンダリバスブリッジ2616を設けてもよい。プロセッサ10は、CPUバス2624を介してバスブリッジ2602に結合されているほか、自由選択で設けられるL2キャッシュ1828にも結合されている。
バスブリッジ2602は、プロセッサ10、メインメモリ2604、グラフィックコントローラ2608およびPCIバス2614に接続された機器の間のインターフェイスを提供している。バスブリッジ2602に接続された機器のうちの1つから操作(operation)が受信されると、バスブリッジ2602は、この操作のターゲット(例えば、特定の機器か、ターゲットがPCIバス2614に接続している場合はPCIバス2614)を識別する。バスブリッジ2602は、この操作をターゲット機器に転送する。バスブリッジ2602は一般に、この操作を、ソースの機器またはバスが使用しているプロトコルから、ターゲットの機器またはバスが使用しているプロトコルに変換する。
セカンダリバスブリッジ2616は、PCIバス2614に対するインターフェイスをISA/EISAバスに提供すると共に、必要に応じて追加の機能も有している。また、必要に応じて、セカンダリバスブリッジ2616の外側に設けたか、ブリッジ2616に搭載した入出力コントローラ(図示せず)をコンピュータシステム2600に設けて、キーボードおよびマウス2622、ならびに様々なシリアルポートおよびパラレルポートの操作をサポートしてもよい。さらに、別の実施形態においては、プロセッサ10とバスブリッジ2602との間にあるCPUバス2624に、外部キャッシュユニット(図示せず)を結合してもよい。別法として、外部キャッシュをバスブリッジ2602に結合してもよく、この外部キャッシュのためのキャッシュ制御論理をバスブリッジ2602に搭載してもよい。さらに、L2キャッシュ1828が、プロセッサ10のバックサイド構成(backside configuration)で記載されている。L2キャッシュ1828は、プロセッサ10から独立していても、プロセッサ10にカートリッジ(例えば、スロット1またはスロットA)として搭載されていても、プロセッサ10と共に半導体基板に搭載されていてもよいという点が注目される。
メインメモリ2604は、アプリケーションプログラムのストア先であると共に、プロセッサ10の主な実行元のメモリである。適切なメインメモリ2604は、DRAM(ダイナミックランダムアクセスメモリ)を有する。例えば、複数バンク構成のSDRAM(シンクロナスDRAM)のまたはラムバスDRAM(RDRAM)が適切であり得る。
PCI機器2612A〜2612Bの例には、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードディスクドライブ、フロッピーディスクドライブもしくはドライブコントローラ、SCSI(小型コンピュータシステムインターフェイス)アダプタおよびテレフォニカードなどの様々な周辺機器がある。同様に、ISA機器2618の例には、モデム、サウンドカード等の様々なタイプの周辺機器のほか、種々のデータ取得カード(GPIBインターフェイスカードまたはフィールドバスインターフェイスカード等)などがある。
グラフィックコントローラ2608は、ディスプレイ2626の文字および画像の表示を制御するために設けられる。グラフィックコントローラ2608は、メインメモリ2604との間で効率的に移動可能な3次元データ構造を表示するために、当業界において一般に公知となっているグラフィックアクセラレータを具体化し得る。このため、グラフィックコントローラ2608は、バスブリッジ2602内でターゲットインターフェイスに対するアクセスを要求および受け取って、これによってメインメモリ2604へのアクセスを取得できるという点で、AGPバス2610のマスタであり得る。専用のグラフィックバスによって、メインメモリ2604から高速にデータを取得することが可能となる。グラフィックコントローラ2608は、特定の操作のために、AGPバス2610でPCIプロトコルトランザクションを生成するようにさらに構成され得る。このため、バスブリッジ2602のAGPインターフェイスは、AGPプロトコルのトランザクションと、PCIプロトコルのターゲットトランザクションおよびイニシエータトランザクションとの両方をサポートする機能を有し得る。ディスプレイ2626は、画像または文字を表現可能な任意の電子ディスプレイである。適切なディスプレイ2626には、陰極線管(「CRT」)ディスプレイや液晶ディスプレイ(「LCD」)などがある。
上記の説明においてAGPバス、PCIバス、およびISAバスまたはEISAバスを例として採り上げたが、必要に応じて任意のバスアーキテクチャを代用してもよいという点が注目される。さらに、コンピュータシステム2600は、追加のプロセッサ(コンピュータシステム2600の追加部品として示されるプロセッサ10aなど)を備えたマルチプロセッシングコンピュータシステムであってもよいという点が注目される。プロセッサ10aはプロセッサ10と類似のものであってもよい。より詳細には、プロセッサ10aは、プロセッサ10と全く同一であってもよい。プロセッサ10は、独立したバスを介してバスブリッジ2602に結合されていても(図4に示される)、プロセッサ10との間でCPUバス2624を共用してもよい。さらに、プロセッサ10aは、L2キャッシュ1828と類似した追加のL2キャッシュ1828aと結合されてもよい。
本議論は、種々の信号のアサートに言及し得るという点が注目される。本明細書で使用されるように、ある信号が特定の条件を示す値を伝達する場合、その信号は「アサートされている」という。これに対して、ある信号が特定の条件がないことを示す値を伝達する場合、その信号は「ディアサートされている」という。信号が論理0値を伝達する場合、または逆に論理1値を伝達する場合、この信号はアサートされていると定義することができる。さらに、上記の説明において種々の値が破棄されていると記載した。値は、さまざまな方法によって破棄され得るが、一般には、この値を受け取る論理回路によって無視されるように値を変更することが行われる。例えば、値が1つのビットを有する場合、この値の論理状態を反転して値を破棄してもよい。値がnビット値である場合、nビットコードのうちの1つのビットが、値が無効であることを示す値を示し得る。このビットを、コードを無効にする値に設定すると、値が破棄される。さらに、nビット値が、設定されるとそのビット値が有効であることを示す有効ビットを有していてもよい。この有効ビットをリセットすることによって、値を破棄することがある。値を破棄する別の方法が使用されてもよい。
上記の開示が完全に理解されれば、数多くの変形例および変更例が当業者にとって自明となるであろう。添付の特許請求の範囲はこのような変更例および変更例を全て包含するものと解釈されることが意図される。
本発明は一般に、マイクロプロセッサの分岐予測メカニズムに利用可能である。
マイクロプロセッサの一実施形態を示すブロック図である。 分岐予測ユニットの一実施形態を示すブロック図である。 分岐を予測する方法を示すフローチャートである。 レベル2分岐予測キャッシュの使用法を示すフローチャートである。 プログラム命令と、対応する分岐予測のエントリとから構成される連続する組を示す図である。 分岐マーカービットとアドレスオフセットとの関係を示す図である。 プログラム命令、分岐マーカービットおよびアドレスオフセットの関係を示す図である。 予測論理の一実施形態を示す図である。 図8の予測論理から導出した動的論理を示す図である。 分岐マーカービットの使用を示す図である。 分岐マーカービットの使用を示す図である。 分岐マーカービットの使用を示す図である。 分岐マーカービットの使用を示す図である。 見落とされた予測を示す図である。 分岐ターゲット情報を示す図である。 予測論理ユニットの一実施形態を示すブロック図である。 ターゲット選択回路の一実施形態を示す図である。 選択信号回路の一実施形態を示すブロック図である。 分岐アドレス計算ユニットの一実施形態を示す図である。 レベル1分岐予測用の記憶域とレベル2分岐予測用の記憶域との関係を示すブロック図である。 レベル1分岐予測用の記憶域とレベル2分岐予測用の記憶域との関係を示すブロック図である。 レベル1分岐予測用の記憶域とレベル2分岐予測用の記憶域との関係を示すブロック図である。 分岐予測ユニットの一実施形態を示すブロック図である。 分岐アドレス計算ユニットの一実施形態を示す図である。 見落予測回路の一実施形態を示すブロック図である。 コンピュータシステムを示すブロック図である。

Claims (17)

  1. 1次レベルキャッシュ(206)が第1のアドレスに対応する第1分岐予測情報(2100)を有さないことを検出するステップと、
    2次レベルキャッシュ(260,1828)が、前記第1のアドレスに対応し、前記第1分岐予測情報の一部を含む第2分岐予測情報(2120,2122)を有するかどうかを判定するステップと、
    前記2次レベルキャッシュが前記第2分岐予測情報を有することが検出されると、前記第1の分岐予測情報を再生成するステップと、
    分岐命令のタイプを示す第3分岐予測情報を生成するステップと、
    前記第2分岐予測情報と、前記第3分岐予測情報とを組み合わせるステップと、
    前記第1のアドレスに対応する、前記1次レベルキャッシュの第1のエントリに前記第1の分岐予測情報として、前記組み合わせられた第2および第3分岐予測情報をストアするステップとを含む方法。
  2. 前記1次レベルキャッシュ(206)の前記第1のエントリ(2100)が使用可能であるかどうかを判定するステップと、
    前記第1のエントリが使用不可能であることが検出されると、前記第1のエントリ(2100)の内容を排除するステップと、
    前記排除を受けて、前記内容の一部(2120,2122)を前記2次レベルキャッシュ(260,1828)にストアするステップと、をさらに含む請求項1記載の方法。
  3. 前記生成するステップは、前記第1アドレスに対応するプログラム命令を受信し、デコードするステップを含む請求項1または2記載の方法。
  4. 分岐予測情報(2100)をストアするように構成された1次レベルキャッシュ(206)と、
    前記分岐予測情報の一部(2120,2122)をストアするように構成された2次レベルキャッシュ(260)と、
    前記1次レベルキャッシュ(206)および前記2次レベルキャッシュ(260,1828)に結合された回路系(400)とを備え、前記回路系は、
    前記1次レベルキャッシュが第1のアドレスに対応する第1分岐予測情報を有さないことを検出し、
    前記2次レベルキャッシュが前記第1のアドレスに対応し、前記第1分岐予測情報の一部を含む第2分岐予測情報を有するかどうかを判定し、
    前記2次レベルキャッシュが前記第2分岐予測情報を有することが検出されると、前記第1分岐予測情報を再生成するように構成され、前記回路系は、前記第1分岐予測情報を再生成するために、さらに、
    分岐命令のタイプを示す第3分岐予測情報を生成し、
    前記第2分岐予測情報と、前記第3分岐予測情報とを組み合わせ、
    前記第1のアドレスに対応する、前記1次レベルキャッシュの第1のエントリに前記第1の分岐予測情報として、前記組み合わせられた第2および第3分岐予測情報をストアするように構成されている、分岐予測機構。
  5. 前記回路系(400)は、
    前記1次レベルキャッシュの前記第1のエントリが使用可能であるかどうかを判定し、
    前記第1のエントリが使用不可能であることが検出されると、前記第1のエントリの内容を排除し、
    前記排除を受けて、前記内容の一部を前記2次レベルキャッシュにストアするようにさらに構成されている請求項4記載の分岐予測機構。
  6. 前記第3分岐予測情報を生成するために、前記回路系は、前記第1アドレスに対応するプログラム命令を受信し、デコードするように構成されている、請求項4または5記載の分岐予測機構。
  7. 前記プログラム命令は、前記第2次レベルキャッシュ(260,1828)からフェッチされる、請求項6記載の分岐予測機構。
  8. 相互接続(2624)と、
    前記相互接続に結合されたメモリ(2604)と、
    分岐予測情報をストアするように構成された2次レベルキャッシュ(260,1828)と、
    1次レベルキャッシュ(206)を備えたプロセッサ(10)とを備え、前記プロセッサは、
    前記1次レベルキャッシュ(206)が第1のアドレスに対応する第1分岐予測情報を有さないことを検出し、
    前記2次レベルキャッシュ(260,1828)が前記第1のアドレスに対応し、前記第1分岐予測情報の一部を含む第2分岐予測情報を有するかどうかを判定し、
    前記2次レベルキャッシュが前記第2分岐予測情報を有することが検出されると、前記第1の分岐予測を再生成するように構成され、前記プロセッサは、前記第1分岐予測情報を再生成するために、さらに、
    分岐命令のタイプを示す第3分岐予測情報を生成し、
    前記第2分岐予測情報と、前記第3分岐予測情報とを組み合わせ、
    前記第1のアドレスに対応する、前記1次レベルキャッシュの第1のエントリ(2100)に前記第1の分岐予測として、前記組み合わせられた第2および第3分岐予測情報をストアするように構成されている、コンピュータシステム。
  9. 前記プロセッサ(10)は、前記1次レベルキャッシュ(206)の前記第1のエントリ(2100)が使用可能であるかどうかを判定し、前記第1のエントリが使用不可能であることが検出されると、前記第1のエントリ(2100)の内容を排除し、前記排除を受けて、前記内容の一部を前記2次レベルキャッシュ(260,1828)にストアするようにさらに構成されている請求項記載のコンピュータシステム。
  10. 前記2次レベルキャッシュ(260,1828)および前記1次レベルキャッシュ(206)は重複する情報をストアしない、請求項1、2または3記載の方法。
  11. 前記2次レベルキャッシュ(260,1828)は、前記1次レベルキャッシュ(206)から排除された情報のみをストアするように構成されている、請求項10記載の方法。
  12. 前記第3分岐予測情報は、前記プログラム命令のなかの成立予測分岐の位置をさらに示す、請求項3記載の方法。
  13. 前記2次レベルキャッシュ(260,1828)および前記1次レベルキャッシュ(206)は重複する情報をストアしない、請求項4、5、6または7記載の分岐予測機構。
  14. 前記2次レベルキャッシュ(260,1828)は、前記1次レベルキャッシュ(206)から排除された情報のみをストアするように構成されている、請求項13記載の分岐予測機構。
  15. 前記第3分岐予測情報は、前記プログラム命令のなかの成立予測分岐の位置をさらに示す、請求項6または7記載の分岐予測機構。
  16. 前記2次レベルキャッシュ(260,1828)および前記1次レベルキャッシュ(206)は重複する情報をストアしない、請求項8または9記載のコンピュータシステム。
  17. 前記2次レベルキャッシュ(260,1828)は、前記1次レベルキャッシュ(206)から排除された情報のみをストアするように構成されている、請求項16記載のコンピュータシステム。
JP2003521935A 2001-07-24 2002-06-27 2レベルの分岐予測キャッシュによる分岐予測 Expired - Fee Related JP3798404B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/912,011 US7024545B1 (en) 2001-07-24 2001-07-24 Hybrid branch prediction device with two levels of branch prediction cache
PCT/US2002/020481 WO2003017091A1 (en) 2001-07-24 2002-06-27 Branch prediction device with two levels of branch prediction cache

Publications (2)

Publication Number Publication Date
JP2005500616A JP2005500616A (ja) 2005-01-06
JP3798404B2 true JP3798404B2 (ja) 2006-07-19

Family

ID=25431252

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003521935A Expired - Fee Related JP3798404B2 (ja) 2001-07-24 2002-06-27 2レベルの分岐予測キャッシュによる分岐予測

Country Status (7)

Country Link
US (2) US7024545B1 (ja)
EP (1) EP1410177A1 (ja)
JP (1) JP3798404B2 (ja)
KR (1) KR100880686B1 (ja)
CN (1) CN1310134C (ja)
TW (1) TW591530B (ja)
WO (1) WO2003017091A1 (ja)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7707397B2 (en) * 2001-05-04 2010-04-27 Via Technologies, Inc. Variable group associativity branch target address cache delivering multiple target addresses per cache line
US6895498B2 (en) * 2001-05-04 2005-05-17 Ip-First, Llc Apparatus and method for target address replacement in speculative branch target address cache
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
JP3851235B2 (ja) * 2002-06-28 2006-11-29 富士通株式会社 分岐予測装置および分岐予測方法
US7783871B2 (en) * 2003-06-30 2010-08-24 Intel Corporation Method to remove stale branch predictions for an instruction prior to execution within a microprocessor
US7237098B2 (en) * 2003-09-08 2007-06-26 Ip-First, Llc Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence
US7337271B2 (en) * 2003-12-01 2008-02-26 International Business Machines Corporation Context look ahead storage structures
US7415597B2 (en) * 2004-09-08 2008-08-19 Advanced Micro Devices, Inc. Processor with dependence mechanism to predict whether a load is dependent on older store
US7836288B2 (en) * 2004-09-14 2010-11-16 Arm Limited Branch prediction mechanism including a branch prediction memory and a branch prediction cache
US7428632B2 (en) * 2004-09-14 2008-09-23 Arm Limited Branch prediction mechanism using a branch cache memory and an extended pattern cache
US8001363B2 (en) * 2005-04-04 2011-08-16 Globalfoundries Inc. System for speculative branch prediction optimization and method thereof
US7437543B2 (en) * 2005-04-19 2008-10-14 International Business Machines Corporation Reducing the fetch time of target instructions of a predicted taken branch instruction
US7278012B2 (en) * 2005-06-02 2007-10-02 Qualcomm Incorporated Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions
CN100419715C (zh) * 2005-11-25 2008-09-17 华为技术有限公司 嵌入式处理器系统及其数据操作方法
US7577793B2 (en) * 2006-01-19 2009-08-18 International Business Machines Corporation Patrol snooping for higher level cache eviction candidate identification
CN100395731C (zh) * 2006-02-23 2008-06-18 华为技术有限公司 处理器及其数据操作方法
EP2011018B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7574586B2 (en) * 2006-05-16 2009-08-11 Texas Instruments Incorporated Efficient transfer of branch information
US7487340B2 (en) * 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US7533252B2 (en) * 2006-08-31 2009-05-12 Intel Corporation Overriding a static prediction with a level-two predictor
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7840786B2 (en) * 2007-04-16 2010-11-23 Advanced Micro Devices, Inc. Techniques for storing instructions and related information in a memory hierarchy
US8782384B2 (en) * 2007-12-20 2014-07-15 Advanced Micro Devices, Inc. Branch history with polymorphic indirect branch information
US8181005B2 (en) * 2008-09-05 2012-05-15 Advanced Micro Devices, Inc. Hybrid branch prediction device with sparse and dense prediction caches
US20110093658A1 (en) * 2009-10-19 2011-04-21 Zuraski Jr Gerald D Classifying and segregating branch targets
US8527707B2 (en) * 2009-12-25 2013-09-03 Shanghai Xin Hao Micro Electronics Co. Ltd. High-performance cache system and method
US8464030B2 (en) * 2010-04-09 2013-06-11 International Business Machines Corporation Instruction cracking and issue shortening based on instruction base fields, index fields, operand fields, and various other instruction text bits
CN103250131B (zh) 2010-09-17 2015-12-16 索夫特机械公司 包括用于早期远分支预测的影子缓存的单周期多分支预测
US9678755B2 (en) 2010-10-12 2017-06-13 Intel Corporation Instruction sequence buffer to enhance branch prediction efficiency
US8667257B2 (en) 2010-11-10 2014-03-04 Advanced Micro Devices, Inc. Detecting branch direction and target address pattern and supplying fetch address by replay unit instead of branch prediction unit
WO2012135031A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
CN103562866B (zh) 2011-03-25 2018-03-30 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
KR101636602B1 (ko) 2011-03-25 2016-07-05 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
TWI548994B (zh) 2011-05-20 2016-09-11 軟體機器公司 以複數個引擎支援指令序列的執行之互連結構
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9235419B2 (en) 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US9298465B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Asynchronous lookahead hierarchical branch prediction
US9280351B2 (en) 2012-06-15 2016-03-08 International Business Machines Corporation Second-level branch target buffer bulk transfer filtering
US9430241B2 (en) 2012-06-15 2016-08-30 International Business Machines Corporation Semi-exclusive second-level branch target buffer
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
KR101463536B1 (ko) 2012-11-30 2014-11-19 성균관대학교산학협력단 메모리 관리 장치, 방법 및 시스템
US20140244932A1 (en) * 2013-02-27 2014-08-28 Advanced Micro Devices, Inc. Method and apparatus for caching and indexing victim pre-decode information
US9195606B2 (en) 2013-03-15 2015-11-24 Intel Corporation Dead block predictors for cooperative execution in the last level cache
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
KR101708591B1 (ko) 2013-03-15 2017-02-20 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9563430B2 (en) 2014-03-19 2017-02-07 International Business Machines Corporation Dynamic thread sharing in branch prediction structures
US20150268961A1 (en) * 2014-03-21 2015-09-24 Samsung Electronics Co., Ltd. Decoupling l2 btb from l2 cache to accelerate search for miss after miss
US9823932B2 (en) * 2015-04-20 2017-11-21 Arm Limited Branch prediction
CN105867884B (zh) * 2016-03-24 2018-06-15 清华大学 一种改进型PAp分支预测方法
DE102017201648A1 (de) 2016-03-31 2017-10-05 Dr. Ing. H.C. F. Porsche Ag Verfahren zum Bearbeiten einer Oberfläche eines metallischen Bauteils und metallisches Bauteil
US20190004806A1 (en) * 2017-06-30 2019-01-03 Qualcomm Incorporated Branch prediction for fixed direction branch instructions
US11163573B2 (en) * 2019-02-13 2021-11-02 International Business Machines Corporation Hierarchical metadata predictor with periodic updates
US10990405B2 (en) 2019-02-19 2021-04-27 International Business Machines Corporation Call/return stack branch target predictor to multiple next sequential instruction addresses
US11714725B2 (en) * 2019-06-03 2023-08-01 University Of Central Florida Research Foundation, Inc. System and method for ultra-low overhead and recovery time for secure non-volatile memories

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163140A (en) * 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
US5276882A (en) * 1990-07-27 1994-01-04 International Business Machines Corp. Subroutine return through branch history table
US5423011A (en) * 1992-06-11 1995-06-06 International Business Machines Corporation Apparatus for initializing branch prediction information
US5809271A (en) 1994-03-01 1998-09-15 Intel Corporation Method and apparatus for changing flow of control in a processor
US5608885A (en) 1994-03-01 1997-03-04 Intel Corporation Method for handling instructions from a branch prior to instruction decoding in a computer which executes variable-length instructions
EP0798632B1 (en) 1996-03-25 2002-09-11 Sun Microsystems, Inc. Branch prediction method in a multi-level cache system
US5995749A (en) 1996-11-19 1999-11-30 Advanced Micro Devices, Inc. Branch prediction mechanism employing branch selectors to select a branch prediction
US5978906A (en) 1996-11-19 1999-11-02 Advanced Micro Devices, Inc. Branch selectors associated with byte ranges within an instruction cache for rapidly identifying branch predictions
US5933629A (en) * 1997-06-12 1999-08-03 Advanced Micro Devices, Inc. Apparatus and method for detecting microbranches early
US6553488B2 (en) * 1998-09-08 2003-04-22 Intel Corporation Method and apparatus for branch prediction using first and second level branch prediction tables
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
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

Also Published As

Publication number Publication date
KR20040014673A (ko) 2004-02-14
US6854050B1 (en) 2005-02-08
TW591530B (en) 2004-06-11
US7024545B1 (en) 2006-04-04
KR100880686B1 (ko) 2009-01-30
JP2005500616A (ja) 2005-01-06
WO2003017091A1 (en) 2003-02-27
CN1310134C (zh) 2007-04-11
EP1410177A1 (en) 2004-04-21
CN1535415A (zh) 2004-10-06

Similar Documents

Publication Publication Date Title
JP3798404B2 (ja) 2レベルの分岐予測キャッシュによる分岐予測
US6502188B1 (en) Dynamic classification of conditional branches in global history branch prediction
US6253316B1 (en) Three state branch history using one bit in a branch prediction mechanism
JP3794917B2 (ja) 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ
US6154818A (en) System and method of controlling access to privilege partitioned address space for a model specific register file
US6502185B1 (en) Pipeline elements which verify predecode information
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US5822575A (en) Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction
US5850532A (en) Invalid instruction scan unit for detecting invalid predecode data corresponding to instructions being fetched
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
US6260134B1 (en) Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US20070033385A1 (en) Call return stack way prediction repair
US6542986B1 (en) Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
US6516395B1 (en) System and method for controlling access to a privilege-partitioned address space with a fixed set of attributes
US6453387B1 (en) Fully associative translation lookaside buffer (TLB) including a least recently used (LRU) stack and implementing an LRU replacement strategy
US6202142B1 (en) Microcode scan unit for scanning microcode instructions using predecode data
US6460132B1 (en) Massively parallel instruction predecoding
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
JP3794918B2 (ja) 復帰選択ビットを用いて分岐予測のタイプを分類する分岐予測
US5946468A (en) Reorder buffer having an improved future file for storing speculative instruction execution results
US5915110A (en) Branch misprediction recovery in a reorder buffer having a future file
US5951671A (en) Sharing instruction predecode information in a multiprocessor system
US5890006A (en) Apparatus for extracting instruction specific bytes from an instruction
JP2001522082A (ja) より小さな数の分岐予測および代替ターゲットを用いて近似的により大きな数の分岐予測をすること
US6061775A (en) Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050524

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060322

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060419

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100428

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100428

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110428

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120428

Year of fee payment: 6

LAPS Cancellation because of no payment of annual fees