JP2020536310A - アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理 - Google Patents

アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理 Download PDF

Info

Publication number
JP2020536310A
JP2020536310A JP2020517947A JP2020517947A JP2020536310A JP 2020536310 A JP2020536310 A JP 2020536310A JP 2020517947 A JP2020517947 A JP 2020517947A JP 2020517947 A JP2020517947 A JP 2020517947A JP 2020536310 A JP2020536310 A JP 2020536310A
Authority
JP
Japan
Prior art keywords
instruction
entry
address
ert
effective address
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
JP2020517947A
Other languages
English (en)
Other versions
JP7025100B2 (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,596 external-priority patent/US10606591B2/en
Priority claimed from US15/726,627 external-priority patent/US11175924B2/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2020536310A publication Critical patent/JP2020536310A/ja
Application granted granted Critical
Publication of JP7025100B2 publication Critical patent/JP7025100B2/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/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/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/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)によってアウトオブオーダー(OoO)ウィンドウから複数の命令を発行するための技術的解決策を提供する。【解決手段】この発行は、第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT)エントリをERTに作成することを含み、このERTエントリは、第1の実効アドレスを第1の実アドレスにマッピングする。さらに、この実行は、やはり前述の第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、シノニム検出テーブル(SDT)エントリをSDTに作成することであって、このSDTエントリが、第2の実効アドレスをERTエントリにマッピングする、作成することと、第2の命令内の第2の実効アドレスを第1の実効アドレスに置き換えることによって第2の命令を再開することとを含む。【選択図】図1

Description

本発明の実施形態は、一般に、アウトオブオーダー(OoO:out-of-order)プロセッサに関し、より詳細には、アドレス変換なしで動作する読み込み/格納ユニットにおいてシノニム検出テーブル(SDT:synonym detection table)を使用して実効アドレスのシノニムを処理することに関する。
OoOプロセッサでは、命令順序付けユニット(ISU:instructionsequencing unit)が、命令をさまざまな発行キューにディスパッチし、OoO実行のサポートにおいてレジスタ名を変更し、さまざまな発行キューから実行パイプラインに命令を発行し、実行された命令を完了し、例外条件を処理する。レジスタ名の変更は、通常、命令が各発行キューに配置される前に、ISU内のマッパー論理によって実行される。ISUは、命令間の依存関係を追跡するための依存関係行列を含んでいる1つまたは複数の発行キューを含む。依存関係行列は、通常、発行キュー内の命令ごとに1行および1列を含む。
中央処理装置(CPU)設計の領域では、特にOoOプロセッサに関して、不正な計算結果につながる可能性があるため、後続のクロック・サイクル内で次の命令を実行できない場合に、CPUマイクロアーキテクチャにおける命令パイプラインに伴うハザードが技術的課題をもたらす。典型的なハザードは、データ・ハザード、構造ハザード、および制御フロー・ハザード(分岐ハザード)を含む。データ・ハザードは、データ依存性を示す命令が、パイプライン内の異なる段(例えば、書き込み後の読み取り(RAW:read after write)、読み取り後の書き込み(WAR:write afterread)、および書き込み後の書き込み(WAW:write after write))でデータを変更する場合に、発生する。構造ハザードは、プロセッサのハードウェアの一部が同時に2つ以上の命令によって必要とされる場合、例えば、命令がメモリから取り出されるフェッチ段と、データがメモリに書き込まれるか、またはメモリから読み取られるか、あるいはその両方が実行されるメモリ段との両方において、メモリ・ユニットがアクセスされている場合に、発生する。さらに、分岐ハザード(制御ハザードとも呼ばれる)は、プロセッサによって実行されているコンピュータ・プログラム内の分岐に伴って発生する。
"Power4 System Microarchitecture" by J. M. Tendler et al., IBM Journal of Research and Development,Volume 46, Number 1, January 2002, pp. 5-25
読み込み/格納ユニット(LSU)によってアウトオブオーダー(OoO)ウィンドウから複数の命令を発行するための技術的解決策を提供する。
本発明の実施形態は、アウトオブオーダー・プロセッサにおいて実効アドレスに基づく読み込み/格納ユニットを実装するための方法、システム、およびコンピュータ・プログラム製品を含む。1つまたは複数の命令を実行するための処理ユニットの非限定的な例は、メモリとレジスタの間でデータを転送するための読み込み/格納ユニット(LSU:load-store unit)を含む。LSUは、アウトオブオーダー(OoO)ウィンドウ内の複数の命令を実行する。この実行は、第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT:effective real table)エントリをERTに作成することを含み、このERTエントリは、第1の実効アドレスを第1の実アドレスにマッピングする。さらに、この実行は、やはり前述の第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、シノニム検出テーブル(SDT:synonym detection table)エントリをSDTに作成することであって、このSDTエントリが、第2の実効アドレスをERTエントリにマッピングする、作成することと、第2の命令内の第2の実効アドレスを第1の実効アドレスに置き換えることによって第2の命令を再開することとを含む。
本発明の1つまたは複数の実施形態によれば、処理ユニットによって1つまたは複数のアウトオブオーダー命令を実行するための例示的なコンピュータ実装方法は、読み込み/格納ユニット(LSU)によってアウトオブオーダー(OoO)ウィンドウから複数の命令を発行または実行することを含む。発行は、第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT)エントリをERTに作成することを含み、このERTエントリは、第1の実効アドレスを第1の実アドレスにマッピングする。さらに、この実行は、やはり前述の第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、シノニム検出テーブル(SDT)エントリをSDTに作成することであって、このSDTエントリが、第2の実効アドレスをERTエントリにマッピングする、作成することと、第2の命令内の第2の実効アドレスを第1の実効アドレスに置き換えることによって第2の命令を再開することとを含む。
1つまたは複数の実施形態によれば、コンピュータ・プログラム製品が、プログラム命令が具現化されているコンピュータ可読記憶媒体を含み、それらのプログラム命令は、処理ユニットに動作を実行させるために、処理ユニットによって実行可能である。それらの動作は、読み込み/格納ユニット(LSU)によってアウトオブオーダー(OoO)ウィンドウから複数の命令を発行または実行することを含む。発行は、第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT)エントリをERTに作成することを含み、このERTエントリは、第1の実効アドレスを第1の実アドレスにマッピングする。さらに、この実行は、やはり前述の第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、シノニム検出テーブル(SDT)エントリをSDTに作成することであって、このSDTエントリが、第2の実効アドレスをERTエントリにマッピングする、作成することと、第2の命令内の第2の実効アドレスを第1の実効アドレスに置き換えることによって第2の命令を再開することとを含む。
その他の特徴および利点が、本発明の手法によって実現される。本発明のその他の実施形態および態様は、本明細書において詳細に説明され、請求される発明の一部と見なされる。本発明を利点および特徴と共によく理解するために、説明および図面を参照されたい。
本明細書に記載された専有権の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の各実施形態の前述およびその他の特徴と利点は、添付の図面と共に行われる以下の詳細な説明から明らかになる。
本発明の1つまたは複数の実施形態に従う、アウトオブオーダー(OoO)プロセッサ内に実効アドレスに基づく読み込み/格納ユニットを含んでいるシステムのブロック図である。 本発明の1つまたは複数の実施形態に従う、実効アドレス・ディレクトリ(EAD:effectiveaddress directory)およびこのEADを利用するための関連するメカニズムが実装される、OoOプロセッサのプロセッサ・アーキテクチャの例示的なブロック図である。 本発明の1つまたは複数の実施形態に従うプロセッシング・コアの読み込み/格納ユニット(LSU)を示す図である。 1つの実施形態例に従う実効アドレス・ディレクトリ(EAD)構造(L1キャッシュ)の例示的なブロックである。 1つの実施形態例に従う実効実テーブル(ERT)構造の例示的なブロックである。 本発明の1つまたは複数の実施形態に従う、LSUによって命令を実行するためにメモリにアクセスするための例示的な方法のフローチャートである。 本発明の1つまたは複数の実施形態に従う、ERTを再度読み込むための方法のフローチャートである。 本発明の1つまたは複数の実施形態に従うシノニム検出テーブル(SDT:synonymdetection table)の例示的な構造を示す図である。 本発明の1つまたは複数の実施形態に従う、ERTおよびSDT EAの交換を実行するための方法のフローチャートである。 本発明の1つまたは複数の実施形態の一部または全部の態様を実装するためのコンピュータ・システムのブロック図である。
本明細書において示される図は、実例である。本発明の思想から逸脱することなく、本明細書に記載された図または動作の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語およびその変形は、2つの要素間に通信経路が存在することを表しており、それらの要素間に要素/接続が介在しない要素間の直接的接続を意味していない。これらのすべての変形は、本明細書の一部であると見なされる。
本明細書に記載された本発明の1つまたは複数の実施形態は、OoOプロセッサ内の実効実アドレス・テーブルのエントリの動的削除によって、実効アドレス(EA:effective address)に基づく読み込み/格納ユニット(LSU)をアウトオブオーダー(OoO)プロセッサに提供する。本明細書に記載された技術的解決策は、チップ面積の削減を促進するために、およびさらに、OoOプロセッサのタイミングを改善するために、コンポーネントの中でも特に、実効実テーブル(ERT:effective real table)およびシノニム検出テーブル(SDT:synonymdetection table)と共に実効アドレス・ディレクトリ(EAD)を使用する。
前述したように、最新のプロセッサのOoOの性質に起因して、同じ実アドレス(RA:realaddress)への古い格納命令の前に実行するために、より新しい読み込み命令が選択されることがある。同じRAへの古い格納命令の前により新しい読み込み命令が実行された場合、より新しい読み込み命令が古いデータを返すため、プログラムの一貫性を回復するには、プロセッサのパイプライン内の命令がパイプラインからフラッシュされ、再フェッチされなければならない。通常、他の独立した命令を実行することができ、プロセッサのパイプラインから不必要にフラッシュしなくてよいように、同じRAへのより古い格納命令が実行されるまで、より新しい読み込み命令を遅延させるのが望ましい。同じRAへの古い格納命令の前のより新しい読み込み命令の実行に起因するプロセッサのパイプラインのフラッシュを減らすステップは、同じRAに対する、プロセッサのパイプラインのフラッシュが必要になるようにOoOで実行される、読み込み/格納シーケンスを識別することである。代替または追加として、読み込み順序変更キューからの古い読み込み命令およびその後のすべての命令が、読み込み順序変更キューから、または命令フェッチ・ユニット(IFU:instruction fetching unit)からフラッシュされる。命令をフラッシュすることは、(命令の適切な識別子を含んでいる)フラッシュ・メッセージをIFUに送信することを含む。
ほとんどの最新のコンピューティング・デバイスは、仮想メモリをサポートする。仮想メモリは、実際には物理メモリが断片化しているときに、および物理メモリがディスク・ストレージにあふれているときにも、連続的な作業メモリまたはアドレス空間が存在するという印象をアプリケーション・プログラムに与える技術である。基本的に、コンピューティング・デバイスのメモリの見え方がアプリケーション・プログラムに提供され、アプリケーションは、アプリケーションから見えるEA空間内のEAを使用して、連続的に見えるメモリにアクセスし、その後、この実効アドレスが、アクセス動作を実際に実行するために、実際の物理メモリまたはストレージ・デバイスの物理アドレスに変換される。EAは、動作を発行する実体(例えば、アプリケーション、プロセス、スレッド、割り込みハンドラ、カーネル・コンポーネントなど)の視点から動作によってアクセスされるメモリ位置を指定するために使用される値である。
すなわち、コンピューティング・デバイスが仮想メモリの概念をサポートしない場合、EAおよび物理アドレスは1つであり、同じである。しかし、コンピューティング・デバイスが仮想メモリをサポートする場合、アプリケーションによってサブミットされる特定の動作のEAは、コンピューティング・デバイスのメモリ・マッピング・ユニットによって、動作が実行される物理メモリまたはストレージ・デバイス内の位置を指定する物理アドレスに変換される。
さらに、最新のコンピューティング・デバイスでは、コンピューティング・デバイスのプロセッサが、一連のデータ処理要素を含んでいるプロセッサ命令パイプラインを使用して、実体(例えば、アプリケーション、プロセスなど)によってサブミットされた命令(動作)を処理する。命令パイプラインは、コンピュータ命令の処理を、各ステップの最後でストレージを使用する一連のステップに分割することによって、命令スループットを増加させる技術である。命令パイプラインは、コンピューティング・デバイスの制御回路が、最も遅いステップの処理速度で命令をプロセッサ命令パイプラインに発行するのを容易にし、この処理速度は、すべてのステップを同時に実行するために必要な時間よりも非常に高速である。命令パイプラインを使用するプロセッサ(すなわち、パイプライン型プロセッサ)は、別々のジョブに対して半ば独立して動作できる段に内部で構造化される。各段は、パイプラインの最後の段まで各段の出力が別の段に供給されるように構造化され、一連のチェーン内の次の段に接続される。
そのようなパイプライン型プロセッサは、インオーダー・パイプライン型プロセッサまたはアウトオブオーダー・パイプライン型プロセッサの形態を取ってよい。インオーダー・パイプライン型プロセッサの場合、データが、パイプラインの特定の段で処理される命令に使用されない場合に、そのデータが使用可能になるまで、パイプラインを介した命令の実行が停止されるように、命令が順序通りに実行される。一方、OoOパイプライン型プロセッサは、動作を実行するために必要なデータを使用できないときに発生する停止をプロセッサが回避できるようにする。OoOプロセッサの命令パイプラインは、処理される準備ができている他の命令で時間の「スロット」を埋め、その後、パイプラインの最後で結果を並べ替え、命令が順序通りに実行されたように見えるようにすることによって、それらの停止を防ぐ。元のコンピュータ・コード内で命令が順序付けられる方法はプログラム順序と呼ばれ、一方、プロセッサでは、命令がデータ順序(すなわち、データおよびオペランドがプロセッサのレジスタ内で使用可能になる順序)で処理される。
最新のプロセッサ命令パイプラインは、命令が命令パイプラインを通って流れるときに、命令のEAを追跡する。命令の処理が例外の取得をもたらすか、命令が前の状態をフラッシュするか、命令が現在のメモリ位置と相対的な新しいメモリ位置に分岐するか、または命令の実行が完了するときに、常にこのEAが利用されるため、命令のEAを追跡することは重要である。
命令のEAを追跡することは、プロセッサのチップ面積、電力消費などの観点で、費用がかかる。これは、これらのEAが大きいサイズ(例えば、64ビット)を有しており、最新のプロセッサ命令パイプラインが深く(すなわち、多くの段を含んでおり)、プロセッサ命令パイプラインの命令フェッチ段からプロセッサ命令パイプラインの完了段までの命令の存続期間が非常に長くなることを引き起こすためである。高度にマルチスレッド化されたOoOプロセッサ(すなわち、OoOの方法で複数のスレッドから命令を実行するプロセッサ)では、異なるアドレス範囲からの膨大な数の命令が同時に処理することができる(すなわち、「インフライト」である)ため、この費用がさらに増えることがある。
1つまたは複数の例では、コンピューティング・デバイスは、パイプライン・ラッチ、分岐情報キュー(BIQ:branch information queue)、およびグローバル完了テーブル(GCT:global completion table)の組み合わせを使用して、命令のEAを追跡する。命令のグループのベースEAが、命令シーケンサ・ユニット(ISU:instruction sequencer unit)のGCT内に蓄積されて追跡できるようになるまで、ラッチを使用してパイプラインの前端から転送される。このデータを格納するために必要なラッチの数は、おおよそ、パイプラインのフェッチ段とディスパッチ段の間のパイプラインの段数になる。これらのラッチは、これらの段の間に通常はEAが不要であるため、無駄である。このデータは、命令がパイプラインを通って流れるときに命令グループと共に「付き合いで参加している」単なるペイロード・データである。加えて、この方法は、分岐命令がBIQとGCTの両方にEAを含むため、二重の格納につながる。
したがって、GCTのみにおいてEAを追跡することによって、そのような非効率性を取り除くコンピューティング・デバイスが開発された。例えば、それらの新しいコンピューティング・デバイス(命令シーケンサ・ユニット)は、フェッチ時にエントリをGCTに作成する。EAは、この時点でGCTに読み込まれ、その後、命令が完了したときに削除される。これによって、装置全体で、多くのパイプライン・ラッチを取り除く。アドレス線の数と同じくらいの長さの完全なEA(例えば、64ビットEA)の代わりに、小さいタグが、パイプラインを通る命令グループと共に運ばれる。このタグは、この命令グループのベースEAを保持するGCT内のエントリを指し示す。分岐が、発行されたときに、EAをGCTから直接取得できるため、BIQ内のアドレスの格納が不要になる。そのような手法は、面積効率を改善するが、OoOプロセッサには適用できない。さらに、それらの手法は、プログラム順序に従わないで着信するアドレス要求を処理するための十分な情報を欠いている。加えて、それらの手法は、複数のまとまりのないアドレス範囲から形成されていることがある命令グループを追跡する能力を欠いているため、OoO実行に必要なディスパッチおよび完了の帯域幅をサポートできない。従来、そのようなメカニズムは、単一のアドレス範囲からの命令グループのみをサポートしていたため、OoOに実行するために使用できる命令の数が著しく減少する可能性がある。さらに、EAに対応するRA(またはその逆)などの、対応するアドレスを検索するために、連想メモリ(CAM:content addressable memory)が使用される。CAMは、専用比較回路を使用して、単一クロック・サイクルでのルックアップ・テーブル機能を実装する。CAMの機能全体は、検索語を受け取って、一致するメモリ位置を返すことである。しかし、そのようなCAMは、チップ面積を必要とし、そのような検索のための電力を消費する。
さらに、EAから対応するRAへのそのような変換は、通常、プロセッサに関連付けられたメモリ・ネストの第2のレベルで実行される。本明細書において使用されるとき、メモリ・ネストという用語は、データを格納するためにプロセッサによって使用され得るさまざまな種類のストレージを指す。一般に、メモリ・ネストは、物理メモリとキャッシュの階層を含む。一般に、メモリ・ネストのレベルが増えるにつれて、プロセッサからデータまでの距離が増え、プロセッサがデータを取り出すためのアクセス待ち時間も増える。したがって、EAからRAへの変換は、プロセッサの実行速度を遅くする。
本明細書に記載された技術的解決策の実施形態例は、前述したGCTの解決策の面積効率を有するだけでなく、性能を抑制せずに発行幅の広いOoOパイプラインもサポートできる、実効アドレス・ディレクトリ(EAD)、実効実テーブル(ERT)、およびシノニム検出テーブル(SDT:synonym detection table)を提供することによって、これらの手法を改善する。本明細書に記載された技術的解決策は、プロセッサがアウトオブオーダー(OoO)ウィンドウ内でEAのシノニムを避けることができる限り、プロセッサがEAのみを使用して実行するのをさらに容易にする。OoOウィンドウは、プロセッサの命令パイプライン内の命令のセットである。OoOウィンドウ内のEAのシノニムを防ぐことによって、プロセッサがOoOウィンドウ内のEAの変換を回避することができるため、プロセッサは、アドレス変換のためのチップ面積および電力消費を削減する。
言い換えると、本明細書に記載された技術的解決策は、OoOウィンドウ内のEAの別名化を規制し、読み込み/格納ポートに関する変換データ構造およびハードウェアを縮小することによって、技術的問題に対処する。したがって、本明細書に記載された技術的解決策は、1つのアドレス(EA)のみを追跡することによって、チップ面積の削減を促進する。さらに、これらの技術的解決策は、OoOプロセッサが分割された読み込み/格納キューを使用して2読み込み/2格納モード(2 load and 2 store mode)で実行することを容易にし、通常はアドレス変換に使用されるCAMポートをさらに削減する。
例えば、OoOで命令を発行して実行できるプロセッサは、格納命令の前に読み込み命令が実行されることを許可することがある。より新しい読み込み命令の実アドレス(RA)がより古い格納命令のRAと重複しないということを仮定すると、より新しい読み込み命令およびより古い格納命令のOoO実行は、性能上の利点を提供することができる。標準的なプログラムでは、より新しい読み込み命令のRAが(より新しい読み込み命令の後に実行される)より古い格納命令のRAと重複する可能性は、相対的に低い。知られているように、格納命令のRAが、読み込み/格納ユニット(LSU)の読み込み順序変更キュー(LRQ:load reorder queue)内でヒットした場合、格納違反条件(storeviolation condition)(ストア・ヒット・ロード(SHL:store-hit-load))が示される。すなわち、新しく発行されたより古い格納命令のRAが、LSUのLRQ内に存在するより新しい読み込み命令のRAに一致する場合、SHLが示される。しかし、SHLの検出は、通常、命令実行パイプライン内の後方で発生するため、SHLからの回復は、多くの場合、プロセッサの性能に対する相対的に重大な不利益をもたらす。例えば、SHLからの回復は、通常、SHLを引き起こしたより新しい読み込み命令を無効化すること、およびより新しい読み込み命令に加えて、より古い格納命令の後に発行されたすべての命令を再発行することを伴う。
さらに、例えば、同じアドレスへの2つの読み込み命令がOoOで実行され、そのアドレスのデータの値が、2つの読み込み命令の実行の間で(例えば、別のプロセッサによって)変更された場合、後の(すなわち、より新しい)読み込みが前の(すなわち、古い)値を取得し、前の(すなわち、より古い)読み込みが後の(すなわち、より新しい)値を取得する。この状況は、「読み込み間順序違反(load-load order violation)」または「ロード・ヒット・ロード・ハザード」と呼ばれる。より新しい読み込み命令が古いデータを取得した場合に、同じアドレスへのより古い読み込み命令が新しいデータを取得してはならないという要件は、「順次的読み込みの一貫性」と呼ばれる。加えて、後の(すなわち、より新しい)読み込み命令が、同じアドレス(すなわち、メモリ位置)への前の(すなわち、より古い)格納命令が完了する前に実行される場合、この読み込み命令は前の(すなわち、古い)値を取得する。この状況は、「読み込み−格納間順序違反(load-store order violation)」または「ロード・ヒット・ストア・ハザード」と呼ばれる(例えば、“Power4 System Microarchitecture” by J. M.Tendler et al., IBM Journal of Research and Development, Volume 46, Number 1,January 2002, pp. 5-25を参照)。
しかし、EAを使用して(RAを使用しないで)動作するOoOプロセッサの場合、EAのみに基づいてSHL条件およびLHL条件を検出し、それらの状況からさらに回復するための技術的課題がもたらされる。通常、プロセッサは、読み込み間順序違反および読み込み−格納間順序違反を防ぐための専用ハードウェアを含み、それによって、プログラムの正しさを保証することができる。しかし、そのようなハードウェアは、多くの場合、複雑であり、時間遅延を追加する。さらに、そのようなハードウェアは、ハザード条件を検出するためにRAを使用することに頼り、したがって、(変換/CAMポートのための)より大きいチップ面積を占有し、EAからRAへの変換またはRAからEAへの変換あるいはその両方のために、より多くの電力を消費する。本明細書に記載された技術的解決策は、EAを使用すること、およびEADエントリに格納された実効実変換テーブル(ERT:effective real translation table)インデックスを使用することによって、そのような技術的課題に対処する。本明細書における技術的解決策は、ロード・ヒット・ロード・テーブルを使用してロード・ヒット・ロード・ハザードを検出し、そのような状況に従って動作する。このようにして、これらの技術的解決策は、OoOプロセッサが、実アドレスを格納および操作するための専用のチップ面積を少なくすることを促進する。
ここで図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:generalpurpose registers)およびベクトル−スカラ・レジスタ(VSR:vector-scalarregister)をマッピングするための統合マッパー(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からデータを取得する。このアドレスは、EAであり、使用される前に、まず第2のレベルの変換ユニットを介してシステム・メモリ・アドレスに変換される必要がある。アドレスがデータ・キャッシュ内に見つからない場合、L2キャッシュに対する失敗した要求を管理するために、読み込み失敗キュー(load miss queue)が使用される。そのようなキャッシュ・ミスの不利益を減らすために、高度なデータ・プリフェッチ・エンジンが、近い将来に命令によって使用される可能性が高いアドレスを予測する。このようにして、命令がデータを必要とするときに、そのデータがデータ・キャッシュ内にすでに存在する可能性が高くなり、それによって、L2キャッシュに対する失敗した要求の長い待ち時間を防ぐ。
LS/EX実行ユニット238、240は、読み込み順序変更キュー218および格納順序変更キュー220内の命令の古さおよびメモリの依存関係を追跡することによって、プログラム順序に従わずに命令を実行する。これらのキューは、OoO実行が同じプログラムのインオーダー実行と一致しない結果を生成したときに、それを検出するために使用される。そのような場合、現在のプログラム・フローがフラッシュされ、再実行される。
プロセッサ・アーキテクチャは、EAD290をさらに含んでおり、実効アドレス・ディレクトリ(EAD)290は、EAが必要とされるがパイプラインを通る必要がない場合に、EAを使用できるように、集中化された方法で、命令のグループの実効アドレスを維持する。さらに、EAD290は、OoO処理をサポートするための回路または論理あるいはその両方を含んでいる。図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のみを使用することの技術的課題は、命令のアウトオブオーダー実行がハザード(LHL、SHL、LHS)につながることがあり、EAのみの実装の場合、そのようなハザードが、対応する実アドレスを使用せずに検出されるべきである、ということを含む。本明細書に記載された技術的解決策は、そのような技術的問題に対処する。RAは、通常使用されているように、ロード・ヒット・ストア、ストア・ヒット・ロード、ロード・ヒット・ロードのいずれのタイプのOoO実行のハザード検出にも、使用されることがない。格納のためのRA計算は、格納の完了後に格納命令に関する割り込みが処理されないため、格納が完了する前に発生する(格納は、アドレス変換に関連する割り込みを生成することがあり、この割り込みは、格納が完了する前に処理される必要がある)。ここで、格納が発行されるとき(排出されるときではない)に、RA計算が実行される。本明細書に記載された技術的解決策は、EAディレクトリ・エントリに格納されたEAおよびERTインデックスに基づき、本明細書において説明されている構造および動作と共に読み込み順序変更キュー(LRQF)も使用して、LHS(ロード・ヒット・ストア)、SHL(ストア・ヒット・ロード)、およびLHL(ロード・ヒット・ロード)を決定する。
再び図を参照すると、図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では、ディスパッチから完了までのすべての読み込み動作が追跡される。LSU104は、第2の読み込み順序変更キューLRQE225をさらに含んでいる。読み込みが(キャッシュ・ミスまたは変換失敗のため、あるいは読み込みが依存する前の命令が拒否されたために)拒否された場合、発行キューから読み込みが取り出され、LRQEエントリに配置され、このLRQEエントリから読み込みが再発行される。示されているLRQE225は、12個のエントリをそれぞれ含む(合計で24個のエントリ)、2つの読み込みモード用の2つのインスタンス(LRQE0およびLRQE1)に分割される。STモードでは、スレッド/パイプに基づくパーティションが存在しない。MTモードでは、T0、T2の動作がパイプLD0で開始しており、T1、T3の動作が、再開のためのパイプLD1で開始している。
示されているように、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(および本明細書に記載されたその他の構造)が、T0: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の検出時に、RQF218が、より古い読み込みの後のより新しい読み込みまたはすべてのもののフラッシュを引き起こす。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であるエントリを含めてフラッシュする。
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に対してのみ、排出が実行される。
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タグ・アレイが検索され(またはSMT4内で1/2検索され)、ISUがiタグに基づいて格納を発行するように、格納の発行時にどの物理的行に書き込むかを決定する。SRQ220は、格納排出および割り当て解除の発生時に、iタグをISUに送信する。
ISUは、重複する発行を防ぐために、ディスパッチを格納するための仮想サブ領域を割り当てる。例えば、STモードでは、ISUは、エントリ0の格納排出によって実際のSRQエントリ0の割り当てが解除されるまで、仮想SRQエントリ40を発行しない。さらに、SMT4モードでは、ISUは、実際のTx SRQエントリ0が排出されて割り当て解除されるまで、Tx仮想SRQエントリ20を発行できない。ISUは、各スレッドのパーティションを、4つの領域にさらに分割する。
例えば、STモードの場合、SRQ220を4つのサブ領域にさらに分割する。Ping A:SRQエントリ0〜9、Ping B:SRQエントリ10〜19、Ping C:SRQエントリ20〜29、Ping D:SRQエントリ30〜39、およびPong A:SRQエントリ0〜9、Pong B:SRQエントリ10〜19、Pong C:SRQエントリ20〜29、Pong D:SRQエントリ30〜39。最初に、ISUがPing A、B、C、Dのiタグを発行する。さらに、ISUは、Ping Aのiタグの割り当てが解除されるまで、Pong Aのiタグを発行しない。その後、Ping Aのiタグの割り当てがすべて解除された後に、ISUがPong Aのiタグを発行するが、Aのケースと同様に、Ping Bのiタグの割り当てが解除されるまで、Pong Bのiタグを発行しない。1つまたは複数の例では、ISUは、サブ領域に基づいて疑似発行依存関係(pseudo issue dependency)を作成するために、3つの追加ビット(どのサブ領域かを正確に示すための1循環ビット+2ビット)を発行キュー・エントリ内に保持する。
図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個のインデックスである。
ベースEA310は、命令のグループの開始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のオフセット・ビット(例えば、EAのビット57:61)を格納する。フィールド310からのベースEAおよび第1の命令識別子フィールド320内のEAのオフセット・ビットの組み合わせは、EAD290のエントリによって表された命令のグループ内の第1の命令にEAを提供する。この第1のフィールド320は、後で説明されるように、例えばパイプラインがフラッシュされた場合に、再フェッチ・アドレスおよび分岐予測情報を回復するために使用されてよい。
最後の命令識別子フィールド330は、EAD290のエントリに対応する命令のグループ内の最後の命令に関して、EAのオフセット・ビット(例えば、EAのビット57:61)を格納する。EAD290のエントリによって表された命令のグループ内の追加の命令がフェッチされるときに、EADの論理がこのフィールドを更新する。EADの論理は、キャッシュ・ラインの横断または選択された分岐が検出されたときに、EAD290のエントリが終了することに応答して、特定のEAD290のエントリ内のこのフィールド330の更新を中断する。パイプラインのフラッシュが発生してEADのエントリの一部を消去しない限り、このフィールドは元の状態のままである。そのような場合、EADの論理が、フラッシュの結果としてエントリ内の新しい最後の命令に現在なっている命令のEAのオフセット・ビットを格納するように、このフィールドを更新する。このフィールドは、後で説明されるように、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ビットのEAより相対的に非常に小さい。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ビットのオフセット値は、例えば、特定の命令のEAのビット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個のエントリを含んでいるが、他の例では、エントリの総数が異なることができるということ、およびさらに、エントリの数が選択可能またはプログラム可能であってよいということに注意するべきである。さらに、LSUが別々スレッドを介して2つの命令を並列に実行する場合、LSUは、それぞれ64個(半分)のエントリを含む、ERT255の2つのインスタンス(例えば、ERT0およびERT1)を維持する。以下では、特に指定されない限り、これらのインスタンスのいずれか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をチェックする。異なるスレッドからのヒットが存在しない場合、同じRAを使用している別のスレッドからの読み込みが存在しない。同じRAを使用している異なるスレッドからのヒットが存在する場合、LSUがLRQをチェックする。まれではあるが、別のスレッドによってRAが使用される場合、別のスレッドからのヒットが存在する。それに応じて、LSUが、共通のRAに関連するEAを検出するために、ERTテーブル400を検索する。次にEAが、一致に関してLRQを調べるために使用される(そのサイクル内の格納の発行を拒否する)。LRQがスレッドごとに分割されるため、LSUは関連するスレッドのLRQのみを調べる。一致する読み込みがLRQ内に存在する場合、LSUが、一致する読み込みのうちの最も古い読み込みをフラッシュする。
プロセッサの別のコアからのスヌープの第3のケースでは、LSUが第2のケースと同様に動作し、実行されている他のスレッドのいずれかからのヒットに関してチェックする。TLB/SLBが無効化されるケースでは、ERT255も無効化される。
LRQF218は、ERTテーブル400と共に、LHL、SHL、およびLHSなどのハザードを検出して処理するために使用される。例えば、SHL検出に関して、各格納命令がLRQF218に対してチェックされ、格納命令と同じEAの読み込み命令がLRQF218内に存在する場合、IFU内のその格納命令およびその格納命令からの他のエントリがフラッシュされるか、またはLRQF218からの読み込み命令がフラッシュされる。さらに、DCB命令の場合、SHLのケースに関して、命令がLRQF218に対してチェックされ、DCB後の読み込みおよびすべてのものがフラッシュされるか、または読み込みがフラッシュされる。システム100が処理するデータ・セットごとに、対応するデータ制御ブロック(DCB:data control block)およびデータ定義(DD:datadefinition)ステートメントまたはその同等の動的割り当てが構成される。
さらに、1つまたは複数の例では、データが、(例えば、新しいプロセスの呼び出しまたはコンテキスト切り替えに応答して)システム・メモリ内の物理ストレージ位置に移動されるとき、および物理ストレージ位置から移動されるときに、TLB内のエントリが、新しいデータの存在を反映するように更新され、システム・メモリから削除された(例えば、不揮発性マス・ストレージにページアウトされた)データに関連付けられたTLBエントリが無効化されなければならない。通常、TLBエントリの無効化は、ソフトウェアの責任であり、明示的なTLBエントリ無効化命令(例えば、POWER(TM)命令セット・アーキテクチャ(ISA:instruction set architecture)におけるTLBIE)の実行によって達成される。LRQF218は、TLBIE命令がLRQF218内のエントリにマーク付けすることを容易にすることによって、TLBIEのサポートを提供し、LRQF218は、有効なエントリがマーク付けされているかどうかを示す。
さらに、LHL検出(順次的読み込みの一貫性)に関して、各読み込み命令がLRQF218に対してチェックされ、LHLの場合に、より新しい読み込み命令がフラッシュされるか、またはより古い読み込みの後のすべてのものがフラッシュされる。
さらに、larxヒットlarxのケースに関して、各LARX命令がLRQF218に対してチェックされ、そのような状況が検出された場合に、より新しいLARX命令がフラッシュされるか、またはより古いLARXの後のすべてのものがフラッシュされる。
このようにして、本明細書に記載された技術的解決策は、EAのみを使用し、すべての読み込みおよび格納の経路で、(変換用のRAおよびCAMポートを格納するための)時間およびチップ面積に関してより費用のかかるEAからRAへの変換を使用しないで、ハザード検出を容易にする。さらに、これらの技術的解決策は、改善されたタイミングでSHLを検出し、時間においてDVALを抑制することを容易にする。
図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は、このプロセスの間に、OoOウィンドウ内のシノニムを確実に追跡する。
このようにして、読み込みに関して上記の方法を実装することによって、EAに基づくL1ディレクトリ内にEAヒットが存在する場合、アドレス変換が実行されない。これによって、L1ディレクトリがRAに基づく通常のプロセッサを改良し、L1ディレクトリでの読み込みの失敗の場合に、L2ディレクトリおよびその先に送信されるRAを取得する変換のために、EAをEARTテーブルに送信することを引き起こす。
さらに、格納の場合、本明細書に記載された方法では、LSUが、ERTテーブルを調べてRAを決定する必要があり、その後、このRAは、格納がSRQから排出されるときにキャッシュ(L1、L2、メモリ)まで排出するために、SRQRに格納される。SRQRは、すべてのRAを格納のために保持する。RAは、ネスト(すなわち、L2、メモリ、およびメモリ・サブシステムのその他のユニット)に排出するためにのみ格納される。RAは、通常の解決策で使用されているように、ロード・ヒット・ストア、ストア・ヒット・ロード、ロード・ヒット・ロードのいずれのタイプのOoO実行のハザード検出にも、使用されることがない。格納のためのRA計算は、格納の完了後にLSUが格納に関する割り込みを処理できないため、格納が完了する前に発生する(格納は、アドレス変換に関連する割り込みを生成することがあり、この割り込みは、格納が完了する前に処理される)。ここで、格納が(SRQRから)発行されるときにRA計算が実行され、このようにして、LSUがアドレス変換を実行する必要がないようにする。このようにして、格納が発行され、OoOに実行されてから、順序通りに完了し、その後、格納が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から読み込みが再発行される。
図6は、本発明の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内に作成される。
既存のエントリのページ・サイズが再読み込み中の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に導入される。
638に示されているように、RAのヒットがローカルERTインスタンス上に存在し、EAが既存のエントリに一致せず、既存のエントリが、異なるスレッド用である場合、ERTは、2つのEAが異なるスレッドからの同じRAにマッピングされる、別名化のケースを識別する。プロセッサがSDTに基づく実装を使用している場合、既存の一致するエントリのERT_ID、EAオフセット(40:51)にマッピングされるシノニムのエントリが、SDTに導入される。
上記の方法は、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を伴うケース(同じスレッドまたは異なるスレッドのケース)もサポートする。ここで、SDTを使用する実装に基づいて、2つのケースが説明される。
ERTの再読み込み時に、同じRAに対応する異なるEAを含む新しい命令が検出されたときに、LSUは、ERT255の代わりにSDTにエントリを導入する。元の(前の)ERTエントリのEAを使用してSDTのヒットが再開する。新しいシノニムのページ・サイズが、一致するRAを含む既存のERTエントリ内のページ・サイズより大きい場合、シノニムをSDTに導入する代わりに、既存のERTエントリが(より大きいページ・サイズを有する)新しいシノニムに置き換えられる。古いERTエントリは、最終的にシノニムとしてSDTに再導入される。
さらに、ERTのケースを再び参照し、LSUがプロセッサ106の別のコアからスヌープを受信する場合について考える。スヌープは、システム内の異なるコアから来る可能性がある(スヌープは、別のコアまたはスレッドを示し、同じ実アドレスでデータを変更している)。LSUは、コア内の他のスレッドへの可能性のあるスヌープとして、コア内のスレッドからのからの格納もチェックする。すべての(他のコアからの)スヌープまたは(コア内の他のスレッドからの)格納は、RAを伴う。そのような場合、LSUは、RAを逆変換し、ERT255に基づいて、対応するEA、ERT_ID、およびページ・サイズを決定する。LSUは、この情報を、次の構造の各々に格納されたERT_ID、PS、EA(40:56)と比較して、スヌープのヒットを検出し、適切な動作を実行する。例えば、LRQFエントリにおいてスヌープのヒットが検出された場合、LSUは、可能性のあるロード・ヒット・ロードのアウトオブオーダーのハザードを示す。EAD290においてスヌープのヒットが検出され、スヌープが異なるコアからである場合、LSUがL1の無効化を開始する。格納が共有ラインに対する別のスレッドからである場合、ラインが新しい格納を自動的に取得し、更新される。
LSUがSDTを使用し、スヌープのヒットがLMQに存在する場合、LSUは、L1 Dキャッシュに格納しないようにLMQエントリも更新し、SRQエントリがSRQ内のスヌープに使用されず、LHSのEAがRAのヒットに失敗する形式のチェックのみに使用され、新しいSDTエントリがスヌープのヒットに対して作成される。
したがって、前述したように、本明細書に記載された実行フローでの、EAのみに基づくLSUに伴う技術的課題は、スレッドでのEAのシノニムの技術的課題である。例えば、同じスレッドのEAのシノニムである(すなわち、1つのスレッドからの2つの異なるEAが同じRAにマッピングされる)。そのような技術的課題は、OoOウィンドウが、次のように少なくとも2つのL1のアクセスを含んでいる場合、LHS、SHL、LHLにわたることがある。
Tid=w、EA(0:51)=x=>RA(8:51)=z、および
Tid=w、EA(0:51)=y=>RA(8:51)=z
本明細書に記載された技術的解決策は、LSUの別のサブユニットであるSDTを使用することによって、技術的課題に対処する。1つまたは複数の例では、SDTは、異なるEAが同じRAを有しているケースを処理するために、16個のエントリを含む。そのような異なるEAは、すべて同じRAに変換されるため、シノニムと呼ばれる。SDTは、LSU内のそのようなシノニムのテーブルである。SDTは、ERTの失敗時に、AGEN(アドレス生成)でアクセスされる。1つまたは複数の例では、agenであるL/S動作のスレッドに対して有効なSDTエントリが存在するなどの場合にのみ、制限付きでSDTがアクセスされてよい。
図8は、本発明の1つまたは複数の実施形態に従うシノニム検出テーブル(SDT)800の例示的な構造を示している。描かれた例は、16個のエントリを含む場合を示しているが、他の例では、SDT800がこの例とは異なる数のエントリを含んでよいということに、注意するべきである。SDT800内のエントリは、少なくとも、発行アドレス{発行Tid(0:1), 発行EA(0:51)}、ページ・サイズ(0:1)(例えば、4k、64k、2MB、16MB)、および再開アドレス{EA(40:51), ERT ID(0:6)}のフィールドを含む。1つまたは複数の例では、各エントリが、SDTエントリが有効であるかどうかを示す「有効性」フィールド(図示されていない)を含んでもよい。開始がL1に失敗する命令の場合、LSUは、命令をSDT800に対して比較する。開始された命令が、元のアドレスの比較でSDTにヒットした場合、LSUが命令を拒否し、SDTエントリからの対応する置換アドレスを使用して命令を再開する。例えば、LSUは、置換アドレス(40:51)をSRQ LHSに使用し、実行パイプライン内のERT IDを「強制的に一致させる」。
本明細書において説明されているように、ERTの再読み込み中に、エントリがSDT800に追加される。例えば、ERTの再読み込み中に、再読み込みRAが、有効なERTエントリに対して比較される。一致するRAを含むERTエントリがすでに存在し、追加のtid_enビットのみが元のERTエントリに設定されているEAのヒットのケースでない場合、既存のERTエントリからEA(32:51)が読み取られ、エントリをERT255に追加する代わりに、エントリがSDT800に導入される。
SDT800はエントリ数が制限されているため、エントリが置き換えられる。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を含むエントリをSDT800に導入する。
ここで、その後のほとんどの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ヒット・オーバーライド・フラグが使用される。
本明細書に記載された技術的解決策は、このようにして、EAのみを使用することを容易にし、読み込み/格納経路においてEART(通常はプロセッサによって使用されていた)が参照されず、さらに、SHLの検出および時間におけるDVALの抑制がタイミング問題を引き起こさないように、技術的優位性を実現する。さらに、本明細書に記載された技術的解決策は、EAのみを使用することに伴う技術的問題、例えば、2つの異なるEAが同じRAにマッピングされた場合に、LHS、SHL、LHLの検出が失敗することがあるなどの問題に対処する。本明細書に記載された技術的解決策は、シノニム検出テーブル(SDT)のいずれかをOoOウィンドウ内の命令に使用することによって、そのような技術的問題に対処する。これらの技術的解決策は、特に、チップ面積の削減(RAを格納しないことによる)、電力消費の削減(EA−RAを変換しないことによる)、および待ち時間の改善を含む、さまざまな技術的優位性を実現する。
ここで、本発明の1つまたは複数の実施形態の一部または全部の態様を実装するためのコンピュータ・システム1000のブロック図である図10を参照する。本明細書に記載された処理は、ハードウェア、ソフトウェア(例えば、ファームウェア)、またはハードウェアとソフトウェアの組み合わせにおいて実装されてよい。実施形態例では、記載された方法は、少なくとも一部においてハードウェアに実装されてよく、モバイル・デバイス、パーソナル・コンピュータ、ワークステーション、マイクロコンピュータ、またはメインフレーム・コンピュータなどの、専用または汎用コンピュータ・システム1000のマイクロプロセッサの一部であってよい。
実施形態例では、図10に示されているように、コンピュータ・システム1000は、プロセッサ1005、メモリ・コントローラ1015に結合されたメモリ1012、および1つまたは複数の入力デバイス1045、またはローカルI/Oコントローラ1035を介して通信によって結合された周辺機器などの出力デバイス1047、あるいはその組み合わせを含む。これらのデバイス1047および1045は、例えば、プリンタ、スキャナ、マイクロホンなどを含んでよい。従来のキーボード1050およびマウス1055は、I/Oコントローラ1035に結合されてよい。I/Oコントローラ1035は、例えば、1つまたは複数のバスあるいは従来技術において知られたその他の有線接続または無線接続であってよい。I/Oコントローラ1035は、簡単にするために省略されている、通信を可能にするためのコントローラ、バッファ(キャッシュ)、ドライバ、リピータ、およびレシーバなどの追加の要素を含んでよい。
I/Oデバイス1047、1045は、例えばディスク・ストレージおよびテープ・ストレージ、ネットワーク・インターフェイス・カード(NIC:network interface card)または変調器/復調器(他のファイル、デバイス、システム、またはネットワークにアクセスするため)、無線周波(RF:radio frequency)またはその他のトランシーバ、電話インターフェイス、ブリッジ、ルータなどの、入力および出力の両方と通信するデバイスをさらに含んでよい。
プロセッサ1005は、ハードウェア命令またはソフトウェア、具体的には、メモリ1012に格納されたソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ1005は、カスタムメイドであるか、または市販されたプロセッサ、中央処理装置(CPU:central processing unit)、コンピュータ・システム1000に関連付けられた複数のプロセッサ間の補助プロセッサ、(マイクロチップまたはチップ・セットの形態での)半導体ベースのマイクロプロセッサ、マクロプロセッサ、または命令を実行するためのその他のデバイスであってよい。プロセッサ1005は、実行可能命令のフェッチを高速化するための命令キャッシュ、データのフェッチおよび格納を高速化するためのデータ・キャッシュ、および実行可能命令とデータの両方の仮想アドレスから物理アドレスへの変換を高速化するために使用されるトランスレーション・ルックアサイド・バッファ(TLB:translation look-aside buffer)などのキャッシュを含むことができるが、これらに限定されない。キャッシュは、さらに多くのキャッシュ・レベル(L1、L2など)の階層として構造化されてよい。
メモリ1012は、揮発性メモリ素子(例えば、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つまたは組み合わせを含んでよい。さらに、メモリ1012は電子、磁気、光、またはその他の種類のストレージ媒体を組み込んでよい。メモリ1012が、さまざまなコンポーネントが互いに遠く離れた位置にあるが、プロセッサ1005によってアクセスされてよい、分散アーキテクチャを含むことができるということに注意する。
メモリ1012内の命令は、1つまたは複数の別々のプログラムを含んでよく、それらのプログラムの各々は、論理的機能を実装するための実行可能命令の順序付けられたリストを含む。図10の例では、メモリ1012内の命令は、適切なオペレーティング・システム(OS:operating system)1011を含む。オペレーティング・システム1011は、基本的に他のコンピュータ・プログラムの実行を制御することができ、スケジューリング、入出力制御、ファイルおよびデータの管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
例えば、プロセッサ1005の命令またはその他の取り出し可能な情報を含む追加データが、ストレージ1027に格納されてよく、ストレージ1027はハード・ディスク・ドライブまたは半導体ドライブなどのストレージ・デバイスであってよい。メモリ1012またはストレージ1027に格納される命令は、プロセッサ1005が本開示のディスパッチ・システムおよび方法の1つまたは複数の態様を実行できるようにする命令を含んでよい。
コンピュータ・システム1000は、ディスプレイ1030に結合されたディスプレイ・コントローラ1025をさらに含んでよい。実施形態例では、コンピュータ・システム1000は、ネットワーク1065に結合するためのネットワーク・インターフェイス1060をさらに含んでよい。ネットワーク1065は、コンピュータ・システム1000と、外部サーバ、クライアントなどとの間での、ブロードバンド接続を介した通信用のIPベースのネットワークであってよい。ネットワーク1065は、コンピュータ・システム1000と外部システムの間で、データを送受信する。実施形態例では、ネットワーク1065は、サービス・プロバイダによって管理された管理IPネットワークであってよい。ネットワーク1065は、例えば、WiFi、WinMaxなどの無線プロトコルおよび無線技術を使用して、無線方式で実装されてよい。ネットワーク1065は、ローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット、またはその他の類似する種類のネットワーク環境などの、パケット交換ネットワークであってもよい。ネットワーク1065は、固定無線ネットワーク、無線ローカル・エリア・ネットワーク(LAN:local area network)、無線広域ネットワーク(WAN:wide areanetwork)、パーソナル・エリア・ネットワーク(PAN:personal area network)、仮想プライベート・ネットワーク(VPN:virtual private network)、インターネット、またはその他の適切なネットワーク・システムであってよく、信号を送受信するための機器を含むことができる。
実アドレスを実効アドレスに基づく読み込み/格納ユニット内のメモリ・サブシステムに送信するためのアドレス変換を提供するシステムおよび方法が、コンピュータ・プログラム製品において、または図10に示されているようなコンピュータ・システム1000において、全体的または部分的に具現化され得る。
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲を逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係(例えば、上、下、隣接など)が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、各実体の結合は、直接的結合または間接的結合を指すことができ、各実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されているように、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意のその他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、または装置に固有の、その他の要素を含むことができる。
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも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は、アウトオブオーダー(OoO)ウィンドウ内の複数の命令を実行するように構成されており、前記実行することは、
    第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT)エントリをERTに作成することであって、前記ERTエントリが、前記第1の実効アドレスを前記第1の実アドレスにマッピングする、前記作成することと、
    やはり前記第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、
    シノニム検出テーブル(SDT)エントリをSDTに作成することであって、前記SDTエントリが前記第2の実効アドレスを前記ERTエントリにマッピングする、前記作成することと、
    前記第2の命令内の前記第2の実効アドレスを前記第1の実効アドレスに置き換えることによって前記第2の命令を再開することと
    を含んでいる、処理ユニット。
  2. やはり前記第1の実アドレスに対応する前記第2の実効アドレスに応答して、
    前記第1の命令に関連付けられた第1のページ・サイズを、前記第2の命令に関連付けられた第2のページ・サイズと比較し、
    前記第1のページ・サイズが前記第2のページ・サイズより大きいということに応答して、前記第2の実効アドレスを前記ERTにマッピングする前記SDTエントリが作成される、請求項1に記載の処理ユニット。
  3. 前記第1のページ・サイズが前記第2のページ・サイズより小さいということに応答して、
    前記第1の実効アドレスと前記第1の実アドレスの間の前記マッピングを前記第2の実効アドレスと前記第1の実アドレスの間のマッピングに置き換えることによって、前記ERTエントリを変更する、請求項2に記載の処理ユニット。
  4. 前記第1のページ・サイズが前記第2のページ・サイズより小さいということにさらに応答して、
    前記第1の実効アドレスを前記ERTエントリにマッピングする前記SDTエントリを作成する、請求項3に記載の処理ユニット。
  5. 前記SDTエントリが、前記第1の命令が開始されるスレッドのスレッド識別子と、前記第1の命令の前記実効アドレスと、前記第1の命令のページ・サイズと、前記第1の命令の再開実効アドレスと、前記対応するERTエントリのERTエントリ識別子とを含んでいる、請求項1に記載の処理ユニット。
  6. 前記第1の命令が、読み込み命令および格納命令から成る命令のグループからの命令である、請求項1に記載の処理ユニット。
  7. 前記第1の実効アドレスを使用して開始された命令の数を示すようにカウンタが維持され、前記カウンタが所定のしきい値を超えることに応答して、前記第1の実効アドレスに対応する前記ERTエントリを無効化する、請求項1に記載の処理ユニット。
  8. 処理ユニットによって1つまたは複数のアウトオブオーダー命令を実行するためのコンピュータ実装方法であって、前記方法は、
    読み込み/格納ユニット(LSU)によってアウトオブオーダー(OoO)ウィンドウから複数の命令を発行することを含んでおり、前記発行することが、
    第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT)エントリをERTに作成することであって、前記ERTエントリが、前記第1の実効アドレスを前記第1の実アドレスにマッピングする、前記作成することと、
    やはり前記第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、
    シノニム検出テーブル(SDT)エントリをSDTに作成することであって、前記SDTエントリが前記第2の実効アドレスを前記ERTエントリにマッピングする、前記作成することと、
    前記第2の命令内の前記第2の実効アドレスを前記第1の実効アドレスに置き換えることによって前記第2の命令を再開することと
    を含んでいる、コンピュータ実装方法。
  9. やはり前記第1の実アドレスに対応する前記第2の実効アドレスに応答して、
    前記第1の命令に関連付けられた第1のページ・サイズを、前記第2の命令に関連付けられた第2のページ・サイズと比較し、
    前記第1のページ・サイズが前記第2のページ・サイズより大きいということに応答して、前記第2の実効アドレスを前記ERTエントリにマッピングする前記SDTエントリが作成される、請求項8に記載のコンピュータ実装方法。
  10. 前記第1のページ・サイズが前記第2のページ・サイズより小さいということに応答して、
    前記第1の実効アドレスと前記第1の実アドレスの間の前記マッピングを前記第2の実効アドレスと前記第1の実アドレスの間のマッピングに置き換えることによって、前記ERTエントリを変更する、請求項9に記載のコンピュータ実装方法。
  11. 前記第1のページ・サイズが前記第2のページ・サイズより小さいということに応答して、
    前記第1の実効アドレスを前記ERTエントリにマッピングする前記SDTエントリを作成する、請求項10に記載のコンピュータ実装方法。
  12. 前記SDTエントリが、前記第1の命令が開始されるスレッドのスレッド識別子と、前記第1の命令の前記実効アドレスと、前記第1の命令のページ・サイズと、前記第1の命令の再開実効アドレスと、前記対応するERTエントリのERTエントリ識別子とを含んでいる、請求項8に記載のコンピュータ実装方法。
  13. 前記第1の命令が、読み込み命令および格納命令から成る命令のグループからの命令である、請求項8に記載のコンピュータ実装方法。
  14. 前記第1の実効アドレスを使用して開始された命令の数を示すようにカウンタが維持され、前記カウンタが所定のしきい値を超えることに応答して、前記第1の実効アドレスに対応する前記ERTエントリを無効化する、請求項8に記載のコンピュータ実装方法。
  15. プログラム命令が具現化されているコンピュータ可読記憶媒体を備えているコンピュータ・プログラム製品であって、前記プログラム命令は、プロセッサに、
    読み込み/格納ユニット(LSU)によってアウトオブオーダー(OoO)ウィンドウから複数の命令を発行すること
    を含んでいる動作を実行させるように前記プロセッサによって実行可能であり、前記複数の命令は、
    第1の実アドレスに対応する第1の実効アドレスが第1の命令によって使用されているということの決定に応答して、実効実テーブル(ERT)エントリをERTに作成することであって、前記ERTエントリが、前記第1の実効アドレスを前記第1の実アドレスにマッピングする、前記作成することと、
    やはり前記第1の実アドレスに対応する第2の実効アドレスである実効アドレスのシノニムが第2の命令によって使用されているということの決定に応答して、
    シノニム検出テーブル(SDT)エントリをSDTに作成することであって、前記SDTエントリが前記第2の実効アドレスを前記ERTエントリにマッピングする、前記作成することと、
    前記第2の命令内の前記第2の実効アドレスを前記第1の実効アドレスに置き換えることによって前記第2の命令を再開することと
    によって発行される、コンピュータ・プログラム製品。
  16. やはり前記第1の実アドレスに対応する前記第2の実効アドレスに応答して、
    前記第1の命令に関連付けられた第1のページ・サイズを、前記第2の命令に関連付けられた第2のページ・サイズと比較し、
    前記第1のページ・サイズが前記第2のページ・サイズより大きいということに応答して、前記第2の実効アドレスを前記ERTエントリにマッピングする前記SDTエントリが作成される、請求項15に記載のコンピュータ・プログラム製品。
  17. 前記第1のページ・サイズが前記第2のページ・サイズより小さいということに応答して、
    前記第1の実効アドレスと前記第1の実アドレスの間の前記マッピングを前記第2の実効アドレスと前記第1の実アドレスの間のマッピングに置き換えることによって、前記ERTエントリを変更する、請求項16に記載のコンピュータ・プログラム製品。
  18. 前記第1のページ・サイズが前記第2のページ・サイズより小さいということに応答して、
    前記第1の実効アドレスを前記ERTエントリにマッピングする前記SDTエントリを作成する、請求項17に記載のコンピュータ・プログラム製品。
  19. 前記SDTエントリが、前記第1の命令が開始されるスレッドのスレッド識別子と、前記第1の命令の前記実効アドレスと、前記第1の命令のページ・サイズと、前記第1の命令の再開実効アドレスと、前記対応するERTエントリのERTエントリ識別子とを含んでいる、請求項15に記載のコンピュータ・プログラム製品。
  20. 前記第1の命令が、読み込み命令および格納命令から成る命令のグループからの命令である、請求項15に記載のコンピュータ・プログラム製品。
JP2020517947A 2017-10-06 2018-10-03 アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理 Active JP7025100B2 (ja)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US15/726,627 2017-10-06
US15/726,596 2017-10-06
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,627 US11175924B2 (en) 2017-10-06 2017-10-06 Load-store unit with partitioned reorder queues with single cam port
US15/825,453 2017-11-29
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 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/057694 WO2019069255A1 (en) 2017-10-06 2018-10-03 MANAGING EFFECTIVE ADDRESS SYNONYMS IN A LOADING-STORAGE UNIT OPERATING WITHOUT ADDRESS TRANSLATION

Publications (2)

Publication Number Publication Date
JP2020536310A true JP2020536310A (ja) 2020-12-10
JP7025100B2 JP7025100B2 (ja) 2022-02-24

Family

ID=65994519

Family Applications (2)

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

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2020517847A Active JP7064273B2 (ja) 2017-10-06 2018-10-03 単一のcamポートを使用する分割された順序変更キューを備える読み込み/格納ユニット

Country Status (5)

Country Link
JP (2) JP7064273B2 (ja)
CN (2) CN111133421B (ja)
DE (2) DE112018004004T5 (ja)
GB (2) GB2579757B (ja)
WO (2) WO2019069256A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2023056289A (ja) 2021-10-07 2023-04-19 富士通株式会社 演算処理装置および演算処理方法
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
JP2004192615A (ja) * 2002-12-12 2004-07-08 Internatl Business Mach Corp <Ibm> ハードウェア管理仮想−物理アドレス変換機構
US20090063823A1 (en) * 2007-08-30 2009-03-05 Burky William E Method and System for Tracking Instruction Dependency in an Out-of-Order Processor
US20160188486A1 (en) * 2014-12-26 2016-06-30 Wisconsin Alumni Research Foundation Cache Accessed Using Virtual Addresses

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6694425B1 (en) 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
US6931639B1 (en) * 2000-08-24 2005-08-16 International Business Machines Corporation Method for implementing a variable-partitioned queue for simultaneous multithreaded processors
US7343469B1 (en) * 2000-09-21 2008-03-11 Intel Corporation Remapping I/O device addresses into high memory using GART
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
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
US8966232B2 (en) * 2012-02-10 2015-02-24 Freescale Semiconductor, Inc. Data processing system operable in single and multi-thread modes and having multiple caches and method of operation
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

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004192615A (ja) * 2002-12-12 2004-07-08 Internatl Business Mach Corp <Ibm> ハードウェア管理仮想−物理アドレス変換機構
US20090063823A1 (en) * 2007-08-30 2009-03-05 Burky William E Method and System for Tracking Instruction Dependency in an Out-of-Order Processor
US20160188486A1 (en) * 2014-12-26 2016-06-30 Wisconsin Alumni Research Foundation Cache Accessed Using Virtual Addresses

Also Published As

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

Similar Documents

Publication Publication Date Title
US10534616B2 (en) Load-hit-load detection in an out-of-order processor
US10963248B2 (en) Handling effective address synonyms in a load-store unit that operates without address translation
US10977047B2 (en) Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US10776113B2 (en) Executing load-store operations without address translation hardware per load-store unit port
US10324856B2 (en) Address translation for sending real address to memory subsystem in effective address based load-store unit
US11175925B2 (en) Load-store unit with partitioned reorder queues with single cam port
US10606593B2 (en) Effective address based load store unit in out of order processors
US10579387B2 (en) Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor
US10572257B2 (en) Handling effective address synonyms in a load-store unit that operates without address translation
US9740623B2 (en) Object liveness tracking for use in processing device cache
JP7025100B2 (ja) アドレス変換なしで動作する読み込み/格納ユニットでの実効アドレスのシノニムの処理
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

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

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20220203

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220208

R150 Certificate of patent or registration of utility model

Ref document number: 7025100

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150