JP2020536308A - 単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット - Google Patents

単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット Download PDF

Info

Publication number
JP2020536308A
JP2020536308A JP2020517847A JP2020517847A JP2020536308A JP 2020536308 A JP2020536308 A JP 2020536308A JP 2020517847 A JP2020517847 A JP 2020517847A JP 2020517847 A JP2020517847 A JP 2020517847A JP 2020536308 A JP2020536308 A JP 2020536308A
Authority
JP
Japan
Prior art keywords
instruction
read
storage
entry
lsu
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
JP2020517847A
Other languages
English (en)
Other versions
JP7064273B2 (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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
Priority claimed from US15/726,627 external-priority patent/US11175924B2/en
Priority claimed from US15/726,596 external-priority patent/US10606591B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2020536308A publication Critical patent/JP2020536308A/ja
Application granted granted Critical
Publication of JP7064273B2 publication Critical patent/JP7064273B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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
    • 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/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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
    • 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/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/652Page size control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/655Same page detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/681Multi-level TLB, e.g. microTLB and main TLB
    • 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

Landscapes

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

Abstract

【課題】読み込み/格納ユニット(LSU)のための技術的解決策を提供する。【解決手段】LSUは、複数のLSUパイプを使用してアウトオブオーダー(OoO)ウィンドウ内の複数の命令を実行する。この実行は、OoOウィンドウから命令を選択することであって、命令が実効アドレスを使用する、選択することと、命令が読み込み命令である場合、処理ユニットがシングルスレッド・モードで動作しているとき、命令が第1の読み込みパイプ上で発行される時に、読み込み順序変更キュー(LRQ)の第1のパーティションにエントリを作成することと、命令が第2の読み込みパイプ上で発行される時に、LRQの第2のパーティションにエントリを作成することとを含む。さらに、マルチスレッド・モードで処理ユニットが動作しているとき、命令が第1の読み込みパイプ上で発行される時に、処理ユニットの第1のスレッドによって、LRQの第1のパーティションの第1の所定の部分にエントリを作成する。【選択図】図1

Description

本発明の実施形態は、一般に、アウトオブオーダー(OoO:out-of-order)プロセッサに関し、より詳細には、OoOプロセッサにおける命令のアウトオブオーダー実行を効率的にサポートするために、単一の連想メモリ(CAM:content address memory)ポートと共に分割された読み込み順序変更キューおよび格納順序変更キュー(load and store reorder queues)を実装する読み込み/格納ユニット(LSU:load-store unit)に関する。
OoOプロセッサでは、命令順序付けユニット(ISU:instruction sequencingunit)が、命令をさまざまな発行キューにディスパッチし、OoO実行のサポートにおいてレジスタ名を変更し、さまざまな発行キューから実行パイプラインに命令を発行し、実行された命令を完了し、例外条件を処理する。レジスタ名の変更は、通常、命令が各発行キューに配置される前に、ISU内のマッパー論理によって実行される。ISUは、命令間の依存関係を追跡するための依存関係行列を含んでいる1つまたは複数の発行キューを含む。依存関係行列は、通常、発行キュー内の命令ごとに1行および1列を含む。
単一のCAMポートを使用する分割された順序変更キューを備える読み込み/格納ユニットを提供する。
本発明の実施形態は、アウトオブオーダー・プロセッサにおいて実効アドレスに基づく読み込み/格納ユニットを実装するための方法、システム、およびコンピュータ・プログラム製品を含む。1つまたは複数の命令を実行するための処理ユニットの非限定的な例としては、読み込み/格納ユニット(LSU)が挙げられ、LSUは、複数のLSUパイプを使用してアウトオブオーダー(OoO)ウィンドウ内の複数の命令を実行する。この実行は、OoOウィンドウから命令を選択することであって、命令が実効アドレスを使用する、選択することと、命令が読み込み命令であることに応答して、処理ユニットがシングルスレッド・モードで動作することに応答して、命令が第1の読み込みパイプ上で発行されているということに基づいて読み込み順序変更キューの第1のパーティションにエントリを作成することと、命令が第2の読み込みパイプ上で発行されているということに基づいて、読み込み順序変更キューの第2のパーティションにエントリを作成することとを含む。この実行は、複数のスレッドが同時に処理されるマルチスレッド・モードで処理ユニットが動作することに応答して、命令が第1の読み込みパイプ上で発行されているということに基づいて、処理ユニットの第1のスレッドによって、読み込み順序変更キューの第1のパーティションの第1の所定の部分にエントリを作成することも含む。
1つまたは複数の実施形態によれば、処理ユニットによる1つまたは複数の命令のアウトオブオーダー実行のためのコンピュータ実装方法が、処理ユニットの読み込み/格納ユニット(LSU)によって、順序に従わずに実行される複数の命令を含んでいる命令のアウトオブオーダー・ウィンドウを受信することと、LSUによって、OoOウィンドウから命令を発行することとを含む。命令の発行は、OoOウィンドウから命令を選択することであって、命令が実効アドレスを使用する、選択することと、命令が読み込み命令であることに応答して、処理ユニットがシングルスレッド・モードで動作することに応答して、命令が第1の読み込みパイプ上で発行されているということに基づいて読み込み順序変更キューの第1のパーティションにエントリを作成することと、命令が第2の読み込みパイプ上で発行されているということに基づいて、読み込み順序変更キューの第2のパーティションにエントリを作成することとを含む。この実行は、複数のスレッドが同時に処理されるマルチスレッド・モードで処理ユニットが動作することに応答して、命令が第1の読み込みパイプ上で発行されているということに基づいて、処理ユニットの第1のスレッドによって、読み込み順序変更キューの第1のパーティションの第1の所定の部分にエントリを作成することも含む。
1つまたは複数の実施形態によれば、コンピュータ・プログラム製品が、プログラム命令が具現化されているコンピュータ可読記憶媒体を含み、それらのプログラム命令は、処理ユニットに動作を実行させるために、処理ユニットによって実行可能である。それらの動作は、処理ユニットの読み込み/格納ユニット(LSU)によって、順序に従わずに実行される複数の命令を含んでいる命令のアウトオブオーダー・ウィンドウを受信することと、LSUによって、OoOウィンドウから命令を発行することとを含む。命令の発行は、OoOウィンドウから命令を選択することであって、命令が実効アドレスを使用する、選択することと、命令が読み込み命令であることに応答して、処理ユニットがシングルスレッド・モードで動作することに応答して、命令が第1の読み込みパイプ上で発行されているということに基づいて読み込み順序変更キューの第1のパーティションにエントリを作成することと、命令が第2の読み込みパイプ上で発行されているということに基づいて、読み込み順序変更キューの第2のパーティションにエントリを作成することとを含む。この実行は、複数のスレッドが同時に処理されるマルチスレッド・モードで処理ユニットが動作することに応答して、命令が第1の読み込みパイプ上で発行されているということに基づいて、処理ユニットの第1のスレッドによって、読み込み順序変更キューの第1のパーティションの第1の所定の部分にエントリを作成することも含む。
その他の特徴および利点が、本発明の手法によって実現される。本発明のその他の実施形態および態様は、本明細書において詳細に説明され、請求される発明の一部と見なされる。本発明を利点および特徴と共によく理解するために、説明および図面を参照されたい。
本明細書に記載された専有権の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の各実施形態の前述およびその他の特徴と利点は、添付の図面と共に行われる以下の詳細な説明から明らかになる。
本発明の1つまたは複数の実施形態に従う、アウトオブオーダー・プロセッサ内に実効アドレスに基づく読み込み/格納ユニットを含んでいるシステムのブロック図である。 本発明の1つまたは複数の実施形態に従う、実効アドレス・ディレクトリ(EAD:effectiveaddress directory)およびこのEADを利用するための関連するメカニズムが実装される、OoOプロセッサのプロセッサ・アーキテクチャの例示的なブロック図である。 本発明の1つまたは複数の実施形態に従うプロセッシング・コアの読み込み/格納ユニット(LSU)を示す図である。 1つの実施形態例に従う実効アドレス・ディレクトリ(EAD)構造(L1キャッシュ)の例示的なブロックである。 1つの実施形態例に従う実効実変換(ERT:effective real translation)テーブル構造の例示的なブロックである。 本発明の1つまたは複数の実施形態に従う、LSUによって命令を実行するためにメモリにアクセスするための例示的な方法のフローチャートである。 本発明の1つまたは複数の実施形態に従う、ERTを再度読み込むための方法のフローチャートである。 本発明の1つまたは複数の実施形態に従うシノニム検出テーブル(SDT:synonymdetection table)の例示的な構造を示す図である。 本発明の1つまたは複数の実施形態に従う、ERTおよびSDT EAの交換を実行するための方法のフローチャートである。 本発明の1つまたは複数の実施形態に従うERT削除(ERTE:ERTeviction)テーブルを示す図である。 本発明の1つまたは複数の実施形態に従う、エントリをERTEテーブルに追加するための例示的な方法のフローチャートである。 本発明の1つまたは複数の実施形態に従って開始される例示的な命令のセットの例示的なシーケンス図である。 本発明の1つまたは複数の実施形態に従う、プロセッサがシングルスレッド(ST:singlethread)モードまたはマルチスレッド(MT:multi-threaded)モードのどちらで動作しているかに応じて、マルチパイプ・モードで、およびOoOの方法で、LSUによって命令を発行するための例示的な方法のフローチャートである。 本発明の1つまたは複数の実施形態の一部または全部の態様を実装するためのコンピュータ・システムのブロック図である。
本明細書において示される図は、実例である。本発明の思想から逸脱することなく、本明細書に記載された図または動作の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語およびその変形は、2つの要素間に通信経路が存在することを表しており、それらの要素間に要素/接続が介在しない要素間の直接的接続を意味していない。これらのすべての変形は、本明細書の一部であると見なされる。
本明細書に記載された本発明の1つまたは複数の実施形態は、OoOプロセッサ内の実効実アドレス・テーブルのエントリの動的削除によって、実効アドレス(EA:effective address)に基づく読み込み/格納ユニット(LSU)をアウトオブオーダー(OoO)プロセッサに提供する。本明細書に記載された技術的解決策は、チップ面積の削減を促進するために、およびさらに、OoOプロセッサのタイミングを改善するために、コンポーネントの中でも特に、実効実テーブル(ERT:effective real table)およびシノニム検出テーブル(SDT:synonymdetection table)と共に実効アドレス・ディレクトリ(EAD)を使用する。さらに、本明細書に記載された技術的解決策は、OoO LSUが順序に従わない方法で読み込み/格納命令を実行するのを容易にする。OoO LSUは、複数のパイプを使用して読み込み/格納命令を実行し、性能を改善する。LSUのマルチパイプの実装は、本明細書において説明されているように、分割されたERT、読み込み順序変更キュー(LRQ:load reorder queue)、および格納順序変更キュー(SRQ:storereorder queue)に基づく。
ほとんどの最新のコンピューティング・デバイスは、仮想メモリをサポートする。仮想メモリは、実際には物理メモリが断片化しているときに、および物理メモリがディスク・ストレージにあふれているときにも、連続的な作業メモリまたはアドレス空間が存在するという印象をアプリケーション・プログラムに与える技術である。基本的に、コンピューティング・デバイスのメモリの見え方がアプリケーション・プログラムに提供され、アプリケーションは、アプリケーションから見える実効アドレス空間内の実効アドレスを使用して、連続的に見えるメモリにアクセスし、その後、この実効アドレスが、アクセス動作を実際に実行するために、実際の物理メモリまたはストレージ・デバイスの物理アドレスに変換される。実効アドレスは、動作を発行する実体(例えば、アプリケーション、プロセス、スレッド、割り込みハンドラ、カーネル・コンポーネントなど)の視点から動作によってアクセスされるメモリ位置を指定するために使用される値である。
すなわち、コンピューティング・デバイスが仮想メモリの概念をサポートしない場合、実効アドレスおよび物理アドレスは1つであり、同じである。しかし、コンピューティング・デバイスが仮想メモリをサポートする場合、アプリケーションによってサブミットされる特定の動作の実効アドレスは、コンピューティング・デバイスのメモリ・マッピング・ユニットによって、動作が実行される物理メモリまたはストレージ・デバイス内の位置を指定する物理アドレスに変換される。
さらに、最新のコンピューティング・デバイスでは、コンピューティング・デバイスのプロセッサが、一連のデータ処理要素を含んでいるプロセッサ命令パイプラインを使用して、実体(例えば、アプリケーション、プロセスなど)によってサブミットされた命令(動作)を処理する。命令パイプラインは、コンピュータ命令の処理を、各ステップの最後でストレージを使用する一連のステップに分割することによって、命令スループットを増加させる技術である。命令パイプラインは、コンピューティング・デバイスの制御回路が、最も遅いステップの処理速度で命令をプロセッサ命令パイプラインに発行するのを容易にし、この処理速度は、すべてのステップを同時に実行するために必要な時間よりも非常に高速である。命令パイプラインを使用するプロセッサ(すなわち、パイプライン型プロセッサ)は、別々のジョブに対して半ば独立して動作できる段に内部で構造化される。各段は、パイプラインの最後の段まで各段の出力が別の段に供給されるように構造化され、一連のチェーン内の次の段に接続される。
そのようなパイプライン型プロセッサは、インオーダー・パイプライン型プロセッサまたはアウトオブオーダー・パイプライン型プロセッサの形態を取ってよい。インオーダー・パイプライン型プロセッサの場合、データが、パイプラインの特定の段で処理される命令に使用されない場合に、そのデータが使用可能になるまで、パイプラインを介した命令の実行が停止されるように、命令が順序通りに実行される。一方、アウトオブオーダー・パイプライン型プロセッサは、動作を実行するために必要なデータを使用できないときに発生する停止をプロセッサが回避できるようにする。アウトオブオーダー・プロセッサの命令パイプラインは、処理される準備ができている他の命令で時間の「スロット」を埋め、その後、パイプラインの最後で結果を並べ替え、命令が順序通りに実行されたように見えるようにすることによって、それらの停止を防ぐ。元のコンピュータ・コード内で命令が順序付けられる方法はプログラム順序と呼ばれ、一方、プロセッサでは、命令がデータ順序(すなわち、データおよびオペランドがプロセッサのレジスタ内で使用可能になる順序)で処理される。
最新のプロセッサ命令パイプラインは、命令が命令パイプラインを通って流れるときに、命令の実効アドレスを追跡する。命令の処理が例外の取得をもたらすか、命令が前の状態をフラッシュするか、命令が現在のメモリ位置と相対的な新しいメモリ位置に分岐するか、または命令の実行が完了するときに、常にこの実効アドレスが利用されるため、命令の実効アドレスを追跡することは重要である。
命令の実効アドレスを追跡することは、プロセッサのチップ面積、電力消費などの観点で、費用がかかる。これは、これらの実効アドレスが大きいサイズ(例えば、64ビット)を有しており、最新のプロセッサ命令パイプラインが深く(すなわち、多くの段を含んでおり)、プロセッサ命令パイプラインの命令フェッチ段からプロセッサ命令パイプラインの完了段までの命令の存続期間が非常に長くなることを引き起こすためである。高度にマルチスレッド化されたアウトオブオーダー・プロセッサ(すなわち、順序に従わない方法で複数のスレッドから命令を実行するプロセッサ)では、異なるアドレス範囲からの膨大な数の命令が同時に処理することができる(すなわち、「インフライト」である)ため、この費用がさらに増えることがある。
1つまたは複数の例では、コンピューティング・デバイスは、パイプライン・ラッチ、分岐情報キュー(BIQ:branch information queue)、およびグローバル完了テーブル(GCT:global completion table)の組み合わせを使用して、命令の実効アドレスを追跡する。命令のグループのベース実効アドレス(EA)が、命令シーケンサ・ユニット(ISU:instruction sequencer unit)のGCT内に蓄積されて追跡できるようになるまで、ラッチを使用してパイプラインの前端から転送される。このデータを格納するために必要なラッチの数は、おおよそ、パイプラインのフェッチ段とディスパッチ段の間のパイプラインの段数になる。これらのラッチは、これらの段の間に通常はEAが不要であるため、無駄である。このデータは、命令がパイプラインを通って流れるときに命令グループと共に「付き合いで参加している」単なるペイロード・データである。加えて、この方法は、分岐命令がBIQとGCTの両方にEAを含むため、二重の格納につながる。
したがって、GCTのみにおいてEAを追跡することによって、そのような非効率性を取り除くコンピューティング・デバイスが開発された。例えば、それらの新しいコンピューティング・デバイス(命令シーケンサ・ユニット)は、フェッチ時にエントリをGCTに作成する。EAは、この時点でGCTに読み込まれ、その後、命令が完了したときに削除される。これによって、装置全体で、多くのパイプライン・ラッチを取り除く。アドレス線の数と同じくらいの長さの完全なEA(例えば、64ビットEA)の代わりに、小さいタグが、パイプラインを通る命令グループと共に運ばれる。このタグは、この命令グループのベースEAを保持するGCT内のエントリを指し示す。分岐が、発行されたときに、EAをGCTから直接取得できるため、BIQ内のアドレスの格納が不要になる。そのような手法は、面積効率を改善するが、アウトオブオーダー・プロセッサには適用できない。さらに、それらの手法は、プログラム順序に従わないで着信するアドレス要求を処理するための十分な情報を欠いている。加えて、それらの手法は、複数のまとまりのないアドレス範囲から形成されていることがある命令グループを追跡する能力を欠いているため、アウトオブオーダー実行に必要なディスパッチおよび完了の帯域幅をサポートできない。従来、そのようなメカニズムは、単一のアドレス範囲からの命令グループのみをサポートしていたため、順序に従わずに実行するために使用できる命令の数が著しく減少する可能性がある。さらに、EAに対応するRA(またはその逆)などの、対応するアドレスを検索するために、連想メモリ(CAM:content addressable memory)が使用される。CAMは、専用比較回路を使用して、単一クロック・サイクルでのルックアップ・テーブル機能を実装する。CAMの機能全体は、検索語を受け取って、一致するメモリ位置を返すことである。しかし、そのようなCAMは、チップ面積を必要とし、そのような検索のための電力を消費する。
本明細書に記載された技術的解決策の実施形態例は、前述したGCTの解決策の面積効率を有するだけでなく、性能を抑制せずに発行幅の広いアウトオブオーダー・パイプラインもサポートできる、実効アドレス・ディレクトリ(EAD)、実効実テーブル(ERT)、およびシノニム検出テーブル(SDT:synonym detection table)を提供することによって、これらの手法を改善する。本明細書に記載された技術的解決策は、プロセッサがアウトオブオーダー(OoO)ウィンドウ内でEAのシノニムを避けることができる限り、プロセッサがEAのみを使用して実行するのをさらに容易にする。OoOウィンドウは、プロセッサの命令パイプライン内の命令のセットである。OoOウィンドウ内のEAのシノニムを防ぐことによって、プロセッサがOoOウィンドウ内のEAの変換を回避することができるため、プロセッサは、アドレス変換のためのチップ面積および電力消費を削減する。これは、OoOウィンドウ内にEAのシノニムが存在しなくなって、インフライトの命令に関してロード・ヒット・ストア(LHS:load-hit-store)条件、ストア・ヒット・ロード(SHL:store-hit-load)条件、およびロード・ヒット・ロード(LHL:load-hit-load)条件が検出されなくなるためである。
言い換えると、本明細書に記載された技術的解決策は、OoOウィンドウ内のEAの別名化を規制し、読み込み/格納ポートに関する変換データ構造およびハードウェアを縮小することによって、技術的問題に対処する。したがって、本明細書に記載された技術的解決策は、1つのアドレス(EA)のみを追跡することによって、チップ面積の削減を促進する。さらに、これらの技術的解決策は、OoOプロセッサが分割された読み込み/格納キューを使用して2読み込み/2格納モード(2 load and 2 store mode)で実行することを容易にし、通常はアドレス変換に使用されるCAMポートをさらに削減する。
加えて、OoOプロセッサがマルチスレッド(MT)動作をサポートする場合、OoOプロセッサは、順序に従わない方法でのスレッド動作ごとに、EAをRAに変換するためおよびRAをEAに変換するために、読み込み/格納ユニット内の読み込み/格納キューごとに複数のCAMポートを容易にする必要がある。例えば、MTモードで4つのスレッドを実行するOoOプロセッサについて考える。各スレッドは、独立した命令を実行することによって、同時に実行している。この場合、OoOプロセッサの読み込み/格納ユニット(LSU)は、実効アドレスを実アドレスに変換するためおよび実アドレスを実効アドレスに変換するために、通常、読み込み/格納キューごとに4つ以上のCAMポートを使用する。アドレス変換用のそのような複数のCAMポートは、かなりのチップ面積を占有し、さらに電力を消費する。本明細書に記載された技術的解決策は、複数のスレッドのための複数のCAMポートのそのような技術的課題に対処する。
本明細書に記載された発明の1つまたは複数の実施形態例は、単一のCAMポートを読み込み/格納キューに使用することによって、本明細書に記載された技術的課題の態様に対処し、このようにして、アドレス変換に使用されるチップ面積および電力を削減する。例えば、本明細書に記載された本発明の実施形態例は、LSUが、分割された読み込み/格納キューを含む複数読み込み/複数格納LSU(multi-load and multi-store LSU)になることを容易にすることができ、アドレス変換用のCAMポートの数の削減を促進する。「複数読み込みLSU」は、読み込み命令ごとに別々のパイプ上で、複数の読み込み命令を同時に発行するLSUである。例えば、「2読み込みLSU」は、2つの別々のパイプ(LD0およびLD1)上で、2つの読み込み命令を同時に発行するLSUである。同様に、「複数格納LSU」は、格納命令ごとに別々のパイプ上で、複数の格納命令を同時に発行するLSUである。例えば、「2格納LSU」は、2つの別々のパイプ(ST0およびST1)上で、2つの格納命令を同時に発行するLSUである。
ここで図1を参照すると、本発明の1つまたは複数の実施形態に従って、OoO命令ウィンドウ内でEAのシノニムを防ぐための技術的解決策を実装するアウトオブオーダー(OoO)プロセッサの命令順序付けユニット(ISU)を含んでいるシステム100のブロック図が、概して示されている。図1に示されているシステム100は、ISUのマッパー110に入力するためのデコードされた命令を準備する設定ブロック108に入力するための命令をフェッチしてデコードする、命令フェッチ・ユニット/命令デコード・ユニット(IFU/IDU:instruction fetch unit/instruction decode unit)106を含んでいる。本発明の1つまたは複数の実施形態に従って、IFU/IDU106によって、スレッドからの一度に6つの命令がフェッチされ、デコードされ得る。本発明の1つまたは複数の実施形態に従って、設定ブロック108に送信される6つの命令は、6つの非分岐命令、5つの非分岐命令および1つの分岐命令、または4つの非分岐命令および2つの分岐命令を含むことができる。本発明の1つまたは複数の実施形態に従って、設定ブロック108は、フェッチされた命令をISU内のそれらのブロックに送信する前に、発行キュー内のエントリ、完了テーブル、マッパー、およびレジスタ・ファイルなどの十分なリソースが存在することをチェックする。
図1に示されたマッパー110は、プログラマの命令(例えば、論理レジスタ名)をプロセッサの物理リソース(例えば、物理レジスタ・アドレス)にマッピングする。図1には、条件レジスタ(CR:condition register)マッパー、リンク/カウント(LNK/CNT:link/count)レジスタ・マッパー、整数例外レジスタ(XER:exception register)マッパー、汎用レジスタ(GPR:general purposeregisters)およびベクトル−スカラ・レジスタ(VSR:vector-scalar register)をマッピングするための統合マッパー(Uマッパー:UMapper)、GPRおよびVSRをマッピングするための設計済みマッパー(ARCHマッパー:architected mapper)、および浮動小数点状態および制御レジスタ(FPSCR:floating point status and control register)マッパーを含む、さまざまなマッパー110が示されている。
設定ブロック108からの出力が、現在のISU内のすべての命令を追跡するためのグローバル完了テーブル(GCT:global completion table)112にも入力される。設定ブロック108からの出力が、命令を発行キューにディスパッチするためのディスパッチ・ユニット114にも入力される。図1に示されているISUの実施形態は、CR発行キュー(CR ISQ:CR issue queue)116を含んでおり、CR発行キュー116は、CRマッパーからの命令を受信して追跡し、それらの命令を命令フェッチ・ユニット(IFU)124に発行(120)して、CR論理命令および移動命令を実行する。図1には分岐発行キュー(分岐ISQ:branch issue queue)118も示されており、分岐発行キュー118は、分岐命令およびLNK/CNT物理アドレスをLNK/CNTマッパーから受信して追跡する。分岐ISQ118は、予測された分岐アドレスまたは方向あるいはその両方が正しくなかった場合、命令をIFU124に発行して、命令フェッチをリダイレクトすることができる。
ディスパッチ論理およびLNK/CNTマッパーから名前が変更されたレジスタ、XERマッパー、UMapper(GPR/VSR)、ARCHマッパー(GPR/VSR)、ならびにFPSCRマッパーから出力された命令が、発行キュー102に入力される。図1に示されているように、発行キュー102は、ディスパッチされた固定小数点命令(Fx:fixed point instructions)、読み込み命令(L:loadinstructions)、格納命令(S:store instructions)、およびベクトルおよびスカラ・ユニット(VSU:vector-and-scaler unit)命令を追跡する。図1の実施形態に示されているように、発行キュー102は、2つの部分ISQ0 1020およびISQ1 1021に分割されており、各部分がN/2個の命令を保持する。プロセッサがシングルスレッド(ST)モードで実行している場合、発行キュー102が、単一のスレッドのすべての命令(この例では、N個すべての命令)を処理するために、ISQ0 1020およびISQ1 1021の両方を含んでいる単一論理の発行キューとして使用され得る。
プロセッサがマルチスレッド(MT)モードで実行している場合、ISQ0 1020が、第1のスレッドからのN/2個の命令を処理するために使用可能であり、ISQ1 1021が、第2のスレッドISQ1 1021からのN/2個の命令を処理するために使用される。
図1に示されているように、発行キュー102は、実行ユニットの2つのグループ(1040および1041)に分割されている実行ユニット104に、命令を発行する。図1に示されている実行ユニットの両方のグループ(1040および1041)は、完全固定小数点実行ユニット(full fixed point execution unit)(完全FX0、完全FX1)、読み込み実行ユニット(LU0、LU1)、簡易固定小数点、格納データ、および格納アドレス実行ユニット(簡易FX0/STD0/STA0、簡易FX1/STD1/STA1)、ならびに浮動小数点、ベクトル・マルチメディア実行、10進浮動小数点、および格納データ実行ユニット(FP/VMX/DFP/STD0、FP/VMX/DFP/STD1)を含んでいる。LU0、簡易FX0/STD0/STA0、およびFP/VMX/DFP/STD0は、集合的に、読み込み/格納ユニット(LSU)1042を形成する。同様に、LU1、簡易FX1/STD1/STA1、およびFP/VMX/DFP/STD1は、読み込み/格納ユニット(LSU)1043を形成する。2つのLSU1042および1043は、まとめて、システム100のLSUと呼ばれる。
図1に示されているように、プロセッサがSTモードで実行している場合、実行ユニットの第1のグループ1040が、ISQ0 1020から発行された命令を実行し、実行ユニットの第2のグループ1041が、ISQ1 1021から発行された命令を実行する。プロセッサがSTモードで実行している場合の本発明の代替の実施形態では、発行キュー102内のISQ0 1020およびISQ1 1021の両方から発行された命令が、実行ユニットの第1のグループ1040および実行ユニットの第2のグループ1041内の実行ユニット1040のいずれかに含まれる実行ユニットに発行され得る。
本発明の1つまたは複数の実施形態に従って、プロセッサがMTモードで実行している場合、実行ユニットの第1のグループ1040が、ISQ0 1020から発行された第1のスレッドの命令を実行し、実行ユニットの第2のグループ1041が、ISQ1 1021から発行された第2のスレッドの命令を実行する。
本発明の実施形態が、さまざまな異なるサイズの発行キューおよびその他の要素に関して実装され得るため、図1に示されている発行キュー102内のエントリの数およびその他の要素のサイズ(例えば、バス幅、キュー・サイズ)は、実際は例示的であるよう意図されている。本発明の1つまたは複数の実施形態に従って、サイズが選択可能であるか、またはプログラム可能である。
1つまたは複数の例では、システム100は、実施形態例に従って、OoOプロセッサである。図2は、本発明の1つまたは複数の実施形態に従う、実効アドレス・ディレクトリ(EAD)およびこのEADを利用するための関連するメカニズムが実装される、OoOプロセッサのプロセッサ・アーキテクチャの例示的なブロック図である。図2に示されているように、このプロセッサ・アーキテクチャは、命令キャッシュ202、命令フェッチ・バッファ204、命令デコード・ユニット206、および命令ディスパッチ・ユニット208を含んでいる。命令が、命令フェッチ・バッファ204によって命令キャッシュ202からフェッチされ、命令デコード・ユニット206に提供される。命令デコード・ユニット206は、命令をデコードし、デコードされた命令を命令ディスパッチ・ユニット208に提供する。命令ディスパッチ・ユニット208の出力が、命令の種類に応じて、グローバル完了テーブル210、ならびに分岐発行キュー212、条件レジスタ発行キュー214、統合発行キュー(unified issue queue)216、読み込み順序変更キュー218、または格納順序変更キュー220あるいはその組み合わせのうちの1つまたは複数に提供される。命令の種類は、命令デコード・ユニット206のデコーディングおよびマッピングによって決定される。発行キュー212〜220は、実行ユニット222〜240のうちのさまざまな実行ユニットに、入力を提供する。データ・キャッシュ250および各ユニットと共に含まれているレジスタ・ファイルは、命令で使用するためのデータを提供する。
命令キャッシュ202は、第2のレベルの変換ユニット262およびプリデコード・ユニット270を介してL2キャッシュ260から命令を受信する。第2のレベルの変換ユニット262は、アソシエート・セグメント・ルックアサイド・バッファ(associate segment look-aside buffer)264およびトランスレーション・ルックアサイド・バッファ266を使用して、フェッチされた命令のアドレスを実効アドレスからシステム・メモリ・アドレスに変換する。プリデコード・ユニットは、L2キャッシュから着信する命令を部分的にデコードし、一意の識別情報でそれらの命令を拡大して、下流の命令デコーダの作業を簡略化する。
命令フェッチ・バッファ204にフェッチされる命令は、命令が分岐命令である場合、分岐予測ユニット280にも提供される。分岐予測ユニット280は、分岐履歴テーブル282、復帰スタック284、およびカウント・キャッシュ286を含んでいる。これらの要素は、次に命令キャッシュからフェッチされるべき実効アドレス(EA)を予測する。分岐命令は、制御の流れが変更されるコンピュータ・プログラム内の位置である。分岐命令は、if−then−elseステートメントまたはdo−whileステートメントなどの、コンピュータ・プログラム内の制御構造から生成される低レベルの機械命令である。分岐が選択されないことがあり、その場合、制御の流れが変化せず、次に実行される命令はメモリ内のその分岐の直後の命令であり、または分岐が選択されることがあり、その場合、次に実行される命令はメモリ内のどこか他の場所にある命令である。分岐が選択される場合、新しいEAが命令キャッシュに提示される必要がある。
分岐予測ユニットからのEAおよび関連する予測情報が、実効アドレス・ディレクトリ290に書き込まれる。後で、分岐実行ユニット222によって、このEAが確認される。このEAが正しい場合、このEAは、このアドレス領域からのすべての命令が実行を完了するまで、ディレクトリ内に残る。このEAが正しくない場合、分岐実行ユニットがアドレスをフラッシュし、修正されたアドレスがその場所に書き込まれる。EAD290は、CAMとしてのディレクトリの使用を容易にする論理ユニットも含んでいる。
メモリから読み取る命令またはメモリに書き込む命令(読み込み命令または格納命令など)が、LS/EX実行ユニット238、240に発行される。LS/EX実行ユニットは、命令によって指定されたメモリ・アドレスを使用して、データ・キャッシュ250からデータを取得する。このアドレスは、実効アドレスであり、使用される前に、まず第2のレベルの変換ユニットを介してシステム・メモリ・アドレスに変換される必要がある。アドレスがデータ・キャッシュ内に見つからない場合、L2キャッシュに対する失敗した要求を管理するために、読み込み失敗キュー(load miss queue)が使用される。そのようなキャッシュ・ミスの不利益を減らすために、高度なデータ・プリフェッチ・エンジンが、近い将来に命令によって使用される可能性が高いアドレスを予測する。このようにして、命令がデータを必要とするときに、そのデータがデータ・キャッシュ内にすでに存在する可能性が高くなり、それによって、L2キャッシュに対する失敗した要求の長い待ち時間を防ぐ。
LS/EX実行ユニット238、240は、読み込み順序変更キュー218および格納順序変更キュー220内の命令の古さおよびメモリの依存関係を追跡することによって、プログラム順序に従わずに命令を実行する。これらのキューは、アウトオブオーダー実行が同じプログラムのインオーダー実行と一致しない結果を生成したときに、それを検出するために使用される。そのような場合、現在のプログラム・フローがフラッシュされ、再実行される。
プロセッサ・アーキテクチャは、実効アドレス・ディレクトリ(EAD)290をさらに含んでおり、実効アドレス・ディレクトリ(EAD)290は、実効アドレスが必要とされるがパイプラインを通る必要がない場合に、実効アドレスを使用できるように、集中化された方法で、命令のグループの実効アドレスを維持する。さらに、EAD290は、アウトオブオーダー処理をサポートするための回路または論理あるいはその両方を含んでいる。図2は、分岐予測ユニット280を介してアクセスされているEAD290を示しているが、図2に示されたユニットのうちのさまざまなユニットが、分岐予測ユニット280を通る必要なしにEAD290にアクセスできるようにするための回路が提供されてよいということが、理解されるべきである。
当業者は、図1〜2のハードウェアが実装に応じて変わってよいということを、理解するであろう。フラッシュ・メモリ、同等の不揮発性メモリ、または光ディスク・ドライブなどの、その他の内部ハードウェアまたは周辺機器が、図1〜2に示されているハードウェアに加えて、またはそれらのハードウェアの代わりに、使用されてよい。加えて、実施形態例のプロセスは、本発明の思想および範囲を逸脱することなく、前述したSMPシステム以外のマルチプロセッサ・データ処理システムに適用されてよい。
さらに、データ処理システム100は、クライアント・コンピューティング・デバイス、サーバ・コンピューティング・デバイス、タブレット・コンピュータ、ラップトップ・コンピュータ、電話またはその他の通信デバイス、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)などを含む、複数の異なるデータ処理システムのいずれかの形態を取ってよい。一部の例では、データ処理システム100は、例えばオペレーティング・システム・ファイルまたはユーザによって生成されたデータあるいはその両方を格納するために、不揮発性メモリを提供するようにフラッシュ・メモリを使用して構成された、ポータブル・コンピューティング・デバイスであってよい。基本的に、データ処理システム100は、アーキテクチャの制限なしで、任意の既知のデータ処理システムまたは後で開発されるデータ処理システムであってよい。
当業者によって理解されるであろうように、本発明は、システム、装置、または方法として具現化されてよい。1つの実施形態例では、メカニズムが、ハードウェア(例えば、プロセッサの回路、ハードウェア・モジュール、またはユニットなど)において全体的に提供される。しかし、他の実施形態例では、ソフトウェアおよびハードウェアの組み合わせが、実施形態例の特徴およびメカニズムを提供または実装するために利用されてよい。例えば、ソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどで提供されてよい。以下で示されるさまざまなフローチャートは、ハードウェア、またはハードウェアとソフトウェアの組み合わせ、あるいはその両方によって実行されてよい動作の概要を提供する。
実施形態例のメカニズムが少なくとも部分的にソフトウェアにおいて実装される実施形態例では、このソフトウェアを格納する1つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体の任意の組み合わせが、利用されてよい。例えば、コンピュータ使用可能媒体またはコンピュータ可読媒体は、電子、磁気、光、電磁気、赤外線、または半導体のシステム、装置、またはデバイスであってよいが、これらに限定されない。コンピュータ可読媒体のさらに具体的な例(非網羅的リスト)としては、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-onlymemory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasableprogrammable read-only memoryまたはフラッシュ・メモリ)などが挙げられる。
通常は、すべての読み込み命令および格納命令について、EAが対応するRAに変換される。そのようなEAからRAへの変換は、命令フェッチ(I−フェッチ)の場合にも実行される。低次メモリからの命令の取得の場合、そのような変換は、通常、実効アドレスから実アドレスへのテーブル(EART:effective to real address table)を必要とした。本明細書に記載された技術的解決策では、EAからRAへの変換が、すべての読み込み命令および格納命令について実行されるのではなく、読み込み失敗、I−フェッチ失敗、およびすべての格納の場合にのみ、実行される。
これらの技術的解決策は、EAのみを動作に使用することによって、EAディレクトリ(L1ディレクトリとも呼ばれる)、LRQFエントリ、LMQエントリなどの、1つまたは複数のデータ構造からのRAビット(例えば、ビット8:51)の除去を容易にする。さらに、EAのみが使用されている場合、SRQ LHS RA比較論理が実行されない。そのような要素を除去することによって、使用されるプロセッサのチップ面積を削減し、したがって、通常のプロセッサを超えるチップ面積の削減を促進する。
さらに、本明細書における技術的解決策は、EAのみを使用することによって、すべての読み込みアドレスおよび格納アドレスの生成時のERATの検索を除去する。これらの技術的解決策は、ユニット全体のRAバスの切り替えをさらに除去し、高速なSRQ LHS RA camも回避する。したがって、これらの技術的解決策は、上記の動作を実行しないことによって、プロセッサが、通常のプロセッサと比較して少ない電力を消費するのを促進する。
さらに、本明細書における技術的解決策は、L1の待ち時間の改善も促進する。例えば、本明細書における技術的解決策は、除去によって、「最終的なdval」を決定することにおいて、アドレス変換が、EAからRAへの変換を実行する通常のプロセッサと比較して少なくとも1サイクル速くなる。EAのみを使用する(RA変換を行わない)ことによって、設定テーブルの複数のヒット、設定テーブルのヒット/RAの失敗などの、「悪いdval」条件を除去するため、待ち時間も改善される。同様の方法で、本明細書における技術的解決策は、L2の待ち時間の改善を促進する。
EAに基づくLSUのみを使用することの技術的課題は、L2からのスヌープを処理できることを含む。例えば、LSUは、RAからEAへの逆変換を含むことができる必要がある。したがって、本明細書における技術的解決策は、L2からのRAに基づくスヌープを、LSUのサブユニットへのEAに基づくスヌープに変換することを容易にする。
さらに、EAのみに基づくLSUには、同じスレッドのシノニム(すなわち、1つのスレッドからの2つの異なるEAが、同じRAにマッピングされる)を処理するという技術的課題がある。これらの技術的解決策は、本明細書に記載されたシノニム検出テーブル(SDT)またはERT削除(ERTE)テーブルのいずれかを使用して、そのような技術的課題に対処する。例えば、LHS、SHL、およびLHLにわたる、シノニムが次のように定義される場合のL1のアクセスである。
Tid = w、EA (0:51) = x => RA(8:51) = z
Tid = w、EA (0:51) = y => RA(8:51) = z
このようにして、異なるEAが同じRAに対応する。本明細書に記載された技術的解決策は、EAのシノニムを拒否すること、および対応する一次EAを使用して再開することを容易にする。
再び図を参照すると、図3は、本発明の1つまたは複数の実施形態に従うプロセッシング・コアの読み込み/格納ユニット(LSU)104を示している。示されているLSU104は、2読み込み/2格納モードでの実行を容易にするが、本明細書に記載された技術的解決策がそのようなLSUに限定されないということに、注意するべきである。以下では、LSUの実行の流れが説明される。読み込み命令または格納命令から、EA(コンピュータ・プログラム内でプログラマによって使用される実効アドレス)が生成される。同様に、命令フェッチの場合にもEAが生成される。通常は、すべての命令について、EAがRA(EAからRAへの変換後にハードウェアによって使用される実アドレス)に変換され、技術的課題の中でも特に、より大きいチップ面積および頻繁な変換が必要だった。本明細書に記載された技術的解決策は、EAのみを使用し(RAへの変換を行わずに)、読み込み失敗時、I−フェッチ失敗時、および格納時にのみ、実効実テーブル(ERT)255を使用してRAを生成することによって、そのような技術的課題に対処する。
LSU104は、読み込み順序変更キュー(LRQF)218を含んでおり、読み込み順序変更キュー(LRQF)218では、通常のLSU設計におけるLRQ218と同様に、ディスパッチから完了までのすべての読み込み動作が追跡される。LSU104は、第2の読み込み順序変更キューLRQE225をさらに含んでいる。読み込みが(キャッシュ・ミスまたは変換失敗のため、あるいは読み込みが依存する前の命令が拒否されたために)拒否された場合、発行キューから読み込みが取り出され、LRQEエントリに配置され、このLRQEエントリから読み込みが再発行される。示されているLRQE225は、12個のエントリをそれぞれ含む(合計で24個のエントリ)、2つの読み込みモード用の2つのインスタンス(LRQE0およびLRQE1)に分割される。STモードでは、スレッド/パイプに基づくパーティションが存在しない。MTモードでは、T0、T2の動作がパイプLD0で開始しており、T1、T3の動作が、再開のためのパイプLD1で開始している。ここで、Txはスレッドxであり、例えば、T0はスレッド0、T1はスレッド1、T2はスレッド2、T3はスレッド3である。本明細書では、各例がMTモードで4つのスレッドを使用しているが、他の例では、MTモードが異なる数(8、16、または任意のその他の数など)のスレッドの実行を同時に含んでよいということに、注意するべきである。1つまたは複数の例では、MTモードでのスレッドの数は構成可能である。さらに、本明細書における例では、LSU104が2つの読み込みパイプ(LD0およびLD1)を使用しているが、他の例では、パイプの数が異なっていてよい(例えば、3、4、8など)。1つまたは複数の例では、LRQF218が、パイプの数と同じ数のパーティションに分割される。
示されているように、LRQF218は、40個のエントリを(インスタンスごとに)含む、2つの読み込みモード用の2つのインスタンス(LRQF0およびLRQF1)に分割される。LRQF218は、循環する順序通りのエントリの割り当て、循環する順序通りのエントリの排出、および循環する順序通りのエントリの割り当て解除である。さらに、MTモードでは、T0、T2の動作がパイプLD0、ST0で開始しており、T1、T3の動作が、パイプLD1、ST1で開始している。STモードでは、LRQFがどのパイプ/スレッドも含まない。
1つまたは複数の例では、SMT4モードの場合、LRQF218(および本明細書に記載されたその他の構造)が、T0:LRQF0[0:19]循環キュー、T1:LRQF1[0:19]循環キュー、およびT2:LRQF0[20:39]循環キュー、T3:LRQF1[20:39]循環キューとして分割される。
1つまたは複数の例では、SMT2モードの場合、LRQF218(および本明細書に記載されたその他の構造)が、T:LRQF0[0:39]循環キューおよびT1:LRQF1[0:39]循環キューとして分割される。さらに、1つまたは複数の例では、STモードの場合、LRQF0[0:39]循環キューであり、LRQF1がLRQF0のコピーである。他のデータ構造の場合、STモードで類似するパーティション・パターンが使用され、第2のインスタンスが第1のインスタンスコピーである。
相互無効化フラッシュ(XIフラッシュ:cross invalidationflush)の場合、LRQFに関して、NTC+1が、別のスレッドからのXIまたは格納排出がヒットするスレッドをフラッシュし、XIフラッシュの場合に、同期時の明示的なL/Lの順序付けのフラッシュがLSU104によって実行されないようにする。
すべての格納が、SHL検出に関してLRQF218に対してチェックし、SHLの検出時に、LRQF218が、格納の後の読み込みまたはすべてのもの(命令/動作)のフラッシュを開始する。さらに、DCB命令が、SHLのケースに関してLRQF218に対してチェックし、SHLのケースの発生時に、LRQF218が、DCBの後の読み込みまたはすべてのもののフラッシュを引き起こす。さらに、すべての読み込みが、LHL検出に関してLRQF218に対してチェックし(逐次読み込みの一貫性)、LHLの検出時に、LRQF218が、より古い読み込みの後のより新しい読み込みまたはすべてのもののフラッシュを引き起こす。1つまたは複数の例では、LRQF218が、クワッドワードのアトミック性を提供し、LQがクワッドのアトミック性に関してLRQF218に対してチェックし、アトミックでない場合に、LQをフラッシュする。さらに、LARX命令の場合、LSU104がlarxヒットlarxのケースに関してLRQF218に対してチェックし、それに応じて、より古いlarx命令の後のより新しいLARXまたはすべてのものをフラッシュする。
このようにして、LRQF218は、発行から完了までのすべての読み込み動作の追跡を容易にする。LRQF218内のエントリは、キュー構造内の物理的位置であるReal_Ltag(rltag)でインデックス付けされる。LRQF218内の読み込み動作/エントリの古さが、順序通りであるVirtual_Ltag(vltag)を使用して決定される。LRQFは、GMASKを使用して読み込みをフラッシュし、一部のグループは、GTAGおよびIMASKを使用してフラッシュする。LRQF論理は、現在のiタグまたはiタグ+1あるいは正確な読み込みのiタグからフラッシュできる。
さらに、LRQFは、通常使用されるRA(8:51)フィールドを含まず、代わりにEAに基づき、ERT ID(0:6)およびEA(40:51)を含む(24ビットの節約)。SHL、LHLでのLRQFのページの一致は、ERT IDの一致に基づく。さらに、各LRQエントリは、「ページ一致強制(Force Page Match)」ビットを含んでいる。LRQエントリのERT IDに一致するERT IDが無効化された場合、ページ一致強制ビットが設定される。LRQがLHL、SHLを検出し、格納の順序付けが、ページ一致強制=1であるエントリを含めてフラッシュする。
このようにして、LRQF218は、分割された読み込み要求キューを維持することによって、チップ面積を占有し、アドレス変換に電力を消費する複数のCAMポートの技術的課題に対処し、読み込み要求キューは、OoOプロセッサが同時に実行できる所定の数の命令および所定の数のスレッドのために分割される。
LSU104のSRQ220は、40個のエントリ(インスタンスごと)の2つのインスタンスSRQR0およびSRQR1を含む、LRQF218に類似する構造を有し、SRQR0およびSRQR1は、循環する順序通りのエントリの割り当て、循環する順序通りのエントリの排出、および循環する順序通りのエントリの割り当て解除である。さらに、SRQ220は、LRQF218と同様に分割される(例えば、パイプLD0、ST0上で開始されるT0、T2の動作、パイプLD1、ST1上で開始されるT1、T3の動作、STモードではパイプ/スレッドのパーティションがない)。STモードでは、両方のコピーが同一の値を含み、MTモードでは、各コピーが異なっている。SMT4モードでは、両方のインスタンスがさらに分割され、各スレッドに、SRQ220から20個のエントリが割り当てられる(本明細書に記載されたLRQFの例示的なパーティションを参照)。1つまたは複数の例では、格納排出調停(store drain arbitration)の場合、SMT4モードで、SRQ内の読み取りポインタの多重化が実行される。代替または追加として、SMT2モードおよびSMT4モードで、SRQ0/1間の多重化が実行される。STモードでは、SRQ0に対してのみ、排出が実行される。
ここで、Txはスレッドxであり、例えば、T0はスレッド0、T1はスレッド1、T2はスレッド2、T3はスレッド3である。本明細書では、各例がMTモードで4つのスレッドを使用しているが、他の例では、MTモードが異なる数(8、16、または任意のその他の数など)のスレッドの実行を同時に含んでよいということに、注意するべきである。1つまたは複数の例では、MTモードでのスレッドの数は構成可能である。さらに、本明細書における例では、LSU104が2つの格納パイプ(ST0およびST1)を使用しているが、他の例では、格納パイプの数が異なっていてよい(例えば、3、4、8など)。1つまたは複数の例では、SRQR220が、格納パイプの数と同じ数のパーティションに分割される。
SRQ220の各エントリは、格納のTID(0:1)、ERT ID(0:6)、EA(44:63)、およびRA(8:51)を含む。LHSを検出するために、LSUは{格納のTid, EA(44:63)}を使用し、このようにしてRA LHSの別名チェックを取り除く。ERT IDは、EA(44:63)の部分的一致の投機失敗を「捕らえる」ために使用される。SQRエントリはRA(8:51)を含み、RA(8:51)は格納時に再び変換され、格納要求をL2に送信する(格納命令が排出され、発行されない)ときにのみ使用される。各SRQエントリも、「ページ一致強制」ビットを含んでいる。ページ一致強制ビットは、SRQエントリのERT IDに一致するERT IDが無効化されたときに、設定される。SRQは、ページ一致強制=1であるエントリを伴うLHSを検出できる。例えば、ページ一致強制=1であるエントリに反するLHSは、読み込み命令の拒否を引き起こす。さらに、格納排出は、SQRエントリに関してページ一致強制=1の場合に、L1キャッシュにおける失敗を強制する。これは、「拡張ストア・ヒット・リロード(Extended store hit reload)」LMQ動作と並行して動作する。
例えば、LMQの場合、LMQアドレス一致={ERT ID, EAページ・オフセット(xx:51), EA(52:56)}が一致する。さらに、各LMQエントリの「ページ一致強制」ビットは、LMQエントリのERT IDに一致するERT IDが無効化されたときに、設定される(=1)。LMQは、有効なLMQエントリ[x]のページ一致強制=1および読み込み失敗のEA[52:56]=LMQエントリ[X]のEA(52:56)である場合に、読み込み失敗を拒否する。さらに、LMQは拡張ストア・ヒット・リロードを含む。例えば、LMQは、再読み込みのEA(52:56)=SRQエントリ[X]のEA(52:56)およびSRQエントリ[X]のページ一致強制=1である場合に、再読み込みの有効化を抑制する。代替または追加として、LMQは、LMQエントリ[X]のEA(52:56)=格納排出のEA(52:56)および格納排出のページ一致強制=1である場合に、再読み込みの有効化を抑制する。
示されたLSU104は、チップ面積をさらに節約するために、格納データ・キュー(SDQ:Store Data Queue)をSRQ220自体の一部として折りたたむ。オペランドのサイズがSRQエントリのサイズより小さい(例えば、8バイトである)場合、オペランドがSRQ自体のエントリに格納される。ベクトル・オペランドなどの、さらに広いオペランド(例えば、16バイト幅)の場合、MTモードでは、SRQ220内の2つの連続するエントリを使用して、SRQがそれらのオペランドを格納する。STモードでは、さらに広いオペランドがSRQ0およびSRQ1(例えば、それぞれ8バイト)に格納される。
SRQ220は、格納、バリア、DCB、ICBI、またはTLBのタイプの動作をキューに入れる。単一のsタグが、store_agenおよびstore_dataの両方に使用される。SRQ220は、ロード・ヒット・ストア(LHS)のケース(同じスレッドのみ)を処理する。例えば、データ競合を伴う古い格納が存在しないことを保証するために、発行されたすべての読み込みがSRQ220によってチェックされる。例えば、SRQ EAアレイ内の古い格納に対して読み込みのEAおよびデータ・バイト・フラグを比較することによって、データ競合が検出される。
ディスパッチでSRQエントリが割り当てられ、ディスパッチされた命令タグ(iタグ:instructiontags)が正しい行に入力される。さらに、格納排出の発生時に、SRQエントリが割り当て解除される。1つまたは複数の例では、iタグ・アレイが「オーバーフロー」のディスパッチを保持する。例えば、望ましいSRQ内の行(例えば、SRQエントリx)がまだ使用中である場合、ディスパッチで情報がiタグ・アレイに書き込まれる。SRQエントリxが割り当て解除されるときに、SRQのオーバーフローのiタグ構造内の対応する行が読み出され、メインSRQのiタグ・アレイ構造にコピーされる(オーバーフローのiタグ構造の読み取りは、特定のスレッド/領域に関して、オーバーフローのiタグ・アレイ内に有効なエントリが存在するかどうかによって制御される)。メインSRQ0/1のiタグ・アレイがCAMポートによって処理され(またはSMT4内で1/2検索され)、ISUがiタグに基づいて格納を発行するように、格納の発行時にどの物理的行に書き込むかを決定する。SRQ220は、格納排出および割り当て解除の発生時に、iタグをISUに送信する。
図4は、1つの実施形態例に従う実効アドレス・ディレクトリ構造(L1キャッシュ)290の例示的なブロックである。1つまたは複数の例では、EADがLSU104の一部である。図3に示されているように、EAD290は、1つまたは複数のエントリ(例えば、エントリ0〜N)から成り、各エントリが、1つまたは複数の命令のグループに関する情報の複数のフィールドを含んでいる。例えば、1つの実施形態例では、EAD290内の各エントリが1個〜32個の命令を表してよい。EAD290内のエントリは、プロセッサのキャッシュ(例えば、図2のL2キャッシュ260)の新しいキャッシュ・ライン内にある命令のフェッチに応答して作成される。EAD290内のエントリは、追加の命令がキャッシュ・ラインからフェッチされるときに、更新される。EAD290内の各エントリは、選択された分岐(すなわち、キャッシュからフェッチされた分岐命令が「選択された」として解決される)、キャッシュ・ラインの横断(すなわち、次にフェッチされた命令が、現在のキャッシュ・ラインと異なるキャッシュ・ラインである)、またはプロセッサのパイプラインのフラッシュ(分岐予測ミスが発生した場合など)で、終了する。
図3に示されているように、EAD290のエントリのフィールドは、ベース実効アドレス310、第1の命令識別子320、最後の命令識別子330、終了識別子340、グローバル履歴ベクトル・フィールド(global history vector field)350、リンク・スタック・ポインタ・フィールド360、分岐選択識別子370、および分岐情報フィールド380を含んでいる。EAD290は、L1データ・キャッシュと同様に構造化される。連想構造を設定する。例えば、1つまたは複数の例では、連想構造は、8ウェイでEA(52:56)によってアドレス指定され、EA(0:51)を使用して選択される、32個のインデックスである。
ベース実効アドレス310は、命令のグループの開始実効アドレス(EA)である。命令のグループ内の各命令は、同じベースEAおよびベースEAからのオフセットを有する。例えば、1つの実施形態例では、EAは、ビット0:63を含んでいる64ビットのアドレスである。1つの実施形態例では、ベースEAは、このEAのビット0:56を含んでよく、ビット57:61が、命令のグループ内の特定の命令に関する、ベースEAからのオフセットを表す。ビット62および63は、各命令の特定のバイトを指す。実施形態例では、各アドレスが32ビット長(すなわち、4バイト)の命令を参照し、メモリ内の各バイトがアドレス指定可能である。命令を、アドレス指定可能なサブコンポーネントにさらに分割することはできず、したがって、命令アドレスのビット62および63が常にゼロに設定される。したがって、ビット62および63は、格納する必要がなく、EADによって、ゼロであるということが常に仮定され得る。
第1の命令識別子フィールド320は、EAD290のエントリに対応する命令のグループ内の第1の命令に関して、実効アドレスのオフセット・ビット(例えば、EAのビット57:61)を格納する。フィールド310からのベースEAおよび第1の命令識別子フィールド320内の実効アドレスのオフセット・ビットの組み合わせは、EAD290のエントリによって表された命令のグループ内の第1の命令にEAを提供する。この第1のフィールド320は、後で説明されるように、例えばパイプラインがフラッシュされた場合に、再フェッチ・アドレスおよび分岐予測情報を回復するために使用されてよい。
最後の命令識別子フィールド330は、EAD290のエントリに対応する命令のグループ内の最後の命令に関して、実効アドレスのオフセット・ビット(例えば、EAのビット57:61)を格納する。EAD290のエントリによって表された命令のグループ内の追加の命令がフェッチされるときに、EADの論理がこのフィールドを更新する。EADの論理は、キャッシュ・ラインの横断または選択された分岐が検出されたときに、EAD290のエントリが終了することに応答して、特定のEAD290のエントリ内のこのフィールド330の更新を中断する。パイプラインのフラッシュが発生してEADのエントリの一部を消去しない限り、このフィールドは元の状態のままである。そのような場合、EADの論理が、フラッシュの結果としてエントリ内の新しい最後の命令に現在なっている命令の実効アドレスのオフセット・ビットを格納するように、このフィールドを更新する。このフィールドは、後で説明されるように、EAD290内のエントリの解放するために、最終的に完了に使用される。
終了識別子フィールド340は、EAD290のエントリが終了しており、EAD290のエントリに対応する命令グループの命令をフェッチするために、それ以上、命令フェッチが行われないということを示すために、使用される。EAD290のエントリは、キャッシュ・ラインの横断、分岐が選択されること、またはパイプラインのフラッシュを含む、さまざまな異なる理由のために終了してよい。これらの条件のいずれかが、EADのエントリが終了したことを示すように終了フィールド340内の値が設定される(例えば、「1」の値に設定される)ことを引き起こしてよい。このフィールド340は、後で詳細に説明されるように、EAD290内のエントリを解放するために、完了時に使用される。
グローバル履歴ベクトル・フィールド350は、EAD290内のエントリを作成した第1の命令フェッチ・グループのグローバル履歴ベクトルを識別する。グローバル履歴ベクトルは、後で詳細に説明されるように、分岐が選択されたかどうかの履歴を識別するために使用される。グローバル履歴ベクトルは、分岐予測の目的に使用され、分岐が選択されたかどうかの最近の履歴に基づいて、現在の分岐が選択される可能性が高いかどうかを判定するのに役立つ。
リンク・スタック・ポインタ・フィールド360は、EAD290内のエントリを作成した第1の命令フェッチ・グループのリンク・スタック・ポインタを識別する。リンク・スタック・ポインタは、後で詳細に説明される別の分岐予測メカニズムである。
分岐選択フィールド370は、EAD290のエントリに対応する命令のグループが、分岐が選択された分岐命令を含んでいたかどうかを示す。分岐選択フィールド370内の値は、EAD290のエントリによって表された命令グループの分岐命令が選択されると予測されることに応答して、更新される。加えて、EAD290のエントリの命令内の分岐が選択された後に、終了フィールド340に適切な値を書き込むことによって、EAD290のエントリも終了される。予測時に分岐選択フィールドが投機的に書き込まれるため、分岐が実際に実行されるときに、分岐選択フィールドの値を正しい値に置き換える必要があることがある。例えば、分岐が選択されないと予測されることがあり、その場合、「0」が分岐選択フィールドに書き込まれる。しかし、後の実行において、分岐が選択されたことが検出されることがあり、その場合、「1」の値を書き込むことによって、このフィールドが修正されなければならない。分岐が誤って予測された場合にのみ、第2の書き込みが発生する。
分岐情報フィールド380は、分岐が解決したときに分岐予測構造を更新するために使用される種々雑多な分岐情報、または分岐命令が完了したときの設計されたEAの状態を格納する。
ERT_IDフィールド385は、対応するERTエントリを識別する、ERTテーブル(さらに説明される)へのインデックスを格納する。ERTエントリが無効化された場合、関連付けられたERT_IDが無効化され、L1キャッシュおよびL1 Dキャッシュ内の関連付けられたすべてのエントリも無効化される。
ベースeatagおよびeatagオフセットという少なくとも2つの部分を含んでいる実効アドレス・タグ(eatag:effective address tag)を使用して、EAD290内のエントリがアクセスされる。1つの実施形態例では、このeatagは10ビットの値であり、64ビットの実効アドレスより相対的に非常に小さい。1つの実装例では、10ビットのeatagの値および14個のエントリというサイズを有するEAD290を使用する場合、eatagは、EAD290内のエントリを識別するための、ベースeatagと呼ばれる第1の5ビット、およびEAD290内のエントリによって表される命令のグループ内の特定の命令のオフセットを提供するための、eatagオフセットと呼ばれる第2の5ビットから成る。EAD290内のエントリを識別する5ビット内の第1のビットは、EAD290の最上位のエントリから最下位のエントリに移動するときに、循環が発生したかどうかを示すために、循環ビットとして使用されてよい。このビットは、古さの検出に使用されてよい。EAD290内のエントリを識別する5ビットのうちの第2〜第5のビットは、EADのインデックスを指して、命令のベースEA(すなわち、EA(0:56))を識別するために使用されてよい。5ビットのオフセット値は、例えば、特定の命令の実効アドレスのビット57:61を提供するために使用されてよい。この例示的なeatagが、以下に示される。
eatag(0:9)=row(0:4)||offset(0:4)
row(0):EADの最上位のエントリから最下位のエントリへの移動時に循環が発生したかどうかを示すEADの循環ビット。
row(1:4):命令のEA(0:56)を決定するために使用される14エントリのEADへのインデックス。
offset(0:4):命令のEAのビット57:61。
図5は、本発明の1つまたは複数の実施形態に従う例示的な実効実テーブル(ERT)構造を示している。1つまたは複数の例では、ERT255が合計で128個のエントリを含んでいるが、他の例では、エントリの総数が異なることができるということ、およびさらに、エントリの数が選択可能またはプログラム可能であってよいということに注意するべきである。さらに、LSU104が複数のパイプを使用する場合、各パイプが、個別のパーティションをERT255内で有する。1つまたは複数の例では、ERT255内のエントリの所定の最大数が、パイプ間で均等に分割される。例えば、2つのパイプ(すなわち、別々に並列な2つの命令)の場合、LSUは、それぞれ64個(半分)のエントリを含む、ERT255の2つのパーティション(例えば、ERT0およびERT1)を維持する。例えば、LD0およびST0はERT0を使用し、LD1およびST1はERT1を使用する。STモードでは、ERT255の第1のパーティションが、第1のパーティションのコピーである他のパーティションと共に使用され、例えば、ERT0が、ERT0のコピーであるERT1と共に使用される。代替として、1つまたは複数の例では、LSUが単一の読み込みパイプおよび単一の格納パイプを使用する場合、ERT255全体が単一のパーティションとして使用される。以下では、特に指定されない限り、ERT255のいずれか1つのパーティションについて説明する。
ERT255は、有効なERTエントリを含み、一般に、L1 I−キャッシュもしくはD−キャッシュ・ディレクトリ(EAD290)、あるいはSRQエントリまたはLRQFエントリまたはLMQエントリ内のアクティブなページに対して存在する。言い換えると、ERT255は、LSUおよびIFU(L1 DC、SRQ、LRQE、LRQF、LMQ、IC)内のアクティブなすべてのRPNのテーブルである。1つまたは複数の例では、プロセッサ106がSTモードで動作している場合、ERT255内のすべてのエントリが、実行されている単一のスレッドに使用される。代替として1つまたは複数の例では、ERT255内のエントリが複数のセットに分割され、STモードでは、各セットが同じ内容を含む。例えば、ERT255が合計で128個のエントリを含んでおり、最大2つのスレッドをサポートする場合、プロセッサがSTモードで動作しているときに、ERT255は、それぞれ64個のエントリの2つのセットを含み、それら2つのセットは同じ内容を含む。
代替として、プロセッサ106がMTモードで動作している場合、ERTエントリが、実行されているスレッド間で分割される。例えば、2つのスレッドの場合、ERTエントリが2つの等しいセットに分割され、エントリの第1のセットが第1のスレッドに関連付けられ、エントリの第2のセットが第2のスレッドに関連付けられる。例えば、LD0パイプのL1の1つのコピーが失敗し、ST0パイプが、T0/T2 I−フェッチ:ERT0を開始して、SMT2モードでT0を処理し、SMT4モードでT0/T2を処理し、LD1パイプのL1の1つのコピーが失敗し、ST1パイプが、T1/T3 I−フェッチ:ERT1を開始して、SMT2モードでT1を処理し、SMT4モードでT1/T3を処理する。
1つまたは複数の例では、各ERTエントリが、少なくとも、ERT_ID(0:6)、Tid_en(0:1)、ページ・サイズ(0:1)、EA(0:51)、およびRA(8:51)というERTフィールドを含む。ERT_IDフィールドは、ERTエントリごとの一意のインデックスである。例えば、ERT_IDは、ERTエントリを識別する連続的番号を含んでよい。ERT_IDは、EAD290のERT_IDフィールド285、およびLSUによって使用される他のデータ構造に格納される。TID_enフィールドは、エントリが、MTモードで使用されることに対して有効化されているかどうかを示し、1つまたは複数の例では、ERTエントリを使用している命令のスレッド識別子を示す。さらに、ページ・サイズは、ERTエントリが参照するメモリのページ・サイズを示す。RAは、ERTエントリに関連付けられた実アドレスを含む。
RAが命令の実行を完了するために使用される場合、LSUはERT255のみを参照する。本明細書において説明されているように、ERT255は、1.Iフェッチ、読み込み、または格納がL1キャッシュに失敗する、2.コア内の別のスレッドからの格納、3.別のコアからのスヌープ(XI)、ならびに4.TLBおよびSLBの無効化という4つの機能に関して、LSUによって参照される。
Iフェッチ、読み込み、または格納がL1キャッシュに失敗する第1のケースでは、EAおよびthread_idが、ERT255のインデックスを指すために使用され、有効なERTエントリが存在する場合、対応するERTエントリからのRAがL2キャッシュに送信される。ERTの失敗、すなわち、EAおよびthread_idの有効なERTエントリが存在しない場合、SLB/TLBが使用される。
コア内の別のスレッドからの格納の第2のケースでは、SRQから排出された格納が、別のスレッドからのヒットに関して、ERT255およびERTEテーブル(さらに説明される)をチェックする。異なるスレッドからのヒットが存在しない場合、同じRAを使用している別のスレッドからの読み込みが存在しない。同じRAを使用している異なるスレッドからのヒットが存在する場合、LSUがLRQをチェックする。まれではあるが、別のスレッドによってRAが使用される場合、別のスレッドからのヒットが存在する。それに応じて、LSUが、共通のRAに関連するEAを検出するために、ERTテーブル400を検索する。次にEAが、一致に関してLRQを調べるために使用される(そのサイクル内の格納の発行を拒否する)。LRQがスレッドごとに分割されるため、LSUは関連するスレッドのLRQのみを調べる。一致する読み込みがLRQ内に存在する場合、LSUが、一致する読み込みのうちの最も古い読み込みをフラッシュする。
プロセッサの別のコアからのスヌープの第3のケースでは、LSUが第2のケースと同様に動作し、実行されている他のスレッドのいずれかからのヒットに関してチェックする。TLB/SLBが無効化されるケースでは、ERT255も無効化される。
図6は、本発明の1つまたは複数の実施形態に従う、LSUによって命令を実行するためにメモリにアクセスするための例示的な方法のフローチャートを示している。この命令は、OoOプロセッサ106の読み込み、格納、または命令フェッチであってよい。505および510に示されているように、命令の受信時に、LSUが、命令のパラメータを使用して、EAD290がその命令に対応するエントリを含んでいるかどうかをチェックする。1つまたは複数の例では、チェックに使用されるパラメータは、特に、スレッド識別子、ページ・サイズ、EAを含む。
LSUで、EAD290内のEADヒットが発生した(すなわち、命令のEAがEADテーブル300内のエントリに一致する)場合、520に示されているように、LSUが、一致するEADエントリの内容を読み取り、対応するERTエントリを決定する。各EADエントリは、ERT_ID(0:6)フィールド285を含んでいる。前述したように、ERTエントリが無効化された場合、関連付けられたERT_IDが無効化され、EADテーブル300内の関連付けられたすべてのエントリも無効化される。したがって、ERT_IDフィールド285を使用して、読み込み/格納命令のERTエントリを検出できるため、EADヒットはERTヒットを意味する。したがって、EADヒットの場合、対応するEADエントリの識別後に、LSUがEADエントリからERT_IDを読み出し、530に示されているように、SRQ、LMQ、またはLRQF、あるいはその組み合わせに送信する。SRQ、LMQ、またはLRQF、あるいはその組み合わせは、識別されたEADエントリからのEAを使用する。RAを使用する格納命令の場合、540および545に示されているように、ERTエントリからのRAが、L2にアクセスするために読み出される。したがって、格納命令以外のどの場所でもRAが使用されないため、本明細書における技術的解決策を実装するコアは、EA専用コアと呼ばれる。
ここで、命令がEAD290において失敗するケース、すなわち、命令のEAに一致するエントリがEADテーブル300内に存在しないケースについて検討する。550に示されているように、thread_idおよびEAが、ERT255からの各エントリに対して比較される。555および530に示されているように、ERTヒットが発生した場合、すなわち、ERTエントリがパラメータに一致する場合、LSUがRA(8:51)をERTエントリから読み出す。読み込み要求の場合、LSUが、アクセスするためにRAをL2キャッシュに送信する(530)。540〜545に示されているように、格納命令の場合、LSUがRAをSRQに格納し、その後、格納がL2キャッシュに排出されるときに、RAをL2キャッシュに送信する。
555および560に示されているように、ERTの失敗が発生した場合、LSUがERT255の再読み込みを開始する。さらに、ERTエントリの置き換えが開始される。ERTエントリの置き換えはLRUに基づき、LSUは、このプロセスの間に、アウトオブオーダー・ウィンドウ内のシノニムを確実に追跡する。
このようにして、読み込みに関して上記の方法を実装することによって、EAに基づくL1ディレクトリ内にEAヒットが存在する場合、アドレス変換が実行されない。これによって、L1ディレクトリがRAに基づく通常のプロセッサを改良し、L1ディレクトリでの読み込みの失敗の場合に、L2ディレクトリおよびその先に送信されるRAを取得する変換のために、EAをEARTテーブルに送信することを引き起こす。
さらに、格納の場合、本明細書に記載された方法では、LSUが、ERTテーブルを調べてRAを決定する必要があり、その後、このRAは、格納がSRQから排出されるときにキャッシュ(L1、L2、メモリ)まで排出するために、SRQRに格納される。SRQRは、すべてのRAを格納のために保持する。RAは、ネスト(すなわち、L2、メモリ、およびメモリ・サブシステムのその他のユニット)に排出するためにのみ格納される。RAは、通常の解決策で使用されているように、ロード・ヒット・ストア、ストア・ヒット・ロード、ロード・ヒット・ロードのいずれのタイプのアウトオブオーダー実行のハザード検出にも、使用されることがない。格納のためのRA計算は、格納の完了後にLSUが格納に関する割り込みを処理できないため、格納が完了する前に発生する(格納は、アドレス変換に関連する割り込みを生成することがあり、この割り込みは、格納が完了する前に処理される)。ここで、格納が(SRQRから)発行されるときにRA計算が実行され、このようにして、LSUがアドレス変換を実行する必要がないようにする。このようにして、格納が発行され、順序に従わずに実行されてから、順序通りに完了し、その後、格納がSRQから順序通りに排出される。格納が排出されるまで、他のスレッドまたはコアは、その格納について知らない(現在のスレッドのみが知っている)。格納がSRQから排出された後に、その格納がL1(ラインがL1内にすでに存在する場合)およびL2キャッシュ(キャッシングが有効化されている場合)に書き込まれ、その時点で格納が、システム100内の他のすべてのスレッドおよびコアに知られる。
EAに基づくL1 I−キャッシュに失敗した命令フェッチの場合、ERT255を使用してEAがRAに変換され、I−キャッシュ・ラインをフェッチするためにRAがネストに送信される。ここで、LHS(ロード・ヒット・ストア)、SHL(ストア・ヒット・ロード)、およびLHL(ロード・ヒット・ロード)が、EAに基づくL1キャッシュ(EAD290)内のディレクトリ・エントリに格納されたEAおよびERTインデックスに基づいて、すべて決定される。EADテーブル300内のすべてのエントリは、ERTテーブル400において有効な変換を有しており、LHS、SHL、およびLHLが決定された後に、その変換が使用され得る。ERTエントリが無効化された場合、対応するL1キャッシュ・エントリが無効化される。
読み込み順序変更キューであるLRQFは、ディスパッチから完了までのすべての読み込み動作が追跡されることを保証する。読み込みが(キャッシュ・ミスまたは変換失敗のため、あるいは読み込みが依存する前の命令が拒否されたために)拒否された場合、発行キューから読み込みが取り出され、LRQEに配置され、このLRQEから読み込みが再発行される。
図7は、本発明の1つまたは複数の実施形態に従う、ERTを再度読み込むための方法のフローチャートを示している。ERTの再読み込みは、ERTの失敗に応答して、ERTの失敗に基づいてERT内のエントリの作成または更新を引き起こす。ERTは、ERT255に追加されるRAを受信し、605に示されているように、そのRAをERT0およびERT1内の各エントリと比較する。610および615に示されているように、そのRAがERT255内に存在せず、新しいエントリを作成できる場合、そのRAを格納するために、ERT255が新しいERT_IDを含む新しいエントリを作成する。新しいエントリは、実行中のスレッドが第1のスレッドまたは第2のスレッドであることに基づいて、それぞれERT0またはERT1のいずれかに作成される。プロセッサがSTモードで動作している場合、ERT0が更新される。ERT255が新しいエントリのための空いているスロットを含んでいない場合、615に示されているように、最長時間未使用またはその他の手法に基づいて、既存のエントリが置き換えられる。
受信されたRA(再読み込み中のRA)と同じRAを含むERT255内の既存のエントリが検出された場合、620に示されているように、ERT255が、既存のエントリのページ・サイズ(0:1)を受信されたRAのページ・サイズと比較する。既存のエントリのページ・サイズが再読み込み中のRAのページ・サイズより小さい場合、625に示されているように、そのRAの既存のエントリがERT255から除去され、より大きいページ・サイズを有するRAのために、新しいERT_IDを含む新しいエントリが追加される。既存のエントリが同じページ・サイズまたはより大きいページ・サイズを有しており、実装がSDTを使用している場合、627に示されているように、再読み込み中のRAのためのエントリがSDT内に作成される。LSUがERTEを使用している場合、この動作が実行されなくてよいということに注意するべきである。
既存のエントリのページ・サイズが再読み込み中のRAと同じサイズである場合、630に示されているように、ERT255は、既存のエントリが実行中のスレッドのローカルERT上にあるかどうかをチェックする。この場合、ローカルERTとは、実行されているスレッドに関連付けられているERT(例えば、第1のスレッドの場合はERT0、第2のスレッドの場合はERT1)のことを指す。632に示されているように、RAのヒットが他のERT(すなわち、ローカルERTでないERT)内に存在する場合、ERT255が、非ローカルERT内のERT_IDに一致するERT_IDを含む新しいエントリをローカルERT内に作成する。例えば、RAのヒットが、スレッド0によって実行されている命令のERT1内に存在する場合、ERT1内のエントリに一致するERT_IDを含むエントリがERT0内に作成される。
RAのヒットがローカルERTインスタンス上に存在し、EAも一致する場合、EAとRAの両方が既存のエントリと一致したが、このスレッドに関してERTの再読み込みを引き起こすERTの失敗が存在したため、ERTは、そのことが、2つのスレッドが同じEA−RA間のマッピング(同じページ・サイズを有する)を共有しているということを示していると見なす。したがって、634に示されているように、再読み込みスレッドに対応するビットに関する既存の一致するエントリ内のtid_en(0)ビットまたはtid_en(1)ビットがオンになって、このケースを示す。
636に示されているように、RAのヒットがローカルERTインスタンス上に存在し、EAが既存のエントリに一致せず、既存のエントリが、再読み込み中のRAと同じスレッド用である場合、ERTは、2つの異なるEAが同じスレッドからの同じRAにマッピングされる、別名化のケースを識別する。プロセッサがSDTに基づく実装を使用している場合、既存の一致するエントリのERT_ID、EAオフセット(40:51)にマッピングされるシノニムのエントリが、SDTに導入される。プロセッサがERTEに基づく実装を使用する場合、LSUは、命令が非投機的になるまで、その命令を拒否し、そのとき、ERTからエントリを削除し、エントリをERTEに追加する。
638に示されているように、RAのヒットがローカルERTインスタンス上に存在し、EAが既存のエントリに一致せず、既存のエントリが、異なるスレッド用である場合、ERTは、2つのEAが異なるスレッドからの同じRAにマッピングされる、別名化のケースを識別する。プロセッサがSDTに基づく実装を使用している場合、既存の一致するエントリのERT_ID、EAオフセット(40:51)にマッピングされるシノニムのエントリが、SDTに導入される。プロセッサがERTEに基づく実装を使用している場合、新しいERT_IDを使用して、ERTの失敗が発生したスレッドのみに有効なtid_enを含む新しいローカルERTエントリが追加される。
上記の方法は、ERTEに基づく実装において、同じRAを有しているが異なるEAを有している2つのスレッドが、2つの異なるERTエントリを使用し、SDTに基づく実装において、2つのスレッドが同じRAを有しているが異なるEAを有している場合に、変換のうちの1つがERTエントリを使用し、他の変換がSDTエントリを使用するということを、容易にする。したがって、ERTエントリは、tid_enフィールドをERTエントリ内に含むことによって、同じEAおよび同じRAが異なるスレッドにわたって使用されるというケースを容易にする。例えば、ERT0インスタンスではTid_en(0:1) = {tid 0 en, tid 1 en}、ERT1インスタンスではTid_en(0:1) = {tid 1 en, tid 1 en}というようになる。さらに、ERTエントリは、複数のエントリを各スレッド識別子と共にERT0およびERT1内に含むことによって、同じEAが異なるスレッドにわたって異なるRAに対応するというケースを容易にする。ERTエントリは、同じRAに対応する異なるEAを伴うケース(同じスレッドまたは異なるスレッドのケース)もサポートする。ここで、実装がERTEまたはSDTのいずれを使用するかに基づいて、2つのケースがさらに説明される。
LSUが、SDT(シノニム検出テーブル)を使用する実装を使用している場合、ERTの再読み込み時に、同じRAに対応する異なるEAを含む新しい命令が検出されたときに、LSUは、ERT255の代わりにSDTにエントリを導入する。元の(前の)ERTエントリのEAを使用してSDTのヒットが再開する。新しいシノニムのページ・サイズが、一致するRAを含む既存のERTエントリ内のページ・サイズより大きい場合、シノニムをSDTに導入する代わりに、既存のERTエントリが(より大きいページ・サイズを有する)新しいシノニムに置き換えられる。古いERTエントリは、最終的にシノニムとしてSDTに再導入される。
代替として、LSUが、ERTEを使用する実装を使用しており、同じRAに対応する異なるEAを含む命令が、異なるスレッドである場合、LSUは、適切なTid_enが有効化された新しいエントリをERTテーブルに導入する。命令が同じスレッドである場合、LSUは、読み込み/格納が非投機的になるまで、読み込み/格納を拒否する。その後、LSUは、既存のERTエントリを削除し、スレッドからのインフライトの最も新しい命令のIタグでタグ付けされたERTエントリをERTEテーブル内に配置する。LSUは、新しいEA−RA対をERTテーブル400にさらに導入する。これによって、2つの異なるEAが同じスレッドからの同じRAにマッピングされる状況が発生しないことを保証する。
さらに、ERTのケースを再び参照し、LSUがプロセッサ106の別のコアからスヌープを受信する場合について考える。スヌープは、システム内の異なるコアから来る可能性がある(スヌープは、別のコアまたはスレッドを示し、同じ実アドレスでデータを変更している)。LSUは、コア内の他のスレッドへの可能性のあるスヌープとして、コア内のスレッドからのからの格納もチェックする。すべての(他のコアからの)スヌープまたは(コア内の他のスレッドからのからの)格納は、RAを伴う。そのような場合、LSUは、RAを逆変換し、ERT255に基づいて、対応するEA、ERT_ID、およびページ・サイズを決定する。LSUは、この情報を、次の構造の各々に格納されたERT_ID、PS、EA(40:56)と比較して、スヌープのヒットを検出し、適切な動作を実行する。例えば、LRQFエントリにおいてスヌープのヒットが検出された場合、LSUは、可能性のあるロード・ヒット・ロードのアウトオブオーダーのハザードを示す。EAD290においてスヌープのヒットが検出され、スヌープが異なるコアからである場合、LSUがL1の無効化を開始する。格納が共有ラインに対する別のスレッドからである場合、ラインが新しい格納を自動的に取得し、更新される。
したがって、本明細書に記載された技術的解決策は、1つのアドレス(EA)のみを追跡することによって、LSUのチップ面積の削減を促進する。さらに、これらの技術的解決策は、プロセッサ・コアが分割された読み込み/格納キューを使用して2読み込み/2格納モードで実行できるようにし、変換用のCAMポートをさらに削減し、変換の電力消費も削減する。さらに、これらの技術的解決策は、EAのみを使用することによって、EADの失敗が発生しない限り、RAへの変換が読み込み/格納経路において実行されないようにするという利点を有する。さらに、LHL、SHL、LHSなどのハザードを検出すること、および時間においてDVALを抑制することは、タイミング問題を引き起こさない。LSUがEAのみを使用するため、2つの異なるEAが同じRAにマッピングされた場合、LHS、SHL、LHLの検出が失敗する可能性がある。本明細書に記載された技術的解決策は、EADからのEAおよびERTのインデックスを使用することによって、そのような技術的課題に対処する。さらに、EAのシノニムの検出時に、LSUが、SDTまたはERTEテーブルをOoOウィンドウ内の命令に使用することによって、命令を処理する。
(ERTEとは対照的に)LSUがSDTを使用し、スヌープのヒットがLMQに存在する場合、LSUは、L1 Dキャッシュに格納しないようにLMQエントリも更新し、SRQエントリがSRQ内のスヌープに使用されず、LHSのEAがRAのヒットに失敗する形式のチェックのみに使用され、新しいSDTエントリがスヌープのヒットに対して作成される。
図8は、本発明の1つまたは複数の実施形態に従うシノニム検出テーブル(SDT)700の例示的な構造を示している。描かれた例は、16個のエントリを含む場合を示しているが、他の例では、SDT700がこの例とは異なる数のエントリを含んでよいということに、注意するべきである。SDT700は、LSU104の複数のスレッドおよびパイプにわたって共通である。例えば、LD0、LD1、ST0、およびST1は、すべてSDT700内のエントリにアクセスし、SDT700は、各々に対して別々のパーティションを含まない。
SDT700内のエントリは、少なくとも、発行アドレス{発行Tid(0:1), 発行EA(0:51)}、ページ・サイズ(0:1)(例えば、4k、64k、2MB、16MB)、および再開アドレス{EA(40:51), ERT ID(0:6)}のフィールドを含む。Tid(thread-identifier:スレッド識別子)フィールドは、OoOプロセッサからのどのスレッドが、SDT700内のエントリに関連付けられた命令を実行しているかを示す。開始がL1に失敗する命令の場合、LSUは、命令をSDT700に対して比較する。開始された命令が、元のアドレスの比較でSDTにヒットした場合、LSUが命令を拒否し、SDTエントリからの対応する置換アドレスを使用して命令を再開する。例えば、LSUは、置換アドレス(40:51)をSRQ LHSに使用し、実行パイプライン内のERT IDを「強制的に一致させる」。
本明細書において説明されているように、ERTの再読み込み中に、エントリがSDT700に追加される。例えば、ERTの再読み込み中に、再読み込みRAが、有効なERTエントリに対して比較される。一致するRAを含むERTエントリがすでに存在し、追加のtid_enビットのみが元のERTエントリに設定されているEAのヒットのケースでない場合、既存のERTエントリからEA(32:51)が読み取られ、エントリをERT255に追加する代わりに、エントリがSDT700に導入される。
SDT700はエントリ数が制限されているため、エントリが置き換えられる。1つまたは複数の例では、最長時間未使用(LRU:least recently used)手法または任意のその他の手法に基づいて、エントリが置き換えられる。1つまたは複数の例では、SDTエントリが置き換えられる場合、二次アドレスを使用するその後の開始が、SDTエントリの導入シーケンスを再トリガーする。さらに、CAMは、無効化されたERTエントリに一致するERT IDを含むSDTエントリを消去する。
図9は、本発明の1つまたは複数の実施形態に従う、ERTおよびSDT EAの交換を実行するための方法のフローチャートを示している。1つまたは複数の例では、ERTエントリおよびSDTエントリが同じページ・サイズを有している場合に、LSUが交換を実行する。この交換によって、同じスレッドまたは異なるスレッドの異なる命令で、異なるEAが同じRAに対応する場合に、プロセッサ106の効率を改善する。例えば、EAx=>RAz、およびEAy=>RAzとなるような2つの命令xおよびyについて考える。最初に、EAxがERTに失敗した場合、すなわち、EAyの前に、本明細書において説明されているように、LSUが、RAzへのEAxのマッピングを含むERTエントリを導入する。その後、EAyがERTに失敗した場合、LSUが、RAzを使用してERTを検索し、RAにヒットし、元のアドレス=EAy、置換アドレス=EAxを含むエントリをSDT700に導入する。
ここで、その後のほとんどのRAzへのアクセスがEAyを伴う場合、LSUは、EAD自体を使用するよりも頻繁にSDTを使用する必要がある。1つまたは複数の例では、そのような頻繁なSDTへの参照を減らすことによってLSUの効率を改善するための技術的解決策は、各SDTエントリ内のカウンタをインクリメントすることを含む。図8の810に示されているように、LSUは、SDTエントリからのERT IDに一致するERT IDを含む命令を開始する。SDTエントリのERT IDが一致する場合、820に示されているように、LSUは、開始された命令のEAをSDTエントリ内の元のEAとさらに比較する。830および835に示されているように、SDTエントリが、命令からのEAに一致する元のアドレス値を含んでいる場合、SDTエントリのカウンタがインクリメントされる。840に示されているように、開始された命令が、SDTエントリの元のアドレスと異なるEAを含んでいる場合、SDTエントリのカウンタがリセットされる。
1つまたは複数の例では、カウンタが4ビットのフィールドであり、15の最大値を意味する。他の例では、しきい値として使用されるフィールドが異なる長さであるか、または異なる最大値を有するか、あるいはその両方であるということが、理解されるべきである。例えば、845および850に示されているように、命令が開始された後に、カウンタ値がしきい値と比較される。カウンタがしきい値未満である場合、説明されたように、LSUが動作を続行する。カウンタがしきい値を超えたか、または場合によっては、しきい値に等しい場合、860に示されているように、LSUがSDTエントリに対応するERTエントリを無効化する。例えば、SDTエントリからのERT IDを含むERTエントリが無効化される。ERTエントリの無効化は、EAディレクトリ、LRQF、LMQ、およびSRQからの対応するエントリの無効化を引き起こす。
さらに、LSUは、以下の方法で、終了するために元のEAを必要とする開始された命令における例外の技術的課題に対処する。例えば、開始された命令がSDTにヒットし、元の開始アドレスの代わりにSDTエントリからの置換アドレスを使用して再開したいが、終了するために元のEAを必要とする例外が選択された場合について考える。そのような条件は、DAWR/SDARなどの場合に発生することがある。
本明細書に記載された技術的解決策を実装するLSUは、元のアドレスをLRQE内のキューに維持することによって、そのような技術的課題に対処する。LRQEは、LRQEエントリごとに、SDTヒット・フラグ(ビット)、SDTインデックス(0:3)も維持する。再開時に、置換アドレスを取得するために、1サイクル早くSDTインデックスが読み取られる。LRQEは、再開の前に、LRQEエントリのアドレス(元のアドレス)とSDTの(SDTから読み取られた)置換アドレスとの間で、さらに多重化する。終了するために元のアドレスが必要になる、上記のような例外ケースの場合、LRQEは、DAWRの部分一致などで設定されたエントリごとに、追加のSDTヒット・オーバーライド・フラグ(ビット)を含む。LRQEは、例外と共に終了するSDTのヒットが存在したケースを再開し、元のアドレスを強制的に開始する。SRQの再開は、本明細書において説明されているLRQEの再開と同様であり、再開の前に例外と共に終了することが決定された場合、SDTヒット・オーバーライド・フラグが使用される。
図10は、本発明の1つまたは複数の実施形態に従うERT削除(ERTE)テーブル900を示している。ERTEテーブル900は、LSUがERT255から削除された(または無効化された)行を追跡するのを容易にする。ERTEテーブル900は、ERT255にエントリが作成されているときに、同じスレッドに、同じRAに対する異なるEAが存在するかどうかをチェックするのをさらに容易にする。ERTEテーブル900は、すべての同時スレッドによって共有される。1つまたは複数の例では、ERTEテーブル900の一部が、NTCエントリのために予約される。ERTEテーブル900内のエントリは、スレッドID、Iタグ、EA、およびRAのフィールドを含む。1つまたは複数の例では、ERTEテーブル・エントリが追加のフィールドを含んでよい。1つまたは複数の例では、スレッドIDが4ビットのフィールドであってよい。
ERTEテーブル900は、1対1の対応関係のある2つのテーブル(ERT_EAおよびERT_RA)の組み合わせと見なされ得る。ERT_EAテーブルは、検索するためにEAを使用し、ERT_RAテーブルは、検索するためにRAを使用する。1つまたは複数の例では、各テーブルは64個のエントリを含むが、他の例では、エントリの数が可変/プログラム可能であってよい。EA−RA間の変換がERTEテーブル900から除去された場合、EADテーブル300からの関連するキャッシュ・ラインも無効化される。そのようにして、ERT255は、プロセッサ・コア内のすべての変換(TLB、SLBを除く)の上位セットになる。
ERTEテーブル900は、ERT255内にないがインフライトの命令によって使用されるすべての変換を追跡する。ERTEテーブル・エントリは、削除されたエントリを使用していた可能性のある最も新しい命令でタグ付けされる。読み込み/格納のOoO発行に起因して、OoOウィンドウ内のアクティブなすべての命令のうちの最も新しいIタグが、ERTEテーブル900に格納される。フラッシュ時に、残っている最後の命令のIタグが、有効なすべてのエントリに格納される。完了時に、同じIタグまたはより古いIタグを含むすべてのエントリが解放される。ERTEテーブル900は、満杯である場合、ディスパッチを阻止して、命令が完了するのを(またはフラッシュされるのを、あるいはその両方を)待ち、最終的にテーブルが完全に解放される。本明細書に記載された例は、開始された命令の古さを追跡するためにIタグを使用するが、他の例では、単調に増加して循環する別のタグ(EAタグ、LSタグなど)が代わりに使用されてよいということに注意するべきである。
ERT255またはEAD290内の変換が削除/無効化された場合、削除されたエントリからの最後の所定のビット数(例えば、最後の12ビット)を含まずに、削除されたエントリのEA−RAがERTEテーブル900に追加される。さらに、削除された変換が属する同じスレッドの最も新しい有効なIタグを含むERTEテーブル900内のエントリが、例えばフラグ(ビット)を使用して、マーク付けされる。
新しいアドレス変換(EAからRAへ)が実行されるときに、LSUが、RAをERT255に対して比較し、同じスレッドからのRAに対する異なるEAがすでにERT255に存在するかどうかをチェックする。存在する場合、LSUが、新しい変換をシノニムとしてERT255に導入する。このようにして、ERT255(ERTEを使用する場合)は、同じスレッドの同じRAを指す異なるEAを含む2つのエントリを含むことができる。インフライトの命令のシノニムが許可されないため、1つまたは複数の例では、LSUが、NTC+1のフラッシュをのみを開始して、前進を保証する。
バランス・フラッシュ(balance flush)は、停止したか、またはリソースを消費するか、あるいはその両方の対象のスレッドを、システムから全体的にフラッシュし、リソース使用の公平性またはバランスを回復する、スレッド制御メカニズムである。バランス・フラッシュは、選択されたスレッド上の、次に実行するべき命令グループに続くすべての命令グループをフラッシュする、次に実行するべき命令のフラッシュ(NTC+1)を含む。NTC+1バランス・フラッシュは、選択されたスレッドに関する実行ユニット、グローバル完了テーブル、およびEADをフラッシュする。スレッドがディスパッチで停止した場合にのみ、スレッドに対してバランス・フラッシュが実行される。スレッド切り替え制御レジスタ内の<bf:1>フィールドを使用して、バランス・フラッシュが有効化または無効化されてよい。
1つまたは複数の例では、OoOウィンドウの実行が完了した後に、ERTE内のエントリが無効としてマーク付けされる。ERTテーブル255から削除されている新しいEA−RA変換対を使用してERTEエントリが書き込まれているときに、ERTEエントリが有効としてマーク付けされるということに、注意するべきである。
図11は、本発明の1つまたは複数の実施形態に従う、エントリをERTEテーブル900に追加するための例示的な方法のフローチャートを示している。本明細書において説明されているように、新しいエントリがERT255に追加されるときに、LSUは、1010に示されているように、新しい変換のEAおよびRAの両方を、LRUによって管理されてよい特定の行に書き込む。1012に示されているように、ERTEテーブル900は、RAを使用して検索し、RAが、別のEAに対応するERTEテーブル900内のエントリにすでに存在するかどうかをチェックし、導入での同じスレッドで、複数のヒットの可能性のあるケースについてチェックする。RAがERTEテーブル900にすでに存在する場合、1015に示されているように、ERTテーブルは、NTCまでEA−RAのエントリの作成を拒否し、NTCが検出されたときに導入する。
1020に示されているように、LSUは、ERT255内のエントリを上書きする前に、新しいエントリによって上書きされるERT内の既存のエントリのEAおよびRAを読み取り、1030に示されているように、読み出されたエントリをERTEテーブル900にさらに格納する。さらに、1040および1050に示されているように、プロセッサの別のコアからのスヌープまたは格納排出が存在する場合、ERTEテーブル900がEAを検索して読み取る。
図12は、本発明の1つまたは複数の実施形態に従って開始される例示的な命令のセットの例示的なシーケンス図を示している。各命令は、左側にプログラム順序で示されており、OoOで開始され、命令のシーケンスとは異なる動作のシーケンスを引き起こす。例えば、以下のイベントが時系列で発生することを考える。1.命令Mが、OoOで発行され、変換「ea1、ra1」を使用した。2.命令Kが、OoOで発行され、ERTに失敗し、新しいエントリを導入し、「ra2 ea2」をERTから削除した。この時点で、使用中の最後のIタグ=N(同じスレッドから削除されたすべてのライン)、すなわち、Nまでの命令は、「ra2 ea2」を使用することができており、Nの後に、命令は「ra2 ea2」を使用できなくなる。3.命令Hが、OoOで発行され、ERTに失敗し、「ra1 ea1」をERTから削除した。この時点で、使用中の最後のIタグ=Qである。4.フラッシュされたパイプラインおよび残された最後の命令がIタグ=Eを有しており、さらに、フェッチされる次の命令が、R、Sである。5.命令E〜Rが所与の1サイクルで完了し、ERTE内のすべてのエントリを解放する。
本明細書に記載された技術的解決策は、このようにして、EAのみを使用することを容易にし、読み込み/格納経路においてEART(通常はプロセッサによって使用されていた)が参照されず、さらに、SHLの検出および時間におけるDVALの抑制がタイミング問題を引き起こさないように、技術的優位性を実現する。さらに、本明細書に記載された技術的解決策は、EAのみを使用することに伴う技術的問題、例えば、2つの異なるEAが同じRAにマッピングされた場合に、LHS、SHL、LHLの検出が失敗することがあるなどの問題に対処する。本明細書に記載された技術的解決策は、シノニム検出テーブル(SDT)またはERT削除テーブルのいずれかをOoOウィンドウ内の命令に使用することによって、そのような技術的問題に対処する。これらの技術的解決策は、特に、チップ面積の削減(RAを格納しないことによる)、電力消費の削減(EA−RAを変換しないことによる)、および待ち時間の改善を含む、さまざまな技術的優位性を実現する。
さらに、これらの技術的解決策は、すべての読み込みおよび格納のアドレス生成においてEAに対してRAを決定するための検索を取り除くことによって、電力消費の節減を促進する。代わりに、EADの失敗およびERTの失敗が発生するまで、EAが使用される。さらに、これらの技術的解決策は、単一のCAMポートのみが使用されるようになるため、ユニット全体でのRAバスの切り替えの除去を容易にする。
図13は、本発明の1つまたは複数の実施形態に従う、プロセッサがSTモードまたはMTモードのどちらで動作しているかに応じて、マルチパイプ・モードで、およびOoOの方法で、LSU104によって命令を発行するための例示的な方法のフローチャートを示している。例えば、LSUは、2読み込み/2格納モード(マルチパイプ・モード)で動作していてよい。ブロック1310に示されているように、LSU104が、発行される命令をOoOウィンドウから選択する。選択された命令は、読み込み命令、格納命令、またはLSU104が発行するそのような命令から派生した任意の命令(例えば、LARX命令)であってよい。
ブロック1320に示されているように、LSU104が、OoOプロセッサがSTモードまたはMTモードのいずれで動作しているかを判定する。STモードが使用されている場合、プロセッサが単一のスレッドを使用しており、ブロック1330に示されているように、LSU104が、命令に関連付けられたLSUパイプのみを決定する。例えば、命令が読み込み命令である場合、LSU104は、その読み込み命令を、LD0パイプ、LD1パイプ、または任意のその他の読み込みパイプのいずれかに関連付けてよい。代替として、命令が格納命令である場合、LSU104は、その格納命令を、ST0パイプ、ST1パイプ、または任意のその他の格納パイプのいずれかに関連付けてよい。
さらに、ブロック1340に示されているように、LSU104は、パイプに関連付けられたLRQF218、SRQR220、LRQE222、およびERT255内のパーティションを使用してエントリを作成/エントリにアクセスし、命令を発行する。例えば、命令が読み込み命令であり、関連付けられたパイプがLD0である場合、その命令は、パーティションLRQF0、LRQE0、およびERT0からのエントリを使用する。同様に、パイプST0での格納命令の場合、パーティションSRQR0およびERT0が使用される。LD1パイプまたはST1パイプの場合、LRQF1、LRQE1、ERT1、およびSRQR1パーティションが使用される。エントリは、先入れ先出しに基づいてパーティション内に作成される。
代替として、プロセッサがMTモードで動作している、すなわち、同時に複数のスレッドが実行されている場合、ブロック1350に示されているように、LSU104は、選択された命令に関連付けられたスレッドのスレッド識別子を決定する。ブロック1360に示されているように、LSU104は、命令に関連付けられたLSUパイプをさらに決定する。さらに、ブロック1370に示されているように、LSU104は、LRQF218、SRQR220、LRQE222、およびERT255のパーティションおよびパーティション内の位置を識別して、エントリを作成/エントリにアクセスし、{スレッドidおよびパイプ}の組み合わせに基づいて命令を発行する。例えば、LSUは、特定のスレッドを特定のパイプに制限し、例えば、偶数番号が付けられたスレッドをLD0およびST0に制限し、奇数番号が付けられたスレッドをLD1およびST1に制限する。スレッドおよびパイプの分類が他の例において異なってよいということに、注意するべきである。LD0パイプおよびST0パイプは、「0」の接尾辞が付けられたパーティションに関連付けられ、LD1パイプおよびST1パイプは、「1」の接尾辞が付けられたパーティションに関連付けられる(または、その逆に関連付けられる)。
本発明の1つまたは複数の実施形態例では、プロセッサがMTモードで実行しているスレッドの数に従って、各パーティションが部分にさらに分割される。例えば、プロセッサが4つのスレッドを実行している場合、LSU内の2つのパーティションが、それぞれ2つの部分(第1のスレッド用の第1のパーティションおよび第2のスレッド用の第2の部分)にさらに分割され、各パーティション分がスレッドの対に関連付けられる。MTモードでのスレッドの数が4つとは異なる1つまたは複数の他の実施形態例では、各パーティションに関連付けられたスレッドの数に基づいて、パーティションが異なる数の部分に分割される。スレッドの対が各パーティションに関連付けられており、各パーティションが等しい部分にさらに分割される上記の例では、対の第1のスレッドが第1の部分を使用し、第2のスレッドが第2の部分を使用する。したがって、LD0/ST0のT0で実行さている命令は、LRQF0、LRQE0、SRQR0、およびERT0のパーティションの第1の部分に関連付けられ、LD0/ST0のT2で実行されている命令は、LRQF0、LRQE0、SRQR0、およびERT0のパーティションの第2の部分に関連付けられる。さらに、LD1/ST1のT1で実行さている命令は、LRQF1、LRQE1、SRQR1、およびERT1のパーティションの第1の部分に関連付けられ、LD1/ST1のT3で実行されている命令は、LRQF1、LRQE1、SRQR1、およびERT1のパーティションの第2の部分に関連付けられる。
ここで、本発明の1つまたは複数の実施形態の一部または全部の態様を実装するためのコンピュータ・システム1400のブロック図である図14を参照する。本明細書に記載された処理は、ハードウェア、ソフトウェア(例えば、ファームウェア)、またはハードウェアとソフトウェアの組み合わせにおいて実装されてよい。実施形態例では、記載された方法は、少なくとも一部においてハードウェアに実装されてよく、モバイル・デバイス、パーソナル・コンピュータ、ワークステーション、マイクロコンピュータ、またはメインフレーム・コンピュータなどの、専用または汎用コンピュータ・システム1400のマイクロプロセッサの一部であってよい。
実施形態例では、図14に示されているように、コンピュータ・システム1400は、プロセッサ1405、メモリ・コントローラ1415に結合されたメモリ1412、および1つまたは複数の入力デバイス1445、またはローカルI/Oコントローラ1435を介して通信によって結合された周辺機器などの出力デバイス1447、あるいはその組み合わせを含む。これらのデバイス1447および1445は、例えば、プリンタ、スキャナ、マイクロホンなどを含んでよい。従来のキーボード1450およびマウス1455は、I/Oコントローラ1435に結合されてよい。I/Oコントローラ1435は、例えば、1つまたは複数のバスあるいは従来技術において知られたその他の有線接続または無線接続であってよい。I/Oコントローラ1435は、簡単にするために省略されている、通信を可能にするためのコントローラ、バッファ(キャッシュ)、ドライバ、リピータ、およびレシーバなどの追加の要素を含んでよい。
I/Oデバイス1447、1445は、例えばディスク・ストレージおよびテープ・ストレージ、ネットワーク・インターフェイス・カード(NIC:network interface card)または変調器/復調器(他のファイル、デバイス、システム、またはネットワークにアクセスするため)、無線周波(RF:radio frequency)またはその他のトランシーバ、電話インターフェイス、ブリッジ、ルータなどの、入力および出力の両方と通信するデバイスをさらに含んでよい。
プロセッサ1405は、ハードウェア命令またはソフトウェア、具体的には、メモリ1412に格納されたソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ1405は、カスタムメイドであるか、または市販されたプロセッサ、中央処理装置(CPU:central processing unit)、コンピュータ・システム1400に関連付けられた複数のプロセッサ間の補助プロセッサ、(マイクロチップまたはチップ・セットの形態での)半導体ベースのマイクロプロセッサ、マクロプロセッサ、または命令を実行するためのその他のデバイスであってよい。プロセッサ1405は、実行可能命令のフェッチを高速化するための命令キャッシュ、データのフェッチおよび格納を高速化するためのデータ・キャッシュ、および実行可能命令とデータの両方の仮想アドレスから物理アドレスへの変換を高速化するために使用されるトランスレーション・ルックアサイド・バッファ(TLB:translation look-aside buffer)などのキャッシュを含むことができるが、これらに限定されない。キャッシュは、さらに多くのキャッシュ・レベル(L1、L2など)の階層として構造化されてよい。
メモリ1412は、揮発性メモリ素子(例えば、DRAM、SRAM、SDRAMなどのランダム・アクセス・メモリ(RAM:random access memory))および不揮発性メモリ素子(例えば、ROM、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read only memory)、電子的消去可能プログラマブル読み取り専用メモリ(EEPROM:electronically erasable programmable read only memory)、プログラマブル読み取り専用メモリ(PROM:programmable read only memory)、テープ、コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read only memory)、ディスク、フロッピー(R)・ディスク、カートリッジ、カセットなど)のうちの1つまたは組み合わせを含んでよい。さらに、メモリ1412は電子、磁気、光、またはその他の種類のストレージ媒体を組み込んでよい。メモリ1412が、さまざまなコンポーネントが互いに遠く離れた位置にあるが、プロセッサ1405によってアクセスされてよい、分散アーキテクチャを含むことができるということに注意する。
メモリ1412内の命令は、1つまたは複数の別々のプログラムを含んでよく、それらのプログラムの各々は、論理的機能を実装するための実行可能命令の順序付けられたリストを含む。図14の例では、メモリ1412内の命令は、適切なオペレーティング・システム(OS:operating system)1411を含む。オペレーティング・システム1411は、基本的に他のコンピュータ・プログラムの実行を制御することができ、スケジューリング、入出力制御、ファイルおよびデータの管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
例えば、プロセッサ1405の命令またはその他の取り出し可能な情報を含む追加データが、ストレージ1427に格納されてよく、ストレージ1427はハード・ディスク・ドライブまたは半導体ドライブなどのストレージ・デバイスであってよい。メモリ1412またはストレージ1427に格納される命令は、プロセッサ1405が本開示のディスパッチ・システムおよび方法の1つまたは複数の態様を実行できるようにする命令を含んでよい。
コンピュータ・システム1400は、ディスプレイ1430に結合されたディスプレイ・コントローラ1425をさらに含んでよい。実施形態例では、コンピュータ・システム1400は、ネットワーク1465に結合するためのネットワーク・インターフェイス1460をさらに含んでよい。ネットワーク1465は、コンピュータ・システム1400と、外部サーバ、クライアントなどとの間での、ブロードバンド接続を介した通信用のIPベースのネットワークであってよい。ネットワーク1465は、コンピュータ・システム1400と外部システムの間で、データを送受信する。実施形態例では、ネットワーク1465は、サービス・プロバイダによって管理された管理IPネットワークであってよい。ネットワーク1465は、例えば、WiFi、WinMaxなどの無線プロトコルおよび無線技術を使用して、無線方式で実装されてよい。ネットワーク1465は、ローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット、またはその他の類似する種類のネットワーク環境などの、パケット交換ネットワークであってもよい。ネットワーク1465は、固定無線ネットワーク、無線ローカル・エリア・ネットワーク(LAN:local area network)、無線広域ネットワーク(WAN:wide areanetwork)、パーソナル・エリア・ネットワーク(PAN:personal area network)、仮想プライベート・ネットワーク(VPN:virtual private network)、インターネット、またはその他の適切なネットワーク・システムであってよく、信号を送受信するための機器を含むことができる。
分割された読み込み要求キューおよび格納要求キューを提供するためのシステムおよび方法が、コンピュータ・プログラム製品において、または図14に示されているようなコンピュータ・システム1400において、全体的または部分的に具現化され得る。
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲を逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係(例えば、上、下、隣接など)が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、各実体の結合は、直接的結合または間接的結合を指すことができ、各実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、または装置に固有の、その他の要素を含むことができる。
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも1つ」および「1つまたは複数」という用語は、1以上の任意の整数(すなわち、1、2、3、4など)を含んでいると理解されてよい。「複数」という用語は、2以上の任意の整数(すなわち、2、3、4、5など)を含んでいると理解されてよい。「接続」という用語は、間接的「接続」および直接的「接続」の両方を含んでよい。
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±8%または5%、あるいは2%の範囲を含むことができる。
簡潔さの目的で、本発明の態様の作成および使用に関連する従来手法は、本明細書に詳細に記載されることもあれば、記載されないこともある。具体的には、本明細書に記載されたさまざまな技術的特徴を実装するためのコンピューティング・システムおよび特定のコンピュータ・プログラムのさまざまな態様は、よく知られている。したがって、簡潔さのために、多くの従来の実装に関する詳細は、本明細書では、既知のシステムまたは工程あるいはその両方の詳細を提供することなく、簡潔にのみ述べられるか、または全体的に省略される。
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-onlymemory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasableprogrammable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されるとき、コンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、あるいは、Java(R)、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide areanetwork)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ実装プロセスを生成するべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行させるものであってもよい。
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に制限されない。記載された実施形態の範囲および思想を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。

Claims (20)

  1. 1つまたは複数の命令を実行するための処理ユニットであって、前記処理ユニットは、
    読み込み/格納ユニット(LSU)を備えており、前記LSUは、複数のLSUパイプを使用してアウトオブオーダー(OoO)ウィンドウ内の複数の命令を実行するように構成されており、前記命令は、
    前記OoOウィンドウから命令を選択することであって、前記命令が実効アドレスを使用する、前記選択することと、
    前記命令が読み込み命令であることに応答して、
    前記処理ユニットがシングルスレッド・モードで動作することに応答して、前記命令が第1の読み込みパイプ上で発行されているということに基づいて読み込み順序変更キューの第1のパーティションにエントリを作成することと、前記命令が第2の読み込みパイプ上で発行されているということに基づいて、前記読み込み順序変更キューの第2のパーティションに前記エントリを作成することと、
    複数のスレッドが同時に処理されるマルチスレッド・モードで前記処理ユニットが動作することに応答して、前記命令が前記第1の読み込みパイプ上で発行されているということに基づいて、前記処理ユニットの第1のスレッドによって、前記読み込み順序変更キューの前記第1のパーティションの第1の所定の部分に前記エントリを作成することと
    によって実行される、処理ユニット。
  2. 前記マルチスレッド・モードにおいて、前記読み込み順序変更キューの前記第1のパーティションの前記第1の所定の部分が、前記第1の読み込みパイプを使用して前記処理ユニットの前記第1のスレッドによって発行された読み込み命令に固有である、請求項1に記載の処理ユニット。
  3. 前記読み込み/格納ユニットが、
    前記命令が格納命令であることに応答して、
    前記処理ユニットが前記シングルスレッド・モードで動作することに応答して、前記格納命令が第1の格納パイプ上で発行されているということに基づいて格納順序変更キューの第1のパーティションに格納エントリを作成することと、前記格納命令が第2の格納パイプ上で発行されているということに基づいて、前記格納順序変更キューの第2のパーティションに前記格納エントリを作成することと、
    前記マルチスレッド・モードで前記処理ユニットが動作することに応答して、前記格納命令が前記第1の格納パイプ上で発行されているということに基づいて、前記処理ユニットの前記第1のスレッドによって、前記格納順序変更キューの前記第1のパーティションの第1の所定の部分に前記格納エントリを作成することと
    を実行するようにさらに構成されている、請求項1に記載の処理ユニット。
  4. 前記読み込み順序変更キューが、前記LSUの読み込みパイプごとに1つのパーティションを含んでいる、請求項1に記載の処理ユニット。
  5. 前記LSUが複数の読み込み命令を同時に動作させ、1つの読み込み命令が各読み込みパイプを使用する、請求項4に記載の処理ユニット。
  6. 前記格納順序変更キューが、前記LSUの格納パイプごとに1つのパーティションを含んでいる、請求項1に記載の処理ユニット。
  7. 前記LSUが複数の格納命令を同時に動作させ、1つの格納命令が各読み込みパイプを使用する、請求項6に記載の処理ユニット。
  8. 処理ユニットによる1つまたは複数の命令のアウトオブオーダー実行のためのコンピュータ実装方法であって、前記方法は、
    前記処理ユニットの読み込み/格納ユニット(LSU)によって、順序に従わずに実行される複数の命令を含んでいる命令のアウトオブオーダー(OoO)ウィンドウを受信することと、
    前記LSUによって、前記OoOウィンドウから命令を発行することと
    を含んでおり、前記命令は、
    前記OoOウィンドウから命令を選択することであって、前記命令が実効アドレスを使用する、前記選択することと、
    前記命令が読み込み命令であることに応答して、
    前記処理ユニットがシングルスレッド・モードで動作することに応答して、前記命令が第1の読み込みパイプ上で発行されているということに基づいて読み込み順序変更キューの第1のパーティションにエントリを作成することと、前記命令が第2の読み込みパイプ上で発行されているということに基づいて、前記読み込み順序変更キューの第2のパーティションに前記エントリを作成することと、
    マルチスレッド・モードで前記処理ユニットが動作することに応答して、前記命令が前記第1の読み込みパイプ上で発行されているということに基づいて、前記処理ユニットの第1のスレッドによって、前記読み込み順序変更キューの前記第1のパーティションの第1の所定の部分に前記エントリを作成することと
    によって発行される、コンピュータ実装方法。
  9. 前記マルチスレッド・モードにおいて、前記読み込み順序変更キューの前記第1のパーティションの前記第1の所定の部分が、前記第1の読み込みパイプを使用して前記処理ユニットの前記第1のスレッドによって発行された読み込み命令に固有である、請求項8に記載のコンピュータ実装方法。
  10. 前記命令が格納命令であることに応答して、
    前記処理ユニットが前記シングルスレッド・モードで動作することに応答して、前記格納命令が第1の格納パイプ上で発行されているということに基づいて格納順序変更キューの第1のパーティションに格納エントリを作成することと、前記格納命令が第2の格納パイプ上で発行されているということに基づいて、前記格納順序変更キューの第2のパーティションに前記格納エントリを作成することと、
    前記マルチスレッド・モードで前記処理ユニットが動作することに応答して、前記格納命令が前記第1の格納パイプ上で発行されているということに基づいて、前記処理ユニットの前記第1のスレッドによって、前記格納順序変更キューの前記第1のパーティションの第1の所定の部分に前記格納エントリを作成することと
    をさらに含んでいる、請求項8に記載のコンピュータ実装方法。
  11. 前記読み込み順序変更キューが、前記LSUの読み込みパイプごとに1つのパーティションを含んでいる、請求項8に記載のコンピュータ実装方法。
  12. 前記LSUが複数の読み込み命令を同時に動作させ、1つの読み込み命令が各読み込みパイプを使用する、請求項11に記載のコンピュータ実装方法。
  13. 前記格納順序変更キューが、前記LSUの格納パイプごとに1つのパーティションを含んでいる、請求項8に記載のコンピュータ実装方法。
  14. 前記LSUが複数の格納命令を同時に動作させ、1つの格納命令が各読み込みパイプを使用する、請求項13に記載のコンピュータ実装方法。
  15. プログラム命令が具現化されているコンピュータ可読記憶媒体を備えているコンピュータ・プログラム製品であって、前記プログラム命令は、処理ユニットに、
    前記処理ユニットの読み込み/格納ユニット(LSU)によって、順序に従わずに実行される複数の命令を含んでいる命令のアウトオブオーダー(OoO)ウィンドウを受信することと、
    前記LSUによって、前記OoOウィンドウから命令を発行することと
    を含む動作を実行させるように前記処理ユニットによって実行可能であり、前記命令は、
    前記OoOウィンドウから命令を選択することであって、前記命令が実効アドレスを使用する、前記選択することと、
    前記命令が読み込み命令であることに応答して、
    前記処理ユニットがシングルスレッド・モードで動作することに応答して、前記命令が第1の読み込みパイプ上で発行されているということに基づいて読み込み順序変更キューの第1のパーティションにエントリを作成することと、前記命令が第2の読み込みパイプ上で発行されているということに基づいて、前記読み込み順序変更キューの第2のパーティションに前記エントリを作成することと、
    マルチスレッド・モードで前記処理ユニットが動作することに応答して、前記命令が前記第1の読み込みパイプ上で発行されているということに基づいて、前記処理ユニットの第1のスレッドによって、前記読み込み順序変更キューの前記第1のパーティションの第1の所定の部分に前記エントリを作成することと
    によって発行される、コンピュータ・プログラム製品。
  16. 前記マルチスレッド・モードにおいて、前記読み込み順序変更キューの前記第1のパーティションの前記第1の所定の部分が、前記第1の読み込みパイプを使用して前記処理ユニットの前記第1のスレッドによって発行された読み込み命令に固有である、請求項15に記載のコンピュータ・プログラム製品。
  17. 前記命令が格納命令であることに応答して、
    前記処理ユニットが前記シングルスレッド・モードで動作することに応答して、前記格納命令が第1の格納パイプ上で発行されているということに基づいて格納順序変更キューの第1のパーティションに格納エントリを作成することと、前記格納命令が第2の格納パイプ上で発行されているということに基づいて、前記格納順序変更キューの第2のパーティションに前記格納エントリを作成することと、
    前記マルチスレッド・モードで前記処理ユニットが動作することに応答して、前記格納命令が前記第1の格納パイプ上で発行されているということに基づいて、前記処理ユニットの前記第1のスレッドによって、前記格納順序変更キューの前記第1のパーティションの第1の所定の部分に前記格納エントリを作成することと
    を含んでいる、請求項15に記載のコンピュータ・プログラム製品。
  18. 前記読み込み順序変更キューが、前記LSUの読み込みパイプごとに1つのパーティションを含んでいる、請求項15に記載のコンピュータ・プログラム製品。
  19. 前記LSUが複数の読み込み命令を同時に動作させ、1つの読み込み命令が各読み込みパイプを使用する、請求項18に記載のコンピュータ・プログラム製品。
  20. 前記格納順序変更キューが、前記LSUの格納パイプごとに1つのパーティションを含んでおり、前記LSUが複数の格納命令を同時に動作させ、1つの格納命令が各読み込みパイプを使用する、請求項15に記載のコンピュータ・プログラム製品。
JP2020517847A 2017-10-06 2018-10-03 単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット Active JP7064273B2 (ja)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US15/726,627 US11175924B2 (en) 2017-10-06 2017-10-06 Load-store unit with partitioned reorder queues with single cam port
US15/726,596 US10606591B2 (en) 2017-10-06 2017-10-06 Handling effective address synonyms in a load-store unit that operates without address translation
US15/726,596 2017-10-06
US15/726,627 2017-10-06
US15/825,494 US10606592B2 (en) 2017-10-06 2017-11-29 Handling effective address synonyms in a load-store unit that operates without address translation
US15/825,453 2017-11-29
US15/825,453 US11175925B2 (en) 2017-10-06 2017-11-29 Load-store unit with partitioned reorder queues with single cam port
US15/825,494 2017-11-29
PCT/IB2018/057695 WO2019069256A1 (en) 2017-10-06 2018-10-03 LOADING-STORAGE UNIT WITH PARTITIONED RELEASING WAIT FILES WITH A SINGLE CAM PORT

Publications (2)

Publication Number Publication Date
JP2020536308A true JP2020536308A (ja) 2020-12-10
JP7064273B2 JP7064273B2 (ja) 2022-05-10

Family

ID=65994519

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2020517947A Active JP7025100B2 (ja) 2017-10-06 2018-10-03 アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理
JP2020517847A Active JP7064273B2 (ja) 2017-10-06 2018-10-03 単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2020517947A Active JP7025100B2 (ja) 2017-10-06 2018-10-03 アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理

Country Status (5)

Country Link
JP (2) JP7025100B2 (ja)
CN (2) CN111133413B (ja)
DE (2) DE112018004004T5 (ja)
GB (2) GB2579534B (ja)
WO (2) WO2019069256A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11829293B2 (en) 2021-10-07 2023-11-28 Fujitsu Limited Processor and arithmetic processing method

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114780146B (zh) * 2022-06-17 2022-08-26 深流微智能科技(深圳)有限公司 资源地址查询方法、装置、系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001356903A (ja) * 2000-05-04 2001-12-26 Internatl Business Mach Corp <Ibm> マルチスレッド・プロセッサ内でのパイプライン・ステージのフラッシュ方法および装置
US6931639B1 (en) * 2000-08-24 2005-08-16 International Business Machines Corporation Method for implementing a variable-partitioned queue for simultaneous multithreaded processors
US20130212585A1 (en) * 2012-02-10 2013-08-15 Thang M. Tran Data processing system operable in single and multi-thread modes and having multiple caches and method of operation

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7343469B1 (en) * 2000-09-21 2008-03-11 Intel Corporation Remapping I/O device addresses into high memory using GART
US20040117587A1 (en) * 2002-12-12 2004-06-17 International Business Machines Corp. Hardware managed virtual-to-physical address translation mechanism
US7730282B2 (en) * 2004-08-11 2010-06-01 International Business Machines Corporation Method and apparatus for avoiding data dependency hazards in a microprocessor pipeline architecture using a multi-bit age vector
US8145887B2 (en) * 2007-06-15 2012-03-27 International Business Machines Corporation Enhanced load lookahead prefetch in single threaded mode for a simultaneous multithreaded microprocessor
US8645974B2 (en) * 2007-08-02 2014-02-04 International Business Machines Corporation Multiple partition adjunct instances interfacing multiple logical partitions to a self-virtualizing input/output device
US7711929B2 (en) * 2007-08-30 2010-05-04 International Business Machines Corporation Method and system for tracking instruction dependency in an out-of-order processor
US8639884B2 (en) * 2011-02-28 2014-01-28 Freescale Semiconductor, Inc. Systems and methods for configuring load/store execution units
US9182991B2 (en) * 2012-02-06 2015-11-10 International Business Machines Corporation Multi-threaded processor instruction balancing through instruction uncertainty
GB2503438A (en) * 2012-06-26 2014-01-01 Ibm Method and system for pipelining out of order instructions by combining short latency instructions to match long latency instructions
CN103198028B (zh) * 2013-03-18 2015-12-23 华为技术有限公司 一种内存数据迁移方法、装置及系统
US9740409B2 (en) * 2013-12-13 2017-08-22 Ineda Systems, Inc. Virtualized storage systems
US10209995B2 (en) * 2014-10-24 2019-02-19 International Business Machines Corporation Processor core including pre-issue load-hit-store (LHS) hazard prediction to reduce rejection of load instructions
US10089240B2 (en) * 2014-12-26 2018-10-02 Wisconsin Alumni Research Foundation Cache accessed using virtual addresses

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001356903A (ja) * 2000-05-04 2001-12-26 Internatl Business Mach Corp <Ibm> マルチスレッド・プロセッサ内でのパイプライン・ステージのフラッシュ方法および装置
US6931639B1 (en) * 2000-08-24 2005-08-16 International Business Machines Corporation Method for implementing a variable-partitioned queue for simultaneous multithreaded processors
US20130212585A1 (en) * 2012-02-10 2013-08-15 Thang M. Tran Data processing system operable in single and multi-thread modes and having multiple caches and method of operation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11829293B2 (en) 2021-10-07 2023-11-28 Fujitsu Limited Processor and arithmetic processing method

Also Published As

Publication number Publication date
CN111133421A (zh) 2020-05-08
CN111133421B (zh) 2023-09-29
GB2579757B (en) 2020-11-18
DE112018004004T5 (de) 2020-04-16
DE112018004006T5 (de) 2020-04-16
GB2579757A (en) 2020-07-01
CN111133413B (zh) 2023-09-29
DE112018004006B4 (de) 2021-03-25
JP7064273B2 (ja) 2022-05-10
CN111133413A (zh) 2020-05-08
WO2019069256A1 (en) 2019-04-11
GB202006344D0 (en) 2020-06-17
GB202006338D0 (en) 2020-06-17
JP2020536310A (ja) 2020-12-10
JP7025100B2 (ja) 2022-02-24
WO2019069255A1 (en) 2019-04-11
GB2579534A (en) 2020-06-24
GB2579534B (en) 2020-12-16

Similar Documents

Publication Publication Date Title
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
US10534616B2 (en) Load-hit-load detection in an out-of-order processor
US10977047B2 (en) Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US11175925B2 (en) Load-store unit with partitioned reorder queues with single cam port
US10324856B2 (en) Address translation for sending real address to memory subsystem in effective address based load-store unit
US10606593B2 (en) Effective address based load store unit in out of order processors
US10572257B2 (en) Handling effective address synonyms in a load-store unit that operates without address translation
US10579387B2 (en) Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
US9740623B2 (en) Object liveness tracking for use in processing device cache
JP7064273B2 (ja) 単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット
US10579384B2 (en) Effective address based instruction fetch unit for out of order processors

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20200330

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20200327

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210323

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220126

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220324

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20220414

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220420

R150 Certificate of patent or registration of utility model

Ref document number: 7064273

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150