JP5410281B2 - 非シーケンシャル命令アドレスをプリフェッチするための方法および装置 - Google Patents

非シーケンシャル命令アドレスをプリフェッチするための方法および装置 Download PDF

Info

Publication number
JP5410281B2
JP5410281B2 JP2009522975A JP2009522975A JP5410281B2 JP 5410281 B2 JP5410281 B2 JP 5410281B2 JP 2009522975 A JP2009522975 A JP 2009522975A JP 2009522975 A JP2009522975 A JP 2009522975A JP 5410281 B2 JP5410281 B2 JP 5410281B2
Authority
JP
Japan
Prior art keywords
instruction
address
cache
branch
fetch
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
JP2009522975A
Other languages
English (en)
Other versions
JP2009545820A (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.)
Qualcomm Inc
Original Assignee
Qualcomm 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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2009545820A publication Critical patent/JP2009545820A/ja
Application granted granted Critical
Publication of JP5410281B2 publication Critical patent/JP5410281B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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 or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • 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
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Description

背景
(発明の分野)
本発明は、一般にプロセッサの命令のプリフェッチ(prefetching)に関し、具体的には非シーケンシャル命令(non-sequential instruction)のプリフェッチに関する。
(関連背景)
マイクロプロセッサは、ポータブル電子デバイス(portable electronic devices)を含んでいる、多種多様なアプリケーションにおいて、計算のタスク(computational tasks)を実行する。多くのケースにおいて、追加の機能および特徴がポータブル電子デバイスおよび他のアプリケーションにおいてインプリメントされる(implemented)ことを可能にするために、プロセッサのパフォーマンス(performance)を最大限にすることが、主な設計目的である。さらに、電力消費量(power consumption)は、制限されたバッテリー容量を有しているポータブル電子デバイスにおける特有の懸念である。したがって、パフォーマンスを増やし、電力消費量を削減する、プロセッサの設計が望ましい。
最近のプロセッサは、1つまたは複数の命令実行パイプライン(instruction execution pipelines)を使用しており、ここで、多くのマルチステップのシーケンシャル命令(sequential instructions)の実施は、全体的なプロセッサのパフォーマンスを改善するために、オーバーラップされている(overlapped)。ほとんどのプログラムの空間および時間の局所参照性プロパティ(spatial and temporal locality properties)を利用して、最近実施された命令は、キャッシュ−高速の、大抵はオンチップメモリ−において、実施パイプラインによって、すぐに使えるアクセスのために(for ready access)保存される。
多くのプロセッサは、2つのレベルの高速キャッシュ(high-speed caches)を使用している。そのようなプロセッサにおいて、第1レベルは、データを保存するためのデータキャッシュ(data cache)と、命令を記憶するための命令キャッシュ(instruction cache)と、を従来備えている。データキャッシュと命令キャッシュは、別々であってもよいし、または、一体化(unified)されていてもよい。第2レベル(L2)キャッシュは、例えば動的ランダムアクセスメモリ(Dynamic Random Access Memory)(DRAM)、フラッシュメモリ、ハードディスクドライブ、光学ドライブ、および同様のもののような、マイクロプロセッサに外付けのメモリと第1レベルキャッシュの間で、高速メモリバッファを提供している。
キャッシュメモリの一般的なスタイルは、ランダムアクセスメモリ(Random Access Memory)(RAM)に結合されたコンテントアドレサブルメモリ(Content Addressable Memory)(CAM)を備えている。キャッシュは、完全なあるいは部分的な、以前にアクセスされた、CAMにおいて保存されたメモリアドレスに対して、メモリアドレスを比較することによってアクセスされる。アドレスがCAMアドレスとマッチする(matches)場合、キャッシュは、「ヒット(hit)」を示し、マッチングCAMアドレスに対応するRAMにおけるロケーションから、データの「ライン(line)」(命令キャッシュのケースにおいては、1つまたは複数の命令を備えるかもしれない)をさらに提供することができる。もし比較アドレスが、CAMに保存されたいずれのメモリアドレスともマッチしない場合、キャッシュは、「ミス(miss)」を示す。第1レベルのキャッシュにおけるミスは、通常、L2キャッシュアクセスをトリガし(triggers)、それは、第1レベルのキャッシュアクセスよりも、より多くの数の処理サイクルを必要とする。L2キャッシュにおけるミスは、メインメモリへのアクセスをトリガし、より大きな遅れ(delay)さえも招く。
CAM比較(例えば、アドレスがキャッシュにおいてヒットする(hits)かどうか決定すること)は、比較的電力効率がよい(power efficient)。しかしながら、ヒットのイベント(event)においてキャッシュRAMからデータあるいは命令を検索することは、大量の電力を消費する。したがって、いくつかのプロセッサは、その時にキャッシュからそれらの命令を実際に検索する電力ペナルティ(power penalty)を受けることなく、望まれる命令が命令キャッシュにおいて保存されているかどうかを有利に確かめるために、プリフェッチオペレーション(prefetch operation)を利用する。ここに使用されているように、用語、「プリフェッチ(prefetch)」あるいは「プリフェッチオペレーション(prefetch operation)」は、ヒットあるいはミスをもたらす(yields)制限された命令キャッシュアクセスを指しており、アドレスがヒットする場合にはキャッシュから命令を検索することなく、命令アドレスに関連づけられる1つまたは複数の命令が命令キャッシュにおいて保存されているかどうかを示す。すなわち、プリフェッチオペレーションは、RAMにではなく、命令キャッシュCAMにアクセスする。ここに使用されているように、用語「フェッチ(fetch)」あるいは「フェッチオペレーション(fetch operation)」は、キャッシュヒット(cache hit)の場合にキャッシュから1つまたは複数の命令を検索する命令キャッシュアクセスを含むメモリオペレーションを指す。ここにおいてより十分に説明されているように、フェッチオペレーションは、分岐予測回路(branch prediction circuits)、例えば分岐ターゲットアドレスキャッシュ(branch target address cache)および分岐履歴テーブル(branch history table)、に更にアクセスするが、プリフェッチオペレーションはしない。フェッチオペレーションとプリフェッチオペレーションの両方−両方とも命令キャッシュアクセスを実行する−は、プロセッサパイプラインの同じセクションにおいて起こる可能性があるということは注目されるべきである。
従来の命令のプリフェッチは、シーケンシャル命令アドレス(sequential instruction addresses)に基づいて、命令キャッシュのヒット/ミスのルックアップ(hit/miss lookups)を実行することを含んでいる。例えば、第1の命令アドレス(first instruction address)が命令キャッシュミス(instruction cache miss)を引き起こす(causes)場合には、そのアドレスについてのL2キャッシュアクセス時間は、第2のアドレス、次のシーケンシャルキャッシュラインのそれを計算するように使用されることができる。この第2のアドレスをプリフェッチすることは、シーケンシャルキャッシュライン(sequential cache line)が命令キャッシュにおいて存在しているかどうかを確かめる。それがない(すなわち、第2のアドレスがミスする(misses))場合には、次のシーケンシャルキャッシュラインについてのL2キャッシュフェッチは、最初のL2キャッシュアクセスについてのアクセス時間(access time for the first L2 cache access)の後ろにそれを効率的に隠して、開始されることができる。他方では、次のシーケンシャルキャッシュラインが命令キャッシュにおいて存在する(すなわち、第2のアドレスがヒットする)場合には、プリフェッチは、RAMを読み取らず、L2リクエストは開始されない。この時点で、プリフェッチは完了したと思われる。したがって、プリフェッチオペレーションは、次のシーケンシャルキャッシュラインのアドレスが命令キャッシュをミスする場合には、オーバーラップされたL2アクセスを可能にするが、アドレスがヒットする場合には、シーケンシャル命令を実際にフェッチする電力コストを招かない。シーケンシャル命令アドレスをプリフェッチすることは、いくつかの分岐命令を含むあるいは分岐命令を含まないソフトウェアを実施するときに、パフォーマンスおよび電力マネジメントの改善の両方を提供する。しかしながら、シーケンシャル命令アドレスをプリフェッチすることは、頻繁な分岐命令(frequent branch instructions)を含んでいるソフトウェアを実施するときに利益を提供しない、というのは、シーケンシャルアドレスからプリフェッチされた命令は、分岐に起因して実施されそうにないからである。
本開示の概要
1つまたは複数の実施形態によれば、プリフェッチオペレーションは、非シーケンシャル(すなわち分岐)命令アドレス上で実行される。具体的に、第1の命令アドレスが命令キャッシュにおいてミスし、フェッチオペレーションの一部として高次メモリ(higher-order memory)にアクセスし、分岐予測回路が第1の命令アドレスあるいは第1の命令アドレスに続くアドレス(an address following the first instruction address)に関連づけられる分岐命令を検出し、そしてさらに、分岐が成立と評価するであろうこと(the branch will evaluate taken)を予測する場合には、プリフェッチオペレーションは、高次メモリアクセスの間に、次のシーケンシャルキャッシュラインアドレスの代わりに、予測された分岐ターゲットアドレスを使用して、実行される。もし予測された分岐ターゲットアドレスがプリフェッチオペレーションの間に、命令キャッシュにおいてヒットする場合には、関連する命令は、電力を維持する(conserve)ために、検索されない。予測された分岐ターゲットアドレスが命令キャッシュにおいてミスする場合には、高次メモリアクセスは、前記予測された分岐命令アドレスを使用して、起動するであろう。いずれの場合においても、第1の命令アドレスは、その高次メモリアクセスから命令の戻り(return)を待つために、フェッチステージパイプラインへとリロードされる(re-loaded)。
1つの実施形態は、命令をフェッチする方法に関連する。命令キャッシュは、キャッシュミスを引き起こす、第1の命令アドレスを用いてアクセスされる。第2の命令アドレスが得られ、それは、第1の命令アドレスあるいは第1の命令アドレスに続くアドレスに関連づけられる、予測された成立分岐命令(predicted-taken branch instruction)の分岐ターゲットアドレスである。より高いレベルメモリトランザクション(higher-level memory transaction)は、第1の命令アドレスに関連づけられる1つまたは複数の命令を検索するために、開始される。より高いレベルメモリトランザクションの間に、第2の命令アドレスに関連づけられる1つまたは複数の命令のうちの、命令キャッシュにおいて、存在が、もしあれば、命令キャッシュからいずれの命令も検索しないで、確かめられる。
別の実施形態は命令をフェッチする方法に関する。1つまたは複数の命令は、第1の命令アドレスを用いてフェッチされる。第1の命令アドレスが第1レベル命令キャッシュにおいてミスし、高次メモリアクセスを開始し、第1の命令アドレスあるいは第1の命令アドレスに続くアドレスに関連づけられる分岐命令が成立と予測される(is predicted taken)場合には、命令は、第1の命令アドレスの高次メモリアクセスの間に、分岐命令の予測された分岐ターゲットアドレスである第2の命令アドレスを用いてプリフェッチされる。
さらに、別の実施形態は、プロセッサに関する。プロセッサは、フェッチあるいはプリフェッチオペレーションにおいて、適用される命令アドレスについてのヒットあるいはミスのインジケーション(indication)を提供するように、そして、フェッチオペレーションにおいては命令をさらに供給するように、動作する命令キャッシュメモリを含んでいる。プロセッサは、また、適用される命令アドレスがフェッチオペレーションにおいて命令キャッシュをミスする場合に命令を提供するように動作する高次メモリと、フェッチステージパイプラインを含んでいる命令実行パイプラインと、第1の命令アドレスあるいは第1の命令アドレスに続くアドレスに関連づけられる分岐命令を検出するように、そして、分岐評価予測(branch evaluation prediction)と予測された分岐ターゲットアドレスを提供するように動作する分岐予測回路と、を含んでいる。プロセッサは、第1の命令アドレスが命令キャッシュをミスし、高次メモリにアクセスし、分岐予測回路が、第1の命令アドレスあるいは第1の命令アドレスに続くアドレスを使用してフェッチステージパイプラインにおけるフェッチオペレーションにおいて、成立分岐(a taken branch)を予測するときに、予測された分岐ターゲットアドレスを使用して、フェッチステージパイプラインにおけるプリフェッチオペレーションを起動するように動作する制御回路(control circuits)、をさらに含んでいる。
もちろん、本発明は、上記の特徴および利点に限定されていない。当業者は、以下の詳細な説明を読むことにより、また、添付図面を見ることにより、さらなる特徴および利点を理解するであろう。
図1は、プロセッサの機能ブロック図である。 図2は、プロセッサ命令ユニットのプリフェッチおよびフェッチステージの機能ブロック図である。 図3は、命令アドレスをプリフェッチする方法を図示しているフロー図である。 図4は、命令ユニットのプリフェッチおよびフェッチのステージを通じてシーケンシャルアドレスのフローを図示しているステート図である。 図5は、命令ユニットのプリフェッチおよびフェッチのステージを通じて非シーケンシャルアドレスのフローを図示しているステート図である。 図6は、命令ユニットのプリフェッチおよびフェッチのステージを通じて、非シーケンシャルアドレスのフローを図示しているステート図であり、ここで、分岐命令は、高次メモリアクセスを起動する命令アドレスに続くアドレスに関連づけられる。
詳細な説明
図1は、シーケンシャルおよび非シーケンシャル命令のプリフェッチの両方を実行するプロセッサ10の一実施形態を図示する。フェッチされている命令フェッチグループのアドレスが命令キャッシュにおいてミスする場合には、高次メモリアクセスが開始される。これに応じて、メモリアクセスが未定のままである(pending)間に、次の命令アドレスのそのアドレスに関連づけられるフェッチグループ内の分岐命令が成立されると予測される場合には、プロセッサ10は、予測された成立分岐命令(the predicted taken branch instruction)に関連づけられる分岐ターゲットアドレスを得て、プリフェッチする。第1のアドレスがミスし、フェッチグループが成立と予測される分岐命令を含まない場合には、プロセッサ10は、次のシーケンシャルキャッシュラインのアドレスをプリフェッチする。いずれの場合においても、プリフェッチアドレスが命令キャッシュにおいてミスする場合には、高次メモリアクセスは、開始される。代替的に、プリフェッチアドレスが命令キャッシュにおいてヒットする場合、命令キャッシュから命令を検索するために電力を消費することなく、プリフェッチオペレーションは完了する。
より詳細には、プロセッサ10は、命令ユニット12、1つまたは複数の実行ユニット14、第1レベルのデータキャッシュ16および命令キャッシュ18、第2レベル(L2)キャッシュ20、そして、バスインタフェースユニット(bus interface unit)22、を含んでいる。命令ユニット12は、実行ユニット14に対して、命令フローの集中的制御(centralized control)を供給する。実行ユニット14は、命令ユニット12によってディスパッチされた(dispatched)命令を実施する。データキャッシュ16および命令キャッシュ18は、それぞれ、データと命令を保存する。バスインタフェースユニット22は、データ、命令、アドレス、および制御信号を、プロセッサ10におよびプロセッサ10から、トランスファするためのメカニズムを提供するけれども、L2キャッシュ20は、データキャッシュ16および命令キャッシュ18と、プロセッサ10に外付けのメモリ(示されてはいない)との間で、高速メモリバッファを提供する。
命令ユニット12は、プリフェッチステージ24、フェッチステージ26、そしてデコードステージ28を含んでいる。プリフェッチステアリング論理(prefetch steering logic)30の制御下のプリフェッチステージ24は、現在フェッチされている命令フェッチグループにおいて予測された成立分岐命令(predicted-taken branch instructions)の存在に基づいて、2つの命令プリフェッチ技術のうちの1つを実施する。フェッチステージ26は、命令キャッシュ18、L2キャッシュメモリ20および/またはメインメモリ(示されていない)から命令データを検索し、そして、デコードステージ28は、検索された命令をデコードする。命令ユニット12は、命令キュー(instruction queue)32、命令ディスパッチユニット34、そして、分岐予測ユニット(Branch Prediction Unit)(BPU)36をさらに含んでいる。命令キュー32は、デコードステージ28によってデコードされた命令を保存し、命令ディスパッチユニット34は、適切な実行ユニット14に対して、キューに入れられた命令(queued instructions)をディスパッチする。BPU36は、分岐命令を検出し、検出される分岐のタイプに依存して、様々な分岐予測メカニズムを、例えば、分岐ターゲットアドレスを、および/または、特定の分岐が成立であるか不成立であるかを、予測することによって、実施する。
分岐検出および予測において助けるために、命令ユニット12は、分岐ターゲットアドレスキャッシュ38(Branch Target Address Cache)(BTAC)と、分岐履歴テーブル40(Branch History Table)(BHT)と、を含んでいる。BTAC38は、前に実施された分岐命令に関連付けられた分岐ターゲットアドレスを保存する。従来のBTACsは、複数のエントリ(a plurality of entries)を備えており、それぞれは、単一の、既知で、前に成立と評価された分岐命令に対応する命令アドレスによってインデクス付けされ、また、各BTACエントリは、分岐命令に対応する単一の分岐ターゲットアドレスを供給している。最新のプロセッサは、しばしば、一度に2つまたはそれ以上の命令をフェッチする。したがって、BTACエントリは、1つ以上の命令に関連づけられていてもよい。
本出願の譲渡人に受け渡され、参照によってここに組み込まれた、米国仮特許出願第11/382,527号、「ブロックベースの分岐ターゲットアドレスキャッシュ(Block-Based Branch Target Address Cache)」は、それぞれのエントリが1ブロックの命令に関連付けられる複数エントリを保存しているブロックベースのBTACを開示しており、ここで、ブロックにおける1つまたは複数の命令は、成立と評価された分岐命令である。BTACエントリは、関連するブロック内の命令が成立分岐命令であるインジケータと、成立分岐の分岐ターゲットアドレスと、を含んでいる。BTACエントリは、ブロックにおけるすべての命令に共通であるアドレスビットによってインデクス付けされる(すなわち、ブロック内の命令を選択する下位アドレスビットを打ち切ることによって)。したがってブロックサイズと、相対的なブロック境界(relative block borders)の両方は、固定されている。
本出願の譲渡人に受け渡され、参照によってここに組み込まれた、米国仮特許出願第11/422,186号、「スライディングウィンドウ、ブロックベースの分岐ターゲットアドレスキャッシュ(Sliding-Window, Block-Based Branch Target Address Cache)」は、各BTACがフェッチグループに関連づけられる、ブロックベースのBTACを開示しており、また、フェッチグループにおいて第1の命令アドレスによってインデクス付けされる。フェッチグループは異なる方法(例えば、別の分岐のターゲットで始める)において形成されることができるので、各BTACエントリによって表わされている命令のグループは固定されていない。各BTACエントリは、フェッチグループ内の命令が成立分岐命令であるインジケータと、成立分岐の分岐ターゲットアドレスと、を含んでいる。
ここに使用されているように、単一の命令フェッチオペレーションにおいて命令キャッシュ18からフェッチされる1つまたは複数の命令は、グループにおける命令の数、グループのストラクチャ、あるいは、それを定義しアドレス指定するために使用されるアドレッシングメカニズム(addressing mechanism)にかかわらず、「フェッチグループ(fetch group)」と呼ばれる。ここに主張され開示された非シーケンシャルプリフェッチは、命令が、単独で、あるいは、ブロックのグループで、フェッチされるかいずれにせよ、命令をプリフェッチすることが有利で適用可能である。単一のフェッチオペレーションにおいて検索される1つまたは複数の命令を指すための、用語「フェッチグループ(fetch group)」のここにおける使用は、限定されていない。
フェッチオペレーションの間に、BTAC38と命令キャッシュ18に平行してアクセスされる、BHT40は、分岐予測でBPU36を提供する。BHT40は、一実施形態において、それぞれが分岐命令に関連づけられる例えば2ビット飽和カウンタ(two-bit saturation counters)、のアレイを備えている。一実施形態においては、分岐命令が成立と評価するたびに、カウンタはインクリメントされる(incremented)ことができ、そして、分岐命令が不成立と評価するときにデクリメントされる(decremented)ことができる。その後で、カウンタ値は、予測(最上位ビットのみを考慮することによって)と、予測の強度あるいは信頼性の両方を示している、例えば、
11−強く予測される成立(Strongly predicted taken)
10−弱く予測される成立(Weakly predicted taken)
01−弱く予測される不成立(Weakly predicted not taken)
00−強く予測される不成立(Strongly predicted not taken)
BHT40は、BTAC40と平行して、命令アドレスの一部によってインデクス付けされる。正確さを向上し、BHT40をより効率的に利用するために、当技術分野において知られているように、命令アドレスは、BHT40をインデクス付けする前に、最新のグローバル分岐評価履歴(gselectあるいはgshare)と論理的に組み合わせられることができる。
命令ユニット12のBPU36は、現在フェッチされている命令フェッチグループにおいて分岐命令を検出し、その評価を予測し、予測される分岐ターゲットアドレスを提供するために、BTAC38およびBHT40によって保持される情報を使用する。ここに説明されているように、命令フェッチグループアドレスが命令キャッシュにおいてミスする場合には、命令ユニット12は、それに関連づけられる命令が命令キャッシュにおいて存在しているかを決定するために、予測される分岐ターゲットアドレスをプリフェッチし、もしそうでない場合には、命令フェッチグループアドレスについての高次メモリアクセスの待ち時間(latency)の間に、予測される分岐ターゲットアドレスにおいて、命令を検索する高次メモリアクセスを起動する。
図2は、命令ユニット12の選択されたエレメントに加えて、プリフェッチおよびフェッチステージ24−26の一実施形態を図示している。注意:フェッチステージ26と、BTAC38、BHT40、命令キャッシュ18、およびL2キャッシュ20が接続している図2において示される点線は、フェッチステージ26がこれらのエレメントに対してアクセスを有しているということを図示しているが、直接の物理的な接続(direct physical connections)を必ずしも意味していない。プリフェッチステージ24は、プリフェッチステアリング論理あるいはmux30、プリフェッチアドレスを保持するためのレジスタ42、リフェッチレジスタ(refetch register)56、キャッシュアクセスステアリング論理44、インクリメンタ46、およびインクリメント−アンド−マスク回路(increment-and-mask circuit)48、を含んでいる。
プリフェッチステアリングmux30は、次のシーケンシャル命令キャッシュラインのアドレス、あるいは、非シーケンシャル命令アドレスのいずれかを、(FETCH1あるいはFETCH2のいずれかから)プリフェッチレジスタ42へと方向づける(directs)。どの命令アドレスが操作するかについての決定は、より高いレベルのメモリ―L2キャッシュ20あるいは外部メモリ―から現在アクセスされているフェッチグループが既知で、予測された成立、分岐命令を含むかどうか、に基づいている。すなわち、もしより高いレベルのメモリから現在フェッチされている命令のうちの1つが予測された成立分岐命令である場合には、そのときには、その命令についての分岐ターゲットアドレスは、そのアドレスに関連づけられる命令が命令キャッシュ18において存在しているかどうかを確かめるために、プリフェッチされる。そうでなければ、次のシーケンシャルキャッシュラインのアドレスがプリフェッチされる、すなわち、FETCH3におけるアドレスは、インクリメント−アンド−マスク論理48によって変更されている(altered)。
フェッチステージ26は、2つの命令キャッシュアクセスパイプラインステージ、すなわち、FETCH1ステージ50とFETCH2ステージ52を含んでおり、それぞれは、フェッチあるいはプリフェッチオペレーションのいずれかについて、命令キャッシュ18にアクセスするための論理とレジスタを備えている。さらに、フェッチステージ26は、また、命令キャッシュ18におけるミスのイベントにおいて、例えばL2キャッシュ20のような、より高いレベルのメモリにアクセスするための、第3のフェッチパイプラインステージ、FETCH3ステージ54、を含んでいる。いくつかの実施形態においては、キャッシュにアクセスすることはマルチプル処理サイクルを行い(takes)、したがって、マルチプルの命令キャッシュアクセスパイプラインステージ50、52を含んでいる。他の実施形態においては、キャッシュルックアップ(cache lookup)は、1つの処理サイクルにおいて完全に実行されることができ、したがって、ただ1つの命令キャッシュアクセスパイプラインステージを必要とする。ただ説明を簡単にするだけのために、以下に説明される実施形態は、2つのサイクルアクセス命令キャッシュ18に対応しており、ここで、アドレス比較は、第1のサイクルの間に終わっており、比較結果は、第2サイクルの間に提供される。しかしながら、当業者は、キャッシュルックアップを実行するフェッチステージ26が、任意の数のアクセスサイクル、例えば単一サイクルアクセスキャッシュ、を有する命令キャッシュを適応させる(accommodating)のに適切な任意の数のパイプラインステージを備えることができるということをすぐに理解するであろう。
命令のフェッチグループに関連づけられる第1の命令アドレスは、図3のフロー図のブロック100で図示されているように、フェッチステージ26パイプラインへとロードされる。命令キャッシュアクセスパイプラインステージ−FETCH1ステージ50およびFETCH2ステージ52−は、命令キャッシュ18から命令のフェッチグループを検索するためにフェッチオペレーションにおいてキャッシュアクセスを実行する(ブロック102)。命令キャッシュルックアップは、第1のキャッシュアクセスサイクルの間に命令キャッシュ18のCAMストラクチャにおいて保存される部分的アドレスあるいはアドレスと、FETCH1ステージ50において第1の命令アドレスを比較することによって実行される。第2のサイクルの間に、FETCH1ステージ50におけるアドレスは、FETCH2ステージ52へとドロップし、命令キャッシュ18は、ヒットあるいはミスを示す(ブロック104)。ヒットのイベントにおいては、対応する命令は、命令キャッシュ18から検索され、第1の命令アドレスがFETCH3ステージ54を通じて通過した後デコードステージ28(ブロック106)に提供される。ミスのイベントにおいては、第1の命令アドレスは、FETCH3ステージ54に対して提供され、ここでより高いレベルのメモリトランザクション、例えばL2キャッシュ20アクセス、が開始される(ブロック108)。
第1のキャッシュアクセスサイクルの間命令キャッシュ18アクセス(ブロック102)と同時に、第1の命令アドレスは、フェッチオペレーションの一部として、BTAC38およびBHT40に示されている(ブロック110)。BTACにおけるヒットは、ターゲットされるフェッチグループにおける分岐命令が前に成立と評価された、ということを示しており、第1の命令アドレスに対応するBHT40エントリは、分岐命令の最新の評価のインジケーションを提供する。この情報は、分岐予測を公式化するために(formulate)BPU36によって使用されており(ブロック112)、それは、プリフェッチステージ24においてキャッシュアクセスステアリング論理44に提供されている。キャッシュアクセスステアリング論理44は、分岐命令が検出され、成立と予測される場合に、BTAC38からFETCH1ステージ50へと、分岐ターゲットアドレスを操作する(steers)(ブロック116)。一実施形態においては、これが発生する(occurs)とき、分岐ターゲットアドレス(branch target address)(BTA)フラグはセットされ、そして、アドレスがBTAC38からロードされたということを示して、BTAフラグは、フェッチステージ26パイプラインを通じて分岐ターゲットアドレスに、付随する(accompanies)。分岐命令が検出されない、あるいは、分岐が不成立と予測される場合には、キャッシュアクセスステアリング44は、シーケンシャルアドレスを、FETCH1ステージ50の出力上で操作して、インクリメンタ46を介して、FETCH1ステージ50(例、次の連続フェッチグループ(next successive fetch group))へと、ロードする(ブロック114)。
第1の命令アドレスが命令キャッシュにおいてミスし(ブロック104)、高次メモリアクセスを起動する(ブロック108)場合、プリフェッチステージ24は、進行中のより高いレベルのメモリトランザクションの待ち時間の間に、プリフェッチオペレーションを実行して、プリフェッチオペレーションを開始する。すなわち、L2キャッシュあるいはメインメモリトランザクションが処理中にある間に、後に続く命令キャッシュ(subsequent instruction cache)18−キャッシュ18のヒットのイベントにおいていずれの命令も戻さないが、キャッシュ18のミスのイベントにおいて高次メモリアクセスを開始する−のアクセスが実行される、したがって、高次メモリアクセスの後ろにプリフェッチオペレーションを「隠す」。一実施形態においては、プリフェッチステージ24は、FETCH3ステージ54から起動されるL2アクセスリクエストに応じて、プリフェッチオペレーションを開始する。
同時に(concurrently)プリフェッチされるべき命令アドレス−ここでは第2命令アドレスと呼ばれる−は、高次メモリにアクセスする第1の命令アドレスに対して、シーケンシャルあるいは非シーケンシャルであってもよい。BTAC38が、現在フェッチグループにおける分岐命令がフェッチされていないことを示す場合、あるいは、BPU36が不成立と評価する分岐を予測する場合、同時にプリフェッチされる命令アドレスは、現在フェッチされているキャッシュラインに続く次のシーケンシャルキャッシュラインのアドレスである(ブロック118)。このアドレスはFETCH3ステージ54の出力上で動作して、インクリメント−アンド−マスク回路48によって生成される。代替的に、現在フェッチされているフェッチグループが分岐命令を含み、分岐は成立と予測される場合には、そのときは、同時にプリフェッチされるべき命令アドレスは、BTAC38によって提供される分岐ターゲットアドレスであり(ブロック120)、それは、BPU36による成立予測と、BTAC38ヒットとの結果として、BTAフラグに沿って、フェッチステージ26パイプラインへと自動的にロードされる。いずれの場合においても、第1のアドレスが命令キャッシュ18においてミスし(ブロック104)、高次メモリアクセスを起動した(ブロック108)場合、第2アドレスは、ただプリフェッチされる。
図2を参照すると、第2の命令アドレス−FETCH1ステージ50あるいはFETCHステージ52からの分岐ターゲットアドレスあるいはシーケンシャルアドレス−は、プリフェッチステアリングmux30によって選択され、プリフェッチレジスタ42へとロードされる。一実施形態においては、FETCH1あるいはFETCH2レグ(leg)は、関連されたアドレスがBTAC38からフェッチステージ26パイプラインへとロードされたということを示して、対応するレジスタ50、52におけるBTAフラグに応じて、選択される。BTAフラグが検出されない場合には、次のシーケンシャルキャッシュラインアドレスは、インクリメント−アンド−マスク論理48からロードされる。
プリフェッチレジスタ42は、キャッシュアクセスステアリング論理44に対する複数の入力(他の入力は、介入ベクトルアドレス、および同様のものを含むことが出来る)のうちの1つである。図2には図示されていないけれども、ある属性は、プリフェッチされるべき命令アドレスに沿って、プリフェッチレジスタ42において含まれている。これらの属性は、フェッチオペレーションからプリフェッチオペレーションを区別し、命令キャッシュ18がプリフェッチオペレーションにおいてアクセスされるとき、第2の命令アドレスを使用して、属性は、第2の命令アドレスに沿ってフェッチステージ26パイプラインを通じて伝播する。第2の命令アドレスあるいはプリフェッチ属性のいずれも、プリフェッチオペレーションの一部としてデコードステージ28に受け渡されず、それは、いずれの命令検索することなく、フェッチステージ26において終了する。
プリフェッチオペレーションは、少なくとも3つの著しい点においてフェッチオペレーションとは異なる。第1に、プリフェッチ命令アドレスは、命令キャッシュ18においてヒットする場合、キャッシュ18は、かなりの電力節約を提供して、いずれの命令も戻さない。第2に、フェッチオペレーションの間に、BTAC38およびBHT40は、命令キャッシュ18と同時にアクセスされ、プリフェッチオペレーションにおいては、さらなる電力節約は、BTAC38およびBHT40アクセスを抑制すること(suppressing)によって実現される。第3に、プリフェッチ命令アドレスが命令キャッシュ18においてヒットする場合、プリフェッチオペレーションは完了しており、アドレスはフェッチステージ26パイプラインから、フラッシュされる(flushed)。プリフェッチ命令アドレスが命令キャッシュ18においてミスする場合、それは、フェッチステージ26パイプラインからフラッシュされている前に、それ自体の高次メモリアクセスを開始する。対照的に、フェッチオペレーションは、デコードステージに命令を提供することによって、完成する。フェッチオペレーションおよびプリフェッチオペレーションの両方は、フェッチステージ26パイプラインにおいて発生するということに注目してください。
図2において図示される実施形態において、分岐命令が検出され、成立と予測されるときに、高次メモリに現在アクセスしているフェッチグループにおける予測された成立分岐命令の分岐ターゲットアドレスは、フェッチステージ26パイプラインへと自動的にロードされ、そして、BTAフラグがセットされる。その後で、BTAフラグに応じて、プリフェッチオペレーションのためのフェッチステージ26パイプラインへとリロードされる前に、分岐ターゲットアドレスは、そのあと、プリフェッチセレクションmux30およびプリフェッチレジスタ42を通じて循環する(cycled)。これは、プリフェッチレジスタ42からフェッチステージ26パイプラインに入るいずれの命令アドレスについてのプリフェッチオペレーション(フェッチオペレーションに対立するものとして)を自動的に定義する、プリフェッチ属性(prefetch attributes)を利用するためである。別の実施形態において、例えば比較的短い待ち時間L2キャッシュ20を備えたもの、分岐ターゲットアドレスがBTAC38ヒットおよびBPU36成立予測の結果としてフェッチステージ26パイプラインへとロードされるときに、デフォルトするフェッチオペレーションは、プリフェッチレジスタ42を通じて分岐ターゲットアドレスを循環させないで、プリフェッチオペレーションに「オンザフライ(on the fly)」で変換されることができる。当業者は、本開示の教示が与えられる場合に、与えられたアプリケーションの制約について最適のインプリメンテーションを理解するであろう。
第2命令アドレスが高次メモリに現在アクセスしているフェッチグループに対する次のシーケンシャルキャッシュラインのアドレスであろうと(図3、ブロック118)、あるいは、そのフェッチグループにおける予測された成立分岐命令の分岐ターゲットアドレスであろうと(ブロック120)いずれにせよ、FETCH1ステージ50およびFETCH2ステージ52でキャッシュルックアップについての命令キャッシュ18に提供される(ブロック122)。第2アドレスが命令キャッシュ18においてヒットする場合(ブロック124)、第2アドレスは、フェッチステージ26パイプラインからフラッシュされ、第1の命令アドレスは、フェッチステージ26パイプラインへとリロードされ(ブロック128)、また、プリフェッチオペレーションは完了する(ブロック130)。他方で、第2命令アドレスが命令キャッシュ18においてミスする場合(ブロック124)、FETCH3ステージ54に伝播し、フェッチステージ26パイプラインからフラッシュされている前に、例えばL2キャッシュ20アクセス(ブロック126)のような、第2の高次メモリアクセスを開始する。
いずれの場合においても、第1の命令アドレスは、リフェッチレジスタ56においてその間に保存されており、キャッシュアクセスステアリング論理44を通じてフェッチステージ26パイプラインへと引き続いてロードされる(ブロック128)ので、第1の命令アドレスは、命令が第1の高次メモリアクセスから戻されるときに、FETCH3ステージ54にあるであろう。これは、プリフェッチオペレーションを完了し、第2のアドレスは、フェッチステージ26パイプラインからフラッシュされる(ブロック130)。第1の命令がプリフェッチレジスタ42からキャッシュアクセスステアリング論理44に入らないので、第1の命令がフェッチステージ26パイプラインに再び入るときに、フェッチオペレーションは、開始される。第1の命令は、命令キャッシュ18において(再び)ミスするであろう。フェッチオペレーションは、BTAC38およびBHT40にアクセスするであろう、また、BPU36は、(同じ)分岐予測を(再び)公式化し、キャッシュアクセスステアリング論理に対してそれを提供するであろう。
予測された成立分岐のイベントにおいては、分岐ターゲットアドレス(それは第2、あるいはプリフェッチされた、命令アドレス)は、キャッシュステアリング論理44によって、BTAフラグで、フェッチステージ26パイプラインへとロードされ、フェッチオペレーションは開始される。この第2のアドレスは、命令キャッシュ18において(再び)ミスするであろう。しかしながら、高次メモリのそのアクセス(例、L2キャッシュ20アクセス)は、プリフェッチオペレーションの間に、すでに開始されている。第1の命令アドレスは、FETCH3ステージ54に伝播し、高次メモリからその命令を待つであろう(ブロック132)。第2命令アドレスはそれの後ろにあり、それの対応する高次メモリアクセスがすでに起動している状態で、FETCH3ステージ54に同様に到達し(arrive at)、そして、高次メモリからその命令を待つであろう(ブロック134)。
図4は、第1の命令アドレスAに応じて、命令ユニット12のプリフェッチステージ24およびフェッチステージ26を通じて命令アドレスのサイクルごとの動き(cycle-by-cycle movement)を図示する。この例においては、アドレスAは、キャッシュルックアップおよびL2キャッシュ20アクセスの間(during)命令キャッシュ18ミスを結果としてもたらし、アドレスAに関連づけられるフェッチグループは、不成立であるとBPU36によって予測される1つまたは複数の分岐命令を含んでいるか、あるいは、既知の分岐命令を含んでいない。
第1の処理サイクルの間に、フェッチオペレーションは、AをFETCH1ステージ50へのロードと、命令キャッシュ18、BTAC38、そしてBHT40の同時アクセスによって、始まる。その後で、アドレスAは、第2の処理サイクルの間にFETCH2ステージ52へとロードされ、また、比較の結果は、キャッシュ18ミス、BTACミス、および/または不成立分岐予測を示す。また、第2のサイクルの間に、次のシーケンシャル命令アドレス(8バイトを含んでいるフェッチグループの説明のための且つ非制限のケースにおける、A+0x8)は、FETCH1ステージ50の出力上で動作しているインクリメンタ46を介してFETCH1ステージ50へとロードされる。第3のサイクルの間に、フェッチプロセスは、AがFETCH3ステージ54へとロードされると継続し、対応するL2キャッシュ20あるいはメインメモリアクセスリクエストが開始される。また、A+0x8は、FETCH2ステージ52へとドロップされ、次のシーケンシャル命令アドレス(A+0x10)は、FETCH1ステージ50にロードされる。
アドレスAはBTAC38からフェッチステージ26パイプラインへとロードされないので、FETCH1ステージ50およびFETCH2ステージ52におけるBTAフラグは以前の処理サイクルの間にセットされない。結果として、第4の処理サイクルの間に、プリフェッチステアリングmux30は、プリフェッチレジスタ42に、FETCH3ステージ54の出力上で動作しているインクリメント−アンド−マスク回路48によってコンピュートされた、次のシーケンシャルキャッシュライン(A+0x20)のアドレスを、方向付ける。有効なアドレスでロードされているプリフェッチレジスタ42に応じて、フェッチステージ26パイプラインは、第5サイクルの間にそれを無効にしたまま、プリフェッチオペレーションがパイプラインを通じて自由に流れることを可能にするために、第4のサイクルの間にフラッシュされている。
第2アドレスA+0x20は、サイクル6の間にFETCH1ステージ50へとロードされ、それは、BTAC38あるいはBHT40アクセスではない限定されたキャッシュ18アクセスをトリガする。キャッシュ18アクセスの第2サイクルの間に(サイクル7)、AはFETCH1ステージ50へとリフェッチレジスタ56からリロードされるが、A+0x20は、FETCH2ステージ52へとロードされる。L2アクセスが第1の命令Aについて完了するとき、Aは、FETCH1ステージ50へとリロードされるので、最終的には(so that ultimately)、Aは、FETCH3ステージ54において待機するであろう(それが待っているときプリフェッチオペレーションは生じない)。したがって、第2の命令A+0x20についての命令キャッシュルックアップは、第1の命令Aに関連づけられるより高いレベルのメモリトランザクションの後ろに隠されている。
現在の例においては、第2の命令A+0x20による命令キャッシュ18アクセスは、キャッシュミスをもたらす。これは、サイクル8の間に、第2の命令A+0x20についてのL2キャッシュ20アクセスリクエストをトリガし、それは、また、第1の命令AによるL2キャッシュ20アクセスの待ち時間によって「隠されて(hidden)」いる。図4に図示される残余サイクル(remaining cycles)は、A、A+0x8、およびA+0x10は、プリフェッチステージ24およびフェッチステージ26によって再処理されるということを示しており、したがって、第1の命令Aに関連づけられるフェッチグループが戻されるとき、第2の命令A+0×20についての命令キャッシュルックアップおよびL2キャッシュ20リクエスト(an instruction cache lookup and L2 cache 20 request for the second instruction A+0x20)を適応させている間ずっと、それらのアドレスはデコードの準備が出来ているということを確かめる。
図5は、第1命令アドレスAに応じて命令ユニット12のプリフェッチステージ24およびフェッチステージ26を通じて命令アドレスのサイクルごとの動きを図示しており、それは、また、命令キャッシュ18においてミスし、起動し、L2キャッシュ20はアクセスする。前の例と異なり、アドレスAに関連づけられるフェッチグループは、成立と予測される既知の分岐命令を含んでいる。
処理サイクル1および2の間に、命令アドレスAは、命令キャッシュ18においてミスを、BTAC38においてヒットを、そしてBPU36による成立予測を、引き起こす。したがって、サイクル3において、キャッシュアクセスステアリング論理44は、BTAC38からFETCH1ステージ50に分岐ターゲットアドレスBを方向づけ、また、FETCH1ステージ50においてBTAフラグ(*によって表示されている)をセットする。第1の命令アドレスAは、FETCH3ステージ54へとロードされ、そして、L2キャッシュ20リクエストが発行される。分岐予測に応じて、Aに続くすべてのシーケンシャル命令アドレスは、フェッチステージ26パイプライン(この例においては、FETCH2ステージ52におけるA+0x8)からフラッシュされる。
命令キャッシュ18においてミスしている第1の命令アドレスAに応じて、第2の命令フェッチアドレスは、第1の命令AについてのL2キャッシュ20アクセス時間の間に、プリフェッチされる。FETCH1ステージ50におけるBTAフラグに応じて、分岐ターゲットアドレスBは、Aのフェッチグループに対して次のシーケンシャルキャッシュラインのアドレスよりむしろプリフェッチされる。したがって、アドレスBは、プリフェッチセレクションmux30(FETCH1を選択する)によって選択され、サイクル4においてプリフェッチレジスタ42へとロードされる。またサイクル4の間に、分岐ターゲットアドレスBおよびBTAフラグは、FETCH2ステージ52に移り(proceed to)、アドレスBは、インクリメンタ46によってインクリメントされ、キャッシュアクセスステアリング論理44によってFETCH1ステージ50へとロードされる。
サイクル5において、全体のフェッチステージ26パイプラインは、プリフェッチオペレーションを容易にするためにフラッシュされている。第6および第7の処理サイクルの間に、キャッシュアクセスステアリング論理44は、フェッチステージ26パイプラインに対してプリフェッチアドレスBを方向付けており、そしてキャッシュ18アクセスは、―しかしBTAC38あるいはBHT40アクセスではない―実行されている。またサイクル7において、第1の命令アドレスAは、リフェッチレジスタ56から、キャッシュアクセスステアリング論理44によってフェッチステージ26パイプラインへとリロードされる。
第2の、あるいはプリフェッチ、アドレスBは、命令キャッシュ18(サイクル7)においてミスしており、したがって、サイクル8においてアドレスBについて発行されているL2キャッシュ20リクエストを結果としてもたらす。もしアドレスBが命令キャッシュ18においてヒットする場合には、プリフェッチオペレーションは完了し、プロセッサは、アドレスBに関連づけられる命令が命令キャッシュ18において存在しているということを知り、L2キャッシュ20アクセスが必要とされない、ということに注目してください。
またサイクル8においては、アドレスAは、命令キャッシュ18において(再び)ミスする。第1の命令アドレスAは、プリフェッチレジスタ42ではなくリフェッチレジスタ56からキャッシュアクセスステアリング論理44に入ったので、プリフェッチオペレーションではなく、フェッチオペレーションは、アドレスAを使用して実行される。したがって、BTAC38およびBHT40もまたアクセスされ、第1の命令Aについて成立分岐予測とBTAC38ヒットを結果としてもたらす。このことは、サイクル9において、A(この例においては、FETCH2ステージ52)の後ろですべてのシーケンシャルインクリメントされたアドレスをフラッシュすることと、そして、FETCH1ステージ50へと、BTAフラグに沿って、BTAC38から分岐ターゲットアドレスBをロードすることと、をもたらす。
この時点で、第1の命令アドレスAおよび分岐ターゲットアドレスBの相対的なオーダリング(relative ordering)は、もとに戻される(restored)。第1の命令アドレスAは、FETCH3ステージ54においてあり、L2キャッシュ20あるいはメインメモリから命令を待っている。分岐ターゲットアドレスBは、フェッチステージ26パイプラインを通じて処理し、命令キャッシュ18においてミスし、そして、その進行中のL2アクセスの結果を待ってFETCH3ステージ54において次第に停止するようになるであろう(come to rest)。しかしながら、リクエストは、サイクル8において−命令AによるL2キャッシュ20アクセスの待ち時間の間に、前に発行されていたので、このL2アクセスから命令を受信することを経験した待ち時間は低減しているように見えるであろう。
図6は、命令キャッシュ18においてミスする第1の命令アドレスAに応じて、命令ユニット12のプリフェッチステージ24およびフェッチステージ26を通じて命令アドレスのサイクルごとの動きを図示し、そして、L2アクセスを起動する。この例においては、アドレスAに関連づけられるフェッチグループは、既知の分岐命令を含んでいないが、次のアドレスA+0x8に関連づけられるフェッチグループは、成立と予測される既知の分岐命令を含んでいる。
命令アドレスAは、サイクル1においてフェッチステージ26パイプラインへとロードされ、サイクル2においてBTAC38および命令キャッシュ18においてミスする。サイクル3において、命令アドレスAは、FETCH3ステージ54に移るが、サイクル4までL2キャッシュ20アクセスリクエストを開始しない。これは、例えば、新しいリクエストを作るために空ける(to free up room)のに必要なペンディングキャッシュ管理オペレーション(a pending cache management operation)に起因しているかもしれない。サイクル3の間に、命令アドレスAがL2を作る前に、次のシーケンシャルフェッチグループについての命令アドレスA+0x8は、命令キャッシュ18においてミスするが、BTAC38においてヒットし、分岐命令は、成立と予測される。これに応じて、サイクル4において、分岐ターゲットアドレスBは、キャッシュアクセスステアリング論理44によってFETCH1ステージ50に操作され、BTAフラグがセットされる。
サイクル5において、命令アドレスAについてのL2キャッシュ20アクセスリクエストに応じて、プリフェッチステージ24は、プリフェッチオペレーションを開始する。FETCH1ステージ50においてセットされているBTAフラグに応じて、分岐ターゲットアドレスBは、プリフェッチセレクションmux30によって操作され、プリフェッチレジスタ42へとロードされる。命令アドレスAは、FETCH3ステージ54からリフェッチレジスタ56に保存され、次のサイクルにおいては、フェッチステージ26パイプラインは、プリフェッチオペレーションを容易にするために、フラッシュされる。
プリフェッチオペレーションは、分岐ターゲットアドレスBが、命令キャッシュ18(抑制されているBTAC39およびBHT40アクセス)においてミスする状態で、上記に説明されているように処理し、L2キャッシュ20リクエストを起動するためにFETCH3ステージ54に移る。このことは、プリフェッチオペレーションを完了し、命令アドレスAは、フェッチステージ26パイプラインへとリロードされる。通常のフェッチオペレーション処理を介して、L2アクセスから命令を受信するために適切な関連オーダ(proper relative order)において、命令アドレスA+0x8およびBはフェッチステージ26パイプラインへと起動される。
この例においては、命令アドレスA+0x8は、命令キャッシュ18においてミスしたが、L2キャッシュ20アクセスを実行しなかった。命令キャッシュ18、20ラインが命令フェッチグループのサイズよりも大きい場合、命令アドレスA+0x8に関連づけられるフェッチグループは、統計的に、命令アドレスAに関連づけられるフェッチグループと同じキャッシュラインにおいて存在する可能性がある。もしこれが本当であるならば、両方のフェッチグループについての命令は、命令アドレスAを使用するL2キャッシュ20アクセスによって、命令キャッシュ18へと、ロードされる。本当ではない場合(統計的にはまれ)においては、命令アドレスA+0x8に関連づけられるフェッチグループは、L2キャッシュ20から別々にフェッチされなくてはならない。しかしながら、この場合においてでさえ、分岐ターゲットアドレスBを使用するプリフェッチオペレーションが、予測される命令アドレスBに関連づけられるフェッチグループを命令キャッシュ18へと効率的な方法でロードするのに有効的であった。代替的に、アドレスBが命令キャッシュ18においてヒットする場合、プリフェッチオペレーションは、そのときに命令キャッシュ18からそれらを抽出することに関連づけられたパワードレイン(power drain)を回避している間、関連する命令が存在するということをヴェリファイする(verify)のに有効的であった。
本発明は、特定の特徴、態様、およびそれらの実施形態に関して、ここに説明されてきたけれども、多くの変形、修正、および他の実施形態は、本発明の広い範囲内で可能であり、したがって、すべての変形、修正、および実施形態は、本発明の範囲内にあるものとしてみなされるべきであるということは、明らかであろう。したがって、本実施形態は、すべての態様において限定のためではない説明のためとして解釈されるべきであり、添付された特許請求の範囲の意味および同等な範囲(the meaning and equivalency range)の中に入るすべての変更は、そこに包含されるように意図されている。
以下に、本願発明の当初の[特許請求の範囲]に記載された発明を付記する。
[1]
キャッシュミスを引き起こす第1の命令アクセスを用いて、命令キャッシュにアクセスすることと、
予測された成立分岐命令の分岐ターゲットアドレスである第2の命令アドレスを得ることと、
前記第1の命令アドレスに関連づけられる1つまたは複数の命令を検索するために、より高いレベルのメモリトランザクションを開始することと、
前記命令キャッシュからいずれの命令も検索することなく、前記第2の命令アドレスに関連づけられる1つまたは複数の命令が前記命令キャッシュにおいて保存されているかどうかを、前記より高いレベルのメモリトランザクションの間に、確かめることと、
を備える命令をフェッチする方法。
[2]
第2の命令アドレスを得ることは、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスを用いて、分岐ターゲットアドレスキャッシュにアクセスすることを備える、[1]に記載の方法。
[3]
前記分岐ターゲットアドレスキャッシュにおける各エントリは、1つまたは複数の命令のフェッチグループに関連付けられており、そのうちの少なくとも1つは前に成立と評価された分岐命令である、[2]に記載の方法。
[4]
前に成立と評価された前記分岐命令の前記評価を予測すること、をさらに備える[3]に記載の方法。
[5]
前記分岐命令の前記評価を予測することは、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスを使用して、前記分岐命令の過去の評価のインジケーションを保存している分岐履歴テーブルにアクセスすることをさらに備える、[4]に記載の方法。
[6]
属性を前記第2の命令アドレスに関連づけること、をさらに備え、前記属性は、前記第2の命令アドレスに関連付けられる1つまたは複数の命令が前記命令キャッシュにおいて保存されているかどうかを確かめるとき、前記命令キャッシュからいずれの命令も検索されるべきではないということを示している、[1]に記載の方法。
[7]
もし前記第2の命令アドレスに関連づけられる命令が前記命令キャッシュにおいて保存されていない場合には、前記第2の命令アドレスに関連づけられる1つまたは複数の命令を検索するためにより高いレベルのメモリトランザクションを開始すること、をさらに備える[1]に記載の方法。
[8]
前記命令キャッシュにアクセスするために前記第2の命令アドレスが命令フェッチパイプラインを通して流れる間に、前記第1の命令アドレスを保存することと、そして、引き続いて前記命令フェッチパイプラインへと前記第1の命令アドレスをリロードすることと、をさらに備える[7]に記載の方法。
[9]
前記予測された成立分岐命令は、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスに関連づけられる、[1]に記載の方法。
[10]
第1の命令アドレスを用いて1つまたは複数の命令をフェッチすることと、
もし前記第1の命令アドレスが第1レベル命令キャッシュにおいてミスし、高次メモリアクセスと予測された成立分岐命令とを開始する場合には、前記第1の命令アドレスの前記高次メモリアクセスの間に、前記の分岐命令の予測される分岐ターゲットアドレスである第2の命令アドレスを用いて命令をプリフェッチすることと、
を備える命令をフェッチする方法。
[11]
前記予測される分岐ターゲットアドレスは、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスによってインデクス付けされる分岐ターゲットアドレスキャッシュから検索される、[10]に記載の方法。
[12]
もし前記第2の命令アドレスが第1レベル命令キャッシュにおいてミスする場合には、前記第1の命令アドレスの前記高次メモリアクセスの間に、前記第2の命令アドレスを使用して高次メモリアクセスを開始すること、をさらに備える[10]に記載の方法。
[13]
フェッチあるいはプリフェッチオペレーションが実行されるかどうかは、プリフェッチレジスタにおいて命令アドレスに関連づけられる属性によって決定される、[10]に記載の方法。
[14]
前記予測される分岐ターゲットアドレスは、命令フェッチパイプラインにおいて前記予測される分岐ターゲットアドレスに関連づけられる分岐ターゲットアドレスフラグに応じて、前記プリフェッチレジスタへとロードされる、[13]に記載の方法。
[15]
前記予測された成立分岐命令は、前記第1の命令アドレスに関連づけられ、あるいは前記第1の命令アドレスに続くアドレスは成立と予測される、[9]に記載の方法。
[16]
フェッチあるいはプリフェッチのオペレーションにおいて、適用される命令アドレスについてヒットあるいはミスのインジケーションを提供するように、そして、フェッチオペレーションにおいて命令をさらに提供するように、動作する命令キャッシュメモリと、
もし適用される命令アドレスがフェッチオペレーションにおいて前記の命令キャッシュをミスする場合には、命令を提供するように動作する高次メモリと、
フェッチステージパイプラインを含んでいる命令実行パイプラインと、
第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスに関連付けられる分岐命令を検出するように、また、分岐評価予測と予測される分岐ターゲットアドレスとを供給するように、動作する分岐予測回路と、
前記第1の命令アドレスが、前記命令キャッシュをミスし、前記高次メモリにアクセスし、そして前記分岐予測回路が、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスを使用して、前記フェッチステージパイプラインにおけるフェッチオペレーションにおいて成立分岐を予測するときに、前記予測される分岐ターゲットアドレスを使用して前記フェッチステージパイプラインにおけるプリフェッチオペレーションを起動するように動作する制御回路と、
を備えているプロセッサ。
[17]
さらに、前記高次メモリは、第2レベル(L2)キャッシュメモリを備えている、[16]に記載のプロセッサ。
[18]
もし前記予測される分岐ターゲットアドレスが前記プリフェッチオペレーションの間に前記命令キャッシュにおいてミスする場合は、前記制御回路は、前記予測される分岐ターゲットアドレスについてのL2キャッシュアクセスを起動するようにさらに動作する、[17]に記載のプロセッサ。
[19]
前記予測される分岐ターゲットアドレスについての前記L2キャッシュアクセスは、前記第1の命令アドレスについての前記L2キャッシュアクセスが未定の間起動される、[18]に記載のプロセッサ。
[20]
さらに、前記高次メモリは、メインメモリを備えている、[16]に記載のプロセッサ。
[21]
前記フェッチステージパイプラインにおいて分岐ターゲットアドレス(BTA)フラグ、をさらに備えており、前記分岐予測回路が第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスに関連付けられる分岐命令を検出するときに、前記制御回路は、前記予測される分岐ターゲットアドレスを使用し、前記BTAフラグをセットして、前記フェッチステージパイプラインにおけるフェッチオペレーションを起動するように動作する、[16]に記載のプロセッサ。
[22]
前記BTAフラグと、高次メモリアクセスを起動する前記第1の命令アドレスと、に応じて、前記フェッチステージパイプラインから前記予測される分岐ターゲットアドレスを保存するように動作するプリフェッチレジスタ、をさらに備え、前記プリフェッチレジスタにおいて保存される前記命令アドレスが前記フェッチステージパイプラインへと起動されるときに、前記プリフェッチレジスタは、さらに、プリフェッチオペレーションを示している属性を含んでいる、[21]に記載のプロセッサ。
[23]
前記プリフェッチレジスタは、前記フェッチステージパイプラインにおいてBTAフラグがないことと高次メモリアクセスを起動する前記第1の命令アドレスとに応じて、前記第1の命令アドレスから計算される次のシーケンシャルキャッシュラインの前記のアドレスを保存するように動作する、[22]に記載のプロセッサ。
[24]
前記第1の命令アドレスを保存するように、そして、前記プリフェッチオペレーションに続いて前記フェッチステージパイプラインへと前記第1の命令アドレスをリロードするように、動作する、リフェッチレジスタ、をさらに備えている[16]に記載のプロセッサ。
[25]
第1レベル命令キャッシュにおいてミスし、高次メモリアクセスを開始する第1の命令アドレスを用いて1つまたは複数の命令をフェッチすることと、
もし前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスに関連づけられる分岐命令が成立と予測される場合には、前記分岐命令の予測される分岐ターゲットアドレスである第2の命令アドレスを用いて命令をプリフェッチすることと、
もしどんな予測される成立分岐命令も前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスに関連づけられない場合には、前記第1の命令アドレスによってアドレス指定された前記キャッシュラインに続いて次のシーケンシャル命令キャッシュラインの前記アドレスである第2の命令アドレスを用いて命令をプリフェッチすることと、
を備え、
いずれの場合においても、前記第2の命令アドレスを用いた前記のプリフェッチオペレーションは、前記第1の命令アドレスについての前記高次メモリアクセスの間に、発生する、
命令をフェッチする方法。
[26]
前記第2の命令アドレスを用いた前記のプリフェッチオペレーションに続いて前記第1の命令アドレスをリフェッチすること、をさらに備える[25]に記載の方法。

Claims (13)

  1. 命令フェッチパイプラインにおいて、命令キャッシュを参照し、キャッシュミスを引き起こすことと(このときのアドレスを、以下「第1の命令アドレス」という)
    前記第1の命令アドレスでBTAC(分岐ターゲットアドレスキャッシュ)をアクセスし、前記第1の命令アドレスに、成立すると予測される分岐命令が関連している場合には、その分岐ターゲットアドレスである第2の命令アドレスを得ることと;
    前記第1の命令アドレスに関連づけられる第1の命令を検索するために、より高いレベルのメモリトランザクションを開始することと;
    前記のより高いレベルのメモリトランザクションの待ち時間の間に、前記命令キャッシュから、前記第2の命令アドレスに関連づけられるいずれの命令も検索することなく、前記第2の命令アドレスに関連づけられる第2の命令が前記命令キャッシュにおいて保存されているかどうかを、確かめることと;
    リフェッチレジスタに前記第1の命令アドレスを保存することと、命令フェッチパイプラインから前記第1の命令アドレスをフラッシュすることと、前記第2の命令アドレスを命令フェッチパイプラインへロードすることと、引き続いて前記第1の命令アドレスを前記リフェッチレジスタから前記命令フェッチパイプラインへとリロードすることと、なお、前記第2の命令アドレスは、命令フェッチパイプラインを通して流れ、前記分岐命令の分岐の成立が確定した場合に、前記命令キャッシュから命令を検索するために用いられる
    を備える命令フェッチパイプラインに命令アドレスをロードする方法。
  2. 前記第2の命令アドレスを得ることは、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスを用いて、前記BTAC(分岐ターゲットアドレスキャッシュにアクセスすることを含む、請求項1に記載の方法。
  3. 前記BTAC(分岐ターゲットアドレスキャッシュにおける各エントリは、前に成立と評価された分岐命令を含んでいる1つまたは複数の命令を備えた、対応するフェッチグループに関連付けられている、請求項2に記載の方法。
  4. 前に成立と評価された前記分岐命令の評価を予測すること、をさらに備える請求項3に記載の方法。
  5. 前記分岐命令の前記評価を予測することは、前記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスを使用して、前記分岐命令の過去の評価のインジケーションを保存しているBHT(分岐履歴テーブルにアクセスすることをさらに備える、請求項4に記載の方法。
  6. 前記第2の命令アドレスを得ることは、前記BTAC(分岐ターゲットアドレスキャッシュにアクセスすることと、BHT(分岐履歴テーブルにアクセスすることとを含んでおり、
    前記BTAC(分岐ターゲットアドレスキャッシュ、前に実施された分岐命令に関連付けられた分岐ターゲットアドレスを保存し、そして
    前記BHT(分岐履歴テーブル、前記分岐命令が、成立すると評価されるのかどうか、あるいは成立しないと評価されるのかどうかについての予測を示す、
    請求項1に記載の方法。
  7. 前記第1の命令アドレスに関連する、前記のより高いレベルのメモリトランザクションの待ち時間の間に、前記第2の命令アドレスに関連づけられる前記の命令が前記命令キャッシュの中に見つからないことを確かめた後に、前記第2の命令を検索するために、第2のより高いレベルのメモリトランザクションを開始することをさらに備える、請求項1に記載の方法。
  8. 成立すると予測された前記分岐命令は、前記第1の命令アドレスに、あるいは前記第1の命令アドレスに続くアドレスに関連する、請求項1に記載の方法。
  9. もし前記第2の命令アドレスが前記命令キャッシュにおいてミスするときは、前記のよりいレベルのメモリトランザクションの待ち時間の間に、前記第2の命令アドレスを使用して高次メモリアクセスを開始すること、をさらに備える請求項に記載の方法。
  10. 前記第2の命令アドレスに関連付けられる第2の命令が前記キャッシュにおいて保存されているかどうかを確かめる動作が実行されるかどうかの決定は、前記第2命令アドレスに関連づけられる属性に少なくとも部分的に基づいて行なわれる、請求項に記載の方法。
  11. 前記予測される分岐ターゲットアドレスは、前記命令フェッチパイプラインにおいて前記予測される分岐ターゲットアドレスに関連づけられる分岐ターゲットアドレスフラグに応じて、前記命令フェッチパイプラインからプリフェッチレジスタへとロードされる、請求項10に記載の方法。
  12. 記第1の命令アドレスあるいは前記第1の命令アドレスに続くアドレスに関連づけられる分岐命令が成立すると予測されるとき、前記分岐命令の予測される分岐ターゲットアドレスである前記第2の命令アドレスを用いて、前記第2の命令アドレスに関連付けられる第2の命令が前記キャッシュにおいて保存されているかどうかを確かめる動作を実行することと;
    成立すると予測される分岐命令が、前記第1の命令アドレスに、あるいは前記第1の命令アドレスに続くアドレスに関連づけられないときは、前記第1の命令アドレスによってアドレス指定された命令キャッシュラインの次のシーケンシャル命令キャッシュラインのアドレスである第2の命令アドレスを用いて、前記第2の命令アドレスに関連付けられる第2の命令が前記キャッシュにおいて保存されているかどうかを確かめる動作を実行することと;
    含み
    いずれの場合においても、前記第2の命令アドレスを用いた前記動作は、前記第1の命令アドレスについての前記より高いレベルのメモリトランザクションの間に、発生する、
    請求項1に記載の方法。
  13. フェッチステージパイプラインを含んでいる命令実行パイプラインと;
    前記フェッチステージパイプラインからの要求に応じて第1の命令の命令アドレスに関連付けられたヒットインジケーションまたはミスインジケーションの一方を提供するように、そして、
    記ヒットインジケーションに応じて、前記第1の命令をさらに提供するように、
    動作する命令キャッシュメモリと;
    前記ミスインジケーションに応じて、前記第1の命令を提供するように動作する高次メモリと;
    前記第1の命令アドレスに関連付けられた分岐命令を検出して前記分岐命令に関連する分岐評価予測を供給し、前記分岐評価予測が「成立する」である場合には予測される分岐ターゲットアドレスを供給するように動作する分岐予測回路と;
    前記第1の命令アドレスを使用する前記フェッチオペレーションが、前記命令キャッシュメモリにおいてミスし、前記第1の命令アドレスを見つけるために、前記高次メモリへのアクセスを開始する、そして
    前記分岐予測回路によって提供される前記分岐予測が「成立する」と予測される、
    ときに、
    前記第1の命令アドレスを見つけるため前記高次メモリへのアクセスの間に、前記予測された分岐ターゲットアドレスが命令キャッシュにおいて保存されているかどうかを確かめて、ミスの場合には高次メモリへのアクセスを開始するように動作する制御回路と;
    前記予測された分岐ターゲットアドレスが前記フェッチステージパイプラインを通して流れることを可能にするために、前記第1の命令アドレスが前記フェッチステージパイプラインからフラッシュされた後、前記第1の命令アドレスを見つけるため前記高次メモリへの前記アクセスの間に、前記第1の命令アドレスを保存するように、そして、前記予測された分岐ターゲットアドレスが前記フェッチステージパイプラインへとロードされた後に、前記第1の命令アドレスを前記フェッチステージパイプラインにリロードするように、動作するリフェッチレジスタと;
    を備えるプロセッサ。
JP2009522975A 2006-08-02 2007-07-27 非シーケンシャル命令アドレスをプリフェッチするための方法および装置 Expired - Fee Related JP5410281B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/461,883 US7917731B2 (en) 2006-08-02 2006-08-02 Method and apparatus for prefetching non-sequential instruction addresses
US11/461,883 2006-08-02
PCT/US2007/074598 WO2008016849A2 (en) 2006-08-02 2007-07-27 Method and apparatus for prefetching non-sequential instruction addresses

Publications (2)

Publication Number Publication Date
JP2009545820A JP2009545820A (ja) 2009-12-24
JP5410281B2 true JP5410281B2 (ja) 2014-02-05

Family

ID=38792015

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009522975A Expired - Fee Related JP5410281B2 (ja) 2006-08-02 2007-07-27 非シーケンシャル命令アドレスをプリフェッチするための方法および装置

Country Status (6)

Country Link
US (1) US7917731B2 (ja)
EP (1) EP2069914A2 (ja)
JP (1) JP5410281B2 (ja)
KR (1) KR101081662B1 (ja)
CN (1) CN101495962B (ja)
WO (1) WO2008016849A2 (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7404042B2 (en) * 2005-05-18 2008-07-22 Qualcomm Incorporated Handling cache miss in an instruction crossing a cache line boundary
US7702888B2 (en) * 2007-02-28 2010-04-20 Globalfoundries Inc. Branch predictor directed prefetch
JP2008257508A (ja) * 2007-04-05 2008-10-23 Nec Electronics Corp キャッシュ制御方法およびキャッシュ装置並びにマイクロコンピュータ
US20090150653A1 (en) * 2007-12-07 2009-06-11 Pedro Chaparro Monferrer Mechanism for soft error detection and recovery in issue queues
JP2010020432A (ja) * 2008-07-09 2010-01-28 Nec Electronics Corp キャッシュメモリ装置
US8667225B2 (en) * 2009-09-11 2014-03-04 Advanced Micro Devices, Inc. Store aware prefetching for a datastream
US8533422B2 (en) * 2010-09-30 2013-09-10 Intel Corporation Instruction prefetching using cache line history
KR101260967B1 (ko) * 2011-01-14 2013-05-07 서울대학교산학협력단 프로세싱 요소를 통해 명령어를 처리하는 방법 및 프로세싱 장치
US20140019722A1 (en) * 2011-03-31 2014-01-16 Renesas Electronics Corporation Processor and instruction processing method of processor
US9262328B2 (en) * 2012-11-27 2016-02-16 Nvidia Corporation Using cache hit information to manage prefetches
US9563562B2 (en) 2012-11-27 2017-02-07 Nvidia Corporation Page crossing prefetches
US9639471B2 (en) 2012-11-27 2017-05-02 Nvidia Corporation Prefetching according to attributes of access requests
CN103984637A (zh) * 2013-02-07 2014-08-13 上海芯豪微电子有限公司 一种指令处理系统及方法
CN104133780B (zh) * 2013-05-02 2017-04-05 华为技术有限公司 一种跨页预取方法、装置及系统
WO2016003417A1 (en) * 2014-06-30 2016-01-07 Hewlett-Packard Development Company, L.P. Access cache line from lower level cache
US9910776B2 (en) * 2014-11-14 2018-03-06 Cavium, Inc. Instruction ordering for in-progress operations
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
US10175987B2 (en) 2016-03-17 2019-01-08 International Business Machines Corporation Instruction prefetching in a computer processor using a prefetch prediction vector
US11709679B2 (en) * 2016-03-31 2023-07-25 Qualcomm Incorporated Providing load address predictions using address prediction tables based on load path history in processor-based systems
CN107479860B (zh) * 2016-06-07 2020-10-09 华为技术有限公司 一种处理器芯片以及指令缓存的预取方法
US10642502B2 (en) 2018-06-29 2020-05-05 Western Digital Technologies, Inc. System and method for prediction of read commands to non-sequential data
US10649776B2 (en) * 2018-06-29 2020-05-12 Western Digital Technologies, Inc. System and method for prediction of multiple read commands directed to non-sequential data
CN112130897A (zh) * 2020-09-23 2020-12-25 上海兆芯集成电路有限公司 微处理器
US11561796B2 (en) * 2020-07-15 2023-01-24 International Business Machines Corporation Linked miss-to-miss instruction prefetcher
CN112579175B (zh) * 2020-12-14 2023-03-31 成都海光微电子技术有限公司 分支预测方法、分支预测装置和处理器核
US11416263B1 (en) 2021-02-12 2022-08-16 Western Digital Technologies, Inc. Boosted boot procedure by background re-arrangement of read patterns
US11822922B2 (en) 2021-12-31 2023-11-21 International Business Machines Corporation Miss-driven instruction prefetching
CN116521578A (zh) * 2023-07-03 2023-08-01 太初(无锡)电子科技有限公司 一种提高指令缓存预取执行效率的芯片系统及方法
CN117093271A (zh) * 2023-09-06 2023-11-21 上海耀芯电子科技有限公司 一种分支指令的预取方法及装置

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4984151A (en) * 1985-03-01 1991-01-08 Advanced Micro Devices, Inc. Flexible, next-address generation microprogram sequencer
JPS6224366A (ja) * 1985-07-03 1987-02-02 Hitachi Ltd ベクトル処理装置
US4943908A (en) * 1987-12-02 1990-07-24 International Business Machines Corporation Multiple branch analyzer for prefetching cache lines
DE69129872T2 (de) * 1990-03-27 1999-03-04 Philips Electronics N.V., Eindhoven Datenverarbeitungssystem mit einem leistungsverbessernden Befehlscachespeicher
JP2801135B2 (ja) * 1993-11-26 1998-09-21 富士通株式会社 パイプラインプロセッサの命令読み出し方法及び命令読み出し装置
DE69519449T2 (de) * 1994-05-05 2001-06-21 Conexant Systems, Inc. Raumzeigersdatenpfad
US5740417A (en) * 1995-12-05 1998-04-14 Motorola, Inc. Pipelined processor operating in different power mode based on branch prediction state of branch history bit encoded as taken weakly not taken and strongly not taken states
US6119222A (en) * 1996-12-23 2000-09-12 Texas Instruments Incorporated Combined branch prediction and cache prefetch in a microprocessor
US5987599A (en) * 1997-03-28 1999-11-16 Intel Corporation Target instructions prefetch cache
US6658534B1 (en) * 1998-03-31 2003-12-02 International Business Machines Corporation Mechanism to reduce instruction cache miss penalties and methods therefor
US6212603B1 (en) * 1998-04-09 2001-04-03 Institute For The Development Of Emerging Architectures, L.L.C. Processor with apparatus for tracking prefetch and demand fetch instructions serviced by cache memory
US6012134A (en) * 1998-04-09 2000-01-04 Institute For The Development Of Emerging Architectures, L.L.C. High-performance processor with streaming buffer that facilitates prefetching of instructions
US6728839B1 (en) * 1998-10-28 2004-04-27 Cisco Technology, Inc. Attribute based memory pre-fetching technique
US6381678B2 (en) * 1998-10-30 2002-04-30 Intel Corporation Processing ordered data requests to a memory
JP2000181711A (ja) * 1998-12-18 2000-06-30 Hitachi Ltd 命令フェッチのキャンセル方式
US6912650B2 (en) * 2000-03-21 2005-06-28 Fujitsu Limited Pre-prefetching target of following branch instruction based on past history
US6324643B1 (en) * 1999-10-01 2001-11-27 Hitachi, Ltd. Branch prediction and target instruction control for processor
US6651162B1 (en) 1999-11-04 2003-11-18 International Business Machines Corporation Recursively accessing a branch target address cache using a target address previously accessed from the branch target address cache
US6665776B2 (en) * 2001-01-04 2003-12-16 Hewlett-Packard Development Company L.P. Apparatus and method for speculative prefetching after data cache misses
US6886093B2 (en) * 2001-05-04 2005-04-26 Ip-First, Llc Speculative hybrid branch direction predictor
US20030204705A1 (en) * 2002-04-30 2003-10-30 Oldfield William H. Prediction of branch instructions in a data processing apparatus
US7447877B2 (en) * 2002-06-13 2008-11-04 Intel Corporation Method and apparatus for converting memory instructions to prefetch operations during a thread switch window
JP2006518053A (ja) * 2002-12-24 2006-08-03 サン・マイクロシステムズ・インコーポレイテッド ハードウェア・スカウト・スレッディングを通してコードを推測で実行することによるプリフェッチの生成
US7096348B2 (en) 2003-12-15 2006-08-22 Freescale Semiconductor, Inc. Method and apparatus for allocating entries in a branch target buffer
US20050251644A1 (en) * 2004-05-06 2005-11-10 Monier Maher Physics processing unit instruction set architecture
US7647477B2 (en) * 2004-05-11 2010-01-12 Sun Microsystems, Inc. Branch target aware instruction prefetching technique
US7587580B2 (en) * 2005-02-03 2009-09-08 Qualcomm Corporated Power efficient instruction prefetch mechanism
US20060200655A1 (en) * 2005-03-04 2006-09-07 Smith Rodney W Forward looking branch target address caching
US20060224871A1 (en) * 2005-03-31 2006-10-05 Texas Instruments Incorporated Wide branch target buffer
US8060701B2 (en) * 2006-12-08 2011-11-15 Qualcomm Incorporated Apparatus and methods for low-complexity instruction prefetch system
US7702888B2 (en) * 2007-02-28 2010-04-20 Globalfoundries Inc. Branch predictor directed prefetch

Also Published As

Publication number Publication date
JP2009545820A (ja) 2009-12-24
CN101495962B (zh) 2012-11-28
WO2008016849A3 (en) 2008-04-10
CN101495962A (zh) 2009-07-29
KR20090042292A (ko) 2009-04-29
EP2069914A2 (en) 2009-06-17
KR101081662B1 (ko) 2011-11-09
WO2008016849A2 (en) 2008-02-07
US20080034187A1 (en) 2008-02-07
US7917731B2 (en) 2011-03-29

Similar Documents

Publication Publication Date Title
JP5410281B2 (ja) 非シーケンシャル命令アドレスをプリフェッチするための方法および装置
EP1889152B1 (en) A method and apparatus for predicting branch instructions
US7769983B2 (en) Caching instructions for a multiple-state processor
US10067875B2 (en) Processor with instruction cache that performs zero clock retires
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
JP2006520964A (ja) 分岐ターゲットに基づいて分岐予測をするための方法および装置
US20080040576A1 (en) Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
CA2659310C (en) Methods and apparatus for reducing lookups in a branch target address cache
US20110213951A1 (en) Storing Branch Information in an Address Table of a Processor
JP2001236224A (ja) 分岐予測テーブル汚染の低減方法
US9395985B2 (en) Efficient central processing unit (CPU) return address and instruction cache
US20090132766A1 (en) Systems and methods for lookahead instruction fetching for processors
EP3321810B1 (en) Processor with instruction cache that performs zero clock retires

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120327

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120625

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120702

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120827

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120903

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120925

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130312

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130529

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130605

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130912

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131008

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131106

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees