JP2023047283A - クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路 - Google Patents

クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路 Download PDF

Info

Publication number
JP2023047283A
JP2023047283A JP2022110794A JP2022110794A JP2023047283A JP 2023047283 A JP2023047283 A JP 2023047283A JP 2022110794 A JP2022110794 A JP 2022110794A JP 2022110794 A JP2022110794 A JP 2022110794A JP 2023047283 A JP2023047283 A JP 2023047283A
Authority
JP
Japan
Prior art keywords
decode
cluster
toggle
instruction
decoding
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.)
Pending
Application number
JP2022110794A
Other languages
English (en)
Inventor
ラマクリシュナン サンダララジャン
Ramakrishnan Sundararajan
コムズ ジョナサン
Combs Jonathan
ジェイ. リヒト マーティン
J Licht Martin
スリナス サントシュ
Srinath Santhosh
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.)
Intel Corp
Original Assignee
Intel 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
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2023047283A publication Critical patent/JP2023047283A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/0757Error or fault detection not based on redundancy by exceeding limits by exceeding a time limit, i.e. time-out, e.g. watchdogs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路を有する装置及び方法を提供する。【解決手段】ハードウェアプロセッサコア100は、複数のデコーダ回路114A~116Aを含む第1のデコードクラスタ108Aと、複数のデコーダ回路114B~116Bを含む第2のデコードクラスタ108Bと、第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信をトグルするトグル点制御回路120と、を含む。トグル点制御回路は、第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡し、デコードの特性回数に基づいて、決定した候補トグル点位置にトグル点を挿入させる。【選択図】図1

Description

本開示は、一般に、電子機器に関し、より具体的には、本開示の一例は、クラスタ化されたデコードパイプラインのためのトグル点挿入を実施するための回路に関する。
プロセッサ、またはプロセッサのセットは、命令セット、例えば、命令セットアーキテクチャ(ISA)からの命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、一般に、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレシングモード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに外部入出力(I/O)を含む。本明細書における命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、またはマイクロ命令、例えば、マクロ命令をデコードするプロセッサのデコーダから生じる命令を指すことができることに留意されたい。
本開示は、添付の図面の図に限定ではなく例として示されており、同様の参照符号は同様の要素を示している。
本開示の例による、複数のデコードクラスタおよびトグル点制御回路を有するプロセッサコアを示す。
本開示の例による、例示的なクラスタ化されたデコードプログラムフローを示す。
本開示の例による、トグル点追跡データ構造の例示的なフォーマットを示す。
本開示の例による、動的負荷分散のフロー図を示す。
本開示の例による、有限状態機械を保持する無効化のフロー図を示す。
本開示の例による、複数のデコードクラスタ間で命令ストリームのデコーディングを切り替えるためにトグル点を挿入するための動作を示すフロー図である。
本開示の例による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本開示の例によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な例、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
本開示の例による、オンダイインターコネクトネットワークへのその接続およびレベル2(L2)キャッシュのそのローカルサブセットを伴う、単一のプロセッサコアのブロック図である。
本開示の例による、図8Aのプロセッサコアの一部の拡大図である。
本開示の例による、1つよりも多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサのブロック図である。
本開示の一例による、システムのブロック図である。
本開示の一例による、より具体的な例示的なシステムのブロック図である。
本開示の一例による、第2のより具体的な例示的なシステムのブロック図を示す。
本開示の一例による、システムオンチップ(SoC)のブロック図を示す。
本開示の例による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
以下の説明では、多数の具体的な詳細が記載される。しかしながら、本開示の例は、これらの具体的な詳細なしで実施することができることが理解される。他の例では、この説明の理解を不明瞭にしないように、周知の回路、構造、および技術は詳細に示されていない。
本明細書における「一例」「例」などへの言及は、説明された当該例が、特定の特徴、構造、または特性を含み得ることを示すが、全ての例が、必ずしも当該特定の特徴、構造、または特性を含まなくてもよい。さらに、そのような語句は、必ずしも同じ例に言及するわけではない。さらに、ある一例に関連して特定の特徴、構造または特性が説明されている場合、明示の説明の有無に関わらず、他の例に関連して、そのような特徴、構造または特性に影響が及ぶことは、当業者の知識の範囲内であると考えられる。
(例えば、ハードウェア)プロセッサ(例えば、1つまたは複数のコアを有する)は、(例えば、ユーザレベル)命令(例えば、命令のスレッド)を実行して、データを操作し、例えば、算術、論理、または他の関数を実行することができる。例えば、ソフトウェアは、対応する動作を実行するために複数の命令を実行する(例えば、デコードして実行する)プロセッサ(例えば、コアまたはそのコア)に提供される複数の命令(例えば、マクロ命令)を含むことができる。特定の例では、プロセッサは、命令を1つまたは複数のマイクロ演算(μopsまたはmicro-ops)に変換(例えば、デコード)するための回路(例えば、1つまたは複数のデコーダ回路)を含み、例えば、これらのマイクロ演算はハードウェアによって(例えば、実行回路によって)直接実行される。命令(例えば、マクロ命令)に対応する1つまたは複数のマイクロ演算は、その命令のマイクロコードフローと称され得る。マイクロ演算は、マイクロ命令、例えば、プロセッサによるマクロ命令のデコーディングから生じるマイクロ命令と称され得る。一例では、命令は、命令セットアーキテクチャ(ISA)の64ビットおよび/または32ビット命令である。一例では、命令は、Intel(登録商標)命令セットアーキテクチャ(ISA)の(例えば、64ビットおよび/または32ビット)命令である。特定の例では、1つまたは複数のマイクロ演算への命令の変換は、プロセッサのパイプラインの命令フェッチおよび/またはデコード部分に関連付けられる。
特定のプロセッサ(例えば、特定のコア)は、例えば、デコード帯域幅を効率的に増加させる方法として、複数のデコードクラスタ(例えば、各クラスタは、それ自体の複数のデコーダ回路を有する)を実装する。特定の例では、デコーダ回路は、(例えば、マクロ)命令を、実行回路によって(例えば、プリミティブとして)実行される1つまたは複数のマイクロ演算のセットにデコードする。
しかしながら、特定の例では(例えば、フロントエンドフェッチユニットなどのフロントエンド回路において)、多数のデコードされる命令は複数のデコードクラスタで並列化されている。特定のプロセッサ(例えば、特定のコア)が複数の(例えば、プログラム順不同)デコードクラスタを実装するときに生じる問題は、デコード対象命令の割り当てを第1のデコードクラスタから第2の(または第3などの)デコードクラスタに切り替えるときを決定する(例えば、割り当てる)方法である。特定の例では、複数のデコードクラスタに作業を割り当てるには、デコード(例えば、およびフェッチ)(例えば、分岐予測器による)のために生成されている一連の命令(例えば、命令ポインタ)をデコード(例えば、フェッチおよびデコード)のための開始領域および終了領域に変換するための回路(例えば、論理回路)が必要である。特定の例では、分岐命令(例えば、分岐予測器による実行された分岐の予測)は、例えば、各デコードクラスタがそのそれぞれのデコーディングタスクで並列に動作する機会を提供するために、ストリーム内の以前の前の命令を第1のデコードクラスタに送信することから、次にストリーム内の以下の命令を第2のデコードクラスタに送信することへの命令ストリームのトグルをトリガするために使用される。特定の例では、分岐の最後のバイト(例えば、分岐命令)は現在の領域(例えば、第1のデコードクラスタによってデコードされているブロック)を終了し、実行された分岐のターゲットは次の領域(例えば、第2のデコードクラスタによるデコーディングのために割り当てられているブロック)を開始する。
残念ながら、分岐(例えば、実行された分岐)は、全てのコードシーケンス内に均一に分布しているわけではない。これは、制御フロー命令が非常に少ない場合に、計算集中コードの長いシーケンスにとって特に問題である。特定の命令ストリーム(例えば、Standard Performance Evaluation Corporation(SPEC)浮動小数点(FP)ベンチマークコード)内の浮動小数点シーケンスは、単一の実行された分岐なしで数百の命令を処理することができる。トグル形式のないこのような長いシーケンスは、クラスタ化されたフロントエンドを効果的に狭める。これに対処するために、本明細書の特定の例は、特定の(例えば、長い連続)コード領域内にトグル点を挿入することによって動的負荷分散を利用する。
特定の例では、プロセッサ(例えば、コア)は、フロントエンド(例えば、デコード)クラスタ間をトグルするためにコード内の既存の実行された分岐に依存し、したがって、(例えば、ロングシーケンシャル)コードシーケンス内に追加のトグルを挿入する最も便利な方法は、選択された非分岐命令が実行された分岐であったかのように長いシーケンス内で処理することである(例えば、フロントエンド内でそのようにのみ処理される)。これらのトグル点は、「偽の分岐」と称され得る。したがって、特定の例は、コアの分岐予測器(例えば、分岐ターゲットバッファ(BTB))のデータ構造を使用して、これらの偽の分岐の指示を有し(例えば、格納し)、デコードクラスタのトグル、したがって改善された負荷分散を可能にする。
本明細書の例は、例えば、本明細書に開示されたトグル点(例えば、偽の分岐)制御(例えば、挿入)回路および方法を介して、クラスタ化されたフロントエンドにおける動的負荷分散を提供する。本明細書の例は、トグル点の挿入および/または除去の濾過を介して最適化された動的負荷分散を提供する。特定の例では、本明細書で開示される動的負荷分散は、以前に見られた候補トグル点のデータ構造(例えば、テーブル)と共に、有限状態機械(FSM)を利用することによる最適なトグル点(例えば、偽の分岐)の挿入の両方を処理する。本明細書の例は、例えばコード経路の変更に起因して、非最適に配置された(例えば、コードの命令ストリームにおいて)挿入されたトグル点を割り当て解除するための無効化スキームを提供する。したがって、本明細書の例は、例えば、動的コード(例えば、動的に変化するコード)の複雑な性質を全て処理しながら、クラスタ化されたデコーダにわたるデコーディング並列性を増加させ、分岐予測器における汚染を最小化し、および/またはフェッチ待ち時間を最適化する。
本明細書の例は、クラスタ化されたデコードマイクロアーキテクチャを提供し、デコードクラスタは、デコードするためにシーケンシャル(例えば、「生」)命令バイトのブロックが割り当てられる。特定の例では、シーケンスストリームのブレーク(例えば、実行された分岐)は、デコードクラスタ間で命令ストリームをトグルするために使用される。しかしながら、(例えば、シーケンシャル命令の非常に長いシーケンスに起因する)トグル点の欠如は、特定の例では並列性を制限する。本明細書の例は、例えば、長い命令ストリームを分割することによってこの問題を解決するトグル点挿入ハードウェアおよび方法について開示する。
特定の例では、トグル点制御回路(例えば、フィルタリング制御ロジック)(例えば、および対応するデータ構造(例えば、テーブル))は、動的負荷分散、例えば、クラスタ化されたフロントエンドの性能を展開するために重要である。本明細書の特定の例は、スケーラブルなトグル挿入フィルタのための回路および方法に関する。以下では、複数のデコードクラスタを有するプロセッサ(例えば、コア)のためのトグル点(例えば、偽の分岐)をどのように追加し、どのように除去するかを制御する回路(例えば、論理回路)およびデータ構造(例えば、テーブル)の例について説明する。本明細書の特定の例は、プログラマが実際に実行されたジャンプ(例えば、それは単に、例えば、非常に長いシーケンス内で、次のシーケンシャル命令にジャンプする)またはトグルをトリガするための別の指示を挿入することを必要とせず、例えば、これらの例は、代わりに、トグル点、例えば、実際に実行された分岐ではないトグル点の挿入によって(例えば、「偽の分岐」であるトグル点を挿入することによって)トグルをトリガするハードウェアを含む。本明細書の例は、例えば、人間の心ならびに/またはペンおよび紙を利用することなく、例えば、人間の心ならびに/またはペンおよび紙を利用して、(i)第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求される命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定することなく、(ii)命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡することなく、または(iii)第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、回数に基づいて、位置にトグル点を挿入させることなく、例えば、トグル点を挿入するために人間(例えば、プログラマ)を必要とする代わりに、ハードウェア(例えば、本明細書に開示されるトグル点制御回路)を利用する。特定の例では、2つよりも多くのデコードクラスタが存在し、したがって、「第1の」クラスタから「第2の」クラスタへの切り替えは、任意のデコードクラスタから他のデコードクラスタのいずれか、例えば、次の論理的に連続したデコードクラスタへの切り替えであってもよいことを理解されたい。
図1は、本開示の例による、複数のデコードクラスタ108A~108Bおよびトグル点制御回路120を有するプロセッサコア100を示す。
プロセッサコア100は、例えばシステムのプロセッサの複数のコアのうちの1つであってもよい。図示されているプロセッサコア100は、(例えば、プロセッサコア100によって実行されるできコード(例えば、命令)の1つまたは複数の分岐を予測するための)分岐予測器102を含む。
特定の例では、分岐動作(例えば、命令)は、例えば、無条件(例えば、分岐は、命令が実行されるたびに実行される)または条件付き(例えば、分岐の実行される方向は、条件に依存する)のいずれかであり、例えば、条件付き分岐(例えば、条件付きジャンプ)に続いて実行される命令は、分岐が依存する条件が解決されるまで確実に知られない。ここで、条件が解決されるまで待つのではなく、プロセッサの分岐予測器102(例えば、分岐予測器回路)は、分岐が実行されるか否かを予測するために分岐予測を実行する(例えば、投機的実行)ことができ、および/または(例えば、実行されると予測される場合)分岐のターゲット命令(例えば、ターゲットアドレス)を予測することができる。特定の例では、分岐が実行されると予測される場合、プロセッサコア100は、分岐の実行された方向(例えば、経路)の命令、例えば、予測された分岐ターゲットアドレスで見つかった命令をフェッチして投機的に実行する。分岐予測に続いて実行される命令は、プロセッサが予測が正しいかどうかをまだ判定していない特定の例では投機的である。特定の例では、プロセッサコア100は、パイプライン回路のバックエンド(例えば、実行回路136、および/またはリタイアメント(ライトバック)回路134において)で分岐命令を解決する。特定の例では、分岐命令がプロセッサによって(例えば、バックエンドによって)実行されないと判定された場合、実行された分岐命令の背後のパイプライン回路に現在ある全ての命令(例えば、およびそれらのデータ)がフラッシュされる(例えば、廃棄される)。特定の例では、分岐予測器102(例えば、分岐予測器回路)は、次の(例えば、入力)分岐を予測するために分岐の過去の挙動から学習する。特定の例では、分岐予測器102は、(例えば、元のプログラム順序で連続している)命令の適切なサブセットをコードのブロック(例えば、分岐命令で終了する)として予測する。一例として、プロセッサコア100は、実行するためのコードを受信する段階ができ、それに応答して、コードをブロックに分割することができる。
特定の例では、分岐予測器102は、例えば、予測された分岐、例えば、予測された実行された分岐に関する(例えば、本物および偽)情報を格納するために、分岐ターゲットバッファ(BTB)112を含む。特定の例では、分岐予測器102は、分岐命令(例えば、実行される可能性が高い分岐命令(例えば、予め選択された分岐命令))のターゲット命令を予測する。特定の例では、分岐予測器102(例えば、そのBTB112)は、その後、分岐命令のターゲット命令で更新される。特定の例では、ソフトウェアはハードウェアBTBを管理し、例えば、ソフトウェアは予測モードを指定し、またはBTBを書き込む命令のモードによって暗黙的に定義される予測モードを使用して、エントリにモードビットも設定する。特定の例では、分岐予測器102の各エントリ(例えば、そのBTB112において)は、タグフィールドおよびターゲットフィールドを含む。特定の例では、BTB内の各エントリのタグフィールドは、分岐命令を識別する命令ポインタ(例えば、メモリアドレス)の少なくとも一部を格納する。特定の例では、BTB内の各エントリのタグフィールドは、コード内の分岐命令を識別する命令ポインタ(例えば、メモリアドレス)を格納する。特定の例では、ターゲットフィールドは、同じエントリのタグフィールドで識別された分岐命令のターゲットの命令ポインタの少なくとも一部を格納する。特定の例では、分岐予測器102のエントリ(例えば、そのBTB112内)は、1つまたは複数の他のフィールドを含む。特定の例では、エントリは、分岐命令が実行されるかどうかの予測を支援するための別個のフィールドを含まず(または含み)、例えば、分岐命令が存在する場合(例えば、BTB内)、実行されると見なされる。
特定の例では、異なるタイプのハードウェア回路(例えば、論理回路)がアウトオブオーダクラスタリングデコーディングにおける負荷分散のために実装される。例えば、いくつかの例では、クラスタバランス回路は、正しく機能するためにプロセッサコアの実行パイプライン全体の十分な待ち行列に依存するバックプレッシャヒューリスティックを実装する。他の例では、クラスタバランス回路は、分岐予測器ハードウェアを使用して、または利用して、デコードされていない命令を特定のデコードクラスタへ割り当てる。これらの割り当ては、デコードクラスタのワークロードのバランスをとるように、および/またはデコードクラスタの全てがフルまたはほぼフルの入力キュー(例えば、命令キュー110A~110B)で動作するように試みる方法で行うことができる。特定の例では、クラスタバランス回路(例えば、トグル点制御回路120)は、デコード並列性を強制または増加させるために、追加のデータ(例えば、メタデータ)を有する予測された実行された分岐の分岐ターゲットバッファ(BTB)112エントリを拡張する。特定の例では、クラスタバランス回路(例えば、トグル点制御回路120)は、「偽の予測された実行された分岐」を表すエントリを挿入し、例えば、デコード並列性を強制または増加させるためにこれらのエントリをメタデータで拡張することができる。
特定の例では、分岐ターゲットバッファ112は、デコードクラスタ間の負荷分散アクションをトリガするために使用可能な情報を含むエントリを含む。特定の例では、分岐ターゲットバッファ112は、実際のおよび偽の予測された実行された分岐に関する情報を格納するように構成される。特定の例では、分岐ターゲットバッファ112は、複数のエントリを含む。特定の例では、分岐ターゲットバッファ112内のエントリは、以下のうちの1つまたは任意の組み合わせを含む:(i)分岐命令アドレスを表すデータを格納するための各エントリのフィールド(例えば、エントリにアクセスするために使用される)、(ii)そのアドレスがエントリの第1のフィールド内のデータによって表される分岐命令の予測されたターゲットアドレスを表すデータを格納するための各エントリのフィールド、例えば、偽の予測された分岐に対応するエントリの場合、データは予測された分岐アドレスではなくプログラム順序の次の命令のアドレスを表す、(iii)負荷分散重み値を表すデータを格納するための各エントリのフィールド(例えば、このフィールドにおける値は、プロセッサコアバックエンドもしくはその実行回路に配信されたマイクロ演算(uop)の数を示す実行パイプラインのダウンストリーム構成要素から受信したデータの相対値、各デコードクラスタによる、もしくは各ブロックについての、1つもしくは複数の閾値と比較した場合の各クラスタもしくはブロックのデコード待ち時間、および/もしくは各ブロックの実行待ち時間を示すことができ、特定の例では、このフィールドの「高い」値は、取得されたデータが特定の負荷分散アクション(クラスタ切り替えの強制もしくはクラスタ切り替えの抑制など)を実行するための閾値を超えていることを示し、このフィールドの「低い」値は、取得された値が閾値未満であることを示し、それを下回ると別の負荷分散アクションが実行される場合があり、および/もしくはこのフィールドの「中程度の」値は、実行パイプラインのダウンストリーム構成要素から取得したデータに基づいて、負荷分散アクションを実行する必要がないことを示す)、ならびに/または(iv)対応する予測された実行された分岐に関連付けられた1つもしくは複数の他のタグを表すデータ、例えば、対応するエントリが実際の予測された実行された分岐(例えば、「REAL」)を表すか、もしくは偽の予測された実行された分岐(例えば、「FAKE」)を表すかを示すデータを格納するための各エントリのフィールド。
特定の例では、分岐ターゲットバッファ112などの分岐ターゲットバッファ内のエントリは、クラスタを切り替えるかどうかおよびいつ切り替えるかを決定し、そうでなければ行われるはずのクラスタ切り替えを抑制し、ならびに/またはクラスタを切り替えるかどうかおよびいつ切り替えるか、もしくはそうでなければ行われるはずのクラスタ切り替えを抑制するかどうかおよびいつ抑制するかに関する決定を偏らせるために使用可能な任意のタイプの情報で注釈付けされる。特定の例では、ターゲットバッファ112内の異なるエントリ内に異なる数のフィールドが入力されてもよい。例えば、いくつかのフィールドは、特定の分岐命令エンコーディングに適用できない場合がある。特定の例では、分岐ターゲットバッファ112などの分岐ターゲットバッファの各エントリに含まれる情報のタイプは、uopカウントを表す数値データ、待ち時間値、命令キャッシュミス、命令TLBミス、および/または複数のデコードクラスタ間の不均衡なワークロードを示すことができる任意の他の情報を含む。特定の例では、1つまたは複数のフィールド内のデータは、実行パイプラインのダウンストリーム構成要素、分岐予測器、リタイアメントパイプライン(例えば、リタイアメントユニット)、命令キャッシュ、命令TLB、または他の場所から取得された2つ以上の情報の関数であるヒューリスティックに基づいて、クラスタバランサ、フェッチ回路(例えば、フェッチ回路104の命令ポインタ(IP)発生器)、または分岐予測器によって計算された重み値を表すことができる。次いで、これらの重み値を1つまたは複数の閾値重み値と比較して、特定の負荷分散アクションを行うかどうか、およびいつ行うかを決定することができる。特定の例では、命令ミスが発生すると(例えば、命令変換索引バッファ(TLB)によるルックアップの場合)、フェッチ回路104は、同じページ内の命令ポインタ値を同じデコードクラスタによって全てデコードされるように指示するために、クラスタ切り替えを強制する。
特定の例では、分岐ターゲットバッファ112などの分岐ターゲットバッファの各エントリに含まれる1つのフィールド内のデータは、対応する分岐命令に遭遇したときにクラスタ切り替えが実行されるべきであることを明示的に示す。特定の条件下で、このフィールドに値を書き込んで(例えば、フェッチ回路104またはトグル点制御回路120によって)、クラスタを強制的に切り替えることができる。別の例では、分岐ターゲットバッファ112などの分岐ターゲットバッファの各エントリに含まれる1つのフィールド内のデータは、対応する分岐命令に遭遇したときにそうでなければ実行されるはずのクラスタ切り替えが代わりに抑制されるべきであることを明示的に示す。特定の条件下で、このフィールドに値を書き込んで(例えば、フェッチ回路104またはトグル点制御回路120によって)、クラスタ切り替えの抑制を強制することができる。
特定の例では、第1のクラスタによるデコーディングのための命令を送信することから、代わりに第2のクラスタによるデコーディングのための命令を送信することへのトグルが望まれる場合(例えば、ブロック内で配信されたuopの数が閾値、例えば、32未満であり、および/またはプログラム可能である閾値を超えたとき、ならびに場合)、「偽」実行された分岐がBTBに挿入される。この偽の分岐には、本物ではない分岐挙動をトリガしないように、偽の分岐に固有のBTB内の分岐タイプエンコーディングが与えられ得る。ここで、用語「本物ではない分岐」は、通常、BTB112のエイリアス問題に起因して発生する可能性がある、非分岐で予測された実行された分岐を指すことができる。特定の例では、本物ではない分岐が検出された場合、BTBにおける予測は無効化される。対照的に、特定の例では、「偽の分岐」指示がデコードパイプラインを渡され、予測された実行された分岐更新で行われるように、BTB112内の偽の分岐エントリは、最終uopカウント(例えば、または最終uopカウントが閾値を超える場合は0x0の値)で注釈付けされ、ターゲットアドレスとして次のシーケンシャル命令ポインタを含むことができる。通常の(「実際の」)予測された実行された分岐のエントリとは異なり、偽の分岐の割り当てポイントは命令実行前で(例えば、いくつかの例では、分岐アドレス計算ポイントで)あり得る。特定の例では、この第2のクラスタバランス手法の変形では、偽の分岐挿入は命令キャッシュ106内でヒットするブロックに制限される。そのような例では、別の状態は、予測時間からデコードパイプラインの最後までブロックと共に搬送され得る。さらに別の変形例では、このクラスタバランス手法は、最近の命令キャッシュミスがあったことを単に追跡することによって近似され得る。
いくつかの例では、長い基本ブロック(例えば、およびマイクロコードフロー)を含むワークロードをバランスするときに偽の分岐を使用することによって、およびトグル点を示すためのBTB112内の追加されたフィールドを使用することによって、プロセッサコア100は、BTB112に(例えば、完全に)依存して、ほぼ最適なバランスでクラスタ負荷分散を実行するために必要な情報を提供する。
追加的または代替的に、本明細書の特定の例は、例えば、本明細書に開示されたトグル点(例えば、偽の分岐)制御(例えば、挿入)回路および方法を介して、クラスタ化されたフロントエンドにおける動的負荷分散を提供する。本明細書の特定の例は、例えば、追加的または代替的に、閾値を超えるブロック内で配信されているuopの数に基づいてデコードクラスタ間のトグルを制御するために、トグル点挿入および/または除去の濾過を介して最適化された動的負荷分散を提供する。特定の例では、本明細書で開示される動的負荷分散アルゴリズムは、例えば、追加的または代替的に、閾値を超えるブロック内で配信されているuopの数に基づいてデコードクラスタ間のトグルを制御するために、以前に見られた候補トグル点のデータ構造(例えば、テーブル)と共に有限状態機械(FSM)を利用することによって、最適なトグル点(例えば、偽の分岐)の挿入の両方を処理する。
図2は、本開示の例による、例示的なクラスタ化されたデコードプログラムフロー200を示す。例えば、クラスタ0は図1のデコードクラスタ108Aであり、クラスタ1は図1のデコードクラスタ108Bである。プログラムフロー200は、コードブロックA~F(例えば、Aはプログラム順で「最も古い」コードブロックであり、Fはプログラム順で「最も若い」コードブロックである)に分割された(例えば、プログラム)コード(例えば、命令)を示し、各コードブロックは、デコーディングのためにデコードクラスタ0またはデコーダクラスタ1のいずれかに割り当てられる。
再び図1を参照すると、プロセッサコア100(例えば、フェッチ回路104および/または分岐予測器102を介して)は、例えば、デコードクラスタ0 108Aに送信された第1の命令ブロックA、デコードクラスタN 108Bに送信された(プログラム順で次に、例えばより若い)第2の命令ブロックBなど、デコードクラスタに命令ブロック(例えば、図2のブロックA~F)を送信することができる。2クラスタの例では、第3の(プログラム順で次に、例えばより若い)命令ブロックCが、次に利用可能なデコードクラスタに(例えば、それがその現在の命令ブロックのデコードを終了した後で)送信され得る。2クラスタの例では、第3の(プログラム順で次に、例えばより若い)命令ブロックCが、次のデコードクラスタに(例えば、この例ではデコーダクラスタ108Aに)送信され得る。2つのデコードクラスタ108A~108Bが示されているが、3つ以上のクラスタが利用されてもよい(例えば、「N」は1より大きい正の整数である)ことを理解されたい。本明細書の例は、例えば、人間(例えば、プログラマ)がトグル点を命令ストリームに挿入することなく、トグル点制御回路120がトグル点(例えば、BTB112への偽の分岐)を決定して、デコード対象命令のストリームに挿入することを可能にする。例えば、次のコードブロックBを示すコードブロックAの最後のトグルが始まる。
特定の例では、各デコードクラスタは、例えば、第1のデコーダ回路114A(例えば、デコーダ)および第2のデコーダ回路116A(例えば、デコーダ)を含むデコードクラスタ108Aと、第1のデコーダ回路114B(例えば、デコーダ)および第2のデコーダ回路116B(例えば、デコーダ)を含むデコードクラスタ108Bとを用いて、相互にアウトオブオーダでコードの異なる基本ブロックをデコードできる2つ以上(例えば、スーパースカラx86)の命令デコーダを含む。特定の例では、デコードクラスタのうちの1つまたは複数は、それぞれ3つ(またはそれ以上)のデコーダ回路を有し、例えば、3つのデコードクラスタは、それぞれ9幅デコード全体に対して3つのデコーダ回路を有する。
特定の例では、プロセッサコア100の分岐予測器102は、例えば、1つまたは複数のトグル点に基づいて、コードを個々のブロック(例えば、プログラムからの連続した命令のセット)に分割する。特定の例では、プロセッサコア100のフェッチ回路104は、例えば、本開示による1つまたは複数のトグル点に基づいて、コードを個々のブロック(例えば、プログラムからの連続した命令のセット)に分割する。次いで、個々のコードブロックは、デコーディングのためにそれぞれのデコードクラスタに送信され得る。
任意に、プロセッサコア100は、例えば、メモリからロードする必要なしに1つまたは複数の命令をキャッシュするための(例えば、レベル1)命令キャッシュ106を含む。特定の例では、フェッチ回路104は、命令キャッシュ106を介してそれぞれのデコードクラスタにコードブロックを送信する。命令キャッシュ106は、命令キャッシュタグおよび/または命令変換索引バッファ(TLB)を含むことができる。
特定の例では、コードブロックがそれらの対応するデコードクラスタ108A~108Bに送信されると、各デコードクラスタは並列にコードブロックのデコードを開始する(例えば、その中の並列デコーダ回路を介して)。特定の例では、デコーダおよび/またはデコードクラスタは互いに独立して動作するため、コードブロックはアウトオブオーダでデコードされ得る(例えば、プログラムの順序外)。特定の例では、割り当て回路134は、適切なプログラム順序で動作(例えば、マイクロ演算)を実行回路136(例えば、実行ユニット)に割り当てる役割を果たす。
プロセッサコアは、第1のセット112A内の複数のデコーダ回路114A~116Aを有する第1のデコードクラスタ108Aと、第2のセット112B内の複数のデコーダ回路114B~116Bを有する第2のデコードクラスタ108Bとを示す。特定の例では、(例えば、各)デコーダ回路(114A、116A、114B、116B)は、(例えば、マクロ)命令を、実行回路136によって(例えば、プリミティブとして)実行される1つまたは複数のマイクロ演算のセットにデコードする。特定の例では、デコーダ回路(114A、116A、114B、116B)は、マイクロコードシーケンサ142(例えば、任意のデコードクラスタおよび/またはデコーダ回路から分離されたマイクロコードシーケンサ)を利用することなく、特定の(例えば、マクロ)命令を1つもしくは複数のマイクロ演算の対応するセットにデコードし、および/またはマイクロコードシーケンサ142(例えば、任意のデコードクラスタおよび/またはデコーダ回路から分離されたマイクロコードシーケンサ)を利用することによって、他の(例えば、マクロ)命令(例えば、複合命令セットコンピュータ(CISC)命令)を1つもしくは複数のマイクロ演算の対応するセットにデコードする。一例では、デコーダ回路(114A、116A、114B、116B)は、サイクルごとに特定の数のマイクロ演算(例えば、サイクルあたり1つのマイクロ演算および/またはサイクルあたり1~4つのマイクロ演算)を出力する。特定の例では、「マイクロコーディングされた」命令は、一般に、例えば、デコーダ回路によって直接その命令の1つまたは複数のマイクロ演算のセットを生成する代わりに、デコードクラスタ(例えば、デコーダのセット)が、マイクロコードシーケンサメモリ132(例えば、リードオンリメモリ(ROM))からデコードパイプラインに(例えば、対応する命令デコードキューに)1つまたは複数の(例えば、複数の)マイクロ演算(μops)の対応するセットをロードするようにマイクロコードシーケンサ142に要求する命令を指す。例えば、いくつかの(例えば、複合)(例えば、x86)命令を実装するために、マイクロコードシーケンサ142を使用して、命令を一連のより小さい(例えば、マイクロ)演算(micro-opsまたはμopsとも称される)に分割する。
特定の例(例えば、デコーディング/実行のために要求されているコードについて)では、ハードウェア回路(例えば、フェッチ回路104または命令キャッシュ106論理回路)は、デコード対象命令をデコードクラスタ(例えば、そのキュー)108A~108Bに送信する。特定の例では、プロセッサコア100内のハードウェア回路(例えば、フェッチ回路104)は、プログラム順に命令ブロック内のデコードされていない命令のストリーム(例えば、デコードされていない命令を表す命令ポインタ値)の生成を開始し、例えば、複数のデコードクラスタ108A~108Bのうちの異なるものにトグルするためのトグル点に達するまで、それらをプロセッサ内の複数のデコードクラスタ108A~108Bのうちの所与のものに向ける。
特定の例では、トグル点制御回路120は、(例えば、命令キャッシュ106内でトグルを引き起こす命令を挿入するなど、命令ストリームへの命令の挿入を引き起こすことによって)トグル点を追加および/または除去する。特定の例では、トグル点制御回路120は、トグル点(例えば、「偽の分岐」としてマークされた命令)を挿入して、それにより、(例えば、プログラム順に)命令ストリーム内でそのポイント(例えば、偽の分岐)に遭遇すると、複数のデコードクラスタ108A~108Bのうちの1つによるトグル点の直前(例えば、またはそこで)の命令のための命令ストリームデコーディングが、トグル点の直後(例えば、またはそこで)の命令のために複数のデコードクラスタ108A~108Bのうちの異なる1つに転送される。特定の例では、トグル点は、命令ストリーム内の既存の命令を「偽の分岐」としてマークすることによって挿入される。特定の例では、「偽の分岐」としてマークされた追加の(例えば、新しい)命令を命令ストリームに挿入することによって、トグル点が挿入される。
特定の例では、トグル点制御回路120は、分岐予測器102、例えば、そのBTB112内のトグル点を追加および/または除去する。特定の例では、トグル点制御回路120は、例えば、本明細書の開示に従って、分岐予測器102内の偽の分岐命令、例えば、そのBTB112が、トグル点として使用されるように追加する。特定の例では、トグル点制御回路120は、例えば、トグルを示す指示(例えば、メタデータデータ)を使用して、予測された実行された分岐に(例えば、トグル点制御回路120と分岐予測器102(例えば、BTB112)との間の結合124を介して)指示を追加することによって、デコードクラスタを切り替えるための指示を(例えば、BTB112のエントリに)追加する。特定の例では、トグル点制御回路120は、(i)第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、(ii)命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡し、および/または(iii)第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、回数に基づいて、位置にトグル点を挿入させる。特定の例では、クラスタ間のトグルは、純粋に命令バイト(例えば、命令バイトのキャッシュラインが複数の命令を含み得る場合)に基づいており、例えば、分岐に基づいておらず、命令に基づいておらず、uopなどに基づいていない。特定の例では、クラスタ間のトグルは、純粋に命令バイト(例えば、命令バイトのキャッシュラインが複数の命令を含み得る場合)に基づいておらず、例えば、分岐、命令、uopなどに基づく。特定の例では、プロセッサコア(または他の構成要素)は、命令バイトを(例えば、複数のキャッシュラインにまたがる可変長命令)命令に再アセンブルするように構成された分割デコードユニットを含まない。特定の例では、ハードウェアプロセッサコア(例えば、トグル点制御回路120)は、例えば、命令キャッシュの読み出しに基づいて単にトグルするのとは対照的に、本開示による予測器および/またはトグル点追跡データ構造を使用する。特定の例では、コード(例えば、命令)ストリームのトグルは、コード(例えば、命令)ストリームの以前のデコードに基づいて挿入(または除去)される。
特定の例では、トグル点制御回路120は、例えば、第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、および/または命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡するために、追跡データ構造126を維持する(例えば、および含む)。特定の例では、特性は、uop、命令、バイト、または(例えば、複数回デコードされる)命令ストリームの任意の他の特性の1つまたは任意の組み合わせを含む。特定の例では、特性は、uop数、命令数、バイト数、または(例えば、複数回デコードされる)命令ストリームの任意の他の特性の1つまたは任意の組み合わせを含む。
特定の例では、トグル点制御回路120は、1つまたは複数のカウンタ128(例えば、本明細書で説明されるタイムアウトカウンタ)を維持する(例えば、および含む)。特定の例では、追跡データ構造126は図3のフォーマットに従っている。
特定の例では、トグル点制御回路120は、各デコードクラスタ内の(例えば、単一)命令デコードキューへの結合、例えば、トグル点制御回路120と命令デコードキュー118Aとの間の結合122A、およびトグル点制御回路120と命令デコードキュー118Bとの間の結合122Bを含む。
特定の例では、トグル点制御回路120は、例えば、以下および/または図4で説明するように、1つまたは複数の閾値130を読み取る(例えば、および含む)。特定の例では、閾値130は、閾値条件、例えば、uop、命令、バイト、または命令ストリームの任意の他の特性の閾値数を示す値である。
命令をそのそれぞれのマイクロ演算(例えば、デコーダ回路またはマイクロコードシーケンサによる)にデコードした後、特定の例では、マイクロ演算は命令デコードキューに格納される。図1に(例えば、デコード段階の終わりに)おいて、デコードクラスタ108Aは、デコーダ回路114A~116Aから(例えば、およびマイクロコードシーケンサから)それぞれのマイクロ演算を受信する命令デコードキュー118A(例えば、命令キュー)を含み、デコードクラスタ108Bは、デコーダ回路114B~116Bから(例えば、およびマイクロコードシーケンサから)からそれぞれのマイクロ演算を受信する命令デコードキュー118B(例えば、命令キュー)を含む。任意に、スイッチ132は、命令デコードキュー118A~118Bの出力を割り当て回路134の入力に結合するために含まれる。特定の例では、割り当て回路134は、命令デコードキュー118A~118B(例えば、プログラム順に)から実行回路136の実行回路(例えば、マイクロ演算のタイプおよび実行回路のタイプ、例えば、整数、ベクトル、浮動小数点などに基づく)にマイクロ演算を送信する。一例では、1つまたは複数の命令デコードキューはプログラム順序から外れてロードされるが、プログラム順序で読み取られる。実行回路136は、例えば、レジスタ138および/またはデータキャッシュ140(例えば、キャッシュ階層の1つまたは複数のレベル)などのストレージにアクセスすることができる。結果が実行回路136によって生成されると、リタイアメント回路134は、対応する命令をリタイアすることができる。
図3は、本開示の例による、トグル点追跡データ構造(例えば、図1のトグル点追跡データ構造126)の例示的なフォーマット300を示す。特定の例では、トグル点制御回路は、フォーマット300に従って追跡データ構造を維持する(例えば、および含む)。特定の例では、追跡データ構造は、テーブル(例えば、偽の分岐挿入(FBI)テーブル)である。特定の例では、単一の追跡データ構造が、全てのクラスタ化されたデコーダにわたって共有される。特定の例では、追跡データ構造は、完全に関連付けられている。フォーマット300は、1つまたは複数のエントリを含み、例えば、Nは1より大きい任意の正の整数である。一例では、N=8である。
特定の例では、各エントリのフォーマット300は、トグル点(例えば、偽の分岐)を挿入する候補点(例えば、命令)を示すタグフィールドを含む。特定の例では、各タグは、例えば、図4を参照して以下で説明するように、マイクロ演算閾値を超えるマイクロ演算(例えば、命令が複数のマイクロ演算にデコードされる場合)を含む命令を識別する。特定の例では、例えば、BTB112内で、候補点が使用されると判定されると、実際のトグル点(例えば、偽の分岐命令)が候補トグル点に、または候補トグル点の直後に挿入される。
特定の例では、各エントリのフォーマット300は、エントリが有効または無効であることを示す有効フィールドを含み、例えば、トグル点追跡データ構造内の無効なエントリ(例えば、エントリの第2の列に無効な指示でマークされている)が割り当てのために最初に選択される。特定の例では、全てのエントリが有効である場合、least-recently-used(LRU)ポリシーに従って最長未使用時間(例えば、そのエントリのタイマに基づいて)のエントリが置き換えられ、例えば、「一回使用割り当て解除ポリシー」と共にLRUポリシーが置き換えられるエントリを選択する。
特定の例では、各エントリのフォーマット300は、任意の命令ストリームの以前のデコード中に候補トグル点(例えば、候補命令)に遭遇した回数を示すヒットカウントフィールドを含む。ヒットカウントフィールドの使用例は、図4を参照してさらに詳細に説明される。
特定の例では、候補点がトグル点として使用されると判定されると、トグル点制御回路120は、例えば、対応する偽の分岐(例えば、トグルを引き起こす)をBTB112に挿入することによって、トグル点の指示をアクティブ化させる。
図4は、本開示の例による、動的負荷分散のフロー図400を示す。図4では偽の分岐挿入(FBI)テーブルという用語が使用されているが、例えば、トグル点追跡データ構造など、他のデータ構造が利用されてもよいことを理解されたい。特定の例では、トグル点制御回路120は、フロー図400に従って動作する。
特定の例では、フロー図400(例えば、アルゴリズム)は、シーケンシャル(例えば、x86)命令のブロックを含むuopの数をカウントすることに基づく。これは現在の「uop_cnt」と称され得る。特定の例では、マイクロ演算カウント(uop_cnt)は、最後の実際のトグルまたはトグル候補に遭遇してからデコードされたマイクロ演算の数である。特定の例では、フロー図(例えば、アルゴリズム)は、現在のマイクロ演算カウント(uop_cnt)と比較し、特定の閾値は調整可能であり(例えば、変更可能であり)、例えば、閾値1、閾値2、閾値3、および閾値4(例えば、図1の閾値130に格納されているように)である。
特定の例では、閾値1は、トグル点(例えば、偽の分岐)、例えば、まだ命令ストリーム内にないトグル点(例えば、実際の分岐)を挿入するための候補位置を決定するために閾値1が使用されるように、トグル以降に見られたデコードされたマイクロ演算の閾値数(例えば、24)を示す。
特定の例では、閾値2は、例えば、トグルが閾値2のuop数内で発生した場合、候補はドロップされ、トグル点追跡データ構造に割り当てられないなど、例えば、将来のマイクロ演算数においてコードストリームが既に別のトグルを有する場合に、閾値2がトグル(例えば、偽の分岐)の挿入を回避するために使用されるように、トグルの後に見られたデコードされたマイクロ演算の異なる閾値数(例えば、32)を示す。
特定の例では、閾値3は、例えば、以前に挿入された偽の分岐がいつ無効にされるべきか(例えば、予測構造(例えば、BTB)において無効化される)を判定するために閾値3が使用されるように、デコードされたマイクロ演算の閾値数(例えば、16)を示す。例えば、偽の分岐につながるマイクロ演算カウント(uop_cnt)が閾値2と閾値1との差(例えば、上記の例では8)を下回っているかどうかをチェックし、下回っている場合、偽の分岐は直ちに除去することができ(例えば、予測構造(例えば、BTB)から)、この差を上回るが閾値3を下回る場合、除去することができる。
特定の例では、既に予測構造内にある偽の分岐(例えば、BTB内の偽の分岐として)は、それがもはや効率的でないようにコード経路が変化した場合、例えば、この経路上のトグル点追跡データ構造(例えば、FBI)との相互作用がない場合、無効化される。特定の例では、追跡エントリ(例えば、「FBI」エントリ)は、そのコードセクションにトグル点がなく、システム(例えば、コア)が新しい偽の分岐を挿入することが望ましい十分なuopをデコードした場合にのみ割り当てられる(または、割り当て解除される(例えば、無効化される))。特定の例では、トグル点追跡データ構造(例えば、FBI)は、偽の分岐を追加することが負荷分散に役立つはずの候補位置を追跡するための保持領域であるが、その候補がトグル点追跡データ構造(例えば、FBI)から予測構造(例えば、BTB)に割り当てることを可能にする前に、同じ/類似の状況がデコーダで複数回(一実装形態では、倍数はバイパスの場合が1でなければ2倍であるが、任意の値とすることができる)発生することを確認したい。特定の例において、候補(例えば、分岐)がトグル点追跡データ構造(例えば、FBI)においてヒットし、複数の要件が満たされる場合、その候補(例えば、位置)は、例えば、予測構造(例えば、BTB)に挿入され、対応するエントリは、もはや保持される必要がないため(例えば、これは実際のトグルであり、候補トグルではない)、トグル点追跡データ構造(例えば、FBI)から割り当て解除される。
特定の例では、閾値4は、例えば、候補位置が偽の分岐としてBTBに昇格される場合に、候補位置からトグル点の実際の位置に昇格されるトグル点追跡データ構造内のエントリのヒットの閾値数(例えば、1または2)を示す。
特定の例では、グローバルリセットは、全ての追跡データをクリアする、例えば、トグル点追跡データ構造(例えば、だが閾値ではない)をクリアする。
特定の例では、「multiple」値は、トグルなしで見られるトグル候補の総数である。特定の例では、識別されたトグル候補の数が「multiple」の閾値(例えば、図4では、これは4であるように示されており、これは、閾値1=24である例を想定して、4*閾値1または4*24を超えるトグルなしで見られる命令の総数を意味する)を超えると、トグル点追跡データ構造(例えば、FBI)挿入をスキップすることができ(例えば、「FBIバイパス」)、トグル候補は、例えば、予測構造(例えば、BTB)に挿入されるなど、トグル点(例えば、偽の分岐)であるように直接昇格される。
特定の例では、「multiple」値は、トグルなしで見られるマイクロ演算の総数(例えば、「閾値1」値によって示される数)である。例の「閾値1」値は24であるが、他の例では任意の数とすることができる。
特定の例では、フロー図400の動作は、例えば、マイクロ演算(uop)がデコードされるのを待つための(例えば、命令デコードキューに現れるための)402での待機状態、マイクロ演算が既にトグル原因命令であるかどうかを判定し、(i)トグル原因命令であり、かつ「実際の」トグル(例えば、実際の「実行された」分岐マイクロ演算または対応するマクロ命令)であれば、uop_cntおよび複数のカウンタをクリアし、待機状態402に戻り、(ii)トグル原因命令であり、かつ「偽の」トグル(例えば、偽の「実行された」分岐マイクロ演算または対応するマクロ命令)であれば、比較424に進み、図示された閾値が比較され、BTBから430で偽の分岐を無効にするか、または比較426に進むかのいずれかに進み(例えば、図5に示すように、図示された条件が満たされた場合、428で有限状態機械(FSM)を保持する無効化を開始する)、および(iii)トグル誘発命令(例えば、そのマイクロ演算)でなければ、406での閾値1の比較に進むための404でのトグルチェック(例えば、そのマイクロ演算)、408での候補保持(例えば、デコードされた追加のマイクロ演算をチェックするため)、410での候補トグルチェックの保持(例えば、追加のマイクロ演算がトグルであるかどうかをチェックするため)、412での閾値2の比較、414でのトグル点追跡データ構造(例えば、FBI)バイパスのチェック、416でのトグル点追跡データ構造(例えば、FBI)エントリの比較、ならびに418でのトグル点追跡データ構造(例えば、FBI)におけるエントリの割り当てを含む。特定の例では、420で偽の分岐が割り当てられる。特定の例では、ヒットカウントの比較(例えば、図3に示すように)は、422でエントリに対して実行される。
特定の例では(例えば、通常の状況下では)、マイクロ演算カウント(uop_cnt)が閾値1に達すると、トグル(例えば、偽の分岐)の挿入の候補位置が選択される。特定の例では、この候補位置は完全に静的ではない可能性があるが、命令タイプ、長いマイクロコード(例えば、リードオンリメモリ)フロー(例えば、マイクロコードシーケンサから)の存在に基づく制限、または正確に閾値1にある命令(例えば、マイクロ演算)が候補であることを許可されないことを必要とする可能性がある他のハードウェアベースの制限があり得るためである。これに対処するために、特定の例では、最終候補は、命令ポインタ(IP)情報、およびトグル点追跡データ構造(例えば、テーブル)に格納されるマイクロ演算カウント(uop_cnt)を取り込む。いくつかの例では、このテーブルは偽の分岐挿入テーブル(「FBI」)と称される。特定の例では、一致タグ(例えば、ハッシュ化IPビット)およびマイクロ演算カウント(uop_cnt)を有するuop(例えば、トグル点の候補)が再び見られる場合、それはトグル点追跡データ構造(例えば、FBIテーブル)にヒットする。特定の例では、トグル点追跡データ構造(例えば、FBIテーブル)における候補のエントリが十分な回数ヒットした場合(例えば、ヒットカウントは閾値4以上である)、エントリは、トグル点追跡データ構造(例えば、FBIテーブル)から割り当て解除され、候補位置は、実際のトグル点として昇格される(例えば、そのエントリを偽の分岐としてBTBに昇格させることによる)。特定の例では、ヒットカウント閾値4は、異なる値に選択可能である。コードストリームが(例えば、非常に近く)将来において既に別のトグルを有する場合に偽の分岐を挿入することを回避するために、特定の例では、トグルが閾値2のuop数内で検出された場合、候補はドロップされ、トグル点追跡データ構造(例えば、FBIテーブル)に割り当てられない。
特定の例では、より小さいサイズのトグル点追跡データ構造(例えば、FBIテーブル)を実装することが望ましい場合があり、例えば、実行された分岐間に2000uopの非常に長いシーケンスがある場合、20uopごとにトグル点を挿入することが望ましい場合があるが、これは、少なくとも2000/20の深さ、すなわち100エントリであるトグル点追跡データ構造(例えば、FBIテーブル)を利用することができ、それよりも小さいと、容量追い出しにより、トグルが全く挿入されない可能性がある。
長いシーケンスを処理しながら小さい/密なトグル点追跡データ構造(例えば、FBIテーブル)を可能にするために、本明細書の特定の例は、命令のシーケンスに分岐が全くない状況では、例えば、トグル点追跡データ構造(例えば、FBIテーブル)からのエントリの機会、候補トグル点から実際のトグル点に昇格する(例えば、トグル点追跡データ構造から偽の分岐としてBTBに昇格する)機会を可能にするために、トグル点追跡データ構造(例えば、FBIテーブル)バイパス(例えば、「FBIバイパス」)を利用する。例えば、特定の長い展開された単一命令複数データ(SIMD)および/または浮動小数点(FP)計算に見られるように。特定の例では、現在のマイクロ演算カウント(uop_cnt)がトグルなしに閾値1の倍数を超える場合、トグル点追跡データ構造(例えば、FBIテーブル)はバイパスされる。図4では、これは4として示されているが、他の値(例えば、ハードウェア内で構成可能)が利用されてもよいことを理解されたい。特定の例では、トグル点追跡データ構造(例えば、FBIテーブル)バイパスも有効になる他の条件(例えば、特定の長複合命令セットコンピュータ(CISC)フロー)がある。特定の例では、トグル点追跡データ構造(例えば、FBIテーブル)バイパスモードは、真のトグルが再び見られた後、またはリセット条件が発生した後に無効にされる。
特定の例では、トグル点追跡データ構造(例えば、FBIテーブル)バイパスは、非常に大きなテーブルの必要性をトリガするケースの大部分を解決するが、任意の有限トグル点追跡データ構造(例えば、FBIテーブル)を圧倒する可能性がある容量追い出しケースがまだあり得る。トグル点追跡データ構造(例えば、FBIテーブル)バイパスを拡張し、より小さいトグル点追跡データ構造(例えば、FBIテーブル)を有効にするために、トグル点追跡データ構造(例えば、FBIテーブル)の特定の(例えば、全てではないが)(例えば、2)エントリは、特定の例では、例えば、それらのエントリについて、「有効」である場合、タイマ(例えば、タイムアウトカウンタ)がオーバーフローするか、またはトグル(例えば、偽の分岐)の挿入に起因して割り当て解除されるまで上書きすることができないように、「一回使用割り当て解除ポリシー」を有する。特定の例では、このタイムアウトメカニズムは、複数(例えば、6)ビットカウンタ追跡総トグル点追跡データ構造(例えば、FBIテーブル)エントリ割り当てを介して構築される。特定の例では、カウンタがオーバーフローすると(例えば、63から0)、それらの「特別な」エントリは再びLRUで置き換えることができる。
特定の例では、非常に予測可能で静的な経路長を有する単純なコードストリームは、以前のトグル点から閾値1の距離に位置する全ての偽の分岐で停止するためのものである。しかしながら、コードは動的であることが多く、したがって、デコードおよび/または実行の1つのフェーズ中に挿入されるトグル(例えば、偽の分岐)は、後続のフェーズ中にうまく位置決めされない場合がある。この状況のために、本明細書の特定の例は、以前に挿入されたトグル(例えば、偽の分岐)が、例えば、BTBにおいて無効化されるべきであるときを検出するロジックを利用する。特定の例では、これは、閾値2マイナス閾値1未満でトグル(例えば、偽の分岐)が見つかるときはいつでも検出する(または検出しない)ことである。
特定の例では、挿入されたトグル(例えば、偽の分岐位置)の多数(例えば、一定)の調整が検出された場合、代わりに、トグル点制御回路は、そうでなければ正しく配置されたトグル(例えば、偽の分岐)の長いストリームにおいて単一の(例えば、位置が悪い)トグル(例えば、偽の分岐)を保持する。特定の例では、これは、偽の分岐につながるマイクロ演算カウント(uop_cnt)が閾値2と閾値1との間の差(例えば、8uop)を下回っているかどうかをチェックすることを含む。特定の例では、そうであれば、すぐに除去することができる。特定の例では、この差を上回るが閾値3を下回る場合(例えば、16uop)、除去することができる。特定の例では、後続のトグルも挿入されたトグル(例えば、「偽」の分岐)である場合、トグル(例えば、偽の分岐)は除去されない。無効化の一例(例えば、トグル点制御回路によって実行されるように)を図5に示す。
図5は、本開示の例による、有限状態機械を保持する無効化のフロー図500を示す。図示されたフロー図500は、無効化保持要求502を待機することと、(例えば、図4の428で)受信されると、504で無効化要求を保持して、遭遇した次のトグルが実際(例えば、実分岐)であるかどうかをチェックして、そうである場合、508でその偽の分岐を予測構造(例えば、BTB)から無効化し、そうでない場合、予測構造(例えば、BTB)内の偽の分岐を無効化しない(502で待機に戻る)こととを含む。
図6は、本開示の例による、複数のデコードクラスタ間で命令ストリームのデコーディングを切り替えるためにトグル点を挿入するための動作600を示すフロー図である。動作600(または本明細書に記載の他のプロセス、またはそれらの変形および/もしくは組み合わせ)の一部または全部は、トグル点制御回路120(例えば、プロセッサコア100)の制御下で実行される。
動作600は、ブロック602において、複数のデコーダ回路を有する第1のデコードクラスタと複数のデコーダ回路を有する第2のデコードクラスタとを備えるハードウェアプロセッサコアによってデコーディングのために要求された命令ストリームを受信する段階を含む。動作600は、ブロック604において、第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、ハードウェアプロセッサコアのトグル点制御回路によって、候補トグル点として命令ストリーム内の位置を決定することをさらに含む。動作600は、ブロック606において、トグル点制御回路によって、命令ストリームの複数の以前のデコードの特性がその位置に存在する回数を追跡することをさらに含む。動作600は、ブロック608において、第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、回数に基づいて、位置にトグル点を挿入することをさらに含む。
上記で使用され得る例示的なアーキテクチャ、システムなどを以下に詳細に説明する。
開示された技術の少なくともいくつかの例は、以下を考慮して説明することができる。
例1.複数のデコーダ回路を含む第1のデコードクラスタと、
複数のデコーダ回路を含む第2のデコードクラスタと、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信をトグルするトグル点制御回路とを備え、トグル点制御回路は、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、
命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡し、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、回数に基づいて、位置にトグル点を挿入させる、
ハードウェアプロセッサコア。
例2.特性は、位置の前および第1のデコードクラスタと第2のデコードクラスタとの間での命令ストリームのデコーディングの直前の切り替えの後に命令ストリームからデコードされたマイクロ演算の数である、例1に記載のハードウェアプロセッサコア。
例3.特性は、位置の前および第1のデコードクラスタと第2のデコードクラスタとの間での命令ストリームのデコーディングの直前の切り替えの後に命令ストリームからデコードされたマクロ命令の数である、例1に記載のハードウェアプロセッサコア。
例4.トグル点の挿入は、ハードウェアプロセッサコアの分岐ターゲットバッファへの分岐命令の挿入を含む、例1に記載のハードウェアプロセッサコア。
例5.トグル点制御回路は、命令ストリームの後続のデコードにおける位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、位置を候補トグル点としてさらに除去する、例1に記載のハードウェアプロセッサコア。
例6.特性は、位置の前に命令ストリームからデコードされたマイクロ演算の数である、例1に記載のハードウェアプロセッサコア。さらなる例として、特定の例では、マイクロ演算の数がトグルなしに特定の閾値(例えば、図4に414で示すように、4の値に設定される)を超えると、それは次にFBIをバイパスし始める(例えば、偽の分岐がBTBに割り当てられる)。
例7.トグル点制御回路は、タイマを有し、タイマからの追跡時間が閾値時間を超えた後、命令ストリームの複数の以前のデコードの特性が位置について存在する回数の追跡を停止する、例1に記載のハードウェアプロセッサコア。
例8.トグル点制御回路は、複数の候補トグル点を決定し、命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する、例1に記載のハードウェアプロセッサコア。
例9.複数のデコーダ回路を有する第1のデコードクラスタと複数のデコーダ回路を有する第2のデコードクラスタとを含むハードウェアプロセッサコアによってデコーディングのために要求された命令ストリームを受信する段階と、
ハードウェアプロセッサコアのトグル点制御回路が、第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定する段階と、
トグル点制御回路が、命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡する段階と、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、回数に基づいて、位置にトグル点を挿入する段階と
を備える、方法。
例10.特性は、位置の前および第1のデコードクラスタと第2のデコードクラスタとの間での命令ストリームのデコーディングの直前の切り替えの後に命令ストリームからデコードされたマイクロ演算の数である、例9に記載の方法。
例11.特性は、位置の前および第1のデコードクラスタと第2のデコードクラスタとの間での命令ストリームのデコーディングの直前の切り替えの後に命令ストリームからデコードされたマクロ命令の数である、例9に記載の方法。
例12.トグル点の挿入は、ハードウェアプロセッサコアの分岐ターゲットバッファへの分岐命令を挿入する段階を含む、例9に記載の方法。
例13.命令ストリームの後続のデコードにおける位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、位置を候補トグル点として除去する段階をさらに備える、例9に記載の方法。
例14.特性は、位置の前に命令ストリームからデコードされたマイクロ演算の数である、例9に記載の方法。
例15.追跡時間が閾値時間を超えた後、命令ストリームの複数の以前のデコードの特性が位置について存在する回数の追跡を停止する段階をさらに備える、例9に記載の方法。
例16.決定する段階は、複数の候補トグル点を決定する段階を含み、追跡する段階は、命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する段階を含む、例9に記載の方法。
例17.命令を格納するメモリと、
複数のデコーダ回路を含む第1のデコードクラスタと、
複数のデコーダ回路を含む第2のデコードクラスタと、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信をトグルするトグル点制御回路とを備え、トグル点制御回路は、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、
命令ストリームの複数の以前のデコードの特性が位置について存在する回数を追跡し、
第1のデコードクラスタと第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、回数に基づいて、位置にトグル点を挿入させる、
装置。
例18.特性は、位置の前および第1のデコードクラスタと第2のデコードクラスタとの間での命令ストリームのデコーディングの直前の切り替えの後に命令ストリームからデコードされたマイクロ演算の数である、例17に記載の装置。
例19.特性は、位置の前および第1のデコードクラスタと第2のデコードクラスタとの間での命令ストリームのデコーディングの直前の切り替えの後に命令ストリームからデコードされたマクロ命令の数である、例17に記載の装置。
例20.トグル点の挿入は、分岐ターゲットバッファへの分岐命令の挿入を含む、例17に記載の装置。
例21.トグル点制御回路は、命令ストリームの後続のデコードにおける位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、位置を候補トグル点としてさらに除去する、例17に記載の装置。
例22.特性は、位置の前に命令ストリームからデコードされたマイクロ演算の数である、例17に記載の装置。
例23.トグル点制御回路は、タイマを有し、タイマからの追跡時間が閾値時間を超えた後、命令ストリームの複数の以前のデコードの特性が位置について存在する回数の追跡を停止する、例17に記載の装置。
例24.トグル点制御回路は、複数の候補トグル点を決定し、命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する、例17に記載の装置。
さらに別の例では、装置は、ハードウェアプロセッサによって実行されると、ハードウェアプロセッサに本明細書で開示される任意の方法を実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明に記載されているようなものであってもよい。方法は、詳細な説明に記載されているようなものであってもよい。
命令セットは、1つまたは複数の命令フォーマットを含み得る。所与の命令フォーマットは、とりわけ、実行されるべき演算(例えば、オペコード)およびその演算が実行されるべきオペランドを指定する様々なフィールド(例えば、ビットの数、ビットの位置)、ならびに/または他のデータフィールド(例えば、マスク)を定義してよい。いくつかの命令フォーマットは、さらに、命令テンプレート(またはサブフォーマット)の定義を介して分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され(含まれるフィールドは通常同じ順序であるが、含まれるフィールドがより少ないため少なくともいくつかは異なるビット位置を有する)、および/または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ISAの各命令は、所与の命令フォーマット(および定義されている場合、その命令フォーマットの命令テンプレートのうちの所与の1つ)を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーション、およびソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのADD命令が生じることにより、特定オペランドを選択するオペランドフィールドに具体的な内容を有する。高度ベクトル拡張(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)コーディングスキームを使用するSIMD拡張のセットが、リリースおよび/または公開されている(例えば、Intel(登録商標)64およびIA-32アーキテクチャソフトウェア開発者マニュアル、2018年11月を参照すること、およびIntel(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンス、2018年10月を参照すること)。
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサにおいて実装され得る。例えば、そのようなコアの実装は、1)汎用コンピューティングを意図する汎用インオーダコア、2)汎用コンピューティングを意図する高性能汎用アウトオブオーダコア、3)主にグラフィックおよび/またはサイエンティフィック(スループット)コンピューティングを意図する専用コアを含み得る。異なるプロセッサの実装は、1)汎用コンピューティングを意図する1つまたは複数の汎用インオーダコア、および/または汎用コンピューティングを意図する1つまたは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックおよび/またはサイエンティフィック(スループット)を意図する1つまたは複数の専用コアを含むコプロセッサを含み得る。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックなどの専用ロジック、または専用コアと称される)、および4)説明されたCPU(場合によっては、アプリケーションコアもしくはアプリケーションプロセッサと称される)と同じダイ上に、上述のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。次に、例示的なグラフィックスプロセッサについて説明する。続いて、例示的なコアアーキテクチャ、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図7Aは、本開示の例による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図7Bは、本開示の例によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な例、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図7A~図7Bにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示す一方、任意選択的な点線のボックスの追加は、レジスタリネーミング用のアウトオブオーダ発行/実行パイプラインとコアとを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図7Aにおいて、プロセッサパイプライン700は、フェッチ段階702、レングスデコード段階704、デコード段階706、割り当て段階708、リネーミング段階710、スケジューリング(ディスパッチまたは発行としてもまた知られる)段階712、レジスタ読み出し/メモリ読み出し段階714、実行段階716、ライトバック/メモリ書き込み段階718、例外処理段階722、およびコミット段階724を含む。
図7Bは、実行エンジンユニット750に結合されたフロントエンドユニット730を含むプロセッサコア790を示し、両方がメモリユニット770に結合されている。コア790は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別の選択肢として、コア790は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコアなどの専用コアであってよい。
フロントエンドユニット730は、命令キャッシュユニット734に結合された分岐予測ユニット732を含み、命令キャッシュユニット734は、命令変換索引バッファ(TLB)736に結合され、TLB736は、命令フェッチユニット738に結合され、命令フェッチユニット738は、デコードユニット740(例えば、特定の例では、複数のデコードクラスタ)に結合される。デコードユニット740(またはデコーダまたはデコーダユニット)は、命令(例えば、マクロ命令)をデコードし、元の命令からデコード、もしくは別様にそれらを反映する、もしくはそれらから導出される、1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよい。デコードユニット740は、様々な異なるメカニズムを使用して実装されてもよい。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれるが、それらに限定されない。一例では、コア790は、特定のマクロ命令のマイクロコードを(例えば、デコードユニット740内に、またはそうでなければフロントエンドユニット730内に)格納するマイクロコードROMまたは他の媒体を含む。デコードユニット740は、実行エンジンユニット750内のリネーミング/割り当てユニット752に結合されている。
実行エンジンユニット750は、リタイアメントユニット754および1つまたは複数のスケジューラユニット756のセットに結合されたリネーミング/割り当てユニット752を含む。スケジューラユニット756は、複数のリザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット756は、物理レジスタファイルユニット758に結合される。物理レジスタファイルユニット758のそれぞれは、1つまたは複数の物理レジスタファイルを表し、それらの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などの、1つまたは複数の異なるデータタイプを格納する。一例では、物理レジスタファイルユニット758は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。物理レジスタファイルユニット758は、リタイアメントユニット754とオーバーラップしており、(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタのプールを使用するなど)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々なやり方を示す。リタイアメントユニット754および物理レジスタファイルユニット758は、実行クラスタ760に結合される。実行クラスタ760は、1つまたは複数の実行ユニット762のセットおよび1つまたは複数のメモリアクセスユニット764のセットを含む。実行ユニット762は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)について実行してよい。いくつかの例は、特定の機能または機能のセットに専用の複数の実行ユニットを含み得る一方、他の例は、1つのみの実行ユニット、または全ての機能を全て実行する複数の実行ユニットを含み得る。特定の例は、特定のタイプのデータ/演算に対する別個のパイプラインを形成するので(例えば、それら自体のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタをそれぞれ有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、特定の例は、このパイプラインの実行クラスタのみがメモリアクセスユニット764を有するように実装される)、スケジューラユニット756、物理レジスタファイルユニット758、および実行クラスタ760は、場合によっては複数あるように示される。別個のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいこともまた理解されたい。
メモリアクセスユニット764のセットは、メモリユニット770に結合され、メモリユニット770は、レベル2(L2)キャッシュユニット776に結合されたデータキャッシュユニット774に結合されたデータTLBユニット772を含む。1つの例示的な例では、メモリアクセスユニット764は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、これらのそれぞれは、メモリユニット770内のデータTLBユニット772に結合される。命令キャッシュユニット734は、さらに、メモリユニット770内のレベル2(L2)キャッシュユニット776に結合される。L2キャッシュユニット776は、1つまたは複数の他のレベルのキャッシュ、および最終的にはメインメモリに結合される。
特定の例では、プリフェッチ回路778は、例えば、アクセスアドレスを予測し、それらのアドレスのデータを1つまたは複数のキャッシュに(例えば、メモリ780から)取り込むために、データをプリフェッチするために含まれる。
例として、例示的なレジスタリネーミング用のアウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン700を実装してよい。1)命令フェッチ738が、フェッチおよびレングスデコード段階702および704を実行する。2)デコードユニット740が、デコード段階706を実行する。3)リネーミング/割り当てユニット752が、割り当て段階708およびリネーミング段階710を実行する。4)スケジューラユニット756が、スケジュール段階712を実行する。5)物理レジスタファイルユニット758およびメモリユニット770が、レジスタ読み出し/メモリ読み出し段階714を実行し、実行クラスタ760が、実行段階716を実行する。6)メモリユニット770および物理レジスタファイルユニット758が、ライトバック/メモリ書き込み段階718を実行する。7)様々なユニットが、例外処理段階722に関与してよい。8)リタイアメントユニット754および物理レジスタファイルユニット758が、コミット段階724を実行する。
コア790は、本明細書において説明される命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、MIPS命令セット(MIPS Technologies of Sunnyvale,CA)、ARM命令セット(NEONなどの任意選択の追加拡張を伴う)(ARM Holdings of Sunnyvale,CA)をサポートし得る。一例では、コア790は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより使用される演算がパックドデータを使用して実行されることを可能にする。
コアは、マルチスレッディング(演算またはスレッドの2つ以上の並列セットを実行する)をサポートすることができ、タイムスライスマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時マルチスレッディングであるスレッドのそれぞれに対して論理コアを提供する)、またはそれらの組み合わせ(例えば、Intel(登録商標)ハイパースレッディング技術におけるような、タイムスライスされたフェッチおよびデコードならびにその後の同時マルチスレッディング)を含む様々な方法でサポートすることができることを理解されたい。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。プロセッサの図示の例はまた、別個の命令およびデータキャッシュユニット734/774および共有L2キャッシュユニット776を含むが、代替例は、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなど、命令およびデータの両方のための単一の内部キャッシュを有してもよい。いくつかの例では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。あるいは、キャッシュの全てがコアおよび/またはプロセッサの外部にあってもよい。
特定の例示的なインオーダコアアーキテクチャ
図8A~図8Bは、より具体的な例示的なインオーダコアアーキテクチャのブロック図を示し、このコアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つである。論理ブロックは、用途に応じて、高帯域幅インターコネクトネットワーク(例えば、リングネットワーク)を介して、いくつかの固定関数論理、メモリI/Oインタフェース、および他の必要なI/O論理と通信する。
図8Aは、本開示の例による、オンダイインターコネクトネットワークへ802のその接続およびレベル2(L2)キャッシュのそのローカルサブセット804を伴う、単一のプロセッサコアのブロック図である。一例では、命令デコードユニット800は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ806は、スカラおよびベクトルユニットへのキャッシュメモリの低待ち時間アクセスを可能にする。(設計を簡単にするために)一例では、スカラユニット808およびベクトルユニット810は別々のレジスタセット(それぞれ、スカラレジスタ812およびベクトルレジスタ814)を使用し、それらの間で転送されたデータはメモリに書き込まれ、次にレベル1(L1)キャッシュ806から読み出されるが、本開示の代替例は異なる手法(例えば、単一のレジスタセットを使用するか、または書き込みおよび読み出しなしに2つのレジスタファイル間でデータを転送することを可能にする通信経路を含む)を使用してもよい。
L2キャッシュのローカルサブセット804は、プロセッサコアごとに別々のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュのそれ自体のローカルサブセット804への直接アクセス経路を有する。プロセッサコアによって読み取られたデータは、そのL2キャッシュサブセット804に格納され、それら自体のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列に、迅速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自体のL2キャッシュサブセット804に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、および他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータ経路は、方向ごとに1012ビット幅である。
図8Bは、本開示の例による、図8Aのプロセッサコアの一部の拡大図である。図8Bは、L1キャッシュ804のL1データキャッシュ806A部分、ならびにベクトルユニット810およびベクトルレジスタ814に関するさらなる詳細を含む。具体的には、ベクトルユニット810は、整数、単精度浮動小数点、および倍精度浮動小数点の命令のうちの1つまたは複数を実行する16幅ベクトル処理ユニット(VPU)(16幅ALU828を参照)である。VPUは、スウィズルユニット820によるレジスタ入力のスウィズル、数値変換ユニット822A~Bによる数値変換、およびメモリ入力上の複製ユニット824による複製をサポートする。ライトマスクレジスタ826は、結果として生じるベクトル書き込みの予測を可能にする。
図9は、本開示の例による、1つよりも多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサ900のブロック図である。図9における実線のボックスは、単一のコア902Aと、システムエージェント910と、1つまたは複数のバスコントローラユニット916のセットとを有するプロセッサ900を示す一方、任意選択的な点線のボックスの追加は、複数のコア902A~Nと、システムエージェントユニット910における1つまたは複数の統合メモリコントローラユニット914のセットと、専用ロジック908とを有する代替的なプロセッサ900を示す。
したがって、プロセッサ900の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックである専用ロジック908(1つまたは複数のコアを含んでよい)と、1つまたは複数の汎用コアであるコア902A~N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、2つの組み合わせ)とを有するCPU、2)グラフィックおよび/またはサイエンティフィック(スループット)を主に意図する多数の専用コアであるコア902A~Nを有するコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア902A~Nを有するコプロセッサを含んでよい。したがって、プロセッサ900は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30以上のコアを含む)、組み込みプロセッサなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、1つまたは複数のチップ上に実装され得る。プロセッサ900は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用して、1つまたは複数の基板の一部であってもよく、および/または1つまたは複数の基板上に実装されてもよい。
メモリ階層は、コア内のキャッシュ、1つまたは複数の共有キャッシュユニット906のセット、および、統合メモリコントローラユニット914のセットに結合された外部メモリ(図示せず)の1つまたは複数のレベルを含む。共有キャッシュユニット906のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)などの1つまたは複数の中間レベルキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはそれらの組み合わせを含んでよい。一実施形態では、リングベースのインターコネクトユニット912が、統合グラフィックスロジック908、共有キャッシュユニット906のセット、およびシステムエージェントユニット910/統合メモリコントローラユニット914をインターコネクトする一方、代替例は、そのようなユニットをインターコネクトするために任意の数の周知技術を使用する。一例では、1つまたは複数のキャッシュユニット906とコア902A~Nとの間でコヒーレンシが保持される。
いくつかの例では、コア902A~Nのうちの1つまたは複数は、マルチスレッディングすることが可能である。システムエージェント910は、コア902A~Nを調整および動作させるこれらの構成要素を含む。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含むことができる。PCUは、コア902A-Nおよび統合グラフィックスロジック908の電力状態を調節するのに必要なロジックおよび構成要素であってもよく、または含む。ディスプレイユニットは、1つまたは複数の外部接続されたディスプレイを駆動する。
コア902A~Nは、アーキテクチャ命令セットに関して同種であっても異種であってもよい。すなわち、コア902A~Nのうちの2つ以上が同じ命令セットを実行することができる一方で、他はその命令セットのサブセットまたは異なる命令セットのみを実行することができる。
例示的なコンピュータアーキテクチャ
図10~図13は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、およびハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、ならびに様々な他の電子デバイスのための、当技術分野において既知の他のシステム設計および構成も好適である。一般に、本明細書に開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが概して好適である。
ここで図10を参照すると、本開示の一例による、システム1000のブロック図が示されている。システム1000は、1つまたは複数のプロセッサ1010、1015を含むことができ、これらは、コントローラハブ1020に結合される。一例では、コントローラハブ1020は、グラフィックスメモリコントローラハブ(GMCH)1090および入力/出力ハブ(IOH)1050(別々のチップ上にあってもよい)を含み、GMCH1090は、メモリ1040およびコプロセッサ1045が結合されるメモリおよびグラフィックスコントローラを含み、IOH1050は、入力/出力(I/O)デバイス1060をGMCH1090に結合する。あるいは、メモリおよびグラフィックスコントローラの一方または両方が(本明細書に記載されるように)プロセッサ内に統合され、メモリ1040およびコプロセッサ1045は、プロセッサ1010、およびIOH1050を有する単一チップ内のコントローラハブ1020に直接結合される。メモリ1040は、例えば、実行されるとプロセッサに本開示の任意の方法を実行させるコードを格納するためのコード1040Aを含むことができる。
追加のプロセッサ1015の任意の性質は、破線で図10に示されている。各プロセッサ1010、1015は、本明細書に記載の処理コアのうちの1つまたは複数を含むことができ、プロセッサ900の何らかのバージョンであり得る。
メモリ1040は、例えば、動的ランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこの2つの組み合わせであってもよい。少なくとも一例では、コントローラハブ1020は、フロントサイドバス(FSB)などのマルチドロップバス、Quickpathインターコネクト(QPI)などのポイントツーポイントインタフェース、または同様の接続1095を介してプロセッサ1010、1015と通信する。
一例では、コプロセッサ1045は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。一例では、コントローラハブ1020は、統合グラフィックスアクセラレータを含むことができる。
建築、マイクロ建築、熱、電力消費特性などを含むメリットの測定基準のスペクトルに関して、物理リソース1010、1015の間には様々な違いがあり得る。
一例では、プロセッサ1010は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内に組み込まれているのはコプロセッサ命令であってもよい。プロセッサ1010は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1045によって実行されるべきタイプのものであると認識する。したがって、プロセッサ1010は、コプロセッサバスまたは他のインターコネクト上でこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1045に発行する。コプロセッサ1045は、受信したコプロセッサ命令を受け入れて実行する。
ここで図11を参照すると、本開示の一例による、第1のより具体的な例示的なシステム1100のブロック図が示されている。図11に示されるように、マルチプロセッサシステム1100は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト1150を介して結合された第1のプロセッサ1170および第2のプロセッサ1180を含む。プロセッサ1170および1180の各々は、プロセッサ900の何らかのバージョンであり得る。本開示の一例では、プロセッサ1170および1180はそれぞれプロセッサ1010および1015であり、一方、コプロセッサ1138はコプロセッサ1045である。別の例では、プロセッサ1170および1180は、それぞれプロセッサ1010、コプロセッサ1045である。
プロセッサ1170および1180は、それぞれが統合メモリコントローラ(IMC)ユニット1172および1182を含んで示されている。プロセッサ1170はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース1176および1178を含み、様に、第2のプロセッサ1180は、P-Pインタフェース1186および1188を含む。プロセッサ1170、1180は、P-Pインタフェース回路1178、1188を使用してポイントツーポイント(P-P)インタフェース1150を介して情報を交換することができる。図11に示されるように、IMCの1172および1182は、プロセッサをそれぞれのメモリ、すなわち、メモリ1132およびメモリ1134に結合し、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ1170、1180は各々、ポイントツーポイントインタフェース回路1176、1194、1186、1198を使用して個々のP-Pインタフェース1152、1154を介してチップセット1190と情報を交換することができる。チップセット1190は、任意に、高性能インタフェース1139を介してコプロセッサ1138と情報を交換することができる。一例では、コプロセッサ1138は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
プロセッサが低電力モードに置かれると、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、共有キャッシュ(図示せず)は、プロセッサのいずれかの中、または両方のプロセッサの外部に含まれ得、さらにP-Pインターコネクトを介して複数のプロセッサに接続される。
チップセット1190は、インタフェース1196を介して第1のバス1116に結合することができる。一例では、第1のバス1116は、周辺構成要素インターコネクト(PCI)バス、またはPCI Expressバスもしくは別の第3世代I/Oインターコネクトバスなどのバスであり得るが、本開示の範囲はそのように限定されない。
図11に示されるように、様々なI/Oデバイス1114は、第1のバス1116を第2のバス1120に結合するバスブリッジ1118と共に、第1のバス1116に結合されてもよい。一例では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの1つまたは複数の追加のプロセッサ1115が第1のバス1116に結合される。一例では、第2のバス1120は、低ピンカウント(LPC)バスであり得る。一例では、例えば、キーボードおよび/またはマウス1122、通信デバイス1127、ならびに命令/コードおよびデータ1130を含み得るディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット1128を含む様々なデバイスを第2のバス1120に結合することができる。さらに、オーディオI/O1124が第2のバス1120に結合され得る。他のアーキテクチャも可能であることに留意されたい。例えば、図11のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
ここで図12を参照すると、本開示の一例による、第2のより具体的な例示的なシステム1200のブロック図が示されている。図11および図12の同様の要素には同様の参照番号が付されており、図12の他の態様を不明瞭にすることを避けるために、図12では図11の特定の態様が省略されている。
図12は、プロセッサ1170、1180が、それぞれ統合メモリおよびI/O制御ロジック(「CL」)1172および1182を含むことができることを示している。したがって、CL1172、1182は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図12は、メモリ1132、1134がCL1172、1182に結合されているだけでなく、I/Oデバイス1214も制御ロジック1172、1182に結合されていることを示している。レガシI/Oデバイス1215はチップセット1190に結合されている。
ここで図13を参照すると、本開示の一例による、SoC1300のブロック図が示されている。図9の同様の要素は、同様の参照番号が付される。また、点線のボックスは、より高度なSoCのオプション機能である。図13では、インターコネクトユニット1302は、(それぞれのキャッシュユニット904A~904Nを有する)1つまたは複数のコア902A~Nのセットと共有キャッシュユニット906とを含むアプリケーションプロセッサ1310と、システムエージェントユニット910と、バスコントローラユニット916と、統合メモリコントローラユニット914と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含むことができる一組または1つもしくは複数のコプロセッサ1320と、静的ランダムアクセスメモリ(SRAM)ユニット1330と、直接メモリアクセス(DMA)ユニット1332と、1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット1340と、に結合されている。一例では、コプロセッサ1320は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどの専用プロセッサを含む。
本明細書に開示される(例えば、メカニズムの)例は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせで実装されてもよい。本開示の例は、少なくとも1つのプロセッサと、(揮発性および不揮発性メモリおよび/または記憶要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
図11に示されるコード1130などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成するために、入力命令に適用されてよい。出力情報は、1つまたは複数の出力デバイスに既知の様式で適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向型プログラミング言語において実装されてよい。プログラムコードはまた、所望の場合、アセンブリ言語または機械言語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されるものではない。いずれの場合でも、言語は、コンパイル型言語またはインタープリタ型言語であってよい。
少なくとも1つの例の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的な命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書で説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードするために、様々な顧客または製造設備に供給されてもよい。
そのような機械可読記憶媒体は、限定するものではないが、機械またはデバイスにより製造または形成される、非一時的で有形な構造の物品を含み得、これには、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、書き換え可能コンパクトディスク(CD-RW)、および光磁気ディスクなどの他のタイプのディスクを含む記憶媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適な他のタイプの媒体が含まれる。
したがって、本開示の例はまた、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような例も、プログラム製品と称され得る。
エミュレーション(バイナリ変換、コードモーフィングなどを含む)
いくつかの場合では、ソース命令セットからターゲット命令セットへと命令を変換するために、命令コンバータ使用され得る。例えば、命令コンバータは、命令を、コアによって処理されるべき1つまたは複数の他の命令へと変換し(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィングし、エミュレートし、または別様に変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または一部がオンプロセッサで一部がオフプロセッサであってよい。
図14は、本開示の例による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。示された例では、命令コンバータはソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図14は、高水準言語1402におけるプログラムが、x86コンパイラ1404を使用してコンパイルされて、少なくとも1つのx86命令セットコア1416を有するプロセッサによりネイティブに実行され得るx86バイナリコード1406を生成し得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1416は、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ結果を実現するために、(1)Intel(登録商標)x86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上で実行することを目標とされたアプリケーションもしくは他のソフトウェアのオブジェクトコードのバージョンを互換的に実行する、または別様に処理することにより、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。x86コンパイラ1404は、追加のリンケージ処理を用いてまたは用いないで、少なくとも1つのx86命令セットコアを有するプロセッサ1416上で実行され得るx86バイナリコード1406(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図14は、少なくとも1つのx86命令セットコア1414のないプロセッサ(例えば、MIPS Technologies(Sunnyvale,CA)のMIPS命令セットを実行する、および/またはARM Holdings(Sunnyvale,CA)のARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替の命令セットバイナリコード1410を生成するために代替の命令セットコンパイラ1408を使用して高水準言語1402のプログラムをコンパイルすることができることを示す。命令コンバータ1412は、x86バイナリコード1406を、x86命令セットコアなしのプロセッサ1414によってネイティブに実行され得るコードに変換するために使用される。この変換済みコードは、これを可能にする命令コンバータを作成することは困難であるため、代替の命令セットバイナリコード1410と同じである可能性は低いが、しかしながら、変換済みコードは一般的な演算を実現し、代替的な命令セットからの命令で構成される。したがって、命令コンバータ1412は、エミュレーション、シミュレーション、または任意の他のプロセスを通じて、x86命令セットプロセッサもしくはコアを有さない、プロセッサまたは他の電子デバイスがx86バイナリコード1406を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
[他の可能な項目]
[項目1]
複数のデコーダ回路を含む第1のデコードクラスタと、
複数のデコーダ回路を含む第2のデコードクラスタと、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された命令の送信をトグルするトグル点制御回路とを備え、前記トグル点制御回路は、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、
前記命令ストリームの複数の以前のデコードの特性が前記位置について存在する回数を追跡し、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、前記回数に基づいて、前記位置にトグル点を挿入させる、
ハードウェアプロセッサコア。
[項目2]
前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマイクロ演算の数である、項目1に記載のハードウェアプロセッサコア。
[項目3]
前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマクロ命令の数である、項目1に記載のハードウェアプロセッサコア。
[項目4]
前記トグル点の前記挿入は、前記ハードウェアプロセッサコアの分岐ターゲットバッファへの分岐命令の挿入を含む、項目1に記載のハードウェアプロセッサコア。
[項目5]
前記トグル点制御回路は、前記命令ストリームの後続のデコードにおける前記位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、前記位置を前記候補トグル点としてさらに除去する、項目1に記載のハードウェアプロセッサコア。
[項目6]
前記特性は、前記位置の前に前記命令ストリームからデコードされたマイクロ演算の数である、項目1に記載のハードウェアプロセッサコア。
[項目7]
前記トグル点制御回路は、タイマを有し、前記タイマからの追跡時間が閾値時間を超えた後、前記命令ストリームの前記複数の以前のデコードの特性が前記位置について存在する前記回数の追跡を停止する、項目1に記載のハードウェアプロセッサコア。
[項目8]
前記トグル点制御回路は、複数の候補トグル点を決定し、前記命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する、項目1に記載のハードウェアプロセッサコア。
[項目9]
複数のデコーダ回路を有する第1のデコードクラスタと複数のデコーダ回路を有する第2のデコードクラスタとを含むハードウェアプロセッサコアによってデコーディングのために要求された命令ストリームを受信する段階と、
前記ハードウェアプロセッサコアのトグル点制御回路が、前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の送信を切り替えるために、前記命令ストリーム内の位置を候補トグル点として決定する段階と、
前記トグル点制御回路が、前記命令ストリームの複数の以前のデコードの特性が前記位置について存在する回数を追跡する段階と、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、前記回数に基づいて、前記位置にトグル点を挿入する段階と
を備える、方法。
[項目10]
前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマイクロ演算の数である、項目9に記載の方法。
[項目11]
前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマクロ命令の数である、項目9に記載の方法。
[項目12]
前記トグル点の前記挿入は、前記ハードウェアプロセッサコアの分岐ターゲットバッファへの分岐命令を挿入する段階を含む、項目9に記載の方法。
[項目13]
前記命令ストリームの後続のデコードにおける前記位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、前記位置を前記候補トグル点として除去する段階をさらに備える、項目9に記載の方法。
[項目14]
前記特性は、前記位置の前に前記命令ストリームからデコードされたマイクロ演算の数である、項目9に記載の方法。
[項目15]
追跡時間が閾値時間を超えた後、前記命令ストリームの前記複数の以前のデコードの特性が前記位置について存在する前記回数の前記追跡を停止することをさらに備える、項目9に記載の方法。
[項目16]
前記決定する段階は、複数の候補トグル点を決定する段階を含み、前記追跡する段階は、前記命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する段階を含む、項目9に記載の方法。
[項目17]
命令を格納するメモリと、
複数のデコーダ回路を含む第1のデコードクラスタと、
複数のデコーダ回路を含む第2のデコードクラスタと、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の送信をトグルするトグル点制御回路とを備え、前記トグル点制御回路は、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、
前記命令ストリームの複数の以前のデコードの特性が前記位置について存在する回数を追跡し、
前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、前記回数に基づいて、前記位置にトグル点を挿入させる、
装置。
[項目18]
前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマイクロ演算の数である、項目17に記載の装置。
[項目19]
前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマクロ命令の数である、項目17に記載の装置。
[項目20]
前記トグル点の前記挿入は、分岐ターゲットバッファへの分岐命令の挿入を含む、項目17に記載の装置。
[項目21]
前記トグル点制御回路は、前記命令ストリームの後続のデコードにおける前記位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、前記位置を前記候補トグル点としてさらに除去する、項目17に記載の装置。
[項目22]
前記特性は、前記位置の前に前記命令ストリームからデコードされたマイクロ演算の数である、項目17に記載の装置。
[項目23]
前記トグル点制御回路は、タイマを有し、前記タイマからの追跡時間が閾値時間を超えた後、前記命令ストリームの前記複数の以前のデコードの特性が前記位置について存在する前記回数の追跡を停止する、項目17に記載の装置。
[項目24]
前記トグル点制御回路は、複数の候補トグル点を決定し、前記命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する、項目17に記載の装置。

Claims (24)

  1. 複数のデコーダ回路を含む第1のデコードクラスタと、
    複数のデコーダ回路を含む第2のデコードクラスタと、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された命令の送信をトグルするトグル点制御回路と
    を備え、前記トグル点制御回路は、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、
    前記命令ストリームの複数の以前のデコードの特性が前記位置について存在する回数を追跡し、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、前記回数に基づいて、前記位置にトグル点を挿入させる、
    ハードウェアプロセッサコア。
  2. 前記特性は、前記位置の前におよび前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマイクロ演算の数である、請求項1に記載のハードウェアプロセッサコア。
  3. 前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマクロ命令の数である、請求項1に記載のハードウェアプロセッサコア。
  4. 前記トグル点の前記挿入は、前記ハードウェアプロセッサコアの分岐ターゲットバッファへの分岐命令の挿入を含む、請求項1に記載のハードウェアプロセッサコア。
  5. 前記トグル点制御回路は、前記命令ストリームの後続のデコードにおける前記位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、前記位置を前記候補トグル点としてさらに除去する、請求項1に記載のハードウェアプロセッサコア。
  6. 前記特性は、前記位置の前に前記命令ストリームからデコードされたマイクロ演算の数である、請求項1に記載のハードウェアプロセッサコア。
  7. 前記トグル点制御回路は、タイマを有し、前記タイマからの追跡時間が閾値時間を超えた後、前記命令ストリームの前記複数の以前のデコードの特性が前記位置について存在する前記回数の追跡を停止する、請求項1に記載のハードウェアプロセッサコア。
  8. 前記トグル点制御回路は、複数の候補トグル点を決定し、前記命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する、請求項1~7のいずれか一項に記載のハードウェアプロセッサコア。
  9. 複数のデコーダ回路を有する第1のデコードクラスタと複数のデコーダ回路を有する第2のデコードクラスタとを含むハードウェアプロセッサコアによってデコーディングのために要求された命令ストリームを受信する段階と、
    前記ハードウェアプロセッサコアのトグル点制御回路が、前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された命令の送信を切り替えるために、前記命令ストリーム内の位置を候補トグル点として決定する段階と、
    前記トグル点制御回路が、前記命令ストリームの複数の以前のデコードの特性が前記位置について存在する回数を追跡する段階と、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、前記回数に基づいて、前記位置にトグル点を挿入する段階と
    を備える、方法。
  10. 前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマイクロ演算の数である、請求項9に記載の方法。
  11. 前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマクロ命令の数である、請求項9に記載の方法。
  12. 前記トグル点の前記挿入は、前記ハードウェアプロセッサコアの分岐ターゲットバッファへの分岐命令を挿入する段階を含む、請求項9に記載の方法。
  13. 前記命令ストリームの後続のデコードにおける前記位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、前記位置を前記候補トグル点として除去する段階をさらに備える、請求項9に記載の方法。
  14. 前記特性は、前記位置の前に前記命令ストリームからデコードされたマイクロ演算の数である、請求項9に記載の方法。
  15. 追跡時間が閾値時間を超えた後、前記命令ストリームの前記複数の以前のデコードの特性が前記位置について存在する前記回数の前記追跡を停止する段階をさらに備える、請求項9に記載の方法。
  16. 前記決定する段階は、複数の候補トグル点を決定する段階を含み、前記追跡する段階は、前記命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する段階を含む、請求項9~15のいずれか一項に記載の方法。
  17. 命令を格納するメモリと、
    複数のデコーダ回路を含む第1のデコードクラスタと、
    複数のデコーダ回路を含む第2のデコードクラスタと、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコードすることのために要求された前記命令の送信をトグルするトグル点制御回路と
    を備え、前記トグル点制御回路は、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、命令ストリーム内の位置を候補トグル点として決定し、
    前記命令ストリームの複数の以前のデコードの特性が前記位置について存在する回数を追跡し、
    前記第1のデコードクラスタと前記第2のデコードクラスタとの間でデコーディングのために要求された前記命令の前記送信を切り替えるために、前記回数に基づいて、前記位置にトグル点を挿入させる、
    装置。
  18. 前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマイクロ演算の数である、請求項17に記載の装置。
  19. 前記特性は、前記位置の前および前記第1のデコードクラスタと前記第2のデコードクラスタとの間での前記命令ストリームのデコーディングの直前の切り替えの後に前記命令ストリームからデコードされたマクロ命令の数である、請求項17に記載の装置。
  20. 前記トグル点の前記挿入は、分岐ターゲットバッファへの分岐命令の挿入を含む、請求項17に記載の装置。
  21. 前記トグル点制御回路は、前記命令ストリームの後続のデコードにおける前記位置の後に閾値数の命令内で既存のトグル点に遭遇した場合に、前記位置を前記候補トグル点としてさらに除去する、請求項17に記載の装置。
  22. 前記特性は、前記位置の前に前記命令ストリームからデコードされたマイクロ演算の数である、請求項17に記載の装置。
  23. 前記トグル点制御回路は、タイマを有し、前記タイマからの追跡時間が閾値時間を超えた後、前記命令ストリームの前記複数の以前のデコードの特性が前記位置について存在する前記回数の追跡を停止する、請求項17に記載の装置。
  24. 前記トグル点制御回路は、複数の候補トグル点を決定し、前記命令ストリームの複数の以前のデコードのそれぞれの特性がそれぞれの位置に対して存在する対応する回数を追跡する、請求項17~23のいずれか一項に記載の装置。
JP2022110794A 2021-09-24 2022-07-08 クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路 Pending JP2023047283A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/484,969 US20230099989A1 (en) 2021-09-24 2021-09-24 Scalable toggle point control circuitry for a clustered decode pipeline
US17/484,969 2021-09-24

Publications (1)

Publication Number Publication Date
JP2023047283A true JP2023047283A (ja) 2023-04-05

Family

ID=82846295

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022110794A Pending JP2023047283A (ja) 2021-09-24 2022-07-08 クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路

Country Status (4)

Country Link
US (1) US20230099989A1 (ja)
EP (1) EP4155915B1 (ja)
JP (1) JP2023047283A (ja)
CN (1) CN115858022A (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5794068A (en) * 1996-03-18 1998-08-11 Advanced Micro Devices, Inc. CPU with DSP having function preprocessor that converts instruction sequences intended to perform DSP function into DSP function identifier
US11200058B2 (en) * 2014-05-07 2021-12-14 Qualcomm Incorporated Dynamic load balancing of hardware threads in clustered processor cores using shared hardware resources, and related circuits, methods, and computer-readable media
US10331454B2 (en) * 2016-09-29 2019-06-25 Intel Corporation System and method for load balancing in out-of-order clustered decoding

Also Published As

Publication number Publication date
EP4155915A1 (en) 2023-03-29
CN115858022A (zh) 2023-03-28
EP4155915B1 (en) 2024-04-17
US20230099989A1 (en) 2023-03-30

Similar Documents

Publication Publication Date Title
US9940132B2 (en) Load-monitor mwait
JP6143872B2 (ja) 装置、方法、およびシステム
US9411739B2 (en) System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators
US8429636B2 (en) Handling dependency conditions between machine instructions
US20170212825A1 (en) Hardware profiling mechanism to enable page level automatic binary translation
US20110078425A1 (en) Branch prediction mechanism for predicting indirect branch targets
US10095623B2 (en) Hardware apparatuses and methods to control access to a multiple bank data cache
US20100268892A1 (en) Data Prefetcher
US20130024647A1 (en) Cache backed vector registers
US10127039B2 (en) Extension of CPU context-state management for micro-architecture state
US11188341B2 (en) System, apparatus and method for symbolic store address generation for data-parallel processor
US20180157598A1 (en) Apparatuses, methods, and systems to share translation lookaside buffer entries
US20130138888A1 (en) Storing a target address of a control transfer instruction in an instruction field
US11531562B2 (en) Systems, methods, and apparatuses for resource monitoring
US10067762B2 (en) Apparatuses, methods, and systems for memory disambiguation
CN113535236A (zh) 基于指令集体系结构的和自动的加载跟踪的方法和装置
US8504805B2 (en) Processor operating mode for mitigating dependency conditions between instructions having different operand sizes
EP3109754A1 (en) Systems, methods, and apparatuses for improving performance of status dependent computations
EP4020229A1 (en) System, apparatus and method for prefetching physical pages in a processor
US11126438B2 (en) System, apparatus and method for a hybrid reservation station for a processor
EP4155915B1 (en) Scalable toggle point control circuitry for a clustered decode pipeline
US20220413860A1 (en) System, Apparatus And Methods For Minimum Serialization In Response To Non-Serializing Register Write Instruction
US20210200538A1 (en) Dual write micro-op queue
TW202213088A (zh) 透過微運算進行暫存器強化的系統、設備及方法
CN113568663A (zh) 代码预取指令