JP2014002735A - ゼロサイクルロード - Google Patents

ゼロサイクルロード Download PDF

Info

Publication number
JP2014002735A
JP2014002735A JP2013125333A JP2013125333A JP2014002735A JP 2014002735 A JP2014002735 A JP 2014002735A JP 2013125333 A JP2013125333 A JP 2013125333A JP 2013125333 A JP2013125333 A JP 2013125333A JP 2014002735 A JP2014002735 A JP 2014002735A
Authority
JP
Japan
Prior art keywords
instruction
register
given
memory
load instruction
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.)
Granted
Application number
JP2013125333A
Other languages
English (en)
Other versions
JP5894120B2 (ja
Inventor
R Williams Gerard Iii
アール ウィリアムズ ザ サード ジェラード
H Mylius John
エイチ ミリウス ジョン
Blasco-Allue Conrado
ブラスコ アリュー コンラド
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.)
Apple Inc
Original Assignee
Apple 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 Apple Inc filed Critical Apple Inc
Publication of JP2014002735A publication Critical patent/JP2014002735A/ja
Application granted granted Critical
Publication of JP5894120B2 publication Critical patent/JP5894120B2/ja
Active 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

【課題】ロード動作のレイテンシーを減少するためのシステム及び方法を提供する。
【解決手段】プロセッサ内のレジスタ再ネームユニットは、デコードされたロードインストラクションがゼロサイクルロード動作へ変換する資格があるかどうか決定する。もしそうであれば、コントロールロジックは、古い依存の記憶インストラクションのソースオペランドに関連した物理的レジスタ識別子をロードインストラクションの行先オペランドに指定する。更に、レジスタ再ネームユニットは、ロードインストラクションがメモリから記憶インストラクションのソースオペランドに関連したデータを読み取るのを防止するようにロードインストラクションをマークする。複写再ネーミングのために、このデータは、物理的レジスタファイルから、ロードインストラクションより若く且つそれに依存するインストラクションへ転送される。
【選択図】図2

Description

本発明は、マイクロプロセッサに関するもので、より詳細には、ロード動作のレイテンシー及び電力を効率的に減少することに関する。
マイクロプロセッサは、典型的に、重畳するパイプライン段と、インストラクションの順序ずれ(out-of-order)実行とを含む。更に、マイクロプロセッサは、スループットを上げるために同時マルチスレッディングをサポートする。これらの技術は、ソースコードにおけるインストラクションレベルパラレル性(ILP)の利点を取り入れている。各クロックサイクル中に、マイクロプロセッサは、1より大きな整数をNとすれば、各パイプライン段に対してスレッド当たり最大N個のインストラクションの有用な実行を生じさせるのが理想的である。しかしながら、コントロール依存性及びデータ依存性のために、マイクロプロセッサの最大スループットがサイクル当たりN個未満のインストラクションへと減少される。
インストラクションの投機的実行を使用して、ソースコードのコントロール依存性に関わらず、インストラクションのパラレル実行が遂行される。インストラクションのオペランドがプログラム順での古いインストラクションの結果に依存するときにデータ依存性が生じる。データ依存性は、直線的コードセグメントにおける後続インストラクションのオペランド間、又は後続ループ繰り返しに属するインストラクションのオペランド間、のいずれかに現れる。直線的コードでは、書き込み後の読み取り(RAW)、読み取り後の書き込み(WAR)、又は書き込み後の書き込み(WAW)依存性に遭遇する。レジスタ再ネーミングを使用して、WAR及びWAW依存性に関わらず、インストラクションをパラレルに実行することができる。しかしながら、真の依存性又はRAW依存性は、依然、そのままである。それ故、行先レジスタとして、そしてその後、ソースレジスタとして繰り返し使用されるアーキテクチャーレジスタは、関連ソースコードセグメントに対してインストラクションの実行をシリアル化させる。
アーキテクチャーレジスタとの通常のRAW依存性の一例は、ロードインストラクションであるか、又はまだメモリ位置に結果をコミットしていない(プログラム順序で)古い記憶インストラクションにより変更されたメモリ位置を読み取るよう試みる読み取り動作である。この形式のRAW依存性は、プログラム実行中に頻繁に生じる。メモリ位置の読み取りは、著しいレイテンシーを含み、プロセッサのスループットを減少する。
以上に鑑み、ロード動作のレイテンシーを効率的に減少するための効率的な方法及びメカニズムが要望される。
ロード動作のレイテンシーを効率的に減少するためのシステム及び方法が提供される。1つの実施形態において、プロセッサは、デコードされたインストラクションを受け取って、デコードされた所与のインストラクションがゼロサイクルロード動作となる資格があるかどうか決定するレジスタ再ネームユニットを備えている。クオリファイア(qualifier)は、例えば、所与の記憶インストラクションにおける所与のロードインストラクションのための予想メモリ依存性を含む。更に、クオリファイアは、所与の物理的レジスタ番号に対するマッピングの重複カウントを維持するために利用可能なサポートの存在を検出することを含む。決定が真である場合には、再ネームレジスタユニットは、所与の記憶インストラクションのソースオペランドに関連した物理的レジスタ番号を、所与のロードインストラクションの行先オペランドに指定する。
更に、レジスタ再ネームユニット内のコントロールロジックは、所与のロードインストラクションを、それが、メモリからの記憶インストラクションのソースオペランドに関連したデータを読み取るのを防止するようにマークする。重複再ネーミングのために、このデータは、物理的レジスタファイルから、所与のロードインストラクションより(プログラム順序で)若くて且つそれに依存するインストラクションへ転送される。その後のパイプライン段において、予想メモリ依存性が検証される。メモリ依存性が正しい場合には、所与のロードインストラクションは、メモリ(データキャッシュ)から又は記憶バッファからオペランドデータを読み取ることなく完了すると考えられる。メモリ依存性が正しくない場合には、所与のロードインストラクション及びそれより(プログラム順序で)若いインストラクションは、パイプラインからフラッシュされ、そして再生される。
これら及び他の実施形態は、以下の説明及び添付図面から更に明らかとなろう。
コンピュータシステムの1つの実施形態の一般化されたブロック図である。 ゼロサイクルロード動作でスーパースカラー順序ずれ実行を遂行するプロセッサコアの1つの実施形態の一般化されたブロック図である。 ゼロサイクルロード動作を検出する方法の1つの実施形態の一般化されたフローチャートである。 ゼロサイクルロード動作を処理する方法の1つの実施形態の一般化されたフローチャートである。 ゼロサイクルロード動作を含むインストラクションをコミットする方法の1つの実施形態の一般化されたフローチャートである。
本発明は、種々の変更を受けそして別の形態でも実施できるが、その特定の実施形態を一例として添付図面に示して以下に詳細に説明する。しかしながら、添付図面及び詳細な説明は、本発明を、ここに開示する特定の形態に限定するものではなく、本発明は、特許請求の範囲に規定される本発明の精神及び範囲内に入る全ての変更、等効物及び代替え物を網羅することを理解されたい。又、本出願全体にわたって使用される「〜してもよい(may)」という語は、許すという意味(即ち、〜の潜在性があるという意味)で使用されるもので、強制の意味(即ち、〜しなければならないという意味)ではない。同様に、「含む(include)」、「含んでいる(including)」及び「含む(includes)」という語は、含むことを意味するが、それに限定されない。
種々のユニット、回路又は他のコンポーネントは、1つ又は複数のタスクを遂行するように「構成される」ものとして述べる。この点について、「構成される」とは、動作中に1つ又は複数のタスクを遂行する「回路を有する」ことを一般的に意味する構造を広く表現するものである。従って、ユニット/回路/コンポーネントは、そのユニット/回路/コンポーネントが現在オンでなくても、タスクを遂行するように構成することができる。一般的に、「構成される」に対応する構造を形成する回路は、ハードウェア回路を含む。同様に、種々のユニット/回路/コンポーネントは、説明の便宜上、1つ又は複数のタスクを遂行するものとして説明されてもよい。そのような説明は、「構成される」という句を含むものと解釈されねばならない。1つ以上のタスクを遂行するように構成されたユニット/回路/コンポーネントを表現する場合に、そのユニット/回路/コンポーネントに関して35U.S.C.§112、第6節の解釈を引用しないことが明確に意図される。
以下の説明において、本発明を完全に理解するため多数の特定の細部について述べる。しかしながら、当業者であれば、これら特定の細部をもたずに本発明を実施できることが明らかであろう。ある場合には、本発明を不明瞭にしないため、良く知られた回路、構造及び技術は示さない。
図1は、コンピュータシステム100の一実施形態の一般化されたブロック図である。図示されたように、マイクロプロセッサ110は、1つ以上の周辺装置150a−150bと、ディスクメモリ130及びダイナミックランダムアクセスメモリ(DRAM)140のような外部コンピュータメモリとに接続される。ディスクメモリ130は、コンピュータシステム100のオペレーティングシステム(OS)を記憶する。ソフトウェアアプリケーションのインストラクションは、マイクロプロセッサ110内のキャッシュメモリサブシステム116にロードされる。ソフトウェアアプリケーションは、1つ以上のディスクメモリ130、DRAM140、及び1つの周辺装置150a−150bに記憶される。
単一のプロセッサコアが示されているが、マイクロプロセッサ110は、複数のプロセッサコアを含むことができる。各プロセッサコアは、関連キャッシュメモリサブシステムに接続される。更に、各プロセッサコアは、別のキャッシュメモリサブシステムを共有してもよい。例えば、複数のプロセッサコアの各1つは、関連レベル1(L1)キャッシュ及びレベル2(L2)キャッシュを使用し、更に、レベル3(L3)キャッシュを他のプロセッサコアと共有する。図示されたように、プロセッサコア112は、キャッシュメモリサブシステム116からソフトウェアアプリケーションインストラクションをロードし、そしてインストラクションを処理する。一般的に述べると、ソフトウェアプログラマがアルゴリズム又は方法に基づいて仕事を遂行するためのアプリケーションを書き込むときには、プログラマは、変数を使用して一時的及び結果データを参照する。このデータは、コンピュータメモリに割り当てられたスペースを使用する。オペレーティングシステムは、ソフトウェアアプリケーションのためにメモリの領域を割り当てる。
プロセッサコア112は、物理的レジスタファイル内に複数の物理的レジスタ114を含む。物理的レジスタ114は、ソフトウェアプログラマ及び/又はコンパイラーがソフトウェアアプリケーション内で識別できるアーキテクチャー的可視性レジスタ(architecturally visible register)を含む。更に、物理的レジスタ114は、再ネームレジスタ識別子により識別される非アーキテクチャー的(投機的)レジスタを含む。アーキテクチャー的可視性レジスタは、所与のインストラクションセットアーキテクチャー(ISA)に関連付けられる。アプリケーションの処理中に、データは、メモリの割り当てられた領域からキャッシュメモリサブシステム116へロードされる。1つ以上の物理的レジスタ114を使用して、一時的データ及び結果データをロードし、記憶する。プロセッサコア112のハードウェアは、所与のISAによりインストラクションを処理するための回路を含む。ハードウェア回路は、少なくとも、アーキテクチャー的レジスタ、ファンクションユニット、パイプライン段要素、及びコントロールロジックの関連セットを含む。ARMインストラクションセットアーキテクチャーは、所与のISAについて選択される。或いは又、Alpha、PowerPC、SPARC、MIPS、x86、又は他のISAが選択されてもよい。
所与のISAを使用して、メモリの領域を宣言し及び割り当てる仕方を選択することができる。所与のISAは、更に、物理的レジスタ114を含むマイクロプロセッサ110と、ディスクメモリ130、DRAM140及び周辺装置150a−150bの1つ以上におけるメモリ位置との間でデータを転送するのに使用される選択されたアドレスモードを決定する。ロード及び記憶の両インストラクションは、典型的に、メモリとマイクロプロセッサ110との間、及びキャッシュメモリサブシステム116と物理的レジスタ114との間にデータを転送するのに使用される。コンピュータシステム100に示された破線は、ロード及び記憶操作で遂行されるデータ転送の例を示す。これらデータ転送の各々には著しいレイテンシーが関連している。
スーパースカラーマイクロアーキテクチャー内の実行ユニットへインストラクションを順序ずれで発行するのに加えて、プロセッサコア112は、レジスタ再ネーミングを行ってスループットを高める。ハードウェアを使用して、プロセッサコア112は、行先オペランドに使用されるアーキテクチャー的レジスタ識別子を動的に再ネームする。行先オペランドと同じアーキテクチャー的レジスタ識別子をもつソースオペランドは、行先オペランドに使用される同じ再ネームレジスタ識別子で再ネームされる。
1つの実施形態において、プロセッサコア112は、早期のパイプライン段で記憶インストラクションを検出し、そして少なくともそれに関連したアドレスオペランド識別子をバッファするコントロールロジックを含む。早期のパイプライン段は、インストラクションを順序正しく(in-order)処理し、一方、後期のパイプライン段ではインストラクションが順序ずれして(out-of-order)発行され実行される。所与の記憶インストラクションのアドレスオペランドは、記憶アドレスを発生するために後期パイプライン段で使用される。アドレスオペランドは、アレスオペランドは、ベースレジスタIDとして使用されるアーキテクチャー的レジスタ識別子(ID)、及びオフセットとして使用される中間値を含む。
早期パイプライン段では、プロセッサコア112内のコントロールロジックは、後続インストラクションを監視して、それらインストラクションの1つ以上が所与の記憶インストラクションに対して1つ以上のアドレスオペランドを変更するかどうか決定する。例えば、アドレスオペランドIDは、1つ以上の後続インストラクションにおいて行先オペランドIDに一致することが分かる。この監視は、順序ずれ発行及び実行パイプライン段より前のパイプライン段において、行われる。
コントロールロジックは、物理的レジスタファイルの対応エントリが割り当て解除されるまで所与の記憶インストラクションに対して後続インストラクションを監視し続ける。このエントリは、関連再ネームレジスタ識別子がマッピングテーブルから取り出されてフリーリストに返送されるのに応答して割り当て解除される。例えば、記憶インストラクションに(プログラム順序で)続くインストラクションは、所与の記憶インストラクションのソースオペランド識別子(ソースアーキテクチャー的レジスタ識別子)に等しい行先オペランド識別子(行先アーキテクチャー的レジスタ識別子)を有する。後続インストラクションがコミットするときに、後続インストラクションの行先オペランドに以前に指定された再ネームレジスタ識別子は、別のインストラクションにより再使用するためにフリーリストに入れられる。このフリーとなった再ネームレジスタ識別子は、所与の記憶インストラクションのソースオペランドに使用される同じ識別子である。前記状態を検出するのに応答して、所与の記憶インストラクションに対する監視が終了となる。更なる詳細及び実施例が以下に示される。
1つの実施形態において、監視中に、コントロールロジックは、後続ロード動作が所与の記憶インストラクションと一致するアドレスオペランドを有しそしてそれらのアドレスオペランドが介在するインストラクションにより変更されていないことを決定する。更に、コントロールロジックは、同じアドレスオペランドをもつ他の記憶インストラクションが所与の記憶インストラクションとロードインストラクションとの間に配置されていないことを決定する。換言すれば、所与の記憶インストラクションは、アドレスオペランドをもつ最も若い記憶インストラクションである。この決定に応答して、このロードインストラクションと所与の記憶インストラクションとの間のRAW依存性の指示がセットされ又はアサートされる。別の実施形態では、少なくともインストラクションタグ及びプログラムカウンタ値のような付加的な情報を比較し又はそれを使用して予想テーブルをインデックスする。コントロールロジックは、この早期パイプライン段において、このロードインストラクションを所与の記憶インストラクションとの間にRAW依存性が存在することを予想する。このRAW依存性の決定又は予想は、レジスタ再ネーミングと同じパイプライン段において行われる。或いは又、その決定又は予想は、レジスタ再ネーミングに使用される段より早期のパイプライン段において行われてもよい。このRAW依存性は、例えば、次の通りである。
ADD r7, r3, r5
STORE [r10+4], r7 // Address operands are r10 and 4.
MOV r12, r16
LOAD r14, [r10+4] // Address operands are r10 and 4.
SUB r2, r6, r14 // For r14, use forwarded data from
// store op's source operand, r7.
ADD r11, r14, r13 // For r14, use forwarded data from
// store op's source operand, r7.
この例では、インストラクション記憶とそれに続く1つ以上のソースオペランドの後に行先オペランドが最初にリストされる。レジスタは、“r”とそれに続くレジスタ識別子という一般的な術語を使用する。例えば、レジスタ7は、“r7”で表される。前記例におけるインストラクションは、擬似コード例及び言語不可理論であることを意味する。以上のことから明らかなように、ロードインストラクションは、記憶インストラクションと同じアドレスオペランドを有する。アドレスオペランド(r10)を変更するインストラクションは介在しない。従って、コントロールロジックは、ロードインストラクションが記憶インストラクションに対してRAW依存性を有することを決定する。他の実施形態では、インストラクションタグを比較する、等の予想資格付けが使用されるが、説明を容易にするために図示されていない。
RAW依存性を決定又は予想するのに応答して、ロードインストラクションの行先オペランド識別子(ID)(r14)は、記憶インストラクションのソースオペランドID(r7)に使用される同じ再ネームレジスタ識別子に再ネーミングされる。例えば、記憶インストラクションのソースオペランドID(r7)が再ネームレジスタ識別子P44に再ネーミングされた場合には、ロードインストラクションの行先オペランドID(r14)が同じ識別子(P44)に再ネーミングされる。同様に、減算インストラクション及び最小加算インストラクションの各々に対するソースオペランドIDr14は、同じ再ネームレジスタ識別子(P44)に再ネーミングされる。
プロセッサコア112内のコントロールロジックは、ロードインストラクション及び後続インストラクションを順序付けして発行する。このケースでは、減算インストラクション及び最小加算インストラクションの各々は、ロードインストラクションの前、その間、又はその直後に発行されるが、ロードインストラクションは完了していない。レジスタ識別子r6及びr13のソースオペランドが使用可能である場合には、減算インストラクション及び最小加算インストラクションは、ロードインストラクションが発行される前であって、言うまでもなく完了する前に、発行される。これらのインストラクションは、記憶インストラクションのソースオペランドIDであるアーキテクチャー的ソースレジスタID r7から転送されるデータと共に発行される。レジスタ再ネーミングを使用することで、転送されるべきデータは、ソースアーキテクチャー的レジスタID r7に関連した再ネームレジスタ識別子P44により識別された物理的レジスタに記憶される。それ故、ロードインストラクションは、ゼロサイクル動作となる。ロードインストラクションは、オンチップマルチレベルキャッシュハイアラーキー及びオフチップメモリのようなメモリにアクセスせずに完了となる。
前記ステップがとられそしてロードインストラクションがゼロサイクル動作に変換される場合には、インストラクションスループットがパイプラインに対して高くなる。インストラクションスループットが高くなるのは、ロードインストラクションより(プログラム順序で)若く且つそれに依存するインストラクションが、ロードインストラクションのためにデータキャッシュ、記憶バッファ又はオフチップメモリから検索されるデータを待機しないためである。むしろ、これらの若い依存性インストラクションは、物理的レジスタファイルからデータを受け取る。ロードインストラクションをゼロサイクルロード動作へ変換することに関して更なる詳細を続ける前に、コンピュータシステム100のコンポーネントについて更に詳細に説明する。
対応するキャッシュメモリサブシステムに接続された1つ以上のプロセッサコアを含むのに加えて、マイクロプロセッサ110は、インターフェイスロジック118及びメモリコントローラ120も備えている。説明を容易にするため、他のロジック並びにインター及びイントラブロック通信は図示されていない。マイクロプロセッサ110のここに示す機能は、単一の集積回路に合体される。別の実施形態では、ここに示す機能は、コンピュータマザーボード上のチップセットに合体される。ある実施形態では、マイクロプロセッサ110は、デスクトップ又はサーバーに含まれる。更に別の実施形態では、ここに示す機能は、システムオンチップ(SOC)上の他のプロセッサダイと共に半導体ダイに合体される。
プロセッサコア112は、先に述べた所与のISAによりインストラクションを実行するための回路を備えている。1つの実施形態では、プロセッサコア112は、所与のISAのインストラクションを処理するのに使用されるスーパースカラーマルチスレッドマイクロアーキテクチャーを含む。ある実施形態では、プロセッサコアは、汎用プロセッサコアである。種々の他の実施形態では、マイクロプロセッサ110は、1つ以上の他の特定のコア、例えば、デジタル信号プロセッサ(DSP)、グラフィック処理ユニット(GPU)、特定用途向け集積回路(ASIC)、等を含む。
キャッシュメモリサブシステム116は、プロセッサコア112に対するメモリレイテンシーを減少する。キャッシュメモリサブシステム116により与えられる付加的なメモリで達成されるミスレートの減少は、プロセッサコア112とオフチップメモリとの間にレイテンシーギャップを隠す上で役立つ。プロセッサコア112とキャッシュメモリサブシステム116との間のレイテンシーは、オフチップメモリに対するレイテンシーより小さいが、このレイテンシーは、先に述べたように、ロードインストラクションがゼロサイクルロード動作へ変換される場合には、更に減少される。
要求されたブロックがキャッシュメモリサブシステム116に見つからない、等のキャッシュミスが生じた場合には、読み取り要求が発生されて、メモリコントローラ120へ送信される。メモリコントローラ120は、要求されたブロックに対応するアドレスを変換し、そしてメモリバス122を通して揮発性オフチップDRAM140へ読み取り要求を送信する。メモリコントローラ120は、メモリチャンネルにインターフェイスし且つ対応プロトコルに従うコントロール回路を含む。更に、メモリコントローラ120は、メモリ要求をキューイングするための要求キューを含む。オフチップDRAM140には、オフチップディスクメモリ130からのデータが充填される。オフチップディスクメモリ130は、不揮発性のランダムアクセス二次データ記憶装置をなす。1つの実施形態では、オフチップディスクメモリ130は、1つ以上のハードディスクドライブ(HDD)を含む。別の実施形態では、オフチップディスクメモリ130は、ソリッドステートディスク(SSD)を使用する。
説明上、コンピュータシステム100には2つの周辺装置しか示されていないが、別の数の周辺装置がマイクロプロセッサ110に接続されてもよい。周辺装置150a−150bの1つ以上は、近代的なTV、コンピュータモニタ、ラップトップ又は移動装置モニタ、等を含むディスプレイである。ディスプレイとマイクロプロセッサ110との間にはビデオグラフィックサブシステムが使用される。周辺装置150a−150bの1つ以上は、キーボード、マウス、プリンタ、モデム、等の、典型的に使用される入力/出力装置の1つである。
図2は、ゼロサイクルロード動作でスーパースカラー順序ずれ実行を遂行するプロセッサコア200の1つの実施形態の一般化されたブロック図である。プロセッサコア200は、インストラクションを処理するための多段パイプラインを使用する。ファンクション及びコントロールブロックが特定の順序で特定のパイプライン段に示されているが、他の組み合わせも考えられ、意図される。更に、ファンクション及びコントロールブロックが2つ以上のパイプライン段を占有することもある。ほとんどの場合には、説明を容易にするために各ファンクションブロックに対して単一のパイプライン段が示される。
インストラクションキャッシュ(i−キャッシュ)204は、ソフトウェアアプリケーションのためのインストラクションを記憶する。アドレス選択ロジック202により搬送されるアドレスにより指示される1つ以上のインストラクションがi−キャッシュ204からフェッチされる。i−キャッシュミスがない場合にはクロックサイクル当たり複数のインストラクションがi−キャッシュ204からフェッチされる。次フェッチプレディクタ206によりアドレスがインクリメントされる。次フェッチプレディクタ206及びその後のパイプライン段のコントロールフロー評価ロジック212の各々に分岐方向プレディクタ208が結合される。このプレディクタ208は、次の順次のインストラクションを実行することからインストラクションストリームのフローを変化させるインストラクションの情報を予想する。
デコードユニット210は、複数のフェッチされたインストラクションのopcodeをデコードする。或いは又、インストラクションは、マイクロopへ分割される。ここで使用する用語「インストラクション」、「マイクロop」及び「動作」は、本発明がいずれの具現化も使用するアーキテクチャーに使用されるので、交換可能である。1つの実施形態において、コントロールフロー評価ブロック112は、アドレスセレクタ202においてインストラクションのフェッチを変更する。例えば、無条件分岐opcodeに関連した絶対的アドレス値がアドレスセレクタ202へ送られる。
再ネームイントラグループ(intra-group)依存性検出ロジック214は、デコードユニット210によりデコードされたインストラクション間で依存性を見出す。インストラクションのイントラグループは、1つ以上のクロックサイクル又はパイプライン段からのデコードされたインストラクションを含む。読み取り後の書き込み(WAR)、書き込み後の書き込み(WAW)、及び書き込み後の読み取り(RAW)のような依存性が検出される。インストラクション間の依存性を示す依存性ベクトルが発生される。
依存性検出ロジックは、メモリ依存性(MD)検出器216を含む。ある実施形態では、MD検出器216は、記憶対ロード(STL)メモリ依存性を決定する。これらの実施形態では、所与の記憶インストラクションに対してアドレスオペランドとして使用されるベースレジスタID及び即時値(オフセット値)を記憶するためにテーブルが使用される。更に、記憶インストラクションのためのソースオペランドレジスタIDが記憶される。(プログラム順序で)若いインストラクションについては、行先オペランドレジスタID、アドレスオペランドレジスタID、及び即時値が、テーブルに記憶された値と比較される。MD検出器216は、ある条件が満足されるとの決定に応答して若いロードインストラクションと所与の記憶インストラクションとの間にSTLメモリ依存性が存在することを指示する。1つの条件は、若いロードインストラクションが、アドレスオペランドレジスタIDと、記憶インストラクションのアドレスオペランド値に一致するアドレスオペランド中間値とを有することである。第2の条件は、所与の記憶インストラクションに対してテーブルに記憶された値を変更するインストラクションが介在しないと決定されることである。第3の条件は、記憶インストラクションが、一致するアドレスオペランドをもつロードインストラクションより古くて最も若い記憶インストラクションであると決定されることである。MD検出器216は、ロードインストラクションと所与の記憶インストラクションとの間にRAW依存性が存在するとの指示を記憶する。
更に、MD検出器216は、ロードインストラクションの行先オペランドレジスタIDを、所与の記憶インストラクションのソースオペランドレジスタIDに使用される同じ再ネームレジスタ識別子で再ネーミングするための指示をレジスタ再ネームユニット220へ送信する。他の実施形態では、コンパイラーがコードを分析し、上述したステップを遂行する。若いロードインストラクションと所与の記憶インストラクションとの間にRAW依存性が存在することをコンパイラーが決定した場合には、コンパイラーは、少なくともMD検出器216により検出されるべき指示をプログラムコードに挿入する。情報は、アサートビットと、所与の記憶インストラクションのソースオペランドレジスタIDとを含む。或いは又、情報は、アサートビットと、所与の記憶インストラクションを識別するのに使用されるプログラムカウンタ(PC)オフセットとを含む。他の情報が使用されてもよい。
更に別の実施形態では、MD検出器216は、STLメモリ依存性のためのプレディクタを含む。そのような実施形態では、MD検出器216は、少なくともロード及び記憶インストラクションに関連したプログラムカウンタ(PC)値で1つ以上のテーブルをインデックスする。又、部分的アドレスタグ及び他のインストラクション識別情報を使用して、テーブルをインデックスしてもよい。又、ハッシュ関数の出力を使用して、飽和カウンタ又は他の予想情報を記憶する予想テーブルをインデックスしてもよい。ある実施形態では、MD検出器216は、介在するインストラクションにより変更されていないアドレスオペランドを決定する。他の実施形態では、MD検出器216は、飽和カウンタのような修正ロジックが予想ミスを考慮できるようにする。テーブルから読み出された情報は、投機的依存性を識別するのに使用される。投機的RAWメモリ依存性を決定するのに応答して、MD検出器216は、所与の記憶インストラクションと所与の後続ロードインストラクションとの間にRAW依存性が存在するとの指示を記憶する。更に、MD検出器216は、ロードインストラクションの行先オペランドレジスタIDを、所与の記憶インストラクションのソースオペランドレジスタIDに使用される同じ再ネームレジスタ識別子で再ネーミングするための指示をレジスタ再ネームユニット220へ送信する。更に別の実施形態では、STLメモリ依存を見出すための前記方法及びメカニズムの組み合わせが使用される。
マッパー218は、得られる同時性、依存性チェーンの重大さ、及び通信ペナルティのようなファクタを使用して、分布されたハードウェアリソース間でインストラクションを分割する。ハードウェアがアーキテクチャー的レジスタ識別子を物理的レジスタ識別子で再ネーミングするとき、ハードウェアは、マッピングテーブルのようなデータ構造であるマッピングをマッパー218に記憶する。ここで使用するアーキテクチャー的レジスタ又は物理的レジスタのための識別子は、番号とも称される。それ故、アーキテクチャー的レジスタ識別子は、アーキテクチャー的レジスタ番号とも称される。同様に、物理的レジスタ識別子は、物理的レジスタバントとも称される。又、アーキテクチャー的レジスタ番号を再ネーミングするのに使用される物理的レジスタ番号は、再ネームレジスタ番号とも称される。
レジスタ再ネームユニット220は、再ネームコントロールロジック・アレイ222、及びレジスタ複写アレイ(RDA)224を備えている。レジスタ再ネームユニット220は、インストラクション内の行先及びソースの両オペランドに使用されるアーキテクチャー的レジスタ識別子を再ネーミングするためにどの物理的レジスタ識別子を使用すべきか決定する。レジスタ再ネームユニットは、フリーリストアロケータ230又は再ネームコントロールロジック222内の再ネームマッピングテーブルから候補の物理的レジスタ識別子を選択する。種々の実施形態では、複写マッピングの指示を記憶するようにRDA224が構成される。複写マッピングは、ロード動作をゼロサイクルロード動作へ変換する間に使用される。
レジスタ再ネームユニット220は、ロードインストラクションはゼロサイクルロード動作へ変換される資格があるとの指示をMD検出器216から受け取る。レジスタ再ネームユニット220は、ロードインストラクションの行先オペランドレジスタIDを、ロード動作が依存する記憶インストラクションのソースオペランドレジスタIDに使用される同じ再ネームレジスタ識別子に指定する。マッパー218は、再ネームレジスタ識別子に対する複数のマッピングを記憶する。更に、RDA224は、再ネームレジスタ識別子の複写カウントを記憶する。例えば、初期のコード例では、再ネームレジスタ識別子P44は、記憶インストラクションのソースオペランドレジスタID(r7)及びロードインストラクションの行先オペランドレジスタID(r14)の両方に使用される。この複写カウントは、所与のアーキテクチャー的レジスタ識別子が同じ再ネームレジスタ識別子へマップされる回数を含む。
種々の実施形態において、複写カウントは、特定のアーキテクチャー的レジスタがマッピング時に再ネームレジスタ番号へ既にマッピングされているときには、マッピングについてインクリメントされない。RDA224は、再ネームレジスタ番号及びそれに関連した複写カウントの両方を記憶する。1つの実施形態では、RDAは、比較的小さな、タグ付きの、完全連想構造として具現化される。RDA224は、再ネームレジスタ番号及びそれに関連した複写カウントを記憶するための多数のエントリを有する。一例において、ISAの具現化は、144の物理的レジスタ番号を含み、従って、8ビットの物理的レジスタインデックスがRDAのエントリに記憶されると共に、RDAにアクセスするのに使用される。1つの実施形態では、各複写カウントサイズは、5ビットである。それ故、所与の物理的レジスタ番号に対する最大複写数は、31である。しかしながら、別の複写カウントサイズも考えられ選択される。
RDA224は、プロセッサパイプラインにおけるインストラクションディスパッチの前又はその時に更新される。デコードされたロードインストラクションがゼロサイクルロード動作であることをMD検出器216が決定したときには、関連記憶インストラクションのソースオペランドレジスタID及びロードインストラクションの行先オペランドレジスタIDの各々を再ネーミングするのに使用すべき物理的レジスタ番号についてエントリが既に存在するかどうか決定するためにRDA224がアクセスされる。エントリが存在する場合には、所与の再ネームレジスタ番号に現在マップされていない所与のアーキテクチャー的レジスタIDが所与の再ネームレジスタ番号にマップされるたびに、関連複写カウントがインクリメントされる。RDAにまだエントリが存在しない場合には、エントリが割り当てられ、そして関連複写カウントが2で開始される。
又、RDA224は、プロセッサパイプラインにおけるコミットパイプライン段の間にも更新される。複写カウントは、インストラクションコミット中に所与のアーキテクチャー的レジスタに対して物理的なレジスタ識別子をフリーリストに返送する準備ができるたびにデクリメントされる。物理的なレジスタ識別子は、再ネームレジスタ識別子とも称される。物理的なレジスタ識別子は、物理的なレジスタ識別子に関連したマッピングテーブルのエントリがインストラクションコミットのために除去又は無効化されるのに応答してフリーリストへ返送される候補となる。1つの実施形態では、複写カウントが1に減少するのに応答して、複写カウント及び複写マッピングは、もはや記憶されない。
1つの実施形態では、所与の再ネームレジスタ識別子が関連インストラクションコミット中にフリーリストに返送される候補となり、そしてRDA224に記憶される関連複写情報がないのに応答して、再ネームレジスタ識別子がフリーリストへ返送される。別の実施形態では、所与の再ネームレジスタ識別子がフリーリストに返送される候補となり、そしてRDA224に記憶された複写カウントが1だけデクリメントされてゼロになるのに応答して、再ネームレジスタ識別子がフリーリストへ返送される。
1つの実施形態では、所与の再ネームレジスタ識別子がフリーリストに返送される候補となり、そして記憶された複写カウントがデクリメント後も依然1より大きいのに応答して、再ネームレジスタ識別子は、フリーリストへ返送されない。再ネームレジスタ識別子は、この最後のケースでは、依然、複数のアーキテクチャー的レジスタへの複写マッピングを有する。1つの実施形態では、RDA224は、複写を追跡するためのエントリがないことを確かめるために各潜在的なゼロサイクルロード候補についてチェックされる。RDA224内に割り当てのためのエントリがない場合には、それに対応するロードインストラクションは、ゼロサイクルロード動作へ変換されない。同様に、ゼロサイクルロード候補について割り当てられたエントリは存在するが、複写カウントが既に飽和した場合にも、ロードインストラクションは、ゼロサイクルロード動作へ変換されない。
ゼロサイクルロード動作については、データコンテンツが、記憶インストラクションソースオペランドのためのデータを記憶する物理的レジスタファイル内の物理的レジスタから、後続ロードインストラクションへ及び他のより若い従属インストラクションへ転送される。データは、データキャッシュ、記憶バッファ、又はオフチップメモリから読み取られない。より若い従属インストラクションは、データキャッシュ、記憶バッファ又はオフチップメモリからデータが読み取られるのを待機せずに発行される。
インストラクションがデコードされそして再ネームされた後に、それに関連するエントリがディスパッチキュー240に割り当てられる。インストラクション及びそれに関連した再ネーム識別子、プログラムカウンタ(PC)値、依存性ベクトル、完了のためのマーキング、等は、ディスパッチキュー240へ、その後、スケジューラ250へ送られる。実行コア260、等により、種々の例外が検出される。例えば、メモリアクセス、アドレス変換なし、等に対する保護例外が挙げられる。例外は、それに対応する例外取り扱いルーチンをマイクロコード242等により実行させる。
スケジューラ250は、インストラクションを、実行コア260で実行するためにスケジューリングする。オペランドが得られ且つハードウェアリソースも得られるときには、スケジューラ250から実行コア260内のファンクションユニットの1つへインストラクションが順序ずれ状態で発行される。スケジューラ250は、再ネーミングされた識別子をマッピングテーブルで変換した後に物理的レジスタファイル(図示せず)から、又はオペランドバイパスロジックから、そのソースオペランドを読み取る。ソースオペランドは、実行コア260に与えられる。実行コア260は、ロード及び記憶インストラクションに対してアドレスを分析する。更に、実行コア260は、複数の整数、浮動小数点及びブール演算の1つ以上を遂行する。
実行コア260は、ロード/記憶ユニットを含む。ロード/記憶ユニットは、データキャッシュ(図示せず)及び記憶バッファ272に直接的に又はリオーダーバッファ(rob)270を経て接続される。プロセッサ200は、キャッシュアクセスを遂行するときに完全メモリ変換を遂行するコストを回避するためにi−キャッシュ204及びデータキャッシュの各々に対して変換ルックアサイドバッファ(TLB)を含む。記憶バッファ272は、記憶インストラクションに対応するアドレスを記憶する。rob270は、実行コア260から結果を受け取る。更に、結果は、パイプラインに既にある従属インストラクションへ送られるデータとして手前のパイプライン段へバイパスされる。rob270は、インストラクションの順序正しいコミット及びリタイアを保証する。
図3は、ゼロサイクルロード動作を検出する方法300の1つの実施形態の一般化されたフローチャートである。ブロック302において、プログラムインストラクションが処理される。インストラクションは、コンパイルされ、メモリからフェッチされ、デコードされ、そして実行される。デコード後に、所与のインストラクションが記憶インストラクションであると検出された場合には(条件ブロック304)、ブロック306において、少なくとも、アドレスオペランドベースレジスタID、アドレスオペランド即時値、及び記憶インストラクションのソースオペランドレジスタIDがバッファされる。これらの値は、所与のテーブルに記憶される。関連するプログラムカウンタ(PC)及び他の情報もバッファされる。1つの実施形態では、この情報は、メモリ依存性(MD)検出器内のテーブルにバッファされる。
ブロック308において、(プログラム順序で)後続のインストラクションの情報が、(プログラム順序で)手前の記憶インストラクションのバッファされた情報との潜在的な一致について監視される。比較のための情報は、少なくとも、後続インストラクションの行先オペランドレジスタIDと、後続ロードインストラクションのアドレスオペランドベースレジスタID及び即時値とを含む。コントロールロジックは、所与の記憶インストラクションに関連したレジスタIDと、後続インストラクションに関連したレジスタIDとの間の一致を検出する。レジスタIDは、オペランドを識別するのに使用されるアーキテクチャー的レジスタIDである。
記憶インストラクションのアドレスオペランドベースレジスタの変更は、即時値ベースの更新である。早期のコード例を使用して、ADD r10、r10、#4のような加算インストラクションが記憶インストラクションに続く(プログラム順序で)。記号“#”は、即時値データオペランドを指示するのに使用される。記憶インストラクションのアドレスオペランドベースレジスタr10が変更される。しかしながら、それは、即時値ベースの変更である。アドレスオペランドベースレジスタr10に対してロードインストラクションと記憶インストラクションとの間の介在インストラクションによる即時値ベースの変更以外の他の形式の変更がなされない場合には、即時値ベースの変更を考慮するようにテーブル内で調整が行われる。所与の記憶インストラクションのアドレスオペランドベースレジスタが変更されることが検出され(条件ブロック310)そして変更が即時値更新をベースとするものである(条件ブロック311)場合には、ブロック313において、所与の記憶インストラクションに対するテーブル内の特定の記憶値が更新される。例えば、記憶されたアドレスオペランド即時値が更新される。以上の例を使用して、所与の記憶インストラクションに対するテーブル内の記憶された即時値4が、テーブル内で、ADDインストラクションにより使用される即時値である4だけデクレメントされる。他の例では、アドレスオペランドベースレジスタが、インクリメントではなくデクリメントされ、そしてテーブル内に記憶された即時値が適宜にインクリメントされる。変更が即時値更新に基づくものでない場合には(条件ブロック311)、ブロック312において、所与の記憶インストラクションに対応するテーブルエントリ記憶値が無効とされる。その後に、方法300のコントロールフローは、ブロックAを通してブロック302へ戻る。
所与の記憶インストラクションのソースオペランドが変更されるべきであると検出され(条件ブロック314)そして記憶インストラクションがリタイアした(条件ブロック316)場合には、方法300のコントロールフローがブロック312へ移動する。このケースを説明するために、記憶インストラクションのソースオペランドの変更及び競争条件を伴うメモリ依存性の別のコード例をここに示す。
ADD r7, r3, r5
STORE [r10+4], r7 // Address operands are r10 and 4.
ADD r19, r24, r18
ADD r7, r20, r21 // Store op source operand is
// modified.
LOAD r14, [r10+4] // Address operands are r10 and 4.
SUB r2, r6, r14 // For r14, use forwarded data from
// store op's source operand, r7.
ADD r7, r14, r13 // For r14, use forwarded data from
// store op's source operand, r7.
ADD r14, r22, r25 // The load op destination operand is
// overwritten. During commit stage,
// return physical register number
// shared by r7&r14 to the free list.
早期のコード例と同様に、前記例では、ロードインストラクションは、記憶インストラクションに対するメモリ依存性を有する。このケースでは、第3の加算インストラクションが記憶インストラクションのソースオペランド(r7)を変更する。パイプラインにおいて、ソースオペランド(r7)に関連した再ネームレジスタ識別子を複写としてマークするロードインストラクションと、同じ再ネームレジスタ識別子をコミットしてフリーリストへ返送させる第3の加算インストラクションとの間には、競争状態がある。ロードインストラクションがこの再ネームレジスタ識別子を複写とマークするときまでに、再ネームレジスタ識別子は、既に、フリーリストに向かって伝播する履歴ファイルにある。
前記ケースを取り扱う1つのオプションは、第3の加算インストラクションのような介在インストラクションを検出し、記憶インストラクションのソースオペランドを変更し、そしてそれに応答して、ロードインストラクションがゼロサイクルロード動作へ変換される資格を奪うことである。前記ケースを取り扱う別のオプションは、介在インストラクションが記憶インストラクションのソースオペランドを変更することを検出し、そしてそれに応答して、記憶インストラクションがリタイアしたかどうか決定することである。記憶インストラクションがリタイアしない場合には、介在インストラクションもリタイアしない。それ故、介在インストラクションは、記憶インストラクションのソースオペランドに関連した再ネームレジスタ識別子をまだフリーリストに返送していない。この再ネームレジスタ識別子の複写カウントがここで維持される。同様に、前記コード例における最後の加算インストラクションのためにロードインストラクションの行先オペランド(r14)について複写カウントがインクリメントされる。
方法300に戻ると、所与の記憶インストラクションのソースオペランドが変更されることが検出され(条件ブロック314)そして記憶インストラクションがリタイアしない(条件ブロック316)場合には、ロードインストラクションが所与の記憶インストラクションに対するメモリ依存性を有するかどうか決定される。同様に、所与の記憶インストラクションのソースオペランドが変更されることが検出されない場合には(条件ブロック314)、ロードインストラクションが所与の記憶インストラクションに対してメモリ依存性を有するかどうか決定される。ある実施形態では、条件ブロック310、314、及び318の各々が同時に評価されることに注意されたい。例えば、コントロールロジック及びテーブルは、後続インストラクションに関連した入力を同時に受け取る。
1つの実施形態において、メモリ依存性(MD)検出器は、ロードインストラクションに関連した情報でアクセスされる。先に述べたように、MD検出器は、後続インストラクションと比較されるべき特定の記憶インストラクションのためのテーブル保持情報を含む。或いは又、MD検出器は、コンパイラーからのヒント情報を検出するためのコントロールロジックを含む。又、MD検出器は、STLプレディクタも含む。更に、MD検出器は、これらの別の設計選択肢の組み合わせを含んでもよい。MD検出器にアクセスするのに応答して、所与の記憶インストラクション及び他の記憶インストラクションのための値を記憶するコントロールロジック及びテーブルは、両方とも、ロードインストラクションと所与の記憶インストラクションとの間にメモリ依存性が存在することを示す結果を発生する。例えば、1つの実施形態では、ロードインストラクション及び所与の記憶インストラクションの各々に対するアドレスオペランドベースレジスタID及び即時値が一致する。更に、記憶インストラクションは、一致するアドレスオペランドをもつロードインストラクションより古いが最も若い記憶インストラクションであることが決定される。ロードインストラクションが所与の記憶インストラクションに依存することが決定された場合には(条件ブロック318)、ブロック320において、ロードインストラクションは、ゼロサイクルロードインストラクションとして処理される。次に、ゼロサイクルロードインストラクションの処理を更に詳細に説明する。
図4は、ゼロサイクルロード動作を処理する方法400の1つの実施形態の一般化されたフローチャートである。ブロック402において、所与のロードインストラクションは、(プログラム順序で)古い記憶インストラクションに依存すると決定される。所与のロードインストラクションは、ゼロサイクルロードインストラクションに変換される資格がある。先に述べたように、1つの条件は、若いロードインストラクションが、記憶インストラクションのアドレスオペランド値に一致するアドレスオペランドレジスタID及びアドレスオペランド即時値を有することである。第2の条件は、所与の記憶インストラクションに対してアクセステーブルに記憶されたアドレスオペランド及びソースオペランドのような値を変更する介在インストラクションがないと決定されることである。第3の条件は、記憶インストラクションが、一致するアドレスオペランドをもつロードインストラクションより古いが最も若い記憶インストラクションであると決定されることである。第4の条件は、使用可能な複写リソースの指示である。例えば、記憶インストラクションのソースオペランドレジスタIDの再ネームレジスタ番号を使用して、RDA224のようなデータ構造をインデックスする。他の実施形態では、コンパイラーからのSTLメモリ依存性プレディクタ及び/又はヒント情報を使用して、ロードインストラクションと所与の記憶インストラクションとの間のRAW依存性を指示する。
RDA224におけるヒットは、ソース再ネームレジスタ識別子が既に複写されていることを指示する。ミスは、ソース再ネームレジスタ識別子がまだ複写されていないことを指示する。ソース再ネームレジスタ識別子がまだ複写されておらず且つRDA224がまだいっぱいでない場合には、RDA224のエントリがソース再ネームレジスタ識別子について割り当てられる。ソース再ネームレジスタ識別子が既に複写されている場合には、ソース再ネームレジスタ識別子の複写カウントが所与のスレッシュホールドと比較される。1つの実施形態では、スレッシュホールドは、特定のカウントに対応する。関連複写カウントがスレッシュホールドに到達しない場合には、複写リソースを使用することができる。関連複写カウントがスレッシュホールドに到達する場合には、複写リソースを使用することができない。
複写リソースが使用できない場合には(条件ブロック404)、ブロック406において、ロードインストラクションの行先アーキテクチャー的レジスタが、フリーリストからの再ネームレジスタ識別子で再ネーミングされる。再ネーミングされた識別子、関連プログラムカウンタ(PC)値、依存性ベクトル、等は、ディスパッチキューへ送られ、その後、スケジューラへ送られる。ブロック408では、次に使用できるインストラクションが処理される。次に使用できるインストラクションは、前記ステップとパラレルに、又はその後のクロックサイクルに、処理される。
複写リソースが使用できない場合には(条件ブロック404)、ブロック410において、ロードインストラクションの行先オペランド識別子(ID)が、最も若いが古い依存性記憶インストラクションのソースオペランドに使用される再ネームレジスタIDで再ネーミングされる。ブロック412では、物理的レジスタの複写カウントが更新される。複写カウントは、選択された再ネームレジスタ識別子へ現在マップされていない所与のアーキテクチャー的レジスタ識別子がその再ネームレジスタ識別子へマップされるたびに、インクリメントされる。1つの実施形態では、複写カウントは、2の値で初期化される。
ロードインストラクション及び1つ以上の他のインストラクションに対する再ネームされた識別子は、ディスパッチキューへ送られ、その後に、スケジューラへ送られる。関連プログラムカウンタ(PC)値、依存性ベクトル、等も送られる。1つの実施形態では、RAW依存性は確実なものとみなされ、そしてロードインストラクションは、完了とマークされる。例えば、方法300で述べたMD検出器のテーブルのアクセスは、確実性がないとみなされ、それ故、ロードインストラクションは、その後のパイプライン段によってそれ以上処理されない。他の実施形態では、ロードインストラクションと記憶インストラクションとの間のRAW依存性は、不確実性をもたないとはみなされない。それ故、ロードインストラクションは、完了とマークされず、その後のパイプライン段によって更に処理される。ブロック414では、完了とマークされないときにロードインストラクションを含む1つ以上のインストラクションがパイプラインに発行される。ブロック416では、記憶インストラクションとロードインストラクションとの間のメモリ依存性が検証される。例えば、分析されたアドレス及び他のインストラクション識別情報での記憶バッファへのアクセスが遂行される。
メモリ依存性が正しくないことが分かると(条件ブロック418)、ブロック420において、ロードインストラクション、及びロードインストラクションより(プログラム順序で)若いインストラクションは、パイプラインからフラッシュされる。次いで、ロードインストラクションが再生される。予想されたメモリ依存性が正しいと分かると(条件ブロック418)、ブロック422において、オンチップキャッシュハイアラーキー、記憶バッファ、又はオフチップメモリからソースオペランドに関連したデータを読み取ることなく、ロードインストラクションがパイプラインにおいてコミットパイプライン段へ進む。ロードインストラクションに依存する若いインストラクションは、それに対応する記憶インストラクションのソースオペランドに関連した物理的レジスタファイルから受け取られる転送データと共に続けられる。
図5は、ゼロサイクルロード動作を含むインストラクションをコミットする方法500の1つの実施形態の一般化されたフローチャートである。説明上、この実施形態及び上述した方法300及び400の実施形態におけるステップは、逐次の順序で示されている。しかしながら、他の実施形態では、幾つかのステップが、図示された以外の順序で行われてもよく、又、幾つかのステップが同時に遂行されてもよく、又、幾つかのステップが他のステップと組み合わされてもよく、又、幾つかのステップが存在しなくてもよい。
ブロック502において、プログラムインストラクションがコミットされる。データ構造内のインストラクションの順序正しいウインドウを使用して、いつインストラクションをコミットし及びリタイアすべきか決定する。例えば、rob270は、データ構造として使用される。メモリインストラクションがコミットすべきと検出されるときには、関連再ネームレジスタ識別子が複写されるかどうか決定するためにチェックが行われる。1つの例において、行先及びソース物理的レジスタの各々に対する複写の状態を指示する関連複写フラグ又はフィールドは、インストラクションのための他の関連情報と共に記憶される。別の例では、行先及びソース再ネームレジスタ識別子の各々は、RDA224のようなデータ構造をインデックスするのに使用される。ヒットは、それに対応する再ネームレジスタ識別子が既に複写されていることを指示する。ミスは、それに対応する再ネームレジスタ識別子がまだ複写されていないことを指示する。
所与の再ネームレジスタ識別子が複写されていない場合には(条件ブロック504)、ブロック506において、再ネームレジスタ識別子がフリーリストへ戻される。さもなければ、ブロック508において、対応する再ネームレジスタ識別子の複写カウントがデクリメントされる。一般的に、関連再ネームレジスタ識別子が、所与のアーキテクチャー的レジスタに対してフリーリストに返送される準備ができるたびに、複写カウントがデクリメントされる。再ネームレジスタ識別子は、マッピングテーブルからマッピングが除去されるのに応答してフリーリストへ返送される準備ができたと決定される。典型的に、再ネームレジスタ識別子は、マッピングテーブルからマッピングが除去されるのに応答してフリーリストへ返送される。しかしながら、ゼロサイクルロード動作のためにマッピングテーブルにマッピング複写がある状態では、RDA224のようなデータ構造を、フリーリストへ返送する前に検査する。
複写カウントがデクリメントされた後、再ネームレジスタ識別子が依然複写される場合には(条件ブロック510)、ブロック512において、再ネームレジスタ識別子は、依然複写されたとマークされ、そしてフリーリストへ返送される。例えば、RDA224のようなデータ構造における有効エントリが、1より大きなカウントと共に依然存在してもよい。
複写カウントがデクリメントされた後、再ネームレジスタ識別子がまだ複写されない場合には(条件ブロック510)、ブロック514において、再ネームレジスタ識別子は、複写されたではなく、マップされたとマークされる。例えば、RDA224のようなデータ構造における関連エントリは、無効化される。或いは又、有効エントリが複写カウント1と共に依然存在してもよい。再ネームレジスタ識別子は、フリーリストへ返送されない。
以上、本発明の実施形態を詳細に説明したが、当業者であれば、前記開示を完全に理解したとき種々の変更や修正が明らかとなろう。そのような変更や修正は、全て、特許請求の範囲に包含されることが意図される。
100:コンピュータシステム
110:マイクロプロセッサ
112:プロセッサコア
114:物理的レジスタ
116:キャッシュメモリサブシステム
118:インターフェイスロジック
120:メモリコントローラ
122:メモリバス
130:ディスクメモリ
140:DRAM
150a、b:周辺装置
202:アドレスセレクト
204:i−キャッシュ
606:次フェッチプレディクタ
208:分岐方向プレディクタ
210:デコードユニット
212:コントロールフロー評価
214:再ネームイントラグループ依存性検出
216:MD検出器
218:マッパー
220:レジスタ再ネームユニット
222:再ネームコントロールロジック・アレイ
224:RDA
230:物理的レジスタ
240:ディスパッチキュー
242:マイクロコード
250:スケジューラ
260:実行コア
270:リオーダーバッファ
272:記憶バッファ

Claims (20)

  1. 所与の記憶インストラクションに対する所与のロードインストラクションのメモリ依存性を決定するように構成されたメモリ依存性検出器と、
    前記決定されたメモリ依存性の指示を受け取り且つ資格付け条件が満足されたと決定するのに応答して、
    前記所与の記憶インストラクションのソースオペランドレジスタIDに関連した再ネームレジスタ識別子(ID)を前記所与のロードインストラクションの行先オペランドレジスタIDに指定し、及び
    前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止する、
    ように構成されたレジスタ再ネームユニットと、
    を備えたプロセッサ。
  2. 前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止するために、前記レジスタ再ネームユニットは、メモリ依存性が決定されること、及びメモリ依存性が正しいと検証されること、の少なくとも一方の後、所与のロードインストラクションを完了すべきであることを指示するように構成された、請求項1に記載のプロセッサ。
  3. 前記再ネームレジスタIDを所与のロードインストラクションの行先オペランドレジスタIDに指定するのに応答して、前記レジスタ再ネームユニットは、更に、前記再ネームレジスタIDに関連した複写カウントを記憶するように構成される、請求項2に記載のプロセッサ。
  4. 前記資格付け条件が満足されたと決定することは、少なくとも、
    プログラム順序で前記所与の記憶インストラクションと所与のロードインストラクションとの間のインストラクションが、前記所与の記憶インストラクションのソースオペランドレジスタIDに等しい行先オペランドレジスタIDを有すること、及び
    前記所与の記憶インストラクションがまだリタイアしていないこと、
    を決定することを含む、請求項3に記載のプロセッサ。
  5. 前記レジスタ再ネームユニットは、更に、
    行先オペランドレジスタIDがレジスタ再ネームIDに指定されたインストラクションをコミットする準備ができたことを検出し、及び
    前記再ネームレジスタIDが複写されたことを決定するのに応答して前記再ネームレジスタIDがフリーリストへ返送されるのを防止する、
    ように構成された、請求項3に記載のプロセッサ。
  6. 前記インストラクションは、所与のロードインストラクション、所与の記憶インストラクション、及びプログラム順序で所与のロードインストラクションと所与の記憶インストラクションとの間にあるインストラクション、のうちの少なくとも1つである、請求項5に記載のプロセッサ。
  7. 前記レジスタ再ネームユニットは、更に、再ネームレジスタIDに現在マップされていないアーキテクチャー的レジスタIDが再ネームレジスタIDへマップされるたびに複写カウントをインクリメントするように構成された、請求項5に記載のプロセッサ。
  8. 前記プロセッサは、更に、前記メモリ依存性が正しくないとの決定に応答して、前記所与のロードインストラクション、及びプログラム順序で前記所与のロードインストラクションより若いプログラムインストラクションを再生するように構成されたロード/記憶ユニットを備えた、請求項5に記載のプロセッサ。
  9. 前記プロセッサは、更に、前記所与の記憶インストラクションのソースオペランドに関連したデータを、前記所与のロードインストラクションより(プログラム順序で)若く且つそれに依存するインストラクションへ転送するように構成された物理的レジスタファイルを備えた、請求項5に記載のプロセッサ。
  10. 所与の記憶インストラクションに対する所与のロードインストラクションのメモリ依存性を決定し、
    前記メモリ依存性の指示を受け取り且つ資格付け条件が満足されたと決定するのに応答して、
    前記所与の記憶インストラクションのソースオペランドレジスタIDに関連した再ネームレジスタ識別子(ID)を前記所与のロードインストラクションの行先オペランドレジスタIDに指定し、及び
    前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止する、
    段階を含む方法。
  11. 前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止するために、前記方法は、メモリ依存性が決定されること、及びメモリ依存性が正しいと検証されること、の少なくとも一方の後に、所与のロードインストラクションを完了すべきであると指示する段階を含む、請求項10に記載の方法。
  12. 前記再ネームレジスタIDを所与のロードインストラクションの行先オペランドレジスタIDに指定するのに応答して、前記方法は、更に、前記再ネームレジスタIDに関連した複写カウントを記憶する段階を含む、請求項11に記載の方法。
  13. 前記資格付け条件が満足されたと決定することは、少なくとも、
    前記所与の記憶インストラクションと所与のロードインストラクションとの間に介在するインストラクションが、前記所与の記憶インストラクションのソースオペランドレジスタIDに等しい行先オペランドレジスタIDを有すること、及び
    前記所与の記憶インストラクションがまだリタイアしていないこと、
    を決定することを含む、請求項12に記載の方法。
  14. 前記所与のロードインストラクションより(プログラム順序で)若く且つそれに依存するインストラクションを前記所与のロードインストラクションと共に発行する段階を更に含む、請求項13に記載の方法。
  15. メモリ依存性を決定するために、前記方法は、少なくとも、前記所与の記憶インストラクション及び所与のロードインストラクションがアドレスオペランドベースレジスタID及びアドレスオペランド即時値に対して一致する値を有することを決定する段階を更に含む、請求項14に記載の方法。
  16. 介在するインストラクションが前記所与の記憶インストラクションのアドレスオペランドベースレジスタを即時値更新で変更することを決定するのに応答して、前記方法は、更に、前記所与のロードインストラクションとのメモリ依存性を決定する前に、前記所与の記憶インストラクションに対するアドレスオペランド即時値の記憶値を調整する段階を含む、請求項15に記載の方法。
  17. インストラクションをコミットする準備ができたことを検出し、インストラクションの行先オペランドレジスタIDがレジスタ再ネームIDに指定され、及び
    前記再ネームレジスタIDが複写されるとの決定に応答して前記再ネームレジスタIDがフリーリストに返送されるのを防止する、
    段階を更に含む請求項13に記載の方法。
  18. 前記再ネームレジスタIDに現在マップされていない所与のアーキテクチャー的レジスタIDが前記再ネームレジスタIDへマップされるたびに前記複写カウントをインクリメントする段階を更に含む、請求項17に記載の方法。
  19. デコードされたインストラクションを受け取るように構成された第1インターフェイスと、
    インストラクションをスケジューラへディスパッチするように構成されたディスパッチユニットへの第2インターフェイスと、
    所与の記憶インストラクションに対する所与のロードインストラクションのメモリ依存性の指示を受け取り且つ資格付け条件が満足されたと決定するのに応答して、
    前記所与の記憶インストラクションのソースオペランドレジスタIDに関連した再ネームレジスタ識別子(ID)を前記所与のロードインストラクションの行先オペランドレジスタIDに指定し、及び
    前記所与のロードインストラクションがメモリからソースオペランドに関連したデータを読み取るのを防止する、
    ように構成されたゼロサイクルロードロジックと、
    を備えたレジスタ再ネームユニット。
  20. 前記資格付け条件が満足されたと決定することは、少なくとも、
    前記所与の記憶インストラクションと所与のロードインストラクションとの間に介在するインストラクションが、前記所与の記憶インストラクションのソースオペランドに等しい行先オペランドレジスタIDを有すること、及び
    前記所与の記憶インストラクションがまだリタイアしていないこと、
    を決定することを含む、請求項19に記載のレジスタ再ネームユニット。
JP2013125333A 2012-06-14 2013-06-14 ゼロサイクルロード Active JP5894120B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/517,865 2012-06-14
US13/517,865 US9996348B2 (en) 2012-06-14 2012-06-14 Zero cycle load

Publications (2)

Publication Number Publication Date
JP2014002735A true JP2014002735A (ja) 2014-01-09
JP5894120B2 JP5894120B2 (ja) 2016-03-23

Family

ID=48607065

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013125333A Active JP5894120B2 (ja) 2012-06-14 2013-06-14 ゼロサイクルロード

Country Status (8)

Country Link
US (1) US9996348B2 (ja)
EP (1) EP2674856B1 (ja)
JP (1) JP5894120B2 (ja)
KR (1) KR101497807B1 (ja)
CN (1) CN103514009B (ja)
BR (1) BR102013014996B1 (ja)
TW (1) TWI537824B (ja)
WO (1) WO2013188120A2 (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8327115B2 (en) 2006-04-12 2012-12-04 Soft Machines, Inc. Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode
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
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
US9047092B2 (en) * 2012-12-21 2015-06-02 Arm Limited Resource management within a load store unit
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
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative 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
US9311084B2 (en) * 2013-07-31 2016-04-12 Apple Inc. RDA checkpoint optimization
US9940229B2 (en) * 2013-12-17 2018-04-10 Intel Corporation Technologies for persistent memory programming
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
CN106648546A (zh) * 2016-09-07 2017-05-10 北京大学 用于gpu寄存器分配和并行度管理的协同优化编译方法
US11175923B2 (en) * 2017-02-13 2021-11-16 International Business Machines Corporation Comparing load instruction address fields to store instruction address fields in a table to delay issuing dependent load instructions
US10261791B2 (en) * 2017-02-24 2019-04-16 International Business Machines Corporation Bypassing memory access for a load instruction using instruction address mapping
US10838729B1 (en) * 2018-03-21 2020-11-17 Apple Inc. System and method for predicting memory dependence when a source register of a push instruction matches the destination register of a pop instruction
CN108614736B (zh) * 2018-04-13 2021-03-02 杭州中天微系统有限公司 实现资源索引替换的装置及处理器
US11593117B2 (en) * 2018-06-29 2023-02-28 Qualcomm Incorporated Combining load or store instructions
GB2577502B (en) * 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) * 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11294683B2 (en) * 2020-03-30 2022-04-05 SiFive, Inc. Duplicate detection for register renaming
US11966328B2 (en) * 2020-12-18 2024-04-23 Advanced Micro Devices, Inc. Near-memory determination of registers
US11900118B1 (en) * 2022-08-05 2024-02-13 Apple Inc. Stack pointer instruction buffer for zero-cycle loads
US12001843B2 (en) * 2022-09-15 2024-06-04 Ventana Micro Systems Inc. Microprocessor including a decode unit that performs pre-execution of load constant micro-operations

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
JP2000181715A (ja) * 1998-12-17 2000-06-30 Fujitsu Ltd 命令制御装置及びその方法
JP2005532613A (ja) * 2002-04-30 2005-10-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
JP2007503661A (ja) * 2003-06-10 2007-02-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド リプレイ機構を備えた読み出し/書き込みユニット
JP2007536626A (ja) * 2004-05-05 2007-12-13 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3852432T2 (de) 1987-07-01 1995-07-13 Ibm Befehlssteuerungsvorrichtung für ein Computersystem.
DE69311330T2 (de) 1992-03-31 1997-09-25 Seiko Epson Corp., Tokio/Tokyo Befehlsablauffolgeplanung von einem risc-superskalarprozessor
US5799179A (en) 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5926646A (en) 1997-09-11 1999-07-20 Advanced Micro Devices, Inc. Context-dependent memory-mapped registers for transparent expansion of a register file
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6094716A (en) * 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6122656A (en) * 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
EP1050806A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA Memory access address comparison
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US7111126B2 (en) 2003-09-24 2006-09-19 Arm Limited Apparatus and method for loading data values
KR20070019750A (ko) * 2004-05-05 2007-02-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법
FR2873466A1 (fr) 2004-07-21 2006-01-27 St Microelectronics Sa Procede de programmation d'un controleur de dma dans un systeme sur puce et systeme sur puce associe
US8612944B2 (en) 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US8533438B2 (en) 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8631225B2 (en) 2010-06-25 2014-01-14 International Business Machines Corporation Dynamically rewriting branch instructions to directly target an instruction cache location

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
JP2000181715A (ja) * 1998-12-17 2000-06-30 Fujitsu Ltd 命令制御装置及びその方法
JP2005532613A (ja) * 2002-04-30 2005-10-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
JP2007503661A (ja) * 2003-06-10 2007-02-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド リプレイ機構を備えた読み出し/書き込みユニット
JP2007536626A (ja) * 2004-05-05 2007-12-13 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法

Also Published As

Publication number Publication date
CN103514009A (zh) 2014-01-15
TW201411485A (zh) 2014-03-16
EP2674856A3 (en) 2014-07-23
EP2674856B1 (en) 2019-08-21
KR20130140582A (ko) 2013-12-24
BR102013014996B1 (pt) 2020-12-08
JP5894120B2 (ja) 2016-03-23
BR102013014996A2 (pt) 2015-08-11
WO2013188120A2 (en) 2013-12-19
KR101497807B1 (ko) 2015-03-02
WO2013188120A3 (en) 2014-03-06
US20130339671A1 (en) 2013-12-19
EP2674856A2 (en) 2013-12-18
US9996348B2 (en) 2018-06-12
CN103514009B (zh) 2019-10-08
TWI537824B (zh) 2016-06-11

Similar Documents

Publication Publication Date Title
JP5894120B2 (ja) ゼロサイクルロード
US10776113B2 (en) Executing load-store operations without address translation hardware per load-store unit port
US10963248B2 (en) Handling effective address synonyms in a load-store unit that operates without address translation
US9311084B2 (en) RDA checkpoint optimization
US9690625B2 (en) System and method for out-of-order resource allocation and deallocation in a threaded machine
US7711935B2 (en) Universal branch identifier for invalidation of speculative instructions
US9213551B2 (en) Return address prediction in multithreaded processors
US8429636B2 (en) Handling dependency conditions between machine instructions
US9122487B2 (en) System and method for balancing instruction loads between multiple execution units using assignment history
US9575754B2 (en) Zero cycle move
US8335912B2 (en) Logical map table for detecting dependency conditions between instructions having varying width operand values
US10338928B2 (en) Utilizing a stack head register with a call return stack for each instruction fetch
US20100274961A1 (en) Physically-indexed logical map table
US20100332806A1 (en) Dependency matrix for the determination of load dependencies
US11907369B2 (en) Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
US20110276760A1 (en) Non-committing store instructions
US20130024647A1 (en) Cache backed vector registers
US10838729B1 (en) System and method for predicting memory dependence when a source register of a push instruction matches the destination register of a pop instruction
US20160026463A1 (en) Zero cycle move using free list counts
US20130138888A1 (en) Storing a target address of a control transfer instruction in an instruction field
US11625479B2 (en) Virtually-tagged data cache memory that uses translation context to make entries allocated during execution under one translation context inaccessible during execution under another translation context
US8504805B2 (en) Processor operating mode for mitigating dependency conditions between instructions having different operand sizes

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141010

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141020

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150701

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150929

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151207

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151218

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: 20160201

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160225

R150 Certificate of patent or registration of utility model

Ref document number: 5894120

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250