(57)【特許請求の範囲】
【請求項１】
命令キャッシュ（I−キャッシュ）を用いて、分岐先アドレスキャッシュ(BTAC)へのルックアップを低減する方法であって、前記方法は、
前記I−キャッシュ中に格納されるべき第１の分岐命令の第１の命令アドレスを利用した、前記第１の分岐命令のルックアップにおけるミスに応じて、前記BTACから第１の分岐先アドレスを検索すること、前記第１の分岐先アドレスは、前記第１の分岐命令の分岐先アドレスである、と;
前記BTACから検索される前記第１の分岐先アドレスを、前記第１の命令アドレスに関連する第１の位置で、前記I−キャッシュに格納すること、なお、前記I−キャッシュは、前記第１の分岐命令を含む複数の命令を格納するよう構成され、前記BTACから検索される前記第１の分岐先アドレスは、パイプラインの処理段階における前記第１の分岐命令の先の分岐解決の検知に応じて前記BTACに与えられている、と；
前記I−キャッシュでの第１の命令アドレスのルックアップに応じて、前記第１の命令アドレスが前記I−キャッシュに格納されている場合に、前記第１の分岐先アドレスを前記I−キャッシュから検索することと；
を備えた方法。
【請求項２】
前記第１の分岐命令に関連する誤予測を検知することをさらに備えた、請求項1に記載の方法。
【請求項３】
前記誤予測に関連するI−キャッシュラインの少なくとも１つの無効化を行うことと、
前記I−キャッシュラインにおける前記分岐先アドレスを無効化することと、
前記I−キャッシュ中の前記分岐先アドレスを更新することと、
をさらに備えた、請求項2に記載の方法。
【請求項４】
前記誤予測を検知することは、
前記第1の分岐命令に関連する実際の分岐先アドレスを計算することと;
前記実際の分岐先アドレスが前記I−キャッシュに格納された前記第１の分岐先アドレスと一致しないことを判断することと；
をさらに備えた、請求項2に記載の方法。
【請求項５】
第２のI−キャッシュでの第２の命令アドレスのルックアップにおける第２のミスに応じて、前記BTACから第２の分岐先アドレスを受けることと、
前記第２の分岐先アドレスを、前記第２の命令アドレスに関連する第２の位置で前記第２のI−キャッシュに格納することと、
をさらに備えた、請求項1に記載の方法。
【請求項６】
前記BTACからの前記第１の分岐先アドレスを検索することは、前記BTACにおける前記第１の分岐命令の前記第１の命令アドレスをルックアップすることを備え、前記BTACにおける前記第１の分岐命令の前記第１の命令アドレスをルックアップすることは、特定の間接分岐命令が前記I−キャッシュの中で見つからない場合に制限される、請求項1記載の方法。
【請求項７】
前記BTACを更新することと、前記パイプラインから受けとられる解決された分岐先アドレスで前記I−キャッシュを更新することと、をさらに備える、請求項1記載の方法。
【請求項８】
前記パイプラインでの分岐解決の検知に応じて、解決された分岐先アドレスのデータを前記I−キャッシュに与えることにより、前記I−キャッシュを更新すること、をさらに備える、請求項1記載の方法。
【請求項９】
命令キャッシュ(I−キャッシュ)中の分岐命令に関連する分岐命令アドレスをルックアップすることと;
前記分岐命令に関連するI−キャッシュミスに応じて分岐先アドレスキャッシュ(BTAC)から分岐先アドレスを検索すること、前記分岐先アドレスは、前記分岐命令の特定の分岐先アドレスである、と;
前記BTACから検索される前記分岐先アドレスを前記I−キャッシュのエントリーに格納すること、なお、前記エントリーは前記I−キャッシュの中の前記分岐命令アドレスと関連付けられ、前記BTACから検索される分岐先アドレスは、パイプラインの処理段階における前記分岐命令の先の分岐解決の検知に応じて前記BTACに与えられている、と；
前記I−キャッシュでの前記分岐命令アドレスのルックアップに応じて、前記分岐命令アドレスが前記I−キャッシュに格納されている場合に、前記分岐先アドレスを前記I−キャッシュから検索することと；
を備えた方法。
【請求項１０】
フェッチされるべき次の命令が前記分岐先アドレスに関連することを予測することをさらに備えた、請求項9に記載の方法。
【請求項１１】
前記予測が正しくない場合、前記I−キャッシュ中の前記分岐先アドレスを更新することをさらに備えた、請求項10に記載の方法。
【請求項１２】
前記分岐先アドレスを更新することは、
前記分岐命令の実際の分岐先アドレスを前記パイプラインから受け取ることと;
前記I−キャッシュに格納され、前記BTACに格納された前記分岐先アドレスを、前記実際の分岐先アドレスと置き換えることと；
をさらに備えた、請求項11に記載の方法。
【請求項１３】
第２のI−キャッシュでの第２の分岐命令アドレスをルックアップすることと、
第２のI−キャッシュミスに応じて、前記BTACから第２の分岐先アドレスを検索することと、
前記第２のI−キャッシュにおける第１のエントリーに、前記BTACから検索される前記第２の分岐先アドレスを格納することと、
をさらに備えた、請求項9に記載の方法。
【請求項１４】
前記BTACから前記特定の分岐先アドレスを検索することは、前記BTACにおける前記分岐命令アドレスをルックアップすることを備え、前記BTACにおける前記分岐命令アドレスをルックアップすることは、特定の間接分岐命令が前記I−キャッシュの中で見つからない場合に制限される、請求項9記載の方法。
【請求項１５】
命令キャッシュ（I−キャッシュ）を用いて分岐先アドレスキャッシュ(BTAC)へのルックアップを低減するための装置であって、前記装置は、
前記BTACと;
前記I−キャッシュと、
ここで、前記I−キャッシュは、
第１の分岐命令を含む命令を格納し、
前記I−キャッシュにおける第１の分岐命令アドレスのルックアップのときのI−キャッシュミスに応じて、前記BTACから第１の分岐先アドレスを検索し、ここで、前記第１の分岐命令アドレスは、前記I−キャッシュに格納された前記第１の分岐命令に関連付けられ、前記第１の分岐先アドレスは、前記第１の分岐命令の分岐先アドレスに関連付けられる、
前記BTACから検索される前記第１の分岐先アドレスを格納する、
ように構成され；
前記I−キャッシュでの第１の分岐命令アドレスのルックアップに応じて、前記第１の分岐命令アドレスが前記I−キャッシュに格納されている場合に、前記分岐先アドレスを前記I−キャッシュから検索することと；
を備え、
前記BTACから検索される前記第１の分岐先アドレスは、パイプラインの処理段階において前記第１の分岐命令の先の分岐解決の検知に応じて、前記BTACに与えられている、
装置。
【請求項１６】
フェッチされるべき第２の命令が前記I−キャッシュに格納された前記第１の分岐先アドレスに関連することを予測するように構成された分岐予測回路をさらに備えた、請求項15に記載の装置。
【請求項１７】
前記I−キャッシュは、さらに、前記第２の命令をフェッチする要求に応じて前記第１の分岐先アドレスをプログラムカウンタに与えるように構成された、請求項16に記載の装置。
【請求項１８】
フェッチされるべき前記第２の命令の誤予測を解決するように構成された更新ロジック回路をさらに備えた、請求項17記載の装置。
【請求項１９】
前記第１の分岐先アドレスを含むI−キャッシュラインの少なくとも１つの無効化によって前記I−キャッシュを管理し、前記I−キャッシュラインにおける前記第１の分岐先アドレスを無効化し、前記I−キャッシュ中の前記第１の分岐先アドレスを更新するように構成された制御ロジック回路をさらに備えた、請求項18に記載の装置。
【請求項２０】
前記BTACは、２つまたはそれより多くのプロセッサの間で共用される、請求項15記載の装置。
【請求項２１】
前記I-キャッシュは、さらに、前記I−キャッシュミスに応じて、前記第１の分岐先アドレスが検索される場合に、前記BTACにおける前記第１の分岐先アドレスのルックアップを実行するように構成され、前記BTACにおける前記第１の分岐命令アドレスの前記ルックアップは、特定の間接分岐命令が前記I−キャッシュの中で見つからない場合に制限される、請求項15記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にプロセッサの分野に関し、特に、分岐先アドレスキャッシュ(branch target address cache)におけるルックアップ(lookups)を低減することによって分岐予測(branch prediction)を改善する方法に関する。
【背景技術】
【０００２】
マイクロプロセッサは、種々様々のアプリケーションにおいて計算上のタスクを実行する。改良されたプロセッサ性能は、ほとんど常に、ソフトウェア変更を通じてより速いオペレーションおよび／またはより多くの機能性が望まれる。携帯用電子機器のような多くの組み込みアプリケーションでは、電力の節約およびより速い処理能力は、プロセッサ設計およびインプリメンテーションにおける目標でもある。
【０００３】
多くの最新のプロセッサはパイプライン方式を使用し、そこでは各々が複数の実行ステップを有する連続する命令がオーバーラップして実行される。改善された性能にとっては、命令はパイプラインを連続的に流れるべきである。命令をパイプライン中で立ち往生させるいかなる状況も、性能に有害な影響を及ぼし得る。命令がパイプラインからフラッシュ(flush)され、続いて再フェッチされると、性能と電力消費の両方が影響を受ける。
【０００４】
ほとんどのプログラムは、パイプライン中の深いところで評価されるまで実際の分岐の振る舞いが分からない間接分岐命令(indirect branch instruction)を含んでいる。間接分岐命令の実際の評価を待つことに起因する遅れを回避するために、最新のプロセッサは分岐予測のいくつかの形式を利用しており、それによって間接分岐命令の分岐振る舞いがパイプライン中で初期に予測される。予測された分岐評価に基づいて、プロセッサは、思惑的に、分岐先アドレス(分岐がされると予測される場合)あるいは当該分岐命令の後の次の連続するアドレス（分岐がされないと予測される場合）のいずれかの予測されたアドレスから命令をフェッチ（プリフェッチ）して処理する。間接分岐命令が採用されるか否かは、分岐の方向の決定として引用される。
【０００５】
従来の分岐予測技術は、プロセッサパイプラインのフェッチ段階に位置する分岐先アドレスキャッシュ(BTAC)および分岐予測ロジックを含んでいる。BTACは、前もってフェッチされた命令の標的アドレス(target address)を格納し、命令アドレスによってインデックスが付けられる。I-キャッシュは、慣例的には、より高いオーダーのキャッシュあるいはメモリから検索された様々な命令形式の命令で占められる(populated)。BTACは、慣例的には、間接分岐命令がプロセッサパイプライン中のさらに下で実際に解決(resolve)された後で占められる。
【０００６】
オペレーションでは、従来の分岐予測技術は、BTACおよびI−キャッシュの両方で、プリフェッチされた命令でアドレスルックアップを並行して実行する。それゆえ、BTACでミス(miss)がある場合、これらの従来の分岐技術はBTACルックアップ中でマッチを見つけずに電力を消費していた。BTACでヒット(hit)があれば、ルックアップされたアドレスは間接分岐命令であると考えることができる。BTACルックアップの後、従来の技術は、BTACから検索された分岐先アドレスが予測採用されるべきか否かを決定するために分岐予測ロジックを起動する。分岐予測ロジックが予測を採用する場合、分岐予測ロジックは分岐先アドレスから始まる命令の検索によって命令フローをリダイレクト(redirect)する。
【０００７】
分岐命令以降にプロセッサパイプラインに入った全ての連続する命令は、パイプラインから典型的にはフラッシュされる。BTACルックアップおよびその後の分岐予測によって定義されたパスは、典型的にはクリティカルスピードパスである。なぜなら、このパスのタイミングが短いほど、命令フローをリダイレクトする前にプロセッサパイプラインからフラッシュが必要な命令の量が小さいためである。従って、フラッシュ命令(flushing instructions)において消費される電力を最小化するために、このパスはできるだけ短いことが望ましい。
【０００８】
クリティカルパスの時間を減らすための従来の技術は、BTACのサイズを縮小すること、および／またはマルチウェイ方式(multi-way fashion)でBTACを組織化することを含んでいる。しかしながら、BTACのサイズの縮小によって潜在的なヒットの数、つまりBTACにおいて分岐先アドレスを見つける確率が低下し、全体としてBTACの有効性を低下させる。
【０００９】
更に、BTACをマルチウェイ方式へ組織化することによりBTACにインデックスを付けることはより速くなるが、比較に費やされる時間が増加する。これらの状況にあって、BTACはI−キャッシュよりも遅く、それゆえ、クリティカルパスの並列ルックアップにおける制限因子となる。したがって、間接分岐命令がプロセッサパイプラインで見つかる場合に、分岐予測の有効性を減少させることなく、命令フローを転送するための時間を低減する装置と方法が必要であることが認識される。
【発明の概要】
【００１０】
本開示は、従来の分岐予測技術はルックアップがI−キャッシュおよびBTACへ並行して行われ、BTACでルックアップがミスした場合には、しばしば電力を無益に消費することを認識する。この認識は、恐らくI−キャッシュは典型的にはすべてのタイプの命令を格納し、BTACは典型的には分岐命令アドレスを格納するということに起因して、I−キャッシュ中ではヒットがあり、BTAC中ではミスがある場合に、より明白である。
【００１１】
1つの実施例によれば、分岐先アドレスキャッシュ(BTAC)へのルックアップを低減する方法が開示される。この方法では、分岐先アドレスは、命令キャッシュ(I−キャッシュ)中の命令アドレスをルックアップする際のミスに応じて、BTACから検索される。分岐先アドレスは命令アドレスに関連している。BTACから検索された分岐先アドレスは、I−キャッシュに格納される。この示された技術により、その後の命令アドレスはBTACとは並行せずにI−キャッシュ中で有利にルックアップされ、その結果、不必要なBTACルックアップを低減することにより電力を節約する。
【００１２】
別の実施例によれば、分岐命令を命令キャッシュに格納する方法が示される。この方法は、命令キャッシュ(I−キャッシュ)中の分岐命令アドレスをルックアップすること、I-キャッシュミスに応じて分岐先アドレスキャッシュ(BTAC)から分岐先アドレスを検索すること、および、I-キャッシュ中のエントリーに分岐先アドレスを格納することを含む。
【００１３】
別の実施例は、分岐先アドレスキャッシュ(BTAC)へのルックアップを低減するためのシステムに関する。システムは、第１の分岐命令アドレスのルックアップ時のキャッシュミスに応じてBTACから分岐先アドレスを検索するように構成された、BTACと命令キャッシュ（I−キャッシュ）を含む。I−キャッシュはさらに、分岐先アドレスを格納するように構成される。
【００１４】
発明の様々な実施例が例示によって示され記載された以下の詳細な記述から、本発明の他の実施例が当業者に容易に明白になるであろうことが理解される。認識されるように、本発明は他の実施例および異なる実施例が可能で、またそのいくつかの詳細は、本発明から逸脱することない様々な他の観点において変更が可能である。従って、図面および詳細な記述は、限定的なものとしてではなく、本質的に例示として見なされるべきものである。
【図面の簡単な説明】
【００１５】
【図１】図1は典型的なプロセッサの機能ブロック図である。
【図２Ａ】図2Aは典型的なコードセグメントのリストを例示する図である。
【図２Ｂ】図2BはI−キャッシュがコードセグメントからの分岐命令を含んでいない場合の、I−キャッシュの典型的な内容を例示する図である。
【図２Ｃ】図2Cは、I−キャッシュがコードセグメントからの分岐命令を含んでいない場合の、BTACの典型的な内容を例示する図である。
【図３】図3はI−キャッシュがBTACからの命令データで占められた後の図1のI−キャッシュの典型的な内容を例示する図である。
【図４】図4はI−キャッシュに間接分岐命令を格納し、図1のI−キャッシュから命令を検索する方法を例示するフローチャートである。
【図５】図5は、実際の分岐解決(branch resolution)でのI−キャッシュの管理方法を例示するフローチャートである。
【図６】図6は、共通のBTACを共有する2台のプロセッサの機能ブロック図である。
【発明の詳細な説明】
【００１６】
図1は、典型的なプロセッサ100の機能ブロック図である。プロセッサ100は、制御ロジック114に従って命令実行パイプライン112中で命令を実行する。いくつかの実施例では、パイプライン112は、図6に関連してさらに詳細に記述されるような複数の並列パイプラインによるスーパースカラー設計(superscalar design)である。パイプライン112は、パイプ段階(pipe stages)に組織された様々のレジスタあるいはラッチ116A-D、および、算術論理演算ユニット(ALU)118のような1つ以上の実行ユニットを含む。汎用レジスタ(general purpose register)(GPR)ファイル120は、記憶階層のトップを備えたレジスタである。
【００１７】
データは、主のトランスレーション・ルックアサイド・バッファ(Translation Lookaside Buffer)(TLB)142によって管理されたメモリアドレストランスレーション(memory address translation)およびパーミッション(permissions)でデータキャッシュ(D−キャッシュ)140からアクセスされる。様々な実施例では、ITLB 124はTLB 142の一部のコピーを含む。あるいは、ITLB 124とTLB 142は統合される。同様に、プロセッサ100の様々な実施例では、I−キャッシュ122およびD−キャッシュ140は統合、あるいは一体化される。I−キャッシュ122および／またはD−キャッシュ140でのミスは、メモリインタフェース146の管理の下でメイン(オフチップ)メモリ144へのアクセスをもたらす。I−キャッシュ122でのミスは、図4の議論に関連して後ほどより詳細に記述される。
【００１８】
プロセッサ100は、様々な周辺機器150へのアクセスをコントロールする入出力(I/O)インターフェース148を含む。この技術における熟練者は、プロセッサ100の多くの変形が可能であることを認識するであろう。例えば、プロセッサ100は、I−キャッシュ122、D−キャッシュ140のいずれか、あるいはその両方のための第２レベル(L2)キャッシュを含んでもよい。さらに、プロセッサ100に描かれた機能ブロックの1つ以上は、特定の実施例から省略されてもよい。
【００１９】
プロセッサ100は分岐予測システム143を含む。分岐予測システム143は、BTAC 141、分岐予測(branch predictor)(BP)回路126、更新ロジック回路160およびオプションのプリデコード回路156を含む。BTAC 141は、それぞれのエントリーがフェッチアドレスに対応する分岐命令アドレスおよび分岐先アドレスを含む１つ以上のエントリーを格納するように構成される。BTAC 141は、直接および間接の分岐命令アドレスの組み合わせを格納する。
【００２０】
命令アドレスがI−キャッシュ122でミスし、メモリインタフェース146を介してより高いレベルのメモリから対応する命令を受ける要求がなされる場合、当該命令はフィルパス(fill path)152を介してI−キャッシュ122およびBTAC 141に送られる。一旦命令がメモリインタフェース146から受け取られると、第１の実施例では、オプションのプリデコード・ロジック回路156は、受信した命令が間接分岐命令かどうかを判断する。それが間接分岐命令である場合、受信された命令のアドレスは、パス152を介してBTAC 141でルックアップされ、受信された命令アドレスに関連する標的アドレスがあるかどうか確かめられる。BTAC 141でヒットがある場合、受信された命令および対応する標的アドレスはI−キャッシュ122に書き込まれる。I−キャッシュ122でのミスおよびBTAC 141でのヒットは間接分岐命令が誤って予測された状況において発生し、それにより、I−キャッシュ122中であるタイプの無効化(invalidation)を引き起こす。I−キャッシュ無効化のタイプは、図5の議論に関連してより詳細に議論される。受信された命令のアドレスがBTAC 141にない場合(例えばミス)、受信された命令はI−キャッシュ122に書き込まれる。
【００２１】
第２の実施例はプリデコード・ロジック回路156を取り除いたものである。第２の実施例では、メモリインタフェース146を介して受け取られた命令は、受信命令が間接分岐命令かどうかにかかわらず、BTAC 141でルックアップされる。この第2の実施例では、命令は第１の実施例と同様に格納のためにI−キャッシュ122へ送られる。しかしながら、第１の実施例ではBTACルックアップは間接分岐命令に限定されている。いずれの実施例においても、もし分岐先アドレスがBTAC 141に格納されているならば、それはI−キャッシュ122にも格納される。
【００２２】
更新制御ロジック160は、実際の分岐解決がパイプライン112の後の段階(later stages)中で起こった後、標的アドレスをパス162を介してBTAC 141中のエントリーに加える。BTAC 141は、間接分岐命令およびその対応する標的アドレスの両方を含めるために、パス154上でI−キャッシュ122を更新する。用語「予測不採用(predict not taken)」は、予測しているBP回路126が分岐先アドレスに従ってパイプライン112をリダイレクト(redirect)しないことを指す。
【００２３】
命令サイド・トランスレーション・ルックアサイド・バッファ(ITLB)124によって管理されたメモリアドレストランスレーションおよびパーミッションによって、命令プリフェッチユニット128は、パス125で命令キャッシュ(I−キャッシュあるいはI$)122から命令をフェッチする。フェッチされた命令がI−キャッシュ122で見つかり(例えばヒット)、フェッチされた命令が対応する分岐先アドレスに関係している場合、BP回路126は標的アドレスで始まるコードパス(code path)を取る(take)か取らない(not take)かを予測する。BP回路126が、標的アドレスが取られるべきであると予測する場合、命令プリフェッチユニット128は、フェッチ命令が標的アドレスから開始するようにそのプログラムカウンタを調節し、それにより分岐先アドレスに従ってパイプライン112をリダイレクトする。BP回路126が、標的アドレスが取られるべきでないと予測する場合、プログラムカウンタは、次の連続するアドレスから命令のフェッチを開始するためにインクリメントされる。
【００２４】
分岐予測システム143のオペレーションは、図４、５の議論に関連してより詳細に記述する。
【００２５】
本開示は、BTAC 141およびI−キャッシュ122を１つの集積コンポーネントに組み合わせる実施例を意図している。しかしながら、BTACおよびI−キャッシュを別個のコンポーネントに分けるいくつかの理由がある。開示されるような外部BTACは、I−キャッシュへのフィル(fills)期間に照会され(queried)、あるいは読まれるだけである。I−キャッシュと並列に位置される従来のBTACは、I−キャッシュがアクセスされるごとにアクセスされる。ここに開示されるようにBTACのコンサルティングを制限することによって、本開示はBTACにおける活動を低減し、電力を節約する。更に、BTACのこの頻繁でないアクセスは、BTAC 141が単一ポートの装置であることを可能にし、それにより設計の複雑さを低減する。
【００２６】
図2Aは、アドレス0x000Bにおいて間接分岐命令212を含んでいる典型的なコードセグメントのリスト210を例示する。かれるように、間接分岐命令212の標的(target)は、レジスタ1(R1)の内容によって定義される。R1のコンテンツは間接分岐命令212が実行される時毎に変化するので、分岐予測システム143は、R1の内容によって指定されるようなアドレスで始まるプロセスパイプライン112をリダイレクトするかどうかを判断するために利用される。
【００２７】
図2Bは、I−キャッシュ230の典型的な内容を例示する。I−キャッシュ230は、適切にはI−キャッシュ122に類似する。I−キャッシュ230は、命令カラム232、有効ビットカラム234および分岐先アドレスカラム236を含む。カラム232のエントリーは命令を表わす。慣例によって、カラム234中の「0」値は、カラム236中の分岐先（もしあれば）が無効であることを示し、カラム234の「1」値は、カラム236中の分岐先が同じ列の中で有効であることを示す。描かれるように、プログラムカウンタがアドレス0x000Bを指す時点でのI-キャッシュ230は、アドレス0x000Bに間接分岐命令212のエントリーを含んでいない。
【００２８】
図2Cは、BTAC 250の典型的な内容を例示する。BTAC 250は、適切にはBTAC 141に類似する。BTAC 250は、分岐命令アドレスカラム252および標的アドレスカラム254を含む。
【００２９】
カラム252は直接分岐命令アドレス、間接分岐命令アドレス、あるいはそれの任意の組み合わせを含む。プログラムカウンタがアドレス0x000Bを指す時点で、BTAC 250は、間接分岐命令アドレス256およびその対応する標的アドレスを含む。従って、制御ロジック114は、I−キャッシュミスの際に、BTAC 250中の分岐命令256およびその対応する目標アドレスをI−キャッシュ230に格納させる。他の情報がI−キャッシュ230およびBTAC 250の両方に格納され得ること、また、I−キャッシュ230およびBTAC 250の様々な構成が本開示によって意図されることが認識される。
【００３０】
図3は、間接分岐命令アドレス256に関連した間接分岐命令、およびその対応する標的アドレス(0x2000)がアドレス0x000BでI−キャッシュ230に格納された後のI−キャッシュ230を例示する。従って、プロセッサのプログラムカウンタがアドレス0x000Bを指す次の時は、I−キャッシュルックアップはヒットし、そして標的アドレス0x2000がプロセッサのプログラムカウンタに割り当てられ、アドレス0x2000の命令でパイプライン112のリダイレクトが開始されるであろう。従来のBTACと比較して、本開示でのI−キャッシュルックアップは、BTAC中でのルックアップを実行することなくプリフェッチされた命令で実行される。そしてその結果、BTACルックアップ数を減らすことにより、電力消費を低減する。説明されたように、BTAC 250中のルックアップは、特定の間接分岐命令がI−キャッシュ230中で見つからない場合に制限される。
【００３１】
図4は、間接分岐命令を図１のI−キャッシュに格納し、I−キャッシュから分岐先アドレスを検索する方法400を例示するフローチャートである。ブロック410、420、450、455、460、465、470および480は、図1のI−キャッシュ122のようなI−キャッシュに間接分岐命令および分岐先アドレスを格納するためのプロセスを定義する。ブロック410、420、425、435、438、445は、I−キャッシュから分岐先アドレスを検索するプロセスを定義する。ブロック410では、命令のアドレスに基づいて命令のためのI−キャッシュが照会(query)される。例えば、プロセッサのプログラムカウンタに格納された命令アドレスがI−キャッシュを照会するために利用される。ブロック420では、方法400は、I−キャッシュ中でヒットがあるかどうかを判断する。ヒットがない場合（キャッシュミスの場合)、方法400はブロック450に進み、より高いレベルのメモリから対応する命令データを検索する。ブロック450では、命令データは、レイヤ2(L2)キャッシュやオフチップメモリのような高レベルメモリから要求される。ブロック455では、高レベルメモリから検索された命令データが受け取られる。ブロック460では、命令アドレスがBTAC中でルックアップされる。ブロック465では、方法400は、BTAC中で命令アドレスがヒットするか、つまり言いかえれば、命令アドレスがBTACに格納された命令アドレスとマッチするかを判断する。命令アドレスがBTAC中でヒットする場合、方法400はブロック470に進み、BTACに格納された予測分岐先（もしあれば）が命令データに加えられる。BTAC中でヒットすると、間接分岐命令の以前の状態の分岐先アドレスが予め解決されて(resolved)いる限り、予測された分岐先は恐らくBTACに格納される。方法400はブロック480に進み、命令データがI−キャッシュに格納される。
【００３２】
ブロック465に返って、命令アドレスがBTAC中でミスする場合、方法400はブロック480に進む。ブロック465から480のこの推移は、照会された命令アドレスがI−キャッシュあるいはBTACのいずれにもない状況を示す。この状況では、分岐先アドレスは、図6に関連してより詳細に議論されるように、後にプロセッサパイプラインで生じる検索された命令データの実際の分岐先の解決後にBTACに格納される。例えば、実際の分岐先が解決される時、更新ロジック回路160はBTACおよびI−キャッシュの両方に、解決されたブランチ標的を格納させる。
【００３３】
ブロック465および475は共にブロック480に進み、命令データがI−キャッシュに格納される。そうでなければ、プログラムカウンタが連続的にインクリメントされる。その後、方法400は、プログラムカウンタによって指定される次のアドレスを照会するためにブロック410に進む。
【００３４】
ブロック420に返って、対応するエントリーがI−キャッシュにあることを意味するI−キャッシュでのヒットがある場合、方法400はブロック425に進む。ブロック425では、方法400は、I−キャッシュ中の対応するエントリーが分岐先アドレスを持っているかどうか判断する。1つの実施例では、ブロック425は、図2の有効ビットカラム234に格納されたような対応する有効ビットを質問すること(interrogating)によって遂行される。
【００３５】
I-キャッシュヒットに関連する有効分岐先アドレスがない場合、命令アドレスは間接分岐命令ではない。従って、方法400はブロック445に進み、非分岐命令がI−キャッシュから検索され、従来の方法で処理される。方法400は、プログラムカウンタによって指定される次のアドレスをI−キャッシュから照会するためにブロック410に進む。
【００３６】
エントリーに対応する有効分岐先アドレスがある場合、方法400はブロック435に進む。ブロック435では、方法400は、対応するエントリーに格納された分岐先アドレスが採用されるべきかどうかを予測する。1つの実施例では、分岐予測回路126がこの予測を行う。当業者は、分岐予測技術が統計、ヒューリスティックス、前もって定義されたパラメーターなどを利用してもよいことを認識するであろう。ブロック438では、方法400は予測が採用されるべきかどうかテストする。もし採用されるならば、方法400はブロック440に進み、命令が分岐先アドレスからフェッチされ始めるために、分岐先アドレスが命令プリフェッチユニット128のようなプログラムカウンタに送られる。方法400はブロック410に進み、フローチャートを通してこのパス中では分岐先アドレスである、プログラムカウンタによって指定される次のアドレスを照会する。
【００３７】
ブロック438に返って、パスが不採用と予測されると、方法400はブロック445に進み、キャッシュに格納された命令を従来の方法で処理する。ブロック445の後、方法400は、フローチャートを通してこのパス中では例えば図2中のアドレス0x000Cのような間接分岐命令に続く連続するアドレスである、プログラムカウンタ中の次のアドレスを照会するために、ブロック410に進む。
【００３８】
図5は、実際の分岐解決でのI−キャッシュ管理方法500を例示するフローチャートである。方法500は、間接分岐命令の実際の分岐先が初めて計算され、分岐予測回路126のような予測メカニズムが間接分岐命令の標的を誤まって予測する状況に対して実行される。ブロック510では、間接分岐命令の実際の標的が解決される(resolved)。そのような分岐解決は、間接分岐命令がプロセッサパイプライン中で後で処理されるときに実行される。
【００３９】
ブロック520では、方法500は、実際の標的が予測された標的と一致するかどうかを判断する。あるいは、実際の標的が初めて計算される場合には、予測された標的はない。実際の分岐先が予測分岐先と一致する場合、BTACとI−キャッシュのいずれも更新される必要なない。方法500はブロック525に進み、それがブロック510に進む前に、次の分岐命令を待つ。
【００４０】
実際の分岐先が予測分岐先と一致しない場合、方法500は誤予測(mispredict)を検知し、ブロック530に進む。少なくとも2つの状況がミスマッチに帰着する。第１の状況は、間接分岐命令が分岐先のないBTACおよびI−キャッシュに以前に格納された後に初めて実行される時に発生する。１の状況において、間接分岐命令の後の次の連続する命令は既にプロセッサパイプラインにロードされている。第２の状況は、予測標的アドレスが実際の解決された標的アドレスとは異なる場合に発生する。第２の状況において、予測標的アドレスで指示されたような次の命令は既にプロセッサパイプラインにロードされている。
【００４１】
ブロック530では、プロセッサパイプラインは、いずれの状況においても、その命令をパイプラインからフラッシュし、パイプラインを分岐点、この場合は間接分岐命令のアドレス、に復帰する。従って、間接分岐命令の後に続くプロセッサパイプライン中にロードされた命令は、それらの命令が予測標的アドレスから始まってロードされたか間接分岐命令後の次の連続するアドレスかに関係なく、プロセッサパイプラインからフラッシュされる。ブロック540では、BTACは、カラム254のようなその分岐先アドレスフィールドに実際の分岐先アドレスを格納するために更新される。
【００４２】
ブロック550では、I−キャッシュが管理される。例えば、制御ロジック回路114は、ブロック550A-550Cをインプリメントするためのロジックを含む。ブロック550A-550Cはブロック550の他の実施例である。ブロック550Aでは、予測標的アドレスに対応するキャッシュラインが無効化される。ブロック550Bでは、予測標的アドレスに対応するキャッシュラインの分岐先が無効化される。ブロック550Cでは、予測標的アドレスに対応するキャッシュラインの分岐先アドレスが実際の標的アドレスを反映するために更新される。ブロック550Cは、間接分岐命令が、分岐先のないBTACおよびI−キャッシュに以前に格納された後に初めて実行される場合に好ましい。
【００４３】
図6は、共通のBTAC 611を共有する2台のプロセッサ601および602の機能ブロック図である。共有されるBTAC 611、およびプロセッサ601、602は、好ましくは単一の集積回路チップで具体化される。プロセッサ601はそれ自身の多段プロセッサパイプライン620、I−キャッシュ610および分岐予測回路615を含む。段階625では、実際の分岐解決は、先にそれぞれ図4および図5で説明したように、間接分岐命令および分岐先アドレスを用いてBTAC 611およびI−キャッシュ610を更新するために起こる。プロセッサ602はそれ自身の多段プロセッサパイプライン640、I−キャッシュ630および分岐予測回路635を含む。段階645では、実際の分岐解決は、先にそれぞれ図4および図5で説明したように、間接分岐命令および分岐先アドレスを用いてBTAC 611およびI−キャッシュ630を更新するために起こる。図示のように、実際の分岐解決はプロセッサのパイプライン中の異なる段階で行なわれ得る。図6は2台のプロセッサ間で共有される共通のBTACを例示するが、本開示が3台以上のプロセッサ間の共通のBTACの共有を意図することに注目されたい。オペレーション中に、アドレスが有効な分岐先アドレスを含んでいるI−キャッシュ610あるいはI−キャッシュ630のいずれかからフェッチされると、それぞれのパイプライン620および640は分岐先アドレスから始まる命令のプリフェッチを開始する。
【００４４】
ここに開示された実施例に関連して記述された様々な例示的な論理ブロック、モジュール、回路、要素および／またはコンポーネントは、汎用プロセッサ、デジタル信号プロセサ(DSP)、特定用途向けIC(ASIC)、フィールド・プログラマブル・ゲートアレイ(FPGA)あるいは他のプログラマブル・ロジック・コンポーネント、個別ゲートやトランジスタ・ロジック、個別ハードウェア・コンポーネントあるいはここで記述された機能を実行するよう設計されたそれらの任意の組み合わせでインプリメントまたは実行することができる。汎用プロセッサはマイクロプロセッサであり得るが、代替としてプロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラあるいは状態マシンであってもよい。また、プロセッサは、例えばDSPとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、DSPコアと協働する1つ以上のマイクロプロセッサあるいは他のそのような構成などの計算要素としてインプリメントされ得る。
【００４５】
ここで開示された実施例に関連して記述された方法は、直接、ハードウェア中に具体化されてもよく、プロセッサによって実行されるソフトウェアモジュールで、あるいはそれらの2つの組み合わせで具体化されてもよい。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROMあるいはこの技術分野で知られた他の形態の任意の記憶メディアに存在することができる。記憶メディアは、プロセッサが記憶メディアから情報を読むことができ、また記憶メディアに情報を書くことができるように、プロセッサに結合されてもよい。代替として、記憶メディアはプロセッサと一体化されてもよい。
【００４６】
本発明は実施例の文脈において開示されているが、当業者によって上記の議論および以下に続く特許請求の範囲と矛盾しない種々様々のインプリメンテーションが使用され得ることが認識されるであろう。
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［１］分岐先アドレスキャッシュ(BTAC)へのルックアップを低減する方法であって、命令キャッシュ(I−キャッシュ)中の第１の命令アドレスのルックアップにおけるミスに応じて、前記BTACから分岐先アドレスを検索することと;  前記BTACからの前記分岐先アドレスを前記I−キャッシュに格納することと、  なお、前記分岐先アドレスは前記I−キャッシュ中の前記第１の命令アドレスに関連する；  を備えた方法。
［２］前記I−キャッシュ中の前記第１の命令アドレスをルックアップすることと；  前記I−キャッシュ中の前記第１の命令アドレスに関連する前記分岐先アドレスを検索することと；  をさらに備えた、［1］に記載の方法。
［３］前記第１の命令アドレスに関連する前記第１の命令をフェッチすることと；  フェッチされるべき第２の命令が前記分岐先アドレスに関連することを予測することと；  をさらに備えた、［1］に記載の方法。
［４］前記分岐先アドレスに基づいて前記第2の命令をフェッチすることをさらに備えた、［3］に記載の方法。
［５］前記第１の命令についての誤予測を検知することをさらに備えた、［4］に記載の方法。
［６］I−キャッシュラインの少なくとも１つの無効化によって前記I−キャッシュを管理することと、前記I−キャッシュラインにおける前記分岐先アドレスを無効化することと、前記I−キャッシュ中の前記分岐先アドレスを更新することとをさらに備えた、［5］に記載の方法。
［７］前記第1の命令についての誤予測を検知することは、  前記第1の命令のための実際の分岐先アドレスを計算することと;  前記実際の分岐先アドレスを前記I−キャッシュ中の前記分岐先アドレスと比較することと、なお、前記実際の分岐先アドレスは前記I−キャッシュ中の前記分岐先アドレスと一致しない；  をさらに備えた、［5］に記載の方法。
［８］分岐命令を命令キャッシュ(I−キャッシュ)に格納する方法であって、  命令キャッシュ(I−キャッシュ)中の分岐命令アドレスをルックアップすることと;  I−キャッシュミスに応じて分岐先アドレスキャッシュ(BTAC)から分岐先アドレスを検索することと;  前記分岐先アドレスを前記I−キャッシュのエントリーに格納することと；  を備えた方法。
［９］I−キャッシュヒットに応じて前記分岐先アドレスを前記I−キャッシュから検索することをさらに備えた、［8］に記載の方法。
［１０］フェッチされるべき次の命令が前記分岐先アドレスに関連することを予測することをさらに備えた、［9］に記載の方法。
［１１］誤予測に基づいて前記I−キャッシュ中の前記分岐先アドレスを更新することをさらに備えた、［8］に記載の方法。
［１２］前記誤予測によって前記エントリー中の前記分岐先アドレスを更新することは、前記分岐命令の実際の分岐アドレスを決定することと;  前記実際の分岐アドレスを前記分岐先アドレスと比較することと、なお、前記実際の分岐解決は前記予測された標的アドレスと一致しない；  をさらに備えた、［11］に記載の方法。
［１３］フェッチされるべき前記分岐先アドレスを送るかどうかを予測することをさらに備えた、［9］に記載の方法。
［１４］フェッチされるべき前記分岐先アドレスを送ることをさらに備えた、［13］に記載の方法。
［１５］分岐先アドレスキャッシュ(BTAC)へのルックアップを低減するためのシステムであって、  分岐先アクセスキャッシュ(BTAC)と;  第１の分岐命令アドレスのルックアップにおけるキャッシュミスに応じて、前記BTACから分岐先アドレスを検索するように構成された命令キャッシュ(I−キャッシュ)と、なお、前記I−キャッシュは前記分岐先アドレスを格納するように構成される；  を備えたシステム。
［１６］前記I−キャッシュは、ルックアップされた前記I−キャッシュ中に第１の分岐命令アドレスを持ち、かつ、前記I−キャッシュから検索された前記第１の分岐命令アドレスに関連する前記分岐先アドレスを持つように構成された、［15］に記載のシステム。
［１７］前記I−キャッシュは、フェッチされた前記第１の命令アドレスに関係する前記第１の命令を持ち、前記システムは、さらに、フェッチされるべき第２の命令が前記分岐先アドレスに関連することを予測するように構成された分岐予測回路を備えた、［15］に記載のシステム。
［１８］前記I−キャッシュは、前記I−キャッシュからフェッチされた前記分岐先アドレスに基づく前記第2の命令を持つように構成された、［17］に記載のシステム。
［１９］フェッチされるべき前記第２の命令を誤予測するように構成された更新ロジックをさらに備えた、［18］に記載のシステム。
［２０］I−キャッシュラインの少なくとも１つの無効化によって前記I−キャッシュを管理し、前記I−キャッシュラインにおける前記分岐先アドレスを無効化し、前記I−キャッシュ中の前記分岐先アドレスを更新するように構成された制御ロジック回路をさらに備えた、［19］に記載のシステム。
【図１】
0005415268.tif 000002
【図２Ａ】
0005415268.tif 000003
【図２Ｂ】
0005415268.tif 000004
【図２Ｃ】
0005415268.tif 000005
【図３】
0005415268.tif 000006
【図４】
0005415268.tif 000007
【図５】
0005415268.tif 000008
【図６】
0005415268.tif 000009