JP2023048102A - 共有プリフェッチ命令およびサポート - Google Patents

共有プリフェッチ命令およびサポート Download PDF

Info

Publication number
JP2023048102A
JP2023048102A JP2022110690A JP2022110690A JP2023048102A JP 2023048102 A JP2023048102 A JP 2023048102A JP 2022110690 A JP2022110690 A JP 2022110690A JP 2022110690 A JP2022110690 A JP 2022110690A JP 2023048102 A JP2023048102 A JP 2023048102A
Authority
JP
Japan
Prior art keywords
byte
data
cache
field
opcode
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
JP2022110690A
Other languages
English (en)
Inventor
ヒューズ クリストファー
Christopher Hughes
ワン ジェ
Zhe Wang
バウム ダン
Baum Dan
ハイネッケ アレクサンダー
Heinecke Alexander
ジョーガナス エヴァンゲロス
Georganas Evangelos
シャン リンシャン
Lingxiang Xiang
ヌズマン ジョセフ
Nuzman Joseph
グプタ リツ
Gupta Ritu
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 JP2023048102A publication Critical patent/JP2023048102A/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • G06F12/0848Partitioned cache, e.g. separate instruction and operand caches
    • 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/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/1016Performance improvement
    • G06F2212/1024Latency reduction
    • 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/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

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

Abstract

【課題】共有プリフェッチ命令を処理する装置、方法、プログラム及び非一時的機械可読媒体を提供する。【解決手段】方法は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドと、を有する単一命令をのインスタンスをフェッチすること、を含む。オペコードは、回路が、ソースオペランドで指定されたバイトを含む提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものである。要求者は、共有プリフェッチ命令を有していたコアであり、オペコード自体または他のインジケータは、バイトが共有状態で格納されるためのものであることを規定し、プリフェッチするバイトは、最終レベルキャッシュ(LLC)に格納される。【選択図】図10

Description

今日の多くのプロセッサは、シングルスレッドアプリケーションを実行するために最適化される。これには、キャッシュ階層で行われるポリシーおよび設計決定が含まれる。スレッドがロードまたはストアを実行するとき、ハードウェアは、タッチされているデータがそのスレッドにとってプライベートであると仮定することが多い。一部のサーバプロセッサでは、例えば、全てのキャッシュにミスするロードでは、データは、排他的な状態で要求側コアのL2キャッシュにインストールされ、共有LLCキャッシュにはインストールされない。
本開示による様々な例が、以下の図面に関連して説明される。
例による、プロセッサに含まれ得る例示的な中央処理装置(CPU)複合体のブロック図である。
例による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。
コヒーレントエージェントを使用する例を示す。
例による、共有プリフェッチ命令を少なくとも部分的に実装するプロセッサ内のキャッシュを示すブロック図である。
共有プリフェッチ命令なしでメインメモリ内で開始するデータの処理の例を示す。
共有プリフェッチ命令ありでメインメモリ内で開始するデータの処理の例を示す。
共有プリフェッチ命令なしで修正状態(M)のコアのプライベートキャッシュ内で開始するデータの処理の例を示す。
共有プリフェッチ命令ありで修正状態(M)のコアのプライベートキャッシュ内で開始するデータの処理の例を示す。
共有プリフェッチ命令などの命令を処理するためのハードウェアの例を示す。
共有プリフェッチ命令を処理するために実行される方法のいくつかの例を示す。
例示的なシステムの例を示す。
1つよりも多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサの例のブロック図を示す。
例による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
例によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
図13(B)の実行ユニット回路などの、実行ユニット回路の例を示す。
いくつかの例によるレジスタアーキテクチャのブロック図である。
命令フォーマットの例を示す。
アドレシングフィールドの例を示す。
第1のプレフィクスの例を示す。
第1のプレフィクス1601(A)のR、X、およびBフィールドがどのように使用されるかの例を示す。 第1のプレフィクス1601(A)のR、X、およびBフィールドがどのように使用されるかの例を示す。 第1のプレフィクス1601(A)のR、X、およびBフィールドがどのように使用されるかの例を示す。 第1のプレフィクス1601(A)のR、X、およびBフィールドがどのように使用されるかの例を示す。
第2のプレフィクスの例を示す。 第2のプレフィクスの例を示す。
第3のプレフィクスの例を示す。
例による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。
本開示は、共有データのプリフェッチのための命令のための方法、装置、システム、および非一時的コンピュータ可読記憶媒体に関する。
バックグラウンドのキャッシングポリシーの欠点は、マルチスレッドアプリケーションを実行するときに、ハードウェアがデータを準最適な方法で処理し得ることである。本明細書では、一般的/重大なケースであるため、読み出し共有データを処理することに焦点を当てて詳細に説明する。読み出し共有データの場合、それを可能な限り迅速に共有キャッシュにインストールして、後のリーダが共有キャッシュ内でヒットするようにする利点があり得る。代替案は、スヌープまたはメモリ階層の次のレベルへの冗長アクセスを必要とするものである。
いくつかの例では、サーバCPUおよび/またはチップセットは、データが1つのコアのプライベートキャッシュにあり、別のコアがデータを要求するときにスヌープを使用する。クリーンなデータの場合、スヌープされると、データは共有キャッシュにインストールされる。読み出し共有データが非常に多数のコアによって共有される場合、これらのスヌープはアクセスのごく一部であり、重要ではない。しかしながら、適度な数のコア(例えば、2、4、または8)によって共有されるデータの場合、これらのスヌープのコストは非常に大きくなり得る。このコストは、より長い待ち時間、より高いメッシュトラフィック、およびキャッシングエージェント(キャッシングおよびホームエージェント(CHA)と呼ばれることもある)に対する圧力の増加の形態で生じる。
いくつかのシステムは、共有キャッシュにデータをプッシュするためにスレッドによって使用され得るキャッシュラインデモート(CLDEMOTE)命令を含むことに留意されたい。いくつかの命令セットアーキテクチャ(ISA)は、メモリ動作が、データが属するべきキャッシュのレベルで指定する(または示唆する)ことを可能にする。これは、キャッシュ階層の全てのレベル(例えば、T0)へのデータのプリフェッチ、レベル2キャッシュ以上(例えば、T1)へのデータのプリフェッチ、レベル3キャッシュ以上へのデータのプリフェッチ、もしくは実装固有の選択(例えば、T2)、ならびに/または非一時的キャッシュ構造およびプロセッサに近い位置へのデータのプリフェッチなどの示唆を含み、キャッシュ汚染を最小限に抑える(例えば、NTA)。
データの一部が共有されていることを知ることで、ハードウェアは、それを他の場合とは異なるキャッシュに配置し、および/または他の場合とは異なるコヒーレンス状態にデータを置くことができる。これにより、共有データのコヒーレンストラフィック量が減少し、キャッシュヒット率が増加する。これにより、性能(オンダイメッシュおよび様々なキャッシュ上の待ち時間の低減および圧力の低減による)および電力効率が改善される。
共有アドレス空間およびハードウェアのキャッシュコヒーレンスを有するアーキテクチャでは、通常、ハードウェアは、スレッドが「プライベート」データ、すなわちそのスレッドによってのみタッチされたデータ、または「共有」データ、すなわち複数のスレッドによってタッチされたデータをロード/格納しようとしているときの違いを容易に区別することができない。メモリ/キャッシュ階層に応じて、プライベートデータと共有データを異なる方法で処理することには利点があり得る。そのようなシステムでは、ソフトウェアは、共有データにタッチしようとしていることを知ることができ、その情報をハードウェアに伝達することができ、データのより効率的な処理を可能にする。
本明細書では、プリフェッチされるデータが他のスレッドによって共有されることを示唆してプリフェッチを実行する命令およびそのサポートの例を詳細に説明する。最も重要なケースは、他のスレッドによって読み出し共有されるデータに関するものである。いくつかの例では、モデル固有レジスタ(MSR)内のビットは、設定されると、少なくともいくつかのソフトウェアプリフェッチ命令が共有データにタッチしているかのように挙動するように挙動を変更する。
特に、いくつかの例では、「共有プリフェッチ」命令PREFETCHS m8が記載される。この命令の実行は、データが複数のスレッドによって共有されることをハードウェアに示唆しながら、M8によって指定されたバイトを含むメモリからのデータのラインのプリフェッチを引き起こす。
図1は、例による、プロセッサに含まれ得る例示的な中央処理装置(CPU)複合体のブロック図である。いくつかの例では、L3キャッシュは、4コアモジュール(CPU複合体またはCCXと称される)に分割された8MBの16ウェイキャッシュであり、コアごとに2MB「スライス」のL3キャッシュを提供する。しかしながら、CCX内のL3キャッシュスライスは、L3キャッシュが共有キャッシュであるように実装される。複数のCCXが、単一のプロセッサ(例えば、2つのCCXは16MBのL3キャッシュを形成する)に含まれ得る。各CCX上の8MBキャッシュは別個であるため、データが必要かどうかを判定するために他のL3キャッシュへの適切なフックを有する4コアモジュールごとの最終レベルキャッシュとして機能する(L3キャッシュ設計に含まれるプロトコルは、各コアが他のコアの各々のL3キャッシュにアクセスすることを可能にする)。したがって、これらのL1、L2、およびL3キャッシュはコヒーレントキャッシュであり、CCX内およびCCX間のL3キャッシュスライスは、キャッシュコヒーレントインターコネクト(キャッシュコヒーレントファブリックとも称される)によって接続されている。
図2は、例による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。図2において、キャッシュ階層200は、L1 i-キャッシュ210AおよびL1 d-キャッシュ210B(まとめて、L1キャッシュ210)と、L2命令およびデータキャッシュ220と、レベル3(L3)命令およびデータキャッシュ230とを含む。いくつかの例では、L1キャッシュ210およびL2キャッシュ220の両方がプライベート/ローカルライトバックキャッシュであり、一方、L3キャッシュ230は犠牲キャッシュである。いくつかの例では、L1 i-キャッシュ210Aは64KBの4ウェイキャッシュであり、L1 d-キャッシュ210Bは32KBの8ウェイキャッシュであり、L2キャッシュ220は512KBの8ウェイキャッシュであり、レベル3(L3)キャッシュ230は8MBの16ウェイキャッシュである。
メモリ構成の特徴
例によるプロセッサコア、プロセッサ、およびシステムは、メモリの構成および使用に関連する様々な特徴を含むことができる。いくつかのそのような特徴は、以下の非限定的な例を使用して別々に説明されるが、例は、そのような特徴の任意の組み合わせを含むことができる。
例示的なメモリ階層
図3は、例による、メモリ階層を示すブロック図である。図示のメモリ階層は、様々なプロセッサコア、コアクラスタ、CCX、プロセッサ、コンピュータアーキテクチャなどと共に実装することができる。図3は、コヒーレントエージェント300およびコヒーレントエージェント301、ならびに「...」および点線のボックスを使用したコヒーレントエージェント302によって表される他のコヒーレントエージェントの可能性を示す。図3のメモリ階層は、コヒーレントキャッシュ304A、インターコネクト320、およびダウンストリームメモリ330を含む。異なる例は、コヒーレントキャッシュ304Aの一部として異なる数のキャッシュおよびキャッシュレベルを実装することができる。コヒーレントエージェントおよびコヒーレントキャッシュは、キャッシュコヒーレンシプロトコル(例えば、「修正」、「排他的」、「共有」、および「無効」のキャッシュコヒーレンシプロトコル状態を使用するMESIプロトコル;「転送」のキャッシュコヒーレンシプロトコル状態を追加するMESIFプロトコル;代わりに「所有」のキャッシュコヒーレンシプロトコル状態を追加するMOESIプロトコル;ならびに他のそのようなキャッシュコヒーレンシプロトコル)を使用してキャッシュコヒーレンシが維持されるキャッシュコヒーレンスドメインの一部である。
コヒーレントエージェント300は、キャッシュ階層の連続的に下位レベルの1つまたは複数のキャッシュを介してインターコネクト320に結合される。キャッシュ階層は、キャッシュ階層の最上位レベルにあり、コヒーレントエージェント300に結合されているキャッシュと、キャッシュ階層の最下位レベルにあり、インターコネクト320に結合されているキャッシュ(例えば、L3キャッシュ315)(したがって、このキャッシュは最下位レベルキャッシュまたは最終レベルキャッシュ(LLC)と称される)と、上位レベルのキャッシュのうちの1つおよび下位レベルのキャッシュのうちの1つに結合されているキャッシュ階層の中間レベルにある0個以上のキャッシュ(例えば、L2キャッシュ310)とを含む(例えば、図3は、インターコネクト320に結合されたL3キャッシュ315に結合されたL2キャッシュ310に結合されたL1キャッシュ305に結合されたコヒーレントエージェント300を示す)。
コヒーレントエージェント301もまた、1つまたは複数のレベルのキャッシュを介してインターコネクトに結合される。図3は、L3キャッシュ315に結合された任意のL2キャッシュ311に結合された任意のL1キャッシュ306に結合されたコヒーレントエージェント301を示す。さらに、図3はまた、任意のコヒーレントエージェント302がインターコネクト320に直接結合され得る(すなわち、いかなるコヒーレントキャッシュも有しない)ことも示している。
連続するレベルのキャッシュを介してインターコネクト320に結合されるコヒーレントエージェントを含む接続性に加えて、またはその代わりに、特定の例は、(例えば、点線335、336、337、および338によってそれぞれ示されているように、コヒーレントエージェント300をインターコネクト320に直接結合する、コヒーレントエージェント300をL2キャッシュ310に直接結合する、L1キャッシュ305をインターコネクト320に直接結合する、および/またはL2キャッシュ310をインターコネクト320に直接結合する)直接またはより直接的な通信を可能にする他の接続性を実装する。
インターコネクト320は、ダウンストリームメモリ330に(例えば、1つまたは複数のメモリコントローラ(図示せず)のセットを介して)結合される。ダウンストリームメモリ330は、コヒーレントキャッシュ304よりも下位レベルのメモリ階層にあり、1つまたは複数のタイプのメモリおよび/またはメモリの階層(例えば、揮発性メモリおよび/または不揮発性メモリ、メインメモリ、メモリマップド入力/出力(MMIO)、メモリ側キャッシュ、2レベルメモリ(2LM)、DRAM、フラッシュ、相変化メモリ、3D Xpoint(商標))を含むことができる。
インターコネクト320(キャッシュコヒーレントインターコネクト、ファブリック、インターコネクト、アンコアの一部、インターコネクトネットワーク、インターコネクトユニットとも称される)は、コヒーレントキャッシュ304にスヌープを発行し、そこから任意の応答を受信するためのスヌープコントローラ325を含む。スヌープコントローラ325は、スヌープを発行するためのスヌープ発生器326と、いくつかの例では、任意の応答を受信するためのスヌープレスポンダ327とを含む。さらに、いくつかの例では、インターコネクト320はL3キャッシュ315とダウンストリームメモリ330との間にあるものとして示されているが、代替の例は、別の位置でインターコネクト320を実装することができる(例えば、L2キャッシュとL3キャッシュとの間で、インターコネクト320から(例えば、ホームエージェントとして)ダウンストリームメモリ330へのセットもしくは1つもしくは複数のメモリコントローラ、またはL3キャッシュ315とダウンストリームメモリ330との間のセットもしくは1つもしくは複数のメモリコントローラのいずれか)。インターコネクト320(例えば、スヌープコントローラ325の一部として)は、スヌープフィルタ(図示せず)などの他の項目を含むことができる。
異なる例は、(中央処理装置(CPU)としても知られる)汎用コアとして異なる数のコヒーレントエージェントを用いて実装されてもよい。例えば、いくつかの例では、コヒーレントエージェント300はコアであり、コヒーレントエージェント31はコアであり、コアである0個以上の追加のコヒーレントエージェントがあり、他のタイプのエージェント(例えば、ほんの数例を挙げると、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理デバイス)である0個以上の追加のコヒーレントエージェントがある。
いくつかの例では、コヒーレントエージェントおよびコヒーレントキャッシュ304は、図3のように実装される。例えば、CCXには、コア、コアごとのプライベート/ローカルL1キャッシュ、コアごとのプライベート/ローカルL2キャッシュ、および共有L3キャッシュである4つのコヒーレントエージェントがあり、単一のプロセッサに結合された複数のCCXがあり得る。L1およびL2キャッシュはライトバックキャッシュであり、L2キャッシュは包括的キャッシュであり、L3キャッシュは犠牲キャッシュである。さらに、L3キャッシュ315は、モジュール(CCX)内の複数のコヒーレントエージェント(例えば、4コアでコアあたり2MB、合計8MB)間、および任意に1つまたは複数のそのようなモジュール(例えば、16MBのL3キャッシュを形成するために、各々が8MBを有する2つのCCX)間でスライスに分割される。図3は、コヒーレントエージェント300のL3キャッシュスライス316およびコヒーレントエージェント301のL3キャッシュスライス317を用いてこれを示す。インターコネクト320は、例えば、1)CCX内のインターコネクトのみ、2)CCX内およびCCX間のインターコネクト、3)異なるCCX内の別個のインターコネクト、ならびにCCX間のインターコネクトを表すことができる。異なる例は、リング、複数のリング、ポイントツーポイントリンク、共有バスなどのうちの1つまたは複数を含め、インターコネクト320を異なって実装することができる。ホームエージェントおよびキャッシングエージェントを実装する例では、インターコネクト320は、キャッシングエージェントを含むと考えられる。
図3のコヒーレントエージェントのうちの1つまたは複数、または全ては、共有プリフェッチ命令を実行するように実装されてもよい。共有プリフェッチ命令を現在実行しているコヒーレントエージェントは、「発行エージェント」、「発行コヒーレントエージェント」、または「第1のエージェント」であり、そのキャッシュは、発行エージェントのLxキャッシュと称される(ここで、xは、1、2、または3であってもよく、L3キャッシュがスライスで実装される場合、それは発行エージェントのL3キャッシュスライスである)。以下の説明では、これはコヒーレントエージェント300である。共有プリフェッチ命令を現在実行していないコヒーレントエージェントは、「コヒーレントだが非発行エージェント」、「非発行エージェント」、「非発行コヒーレントエージェント」、または「第2のエージェント」と称され(上述したように、複数の第2のエージェントが存在してもよいが、簡略化のために以下で1つを説明する)、そのキャッシュは、第2のエージェントのLxキャッシュと称される(ここで、xは、1、2、または3であってもよく、L3キャッシュがスライスで実装される場合、それは第2のエージェントのL3キャッシュスライスである)。
例示的なキャッシュアーキテクチャ
図4は、例による、共有プリフェッチ命令を少なくとも部分的に実装するプロセッサ内のキャッシュを示すブロック図である。図4はLxキャッシュ450を含み、xはキャッシュ階層内のレベル(例えば、1、2、3)を示す。Lxキャッシュ450は、ヒット/ミスの検出、キャッシュラインへの書き込み/読み出しの実行、スヌープの受信(したがって、いくつかの例では、キャッシュコントローラ451はスヌープインタフェースを含み、いくつかの例では、スヌープコントローラ443を含む)などを含む、キャッシュの動作を制御するためのキャッシュコントローラ451を含む。キャッシュコントローラは、エントリ460を有するタグアレイ455を含み(「タグ状態」と称されることもあるものを含む)、Lxキャッシュ450は、対応するキャッシュライン470を有するデータアレイ456を含む。各エントリ460は、所与のアドレスがキャッシュライン470の対応するもの内のデータをヒットまたはミスするかどうかを判定するために使用されるタグを格納するためのタグフィールド461を含む。さらに、各エントリ460は、キャッシュライン470の対応するものに格納されるデータの属性を格納するための1つまたは複数の属性フィールド462(「タグ状態」と称されることもある)のセットを含む。属性フィールド462は、キャッシュライン470の対応するものに格納されたデータの現在のキャッシュコヒーレンシプロトコル状態を示す値を格納するためのキャッシュコヒーレンシプロトコル状態フィールド465を含む。属性フィールド462は、任意に、ゼロラインフィールド466、ポイズンフィールド467、誤り訂正符号フィールド(図示せず)などの他のフィールドを含むことができる。図4は、タグアレイ内にある属性フィールド462を示しているが、代替の例は、これらのフィールドを別個の状態アレイ(図示せず)に実装することができる。いくつかの例では、所与のキャッシュラインは、ポイズンフィールド467に複数のポイズン指示(例えば、64バイトキャッシュラインの2つの32バイトチャンクに対して1つ)を有し得る。図4は別個のポイズンフィールド467を示しているが、代替の例は、ポイズン指示を別のフィールド(例えば、誤り訂正符号(ECC)フィールドまたはキャッシュコヒーレンシプロトコル状態フィールド)にエンコードすることができる。
(例えば、タグフィールド461内のタグに基づいて)キャッシュ内のヒットに応答して、キャッシュコントローラ451は、ヒットについてのキャッシュコヒーレンシプロトコル状態フィールド456(例えば、そのタグが一致したタグフィールド461に対応するキャッシュコヒーレンシプロトコル状態フィールド456)内のキャッシュコヒーレンシプロトコル状態に応答するための回路(例えば、キャッシュコヒーレンシプロトコル状態回路または他の回路)を含み、この応答は、例同士の間で、および様々な要因(例えば、キャッシュルックアップが書き込みコマンド、読み出しコマンド、スヌープ(および場合によってはスヌープのタイプ)に応答して開始されたかどうか)に基づいて異なる。例えば、いくつかの例では、以下でより詳細に説明するように、応答は、キャッシュコヒーレンシプロトコル状態が、書き込みコマンドおよび/または特定のタイプのスヌープに応答してキャッシュラインを変更するキャッシュ権限(例えば、「修正」または「排他的」状態)を付与するものであるかどうかを判定するためのものである。いくつかの例では、キャッシュコントローラ451は、1)コマンド(例えば、書き込みコマンド、読み出しコマンド、スヌープコマンド)に応答してキャッシュにヒットまたはミスがあるかどうかを判定するためのヒットミス回路(図示せず)と、2)スヌープを受信し、応答メッセージをスヌープに送信するためのスヌープインタフェース(図示せず)に結合されたスヌープコントローラ443と、3)キャッシュライン読み出し回路(図示せず)およびキャッシュライン書き込み回路(図示せず)とを含む。
そのような命令の概念的な利点を実証するために、以下の図は、2つのケース、すなわち、メインメモリで開始するデータと、1つのコアのプライベートキャッシュでダーティに開始するデータのための命令がある場合およびこの命令がない場合での、コアの外部(アンコアとも呼ばれる)の挙動を示す。
図5は、共有プリフェッチ命令なしでメインメモリ内で開始するデータの処理の例を示す。ここで、第1のリーダであるコア0 501は、LLC503でミスし、DRAMからデータをフェッチし、そのプライベートキャッシュ内のデータを排他的状態(E)に置く。これは、ラインがプライベートであり、コア0 501が最終的にラインを書き込む場合にうまく機能する。しかしながら、読み出し共有の場合には最適ではない。ここで、第2のリーダであるコア1 505は、LLC503でミスし、コア0 501からのデータのコピーをスヌープし(これにより、状態を共有状態(S)に変化させ)、これはまた、共有状態のLLC503およびコア1 503へのラインのコピーの配置をトリガする。最後に、第3のリーダであるコア2 507がLLC503内でヒットする。
図6は、共有プリフェッチ命令ありでメインメモリ内で開始するデータの処理の例を示す。共有プリフェッチ命令を使用するソフトウェアの場合、第1のリーダ(コア0 601)は、共有プリフェッチ命令を使用してデータにタッチする。これは、アンコアへの異なる種類の要求をトリガし、タッチされているデータが共有データとして扱われるべきであることをアンコアに通知する。図示されるように、コア0 601からの共有プリフェッチは、共有されたコード読み出しをトリガする。これは、キャッシングエージェント/最終レベルキャッシュ(LLC)に、データを共有状態(S)でLLC603にインストールし、コピーをコア0 601に返して共有状態(S)で格納するように命令する。後のリーダであるコア1 605およびコア2 607の両方は、LLC603内の共有データにヒットする。この図は、コア1 605およびコア2 607が通常の読み出しを実行していることを示しているが、実際には、誰が最初にラインにタッチするか分からないため、共有プリフェッチも発行する可能性が高い。
図7は、共有プリフェッチ命令なしで修正状態(M)のコアのプライベートキャッシュ内で開始するデータの処理の例を示す。ここで、第1のリーダであるコア0 701は、LLC703でミスし、コア1の705プライベートキャッシュからデータをスヌープする。コヒーレンスプロトコルは、M2I(modified-to-invalid)フローを使用し、これにより、ラインの所有権がコア1 705からコア0 701に移行する。これは、コア0 701がラインに書き込み続ける場合には良好に機能するが、読み出し共有の場合には最適ではない。ここで、コア1 705は、次にデータを読み出し、それ自体のプライベートキャッシュ(以前にラインのコピーを有していたとしても)およびLLC703でミスし、コア0 701からラインをスヌープし返す。これは、LLC703内へのラインのコピーの配置をトリガする。最後に、第3のリーダであるコア2 707がLLC703内でヒットする。
図8は、共有プリフェッチ命令ありで修正状態(M)のコアのプライベートキャッシュ内で開始するデータの処理の例を示す。第1のリーダ(コア0 801)は、共有プリフェッチ命令を使用してデータにタッチする。前のケース(DRAM内のデータ)と同様に、コア0 801からの共有プリフェッチは、共有されたコード読み出しをトリガする。これは、データを共有状態でLLC803にインストールし、コピーをコア0 803に返すようにLLC803に命令する。データは修正状態でコア1の805キャッシュで開始するため、ハードウェアはM2S(modified-to-shared)フローを使用してコア1の805プライベートキャッシュからデータをスヌープし、コア1の805プライベートキャッシュにラインのコピーを残す。後にコア1 805がラインを読み出すと、それはそのプライベートキャッシュ内でヒットする(これによりトラフィックが発生しないため、図には示されていない)。最後に、コア2が807を読み出すと、それはLLC803内でヒットする。
上記の図から分かるように、読み出し共有データの場合、単一のプライベートキャッシュに配置しようとするのではなく共有キャッシュにラインをインストールすると、コヒーレンストランザクションが大幅に減少する。
いくつかの例では、アプリケーション内の既存のプリフェッチ命令の一部または全てをオーバーライドし、それらを共有プリフェッチとして扱うメカニズムが使用される。オーバーライドはソフトウェアによって行われ、構成レジスタ、機械固有レジスタ、範囲レジスタ、ページテーブルエントリ内の新しいビット、またはプリフェッチ命令のサブセット(特定のオペコードおよび/または特定のIP)および/またはデータもしくは命令アドレスの範囲/セットを指定するための別のメカニズムを介して行われ得る。オーバーライドを担当するコアまたはアンコア内のハードウェアは、プリフェッチ命令がオーバーライドのターゲットであることを検出し、その挙動を変更する。
図9は、共有プリフェッチ命令などの命令を処理するためのハードウェアの例を示す。示されるように、記憶装置903は、実行されるべき共有プリフェッチ命令901を格納する。
命令901はデコード回路905によって受信される。例えば、デコード回路905は、フェッチロジック/回路からこの命令を受信する。
少なくとも1つの命令フォーマットのより詳細な例は後に詳述される。デコード回路905は、命令を1つまたは複数の演算にデコードする。いくつかの例では、このデコードは、実行回路(例えば、実行回路909)によって実行される複数のマイクロ演算を生成することを含む。デコード回路905はまた、命令プレフィクスをデコードする。
いくつかの例では、レジスタリネーミング、レジスタ割り当て、および/またはスケジューリング回路907は、1)論理オペランド値を物理オペランド値(例えば、いくつかの例ではレジスタエイリアステーブル)にリネーミングすること、2)デコードされた命令にステータスビットおよびフラグを割り当てること、ならびに3)命令プールの中から実行回路による実行のためのデコードされた命令をスケジューリングする(例えば、いくつかの例ではリザベーションステーションを使用して)こと、のうちの1つまたは複数の機能を提供する。
レジスタ(レジスタファイル)および/またはメモリ908は、実行回路909によって操作される命令のオペランドとしてデータを格納する。例示的なレジスタタイプは、パックドデータレジスタ、汎用レジスタ、および浮動小数点レジスタを含む。
実行回路909は、デコードされた命令を少なくとも部分的に実行する。例示的な詳細な実行回路が図1、図3、図13(B)などに示されている。デコードされた命令の実行により、実行回路およびキャッシュコヒーレンシ回路(例えば、スヌープコントローラ、コヒーレントエージェント、キャッシュコントローラなど)に、ソースオペランドで指定されたバイトを含むメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納する。要求者は、共有プリフェッチ命令を有していたコアであることに留意されたい。
いくつかの例では、リタイアメント/ライトバック回路911は、命令をアーキテクチャ的にコミットおよびリタイアする。
共有プリフェッチ命令のフォーマットのいくつかの例は、PREFETCHS M8である。いくつかの例では、PREFETCHSは、命令のオペコードニーモニックである。M8は、プリフェッチされるデータが存在するメモリアドレスのための少なくとも1つのフィールドである。オペコードは、ソースオペランド(M8)で指定されたバイトを含むメモリからのデータのラインのフェッチが、いくつかの例では共有状態でローカルキャッシュに格納されるためのものであることを示すことに留意されたい。いくつかの例では、プリフェッチされるデータが共有状態で格納されるためのものであるという指示は、REGフィールド'BFG44などのModR/Mバイト1744のビットを利用すること、MSR内のビットを利用することなどの異なる方法で行われる。ソースオペランドM8は、バイトメモリ位置である。
図10は、共有プリフェッチ命令を処理するために実行される方法のいくつかの例を示す。例えば、図13(B)に示されるプロセッサコア、以下に詳述されるパイプラインなどが本方法を実行する。
1001において、単一の共有プリフェッチ命令のインスタンスがフェッチされる。単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、オペコードは、回路が、ソースオペランドで指定されたバイトを含む提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものである。要求者は、共有プリフェッチ命令を有していたコアであることに留意されたい。実装に応じて、オペコード自体または他のインジケータは、バイトが共有状態で格納されるためのものであることを規定する。さらに、いくつかの例では、バイトはLLCに格納される。
いくつかの例では、第1の命令セットの単一命令のフェッチされたインスタンスが、1002において、第2の命令セットの1つまたは複数の命令に変換される。
単一命令、または第2の命令セットの1つまたは複数の変換された命令のインスタンスが、1003において、デコードされる。いくつかの例では、変換およびデコードはマージされる。
1005において、デコードされた命令のソースオペランドに関連するデータ値が取得される。
1007において、第2の命令セットのデコードされた命令は、本明細書に詳述されているような実行回路(ハードウェア)によって実行される。共有プリフェッチ命令の場合、実行により、回路に、ソースオペランドで指定されたバイトを含む提供されたアドレスでメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納させる。要求者は、共有プリフェッチ命令を有していたコアであることに留意されたい。実装に応じて、オペコード自体または他のインジケータは、バイトが共有状態で格納されるためのものであることを規定する。さらに、いくつかの例では、バイトはLLCに格納される。
いくつかの例では、1009において命令はコミットまたはリタイアされる。
例示的なコンピュータアーキテクチャ
例示的なコンピュータアーキテクチャを以下に詳細に説明する。ラップトップ、デスクトップ、およびハンドヘルドPC、携帯用情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、ならびに様々な他の電子デバイスのための、当技術分野において既知の他のシステム設計および構成も好適である。一般に、本明細書に開示されるプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが概して好適である。
図11は、例示的なシステムの例を示す。マルチプロセッサシステム1100は、ポイントツーポイントインターコネクトシステムであり、ポイントツーポイントインターコネクト1150を介して結合された第1のプロセッサ1170および第2のプロセッサ1180を含む複数のプロセッサを含む。いくつかの例では、第1のプロセッサ1170および第2のプロセッサ1180は同種である。いくつかの例では、第1のプロセッサ1170および第2のプロセッサ1180は異種である。
プロセッサ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を介して情報を交換することができる。IMCの1172および1182は、プロセッサ1170、1180をそれぞれのメモリ、すなわち、メモリ1132およびメモリ1134に結合し、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ1170、1180は各々、ポイントツーポイントインタフェース回路1176、1194、1186、1198を使用して個々のP-Pインターコネクト1152、1154を介してチップセット1190と情報を交換することができる。チップセット1190は、任意に、高性能インタフェース1192を介してコプロセッサ1138と情報を交換することができる。いくつかの例では、コプロセッサ1138は、例えば、高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
プロセッサが低電力モードに置かれると、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るように、共有キャッシュ(図示せず)は、プロセッサ1170、1180のいずれかの中、または両方のプロセッサの外部に含まれ得、さらにP-Pインターコネクトを介して複数のプロセッサに接続される。
チップセット1190は、インタフェース1196を介して第1のインターコネクト1116に結合することができる。いくつかの例では、第1のインターコネクト1116は、周辺構成要素インターコネクト(PCI)のインターコネクト、またはPCI Expressインターコネクトもしくは別のI/Oインターコネクトなどのインターコネクトであり得る。いくつかの例では、インターコネクトのうちの1つはプロセッサ1170、1180、および/またはコプロセッサ1138に関連する電力管理操作を実行する、回路、ソフトウェア、および/またはファームウェアを含み得る電力制御ユニット(PCU)1117に結合される。PCU1117は、制御情報を電圧レギュレータに提供して、電圧レギュレータに適切な調節電圧を生成させる。PCU1117はまた、生成された動作電圧を制御するために制御情報を提供する。様々な例では、PCU1117は、ハードウェアベースの電力管理を実行するために、様々な電力管理ロジックユニット(回路)を含み得る。そのような電力管理は、完全にプロセッサにより制御されてもよく(例えば、様々なプロセッサハードウェアによって制御され、かつ、ワークロードおよび/または電力、熱、または他のプロセッサ制約によってトリガされ得る)、および/または、電力管理は、外部ソース(プラットフォームまたは電力管理ソースまたはシステムソフトウェアなど)に応答して実行されてよい。
PCU1117は、プロセッサ1170および/またはプロセッサ1180とは別個のロジックとして存在するものとして示されている。他の場合では、PCU1117は、プロセッサ1170または1180のコア(図示せず)のうちの所与の1つまたは複数上で実行し得る。いくつかの場合では、場合によってはPCU1117は、Pコードと称される、それ自体の専用電力管理コードを実行するように構成されたマイクロコントローラ(専用もしくは汎用)または他の制御ロジックとして実装されてもよい。さらに他の例では、PCU1117によって実行される電力管理操作は、プロセッサの外部にある別個の電力管理集積回路(PMIC)または別の構成要素などによって、外部でプロセッサに実装されてもよい。さらに他の例では、PCU1117によって実行される電力管理操作は、BIOSまたは他のシステムソフトウェア内で実装されてもよい。
様々なI/Oデバイス1114は、第1のインターコネクト1116を第2のインターコネクト1120に結合するインターコネクト(バス)ブリッジ1118と共に、第1のインターコネクト1116に結合されてもよい。いくつかの例では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータもしくはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ(FPGA)、または任意の他のプロセッサなどの1つまたは複数の追加のプロセッサ1115が第1のインターコネクト1116に結合される。いくつかの例では、第2のインターコネクト1120は、低ピンカウント(LPC)インターコネクトであり得る。例えば、キーボードおよび/またはマウス1122、通信デバイス1127、ならびに記憶ユニット回路1128を含む様々なデバイスが第2のインターコネクト1120に結合され得る。記憶ユニット回路1128は、いくつかの例では、命令/コードおよびデータ1130を含むことができるディスクドライブまたは他の大容量記憶デバイスであってもよい。さらに、オーディオI/O1124が第2のインターコネクト1120に結合され得る。上に説明されるポイントツーポイントアーキテクチャ以外のアーキテクチャが可能であることに留意されたい。例えば、ポイントツーポイントアーキテクチャの代わりに、マルチプロセッサシステム1100などのシステムは、マルチドロップインターコネクトまたは他のそのようなアーキテクチャを実装し得る。
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサにおいて実装され得る。例えば、そのようなコアの実装は、1)汎用コンピューティングを意図する汎用インオーダコア、2)汎用コンピューティングを意図する高性能汎用アウトオブオーダコア、3)主にグラフィックおよび/またはサイエンティフィック(スループット)コンピューティングを意図する専用コアを含み得る。異なるプロセッサの実装は、1)汎用コンピューティングを意図する1つまたは複数の汎用インオーダコア、および/または汎用コンピューティングを意図する1つまたは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックおよび/またはサイエンティフィック(スループット)を意図する1つまたは複数の専用コアを含むコプロセッサを含み得る。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同一のパッケージにおける別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックなどの専用ロジック、または専用コアと称される)、および4)説明されたCPU(場合によっては、アプリケーションコアもしくはアプリケーションプロセッサと称される)と同じダイ上に、上述のコプロセッサ、および追加の機能性を含み得るシステムオンチップを含み得る。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
図12は、1つよりも多くのコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックスを有することができるプロセッサ1200の例のブロック図を示す。実線のボックスは、単一のコア1202Aと、システムエージェント1210と、1つまたは複数のインターコネクトコントローラユニット回路1216のセットとを有するプロセッサ1200を示す一方、任意選択的な点線のボックスの追加は、複数のコア1202(A)~(N)と、システムエージェントユニット回路1210における1つまたは複数の統合メモリコントローラユニット回路1214のセットと、専用ロジック1208と、1つまたは複数のインターコネクトコントローラユニット回路1216のセットとを有する代替的なプロセッサ1200を示す。プロセッサ1200は、図11のプロセッサ1170もしくは1180、またはコプロセッサ1138もしくは1115のうちの1つであってもよいことに留意されたい。
したがって、プロセッサ1200の異なる実装は、1)統合グラフィックスおよび/またはサイエンティフィック(スループット)ロジックである専用ロジック1208(図示しないが、1つまたは複数のコアを含んでよい)と、1つまたは複数の汎用コアであるコア1202(A)~(N)(例えば、汎用インオーダコア、汎用アウトオブオーダコア、または2つの組み合わせ)とを有するCPU、2)グラフィックおよび/またはサイエンティフィック(スループット)を主に意図する多数の専用コアであるコア1202(A)~(N)を有するコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア1202(A)~(N)を有するコプロセッサを含んでよい。したがって、プロセッサ1200は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット回路)、高スループット多集積コア(MIC)コプロセッサ(30以上のコアを含む)、組み込みプロセッサなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサであってよい。プロセッサは、1つまたは複数のチップ上に実装され得る。プロセッサ1200は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用して、1つまたは複数の基板の一部であってもよく、および/または1つまたは複数の基板上に実装されてもよい。
メモリ階層は、コア1202(A)~(N)内のキャッシュユニット回路1204(A)~(N)、1つまたは複数の共有キャッシュユニット回路1206のセット、および、統合メモリコントローラユニット回路1214のセットに結合された外部メモリ(図示せず)の1つまたは複数のレベルを含む。1つまたは複数の共有キャッシュユニット回路1206のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)などの1つまたは複数の中間レベルキャッシュ、または最終レベルキャッシュ(LLC)などの他のレベルのキャッシュ、および/またはそれらの組み合わせを含んでよい。いくつかの例では、リングベースのインターコネクトネットワーク回路1212が、専用ロジック1208(例えば、統合グラフィックスロジック)、共有キャッシュユニット回路1206のセット、およびシステムエージェントユニット回路1210をインターコネクトする一方、代替の例は、そのようなユニットをインターコネクトするために任意の数の周知技術を使用する。いくつかの例では、1つまたは複数の共有キャッシュユニット回路1206とコア1202(A)~(N)との間でコヒーレンシが保持される。
いくつかの例では、コア1202(A)~(N)のうちの1つまたは複数は、マルチスレッディングすることが可能である。システムエージェントユニット回路1210は、これらの1202(A)~(N)を調整および動作させる構成要素を含む。システムエージェントユニット回路1210は、例えば、電力制御ユニット(PCU)回路および/またはディスプレイユニット回路(図示せず)を含んでよい。PCUは、コア1202(A)~(N)および/または専用ロジック1208(例えば、統合グラフィックスロジック)の電力状態を調節するのに必要なロジックおよび構成要素であってもよく、または含んでもよい。ディスプレイユニット回路は、1つまたは複数の外部接続されたディスプレイを駆動するためのものである。
コア1202(A)~(N)は、アーキテクチャ命令セットに関して同種であっても異種であってもよい。すなわち、コア1202(A)~(N)のうちの2つ以上が同じ命令セットを実行することができる一方で、他のコアはその命令セットのサブセットまたは異なる命令セットのみを実行することができる。
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図13(A)は、例による、例示的なインオーダパイプライン、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図13(B)は、例によるプロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング用のアウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図13(A)~図13(B)における実線のボックスは、インオーダパイプラインおよびインオーダコアを示す一方、任意選択的な点線のボックスの追加は、レジスタリネーミング用のアウトオブオーダ発行/実行パイプラインとコアとを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図13(A)において、プロセッサパイプライン1300は、フェッチステージ1302、任意選択のレングスデコードステージ1304、デコードステージ1306、任意選択の割り当てステージ1308、任意選択のリネーミングステージ1310、スケジューリング(ディスパッチまたは発行としてもまた知られる)ステージ1312、任意選択のレジスタ読み出し/メモリ読み出しステージ1314、実行ステージ1316、ライトバック/メモリ書き込みステージ1318、任意選択の例外処理ステージ1322、および任意選択のコミットステージ1324を含む。それらのプロセッサパイプラインステージのそれぞれにおいて1つまたは複数の演算が実行されてよい。例えば、フェッチステージ1302の間に、1つまたは複数の命令が命令メモリからフェッチされ、デコードステージ1306の間に、1つまたは複数のフェッチされた命令はデコードされ得、転送されたレジスタポートを使用したアドレス(例えば、ロードストアユニット(LSU)アドレス)が生成され得、分岐転送(例えば、即時オフセットまたはリンクレジスタ(LR))が実行され得る。いくつかの例では、デコードステージ1306およびレジスタ読み出し/メモリ読み出しステージ1314は、1つのパイプラインステージに組み合わされ得る。いくつかの例では、実行ステージ1316の間に、デコードされた命令が実行され得、アドバンスドマイクロコントローラバス(AHB)インタフェースへのLSUアドレス/データのパイプライン処理が実行され得、乗算および加算の演算が実行され得、分岐結果を用いた算術演算が実行され得るなどである。
例として、例示的なレジスタリネーミング用のアウトオブオーダ発行/実行コアアーキテクチャは、次のようにパイプライン1300を実装してよい。1)命令フェッチ1338が、フェッチおよびレングスデコードステージ1302および1304を実行する。2)デコードユニット回路1340が、デコードステージ1306を実行する。3)リネーミング/割り当てユニット回路1352が、割り当てステージ1308およびリネーミングステージ1310を実行する。4)スケジューラユニット回路1356が、スケジュールステージ1312を実行する。5)物理レジスタファイルユニット回路1358およびメモリユニット回路1370が、レジスタ読み出し/メモリ読み出しステージ1314を実行し、実行クラスタ1360が、実行ステージ1316を実行する。6)メモリユニット回路1370および物理レジスタファイルユニット回路1358が、ライトバック/メモリ書き込みステージ1318を実行する。7)様々なユニット(ユニット回路)が、例外処理ステージ1322に関与してよい。8)リタイアメントユニット回路1354および物理レジスタファイルユニット回路1358が、コミットステージ1324を実行する。
図13(B)は、実行エンジンユニット回路1350に結合されたフロントエンドユニット回路1330を含むプロセッサコア1390を示し、両方がメモリユニット回路1370に結合されている。コア1390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別の選択肢として、コア1390は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コアまたはグラフィックスコアなどの専用コアであってよい。
フロントエンドユニット回路1330は、命令キャッシュユニット回路1334に結合された分岐予測ユニット回路1332を含み得、命令キャッシュユニット回路1334は、命令変換索引バッファ(TLB)1336に結合され、TLB1336は、命令フェッチユニット回路1338に結合され、命令フェッチユニット回路1338は、デコードユニット回路1340に結合される。いくつかの例では、命令キャッシュユニット回路1334は、フロントエンドユニット回路1330よりもむしろ、メモリユニット回路1370に含まれる。デコードユニット回路1340(またはデコーダ)は、命令をデコードし、元の命令からデコード、もしくは別様にそれらを反映する、もしくはそれらから導出される、1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよい。デコードユニット回路1340はさらに、アドレス生成ユニット回路(AGU、図示せず)を含み得る。いくつかの例では、AGUは、転送されたレジスタポートを使用してLSUアドレスを生成し、さらに、分岐転送(例えば、即時オフセット分岐転送、LRレジスタ分岐転送など)を実行し得る。デコードユニット回路1340は、様々な異なるメカニズムを使用して実装されてもよい。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれるが、それらに限定されない。いくつかの例では、コア1390は、特定のマクロ命令のマイクロコードを(例えば、デコードユニット回路1340内に、またはそうでなければフロントエンドユニット回路1330内に)格納するマイクロコードROM(図示せず)または他の媒体を含む。いくつかの例では、デコードユニット回路1340は、プロセッサパイプライン1300のデコードまたは他のステージの間に生成された、デコードされた演算、マイクロタグ、またはマイクロ演算を保持/キャッシュするためのマイクロ演算(micro-op)または演算キャッシュ(図示せず)を含む。デコードユニット回路1340は、実行エンジンユニット回路1350において、リネーミング/割り当てユニット回路1352と結合されてよい。
実行エンジン回路1350は、リタイアメントユニット回路1354および1つまたは複数のスケジューラ回路1356のセットに結合されたリネーミング/割り当てユニット回路1352を含む。スケジューラ回路1356は、複数のリザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。いくつかの例では、スケジューラ回路1356は、算術ロジックユニット(ALU)スケジューラ/スケジューリング回路、ALUキュー、算術生成ユニット(AGU)スケジューラ/スケジューリング回路、AGUキューなどを含むことができる。スケジューラ回路1356は、物理レジスタファイル回路1358に結合される。物理レジスタファイル回路1358のそれぞれは、1つまたは複数の物理レジスタファイルを表し、それらの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)などの、1つまたは複数の異なるデータタイプを格納する。いくつかの例では、物理レジスタファイルユニット回路1358は、ベクトルレジスタユニット回路、ライトマスクレジスタユニット回路、およびスカラレジスタユニット回路を含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、汎用レジスタなどを提供し得る。物理レジスタファイルユニット回路1358は、リタイアメントユニット回路1354(リタイアキューまたはリタイアメントキューとしてもまた知られる)とオーバーラップしており、(例えば、リオーダバッファ(ROB)およびリタイアメントレジスタファイルを使用する、将来のファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタのプールを使用するなど)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々なやり方を示す。リタイアメントユニット回路1354および物理レジスタファイル回路1358は、実行クラスタ1360に結合される。実行クラスタ1360は、1つまたは複数の実行ユニット回路1362のセットおよび1つまたは複数のメモリアクセス回路1364のセットを含む。実行ユニット回路1362は、様々な算術、ロジック、浮動小数点、または他のタイプの演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)について実行してよい。いくつかの例は、特定の機能または機能のセットに専用の多くの実行ユニットまたは実行ユニット回路を含み得る一方、他の例は、1つのみの実行ユニット回路、または全ての機能を全て実行する複数の実行ユニット/実行ユニット回路を含み得る。特定の例は、特定のタイプのデータ/演算に対する別個のパイプラインを形成するので(例えば、それら自体のスケジューラ回路、物理レジスタファイルユニット回路、および/または実行クラスタをそれぞれ有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、特定の例は、このパイプラインの実行クラスタのみがメモリアクセスユニット回路1364を有するように実装される)、スケジューラ回路1356、物理レジスタファイルユニット回路1358、および実行クラスタ1360は、場合によっては複数あるように示される。別個のパイプラインが使用される場合、これらのパイプラインのうちの1つまたは複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいこともまた理解されたい。
いくつかの例では、実行エンジンユニット回路1350は、アドバンスドマイクロコントローラバス(AHB)インタフェース(図示せず)、アドレスフェーズおよびライトバック、データフェーズロード、ストア、および分岐へのロードストアユニット(LSU)アドレス/データのパイプライン処理を実行し得る。
メモリアクセス回路1364のセットは、メモリユニット回路1370に結合され、メモリユニット回路1370は、レベル2(L2)キャッシュ回路1376に結合されたデータキャッシュ回路1374に結合されたデータTLBユニット回路1372を含む。1つの例示的な実施形態では、メモリアクセスユニット回路1364は、ロードユニット回路、ストアアドレスユニット回路、およびストアデータユニット回路を含み得、これらのそれぞれは、メモリユニット回路1370内のデータTLB回路1372に結合される。命令キャッシュ回路1334は、さらに、メモリユニット回路1370内のレベル2(L2)キャッシュユニット回路1376に結合される。いくつかの例では、命令キャッシュ1334およびデータキャッシュ1374は、L2キャッシュユニット回路1376、レベル3(L3)キャッシュユニット回路(図示せず)、および/またはメインメモリ内の単一命令およびデータキャッシュ(図示せず)に組み合わされる。L2キャッシュユニット回路1376は、1つまたは複数の他のレベルのキャッシュ、および最終的にはメインメモリに結合される。
コア1390は、本明細書において説明される命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(より新しいバージョンを追加された、いくつかの拡張を伴う)、MIPS命令セット、ARM命令セット(NEONなどの任意選択の追加拡張を伴う)をサポートし得る。いくつかの例では、コア1390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより使用される演算がパックドデータを使用して実行されることを可能にする。
例示的な実行ユニット回路
図14は、図13(B)の実行ユニット回路1362などの、実行ユニット回路の例を示す。示されるように、実行ユニット回路1362は、1つもしくは複数のALU回路1401、ベクトル/SIMDユニット回路1403、ロード/ストアユニット回路1405、および/または分岐/ジャンプユニット回路1407を含んでもよい。ALU回路1401は、算術演算および/またはブール演算を実行する。ベクトル/SIMDユニット回路1403は、(SIMD/ベクトルレジスタなどの)パックドデータに対してベクトル/SIMD演算を実行する。ロード/ストアユニット回路1405は、データをメモリからレジスタにロードする、またはレジスタからメモリに格納するためのロードおよびストア命令を実行する。ロード/ストアユニット回路1405はまた、アドレスを生成し得る。分岐/ジャンプユニット回路1407は、命令に依存して、メモリアドレスへの分岐またはジャンプを生じさせる。浮動小数点ユニット(FPU)回路1409は、浮動小数点演算を実行する。実行ユニット回路1362の幅は、実施形態に依存して変化し、16ビットから1,024ビットまでの範囲をとり得る。いくつかの例では、2つ以上のより小さい実行ユニットが論理的に組み合わされて、より大きい実行ユニットを形成する(例えば、2つの128ビット実行ユニットが論理的に組み合わされて、256ビット実行ユニットを形成する)。
例示的なレジスタアーキテクチャ
図15は、いくつかの例によるレジスタアーキテクチャ1500のブロック図である。示されるように、幅が128ビットから1,024ビットまで変化するベクトル/SIMDレジスタ1510がある。いくつかの例では、ベクトル/SIMDレジスタ1510は物理的に512ビットであり、マッピングに依存して、より下位のビットのいくつかのみが使用される。例えば、いくつかの例では、ベクトル/SIMDレジスタ1510は512ビットであるZMMレジスタであり、下位256ビットはYMMレジスタに使用され、下位128ビットはXMMレジスタに使用される。したがって、レジスタのオーバーレイがある。いくつかの例では、ベクトル長フィールドは、最大長、および1つまたは複数の他のより短い長さのうちから選択され、そのような各々のより短い長さは、先述の長さの半分の長さである。スカラ演算は、ZMM/YMM/XMMレジスタ内の最下位のデータ要素位置で実行される演算であり、より上位のデータ要素位置は、実施形態に依存して、命令の前のそれらと同じ状態のままにされるか、またはゼロにされるかのいずれかである。
いくつかの例では、レジスタアーキテクチャ1500はライトマスク/プレジケートレジスタ1515を含む。例えば、いくつかの例では、それぞれ16ビット、32ビット、64ビット、または128ビットのサイズの、8つのライトマスク/プレジケートレジスタ(場合によって、k0からk7と呼ばれる)がある。ライトマスク/プレジケートレジスタ1515は、マージ(例えば、任意の演算の実行の間に、デスティネーションにおける要素の任意のセットが更新から保護されることを可能にする)、および/またはゼロ化(例えば、ゼロ化ベクトルマスクは、任意の演算の実行の間に、デスティネーションにおける要素の任意のセットがゼロにされることを可能にする)を可能にし得る。いくつかの例では、所与のライトマスク/プレジケートレジスタ1515の各データ要素位置は、デスティネーションのデータ要素位置に対応する。他の例では、ライトマスク/プレジケートレジスタ1515はスケーラブルであり、所与のベクトル要素に関する設定された数のイネーブルなビットからなる(例えば、64ビットのベクトル要素ごとに8のイネーブルなビット)。
レジスタアーキテクチャ1500は、複数の汎用レジスタ1525を含む。これらのレジスタは、16ビット、32ビット、64ビットなどであってよく、スカラ演算に使用されてよい。いくつかの例では、これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名称で参照される。
いくつかの例では、レジスタアーキテクチャ1500は、64ビットパックド整数データに対して演算を実行するために、ならびに、MMXとXMMレジスタとの間で実行されるいくつかの演算のためのオペランドを保持するために、x87命令セット拡張またはMMXレジスタを使用して32/64/80ビット浮動小数点データ上でのスカラ浮動小数点演算に使用されるスカラ浮動小数点レジスタ1545を含む。
1つまたは複数のフラグレジスタ1540(例えば、EFLAGS、RFLAGSなど)が、算術演算、比較演算、およびシステム動作に関するステータスおよび制御情報を格納する。例えば、1つまたは複数のフラグレジスタ1540は、キャリー、パリティ、補助キャリー、ゼロ、符号、およびオーバーフローなどの、条件コード情報を格納してよい。いくつかの例では、1つまたは複数のフラグレジスタ1540は、プログラムステータスおよび制御レジスタと呼ばれる。
セグメントレジスタ1520は、メモリへのアクセスに使用するためのセグメントポイントを含む。いくつかの例では、これらのレジスタは、CS、DS、SS、ES、FS、およびGSの名称で参照される。
機械固有レジスタ(MSR)1535は、プロセッサ性能についての制御および報告を行う。大部分のMSR1535は、システムに関する機能を処理するが、アプリケーションプログラムにアクセスすることができない。機械チェックレジスタ1560は、ハードウェアエラーの際に検出および報告するために使用される制御、ステータス、およびエラー報告MSRからなる。
1つまたは複数の命令ポインタレジスタ1530は命令ポインタ値を格納する。制御レジスタ1555(例えば、CR0~CR4)は、プロセッサの動作モード(例えば、プロセッサ1170、1180、1138、1115、および/または1200)および現在実行中のタスクの特性を決定する。デバッグレジスタ1550は、プロセッサまたはコアのデバッグ動作のモニタリングを制御し、可能とする。
メモリ管理レジスタ1565は、保護されたモードメモリ管理に使用されるデータ構造の位置を指定する。これらのレジスタは、GDTR、IDRT、タスクレジスタ、およびLDTRレジスタを含んでもよい。
代替の例は、より広いか、またはより狭いレジスタを使用し得る。さらに、代替の例は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用してもよい。
命令セット
命令セットアーキテクチャ(ISA)は、1つまたは複数の命令フォーマットを含み得る。所与の命令フォーマットは、とりわけ、実行されるべき演算(例えば、オペコード)およびその演算が実行されるべきオペランドを指定する様々なフィールド(例えば、ビットの数、ビットの位置)、ならびに/または他のデータフィールド(例えば、マスク)を定義してよい。いくつかの命令フォーマットは、さらに、命令テンプレート(またはサブフォーマット)の定義を介して分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され(含まれるフィールドは通常同じ順序であるが、含まれるフィールドがより少ないため少なくともいくつかは異なるビット位置を有する)、および/または所与のフィールドが異なって解釈されるように定義されてもよい。したがって、ISAの各命令は、所与の命令フォーマット(および定義されている場合、その命令フォーマットの命令テンプレートのうちの所与の1つ)を使用して表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコード、ならびに当該オペコードを指定するオペコードフィールドおよびオペランド(ソース1/デスティネーション、およびソース2)を選択するオペランドフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのADD命令が生じることにより、特定オペランドを選択するオペランドフィールドに具体的な内容を有する。
例示的な命令フォーマット
本明細書に説明される命令の例は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが以下で詳述される。命令の例は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されるものではない。
図16は、命令フォーマットの例を示す。示されるように、命令は、1つまたは複数のプレフィクス1601、オペコード1603、アドレシング情報1605(例えば、レジスタ識別子、メモリアドレシング情報など)、変位値1607、および/または即値1609のための1つまたは複数のフィールドを含むが、それらに限定されるものではない、複数の構成要素を含んでよい。いくつかの命令は、フォーマットのフィールドのいくつかまたは全てを利用するが、他のものは、オペコード1603のフィールドを使用するのみであってよいことに留意されたい。いくつかの例では、示される順序は、それらのフィールドがエンコードされるべき順序であるが、しかしながら、他の例では、それらのフィールドは、異なる順序で、組み合わされて、などでエンコードされてもよいことが理解されるべきである。
プレフィクスフィールド1601は、使用される場合、命令を修正する。いくつかの例では、1つまたは複数のプレフィクスが、ストリング命令(例えば、0xF0、0xF2、0xF3など)を反復するために、セクションオーバーライド(例えば、0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3Eなど)を提供するために、バスロック動作を実行するように、ならびに/または、オペランド(例えば、0x66)およびアドレスサイズ(例えば、0x67)を変更するために使用される。特定の命令は、必須のプレフィクス(例えば、0x66、0xF2、0xF3など)を必要とする。これらのプレフィクスの特定のものは、「レガシ(legacy)」プレフィクスと見なされてよい。他のプレフィクスは、その1つまたは複数の例が本明細書に詳述されており、特定のレジスタを指定することなどの、さらなる能力を示すか、および/またはそれを提供する。他のプレフィクスは通常、「レガシ」プレフィクスに続く。
オペコードフィールド1603は、命令のデコードの際に実行されるべき演算を、少なくとも部分的に定義するために使用される。いくつかの例では、オペコードフィールド1603においてエンコードされるプライマリオペコードは、1、2、または3バイトの長さである。他の例では、プライマリオペコードは異なる長さであってよい。追加の3ビットオペコードフィールドが、場合によって、別のフィールドにおいてエンコードされる。
アドレシングフィールド1605は、メモリまたは1つまたは複数のレジスタ内の位置などの、命令の1つまたは複数のオペランドをアドレシングするように使用される。図17は、アドレシングフィールド1605の例を示す。この説明図において、任意選択のModR/Mバイト1702および任意選択のスケール、インデックス、ベース(SIB)バイト1704が示される。ModR/Mバイト1702およびSIBバイト1704は、最大2つのオペランドの命令をエンコードするために使用され、そのそれぞれは、直接レジスタまたは有効メモリアドレスである。それらのフィールドのそれぞれは任意選択的であり、全ての命令がそれらのフィールドのうちの1つまたは複数を含むとは限らないことに留意されたい。MOD R/Mバイト1702は、MODフィールド1742、レジスタフィールド1744、およびR/Mフィールド1746を含む。
MODフィールド1742の内容は、メモリアクセスモードおよび非メモリアクセスモードを区別する。いくつかの例では、MODフィールド1742がb11の値を有する場合、レジスタ直接アドレシングモードが利用され、そうでなければ、レジスタ間接アドレシングが使用される。
レジスタフィールド1744は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードし得、またはオペコード拡張をエンコードし得、任意の命令オペランドをエンコードするためには使用され得ない。レジスタインデックスフィールド1744の内容は、直接またはアドレス生成を介して、(レジスタ内またはメモリ内のいずれかにある)ソースまたはデスティネーションオペランドの位置を指定する。いくつかの例では、レジスタフィールド1744は、より大きいアドレシングを可能にするために、プレフィクス(例えば、プレフィクス1601)からの追加ビットで補足される。
R/Mフィールド1746は、メモリアドレスを参照する命令オペランドをエンコードするために使用されてよく、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードするために使用されてよい。R/Mフィールド1746は、いくつかの例ではアドレシングモードを規定するために、MODフィールド1742と組み合わされてよいことに留意されたい。
SIBバイト1704は、アドレスの生成に使用される、スケールフィールド1752、インデックスフィールド1754、およびベースフィールド1756を含む。スケールフィールド1752は、スケーリング係数を示す。インデックスフィールド1754は、使用するインデックスレジスタを指定する。いくつかの例では、インデックスフィールド1754は、より大きいアドレシングを可能にするために、プレフィクス(例えば、プレフィクス1601)からの追加ビットで補足される。ベースフィールド1756は、使用するベースレジスタを指定する。いくつかの例では、ベースフィールド1756は、より大きいアドレシングを可能にするために、プレフィクス(例えば、プレフィクス1601)からの追加ビットで補足される。実際には、スケールフィールド1752の内容は、メモリアドレス生成のためのインデックスフィールド1754の内容のスケーリングを可能とする(例えば、2スケール*インデックス+ベースを使用するアドレス生成)。
いくつかのアドレシング形式は、変位値を利用してメモリアドレスを生成する。例えば、メモリアドレスは、2スケール*インデックス+ベース+変位、インデックス*スケール+変位、r/m+変位、命令ポインタ(RIP/EIP)+変位、レジスタ+変位などに従って生成されてよい。変位は、1バイト、2バイト、4バイトなどの値であってよい。いくつかの例では、変位フィールド1607はこの値を提供する。さらに、いくつかの例では、変位係数の使用は、変位値が、ベクトル長、bビットの値、および命令の入力要素サイズに基づいて決定されるスケーリング係数Nと組み合わせてdisp8を乗算することによって計算される圧縮変位スキームを示すアドレシングフィールド1605のMODフィールドでエンコードされる。変位フィールド1607には、変位値が格納される。
いくつかの例では、即値フィールド1609が命令の即値を指定する。即値は1バイト値、2バイト値、4バイト値などとしてエンコードされてよい。
図18は、第1のプレフィクス1601(A)の例を示す。いくつかの例では、第1のプレフィクス1601(A)はREXプレフィクスのいくつかの例である。このプレフィクスを使用する命令は、汎用レジスタ、64ビットパックドデータレジスタ(例えば、単一命令多重データ(SIMD)レジスタ、もしくはベクトルレジスタ)、ならびに/または、制御レジスタおよびデバッグレジスタ(例えば、CR8-CR15およびDR8-DR15)を指定し得る。
第1のプレフィクス1601(A)を使用する命令は、以下のフォーマットに依存して、3ビットフィールドを使用して最大3つのレジスタを指定し得る。1)Mod R/Mバイト1702のregフィールド1744およびR/Mフィールド1746を使用する。2)regフィールド1744およびベースフィールド1756およびインデックスフィールド1754を使用することを含む、SIBバイト1704と共にMod R/Mバイト1702を使用する。または、3)オペコードのレジスタフィールドを使用する。
第1のプレフィクス1601(A)において、ビット位置7:4は0100としてセットされる。ビット位置3(W)は、オペランドサイズを決定するために使用され得るが、オペランド幅を決定するのみでなくてもよい。したがって、W=0の場合、オペランドサイズはコードセグメント記述子(CS.D)によって決定され、W=1の場合、オペランドサイズは64ビットである。
MOD R/M regフィールド1744およびMOD R/M R/Mフィールド1746は、単独ではそれぞれ8のレジスタのみアドレシング可能であるが、別のビットの追加が、16(2)のレジスタがアドレシングされることを可能にすることに留意されたい。
第1のプレフィクス1601(A)において、ビット位置2(R)は、MOD R/M regフィールド1744の拡張であってよく、そのフィールドが汎用レジスタ、64ビットパックドデータレジスタ(例えば、SSEレジスタ)、または制御もしくはデバッグレジスタをエンコードする場合、ModR/M regフィールド1744を修正するために使用されてよい。Rは、Mod R/Mバイト1702が他のレジスタを指定するか、拡張オペコードを定義する場合には、無視される。
ビット位置1(X)Xビットは、SIBバイトインデックスフィールド1754を修正してよい。
ビット位置B(B)Bは、Mod R/M R/Mフィールド1746またはSIBバイトベースフィールド1756のベースを修正してよく、または、汎用レジスタ(例えば、汎用レジスタ1525)へのアクセスに使用されるオペコードレジスタフィールドを修正してよい。
図19(A)~図19(D)は、第1のプレフィクス1601(A)のR、X、およびBフィールドがどのように使用されるかの例を示す。図19(A)は、SIBバイト17 04がメモリアドレシングに使用されない場合、MOD R/Mバイト1702のregフィールド1744およびR/Mフィールド1746を拡張するために使用される第1のプレフィクス1601(A)からのRおよびBを示す。図19(B)は、SIBバイト17 04が使用されない場合(レジスタ-レジスタアドレシング)、MOD R/Mバイト1702のregフィールド1744およびR/Mフィールド1746を拡張するために使用される第1のプレフィクス1601(A)からのRおよびBを示す。図19(C)は、SIBバイト17 04がメモリアドレシングに使用される場合、MOD R/Mバイト1702のregフィールド1744およびインデックスフィールド1754およびベースフィールド1756を拡張するために使用される第1のプレフィクス1601(A)からのR、X、およびBを示す。図19(D)は、レジスタがオペコード1603においてエンコードされる場合、MOD R/Mバイト1702のregフィールド1744を拡張するために使用される第1のプレフィクス1601(A)からのBを示す。
図20(A)~図20(B)は、第2のプレフィクス1601(B)の例を示す。いくつかの例では、第2のプレフィクス1601(B)はVEXプレフィクスのいくつかの例である。第2のプレフィクス1601(B)のエンコードは、命令が2より多いオペランドを有することを可能にし、SIMDベクトルレジスタ(例えば、ベクトル/SIMDレジスタ1510)が、64ビットよりも長くなる(例えば、128ビットおよび256ビット)ことを可能にする。第2のプレフィクス1601(B)の使用は、3オペランド(またはより多い)構文を提供する。例えば、以前の2オペランド命令は、ソースオペランドを上書きするA=A+Bなどの演算を実行した。第2のプレフィクス1601(B)の使用は、オペランドが、A=B+Cなどの非破壊演算を実行することを可能にする。
いくつかの例では、第2のプレフィクス1601(B)には、2バイト形式と3バイト形式の2つの形式がある。2バイトの第2のプレフィクス1601(B)は、主に128ビット、スカラ、およびいくつかの256ビット命令に使用され、3バイトの第2のプレフィクス1601(B)は、第1のプレフィクス1601(A)のコンパクトな代替および3バイトオペコード命令を提供する。
図20(A)は、第2のプレフィクス1601(B)の2バイト形式の例を示す。一例では、フォーマットフィールド2001(バイト0 2003)は値C5Hを含む。一例では、バイト1 2005はビット[7]において「R」値を含む。この値は、第1のプレフィクス1601(A)の同じ値の補数である。ビット[2]はベクトルの長さ(L)を規定するために使用される(0の値はスカラまたは128ビットベクトルであり、1の値は256ビットベクトルである)。ビット[1:0]は、いくつかのレガシプレフィクスと外延性同等のオペコードを提供する(例えば、00=プレフィクスなし、01=66H、10=F3H、および11=F2H)。vvvvとして示されるビット[6:3]は、以下のように使用され得る。1)反転(1の補数)形式で指定され、2以上のソースオペランドを有する命令に有効である、第1のソースレジスタオペランドをエンコードする。2)特定のベクトルシフトのために1の補数形式で指定される、デスティネーションレジスタオペランドをエンコードする。または、3)いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bなどの特定の値を含むべきである。
このプレフィクスを使用する命令は、Mod R/M R/Mフィールド1746を使用して、メモリアドレスを参照する命令オペランドをエンコードしてよく、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードしてよい。
このプレフィクスを使用する命令は、Mod R/M regフィールド1744を使用して、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードしてよく、オペコード拡張として扱われてよく、いずれの命令オペランドをエンコードするために使用されなくてよい。
4つのオペランドをサポートする命令構文、vvvvに関して、Mod R/M R/Mフィールド1746およびMod R/M regフィールド1744は、4つのオペランドのうちの3つをエンコードする。即値1609のビット[7:4]は、次に、第3のソースレジスタオペランドをエンコードするために使用される。
図20(B)は、3バイト形式の第2のプレフィクス1601(B)の例を示す。一例では、フォーマットフィールド2011(バイト0 2013)は値C4Hを含む。バイト1 2015は、ビット[7:5]において、第1のプレフィクス1601(A)の同じ値の補数である、「R」、「X」、および「B」を含む。バイト1 2015のビット[4:0](mmmmmとして示される)は、必要に応じて、1つまたは複数の示唆されるリーディング(leading)オペコードバイトをエンコードする内容を含む。例えば、00001は0FHリーディングオペコードを示唆し、00010は0F38Hリーディングオペコードを示唆し、00011はリーディング0F3AHオペコードを示唆する、などである。
バイト2 2017のビット[7]は、プロモート可能なオペランドサイズを決定することを補助することを含め、第1のプレフィクス1601(A)のWと同様に使用される。ビット[2]はベクトルの長さ(L)を規定するために使用される(0の値はスカラまたは128ビットベクトルであり、1の値は256ビットベクトルである)。ビット[1:0]は、いくつかのレガシプレフィクスと外延性同等のオペコードを提供する(例えば、00=プレフィクスなし、01=66H、10=F3H、および11=F2H)。vvvvとして示されるビット[6:3]は、以下のように使用され得る。1)反転(1の補数)形式で指定され、2以上のソースオペランドを有する命令に有効である、第1のソースレジスタオペランドをエンコードする。2)特定のベクトルシフトのために1の補数形式で指定される、デスティネーションレジスタオペランドをエンコードする。または、3)いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bなどの特定の値を含むべきである。
このプレフィクスを使用する命令は、Mod R/M R/Mフィールド1746を使用して、メモリアドレスを参照する命令オペランドをエンコードしてよく、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードしてよい。
このプレフィクスを使用する命令は、Mod R/M regフィールド1744を使用して、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードしてよく、オペコード拡張として扱われてよく、いずれの命令オペランドをエンコードするために使用されなくてよい。
4つのオペランドをサポートする命令構文、vvvvに関して、Mod R/M R/Mフィールド1746およびMod R/M regフィールド1744は、4つのオペランドのうちの3つをエンコードする。即値1609のビット[7:4]は、次に、第3のソースレジスタオペランドをエンコードするために使用される。
図21は、第3のプレフィクス1601(C)の例を示す。いくつかの例では、第1のプレフィクス1601(A)はEVEXプレフィクスのいくつかの例である。第3のプレフィクス1601(C)は4バイトプレフィクスである。
第3のプレフィクス1601(C)は、64ビットモードにおいて32のベクトルレジスタ(例えば、128ビット、256ビット、および512ビットレジスタ)をエンコードし得る。いくつかの例では、ライトマスク/オペマスク(図15などの前の図におけるレジスタの説明を参照)またはプレディケーションを利用する命令が、このプレフィクスを利用する。オペマスクレジスタは、条件処理または選択制御を可能にする。そのソース/デスティネーションオペランドがオペマスクレジスタであり、オペマスクレジスタの内容を単一の値として扱うオペマスク命令は第2のプレフィクス1601(B)を使用してエンコードされる。
第3のプレフィクス1601(C)は、命令クラスに特有の機能をエンコードし得る(例えば、「ロード+op」セマンティクスを有するパックド命令が、埋め込み型ブロードキャスト機能をサポート可能であり、丸めセマンティクスを有する浮動小数点命令が、静的丸め機能をサポート可能であり、非丸め演算セマンティクスを有する浮動小数点命令が、「全例外抑制」機能をサポート可能である、などである)。
第3のプレフィクス1601(C)の第1のバイトは、一例では62Hの値を有する、フォーマットフィールド2111である。後続のバイトはペイロードバイト2115~2119と称され、1つまたは複数のフィールド(本明細書に詳述される)の形式において特定の機能を提供するP[23:0]の24ビット値を集合的に形成する。
いくつかの例では、ペイロードバイト2119のP[1:0]は、下位の2つのmmmmmビットと同一である。P[3:2]は、いくつかの例ではリザーブされている。ビットP[4](R')は、P[7]およびModR/M regフィールド1744と組み合わされた場合、上位の16のベクトルレジスタセットへのアクセスを可能にする。P[6]はまた、SIBタイプアドレシングが必要とされない場合、上位の16のベクトルレジスタへのアクセスを提供し得る。P[7:5]は、ベクトルレジスタ、汎用レジスタ、メモリアドレシングのためのオペランド指定修正ビットであるR、XおよびBからなり、Mod R/Mレジスタフィールド1744およびMod R/M R/Mフィールド1746と組み合わされた場合、下位の8つのレジスタを超えて次のセットの8つのレジスタへのアクセスを可能にする。P[9:8]は、いくつかのレガシプレフィクスと外延性同等のオペコードを提供する(例えば、00=プレフィクスなし、01=66H、10=F3H、および11=F2H)。P[10]は、いくつかの例では、固定値1である。vvvvとして示されるP[14:11]は、以下のために使用され得る。1)反転(1の補数)形式で指定され、2以上のソースオペランドを有する命令に有効である、第1のソースレジスタオペランドをエンコードする。2)特定のベクトルシフトのために1の補数形式で指定される、デスティネーションレジスタオペランドをエンコードする。または、3)いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bなどの特定の値を含むべきである。
P[15]は、第1のプレフィクス1601(A)および第2のプレフィクス1611(B)のWと同様であり、オペコード拡張ビットまたはオペランドサイズプロモーションとして機能し得る。
P[18:16]は、オペマスク(ライトマスク)レジスタ(例えば、ライトマスク/プレジケートレジスタ1515)におけるレジスタのインデックスを指定する。いくつかの例では、特定の値aaa=000は、特定の命令のために非オペマスクが使用されることを示唆する、特別な挙動を有する(これは、全ての1に対するハードワイヤされたオペマスクの使用、またはマスキングハードウェアをバイパスするハードウェアの使用を含む、様々な態様で実装され得る)。マージする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(基本演算および拡張演算により指定された)任意の演算の実行の間に更新から保護されることを可能にし、他のいくつかの例では、対応するマスクビットが0を有するデスティネーションの各要素の古い値を維持する。対照的に、ゼロ化する場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、(基本演算および拡張演算において指定された)任意の演算の実行の間にゼロにされることを可能にし、いくつかの例では、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正される要素の、最初の要素から最後の要素までの範囲)を制御する能力であるが、しかしながら、修正される要素が連続している必要はない。したがって、オペマスクフィールドは、ロード、ストア、演算、論理などを含む部分ベクトル演算を可能とする。オペマスクフィールドの内容が、使用されるオペマスクを含む多くのオペマスクレジスタのうちの1つを選択する(およびしたがって、オペマスクフィールドの内容が、実行される当該マスキングを間接的に識別する)例が説明されているが、代替の例は、これに代えて、または追加して、マスク書き込みフィールドの内容が、実行されるマスキングを直接に指定することを可能にする。
P[19]は、P[19]を使用して上位の16のベクトルレジスタにアクセス可能な非破壊ソース構文内の第2のソースベクトルレジスタをエンコードするために、P[14:11]と組み合わされ得る。P[20]は、異なるクラスの命令にわたって異なり、ベクトル長さ/丸め制御指定フィールド(P[22:21])の意味に影響を与え得る、複数の機能をエンコードする。P[23]は、マージ処理・ライトマスク処理のためのサポート(例えば、0にセットされた場合)、または、ゼロ化およびマージ処理・ライトマスク処理のためのサポート(例えば、1にセットされた場合)を示す。
第3のプレフィクス1601(C)を使用した命令におけるレジスタのエンコードの例示的な例が以下の表に詳述される。
Figure 2023048102000002
Figure 2023048102000003
Figure 2023048102000004
プログラムコードは、本明細書で説明される機能を実行し、出力情報を生成するために、入力命令に適用されてよい。出力情報は、1つまたは複数の出力デバイスに既知の様式で適用されてよい。この適用の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高級手続き型またはオブジェクト指向型プログラミング言語において実装されてよい。プログラムコードはまた、所望の場合、アセンブリ言語または機械言語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されるものではない。いずれの場合でも、言語は、コンパイル型言語またはインタープリタ型言語であってよい。
本明細書に開示されるメカニズムの例は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせで実装され得る。例は、少なくとも1つのプロセッサと、(揮発性および不揮発性メモリおよび/または格納要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
少なくともいくつかの例の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された代表的な命令により実装され得、命令は、機械により読み出されると、当該機械に本明細書で説明される技術を実行させるためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードするために、様々な顧客または製造設備に供給されてもよい。
そのような機械可読記憶媒体は、限定するものではないが、機械またはデバイスにより製造または形成される、非一時的で有形な構造の物品を含み得、これには、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD-ROM)、書き換え可能コンパクトディスク(CD-RW)、および光磁気ディスクなどの他のタイプのディスクを含む記憶媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適な他のタイプの媒体が含まれる。
したがって、例はまた、本明細書に説明される構造体、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)などの命令を含むか、または設計データを含む非一時的有形機械可読媒体も含む。そのような例も、プログラム製品と称され得る。
エミュレーション(バイナリ変換、コードモーフィングなどを含む)
いくつかの場合では、ソース命令セットからターゲット命令セットへと命令を変換するために、命令コンバータ使用され得る。例えば、命令コンバータは、命令を、コアによって処理されるべき1つまたは複数の他の命令へと変換し(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィングし、エミュレートし、または別様に変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、または一部がオンプロセッサで一部がオフプロセッサであってよい。
図22は、例による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。示された実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替的には、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図22は、高級言語2202におけるプログラムが、第1のISAコンパイラ2204を使用してコンパイルされて、少なくとも1つの第1の命令セットコアを有するプロセッサ2216によりネイティブに実行され得る第1のISAバイナリコード2206を生成し得ることを示す。少なくとも1つの第1のISA命令セットコアを有するプロセッサ2216は、少なくとも1つの第1のISA命令セットコアを有するプロセッサと実質的に同じ結果を実現するために、(1)第1のISA命令セットコアの命令セットの実質的部分、または(2)少なくとも1つの第1のISA命令セットコアを有するIntel(登録商標)プロセッサ上で実行することを目標とされたアプリケーションもしくは他のソフトウェアのオブジェクトコードのバージョンを互換的に実行する、または別様に処理することにより、少なくとも1つの第1のISA命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行できる任意のプロセッサを表す。第1のISAコンパイラ2204は、追加のリンケージ処理を用いてまたは用いないで、少なくとも1つの第1のISA命令セットコアを有するプロセッサ2216上で実行され得る第1のISAバイナリコード2206(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図22は、高級言語2202におけるプログラムが、第1のISA命令セットコアなしのプロセッサ2214によってネイティブに実行され得る代替的な命令セットバイナリコード2210を生成するために、代替的な命令セットコンパイラ2208を使用してコンパイルされ得ることを示す。命令コンバータ2212は、第1のISAバイナリコード2206を、第1のISA命令セットコアなしのプロセッサ2214によってネイティブに実行され得るコードに変換するために使用される。この変換済みコードは、これを可能にする命令コンバータを作成することは困難であるため、代替の命令セットバイナリコード2210と同じである可能性は低いが、しかしながら、変換済みコードは一般的な演算を実現し、代替的な命令セットからの命令で構成される。したがって、命令コンバータ2212は、エミュレーション、シミュレーション、または任意の他のプロセスを通じて、第1のISA命令セットプロセッサもしくはコアを有さない、プロセッサまたは他の電子デバイスが第1のISAバイナリコード2206を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
「いくつかの例」「例示的な実施形態」などへの言及は、説明された当該実施形態が、特定の特徴、構造、または特性を含み得ることを示すが、全ての実施形態が、必ずしも当該特定の特徴、構造、または特性を含まなくてもよい。さらに、そのような語句は、必ずしも同じ実施形態に言及するわけではない。さらに、いくつかの例に関連して特定の特徴、構造または特性が説明されている場合、明示の説明の有無に関わらず、他の例に関連して、そのような特徴、構造または特性に影響が及ぶことは、当業者の知識の範囲内であると考えられる。
例としては、以下が挙げられるが、これらに限定されない。
1.単一命令をデコードするためのデコーダ回路であって、単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、オペコードは、回路が、ソースオペランドで指定されたバイトを含む提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、1バイトのデータは共有状態で格納されるためのものである、デコーダ回路と、
オペコードに従ってデコードされた命令を実行する実行回路と
を備える、装置。
2.オペコードは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例1に記載の装置。
3.モデル固有レジスタは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例1に記載の装置。
4.アドレシングフィールドの1つまたは複数のビットは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例1に記載の装置。
5.ソースオペランドのためのフィールドは、メモリ位置を識別するためのものである、例1~4のいずれか一項に記載の装置。
6.1バイトのデータは、最終レベルキャッシュ内にも共有状態で格納されるためのものである、例1~5のいずれか一項に記載の装置。
7.実行回路は、キャッシュコヒーレンシ回路を少なくとも含む、例1~6のいずれか一項に記載の装置。
8.単一命令をデコードする段階であって、単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、オペコードは、回路が、ソースオペランドで指定されたバイトを含む提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、1バイトのデータは共有状態で格納されるためのものである、デコードする段階と、
オペコードに従ってデコードされた命令を実行する段階と
を備える、方法。
9.オペコードは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例8に記載の方法。
10.モデル固有レジスタは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例8に記載の方法。
11.アドレシングフィールドの1つまたは複数のビットは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例8に記載の方法。
12.ソースオペランドのためのフィールドは、メモリ位置を識別するためのものである、例8~11のいずれか一項に記載の方法。
13.1バイトのデータは、最終レベルキャッシュ内にも共有状態で格納されるためのものである、例8~12のいずれか一項に記載の方法。
14.実行する段階は、少なくともキャッシュコヒーレンシ回路を利用する、例8~13のいずれか一項に記載の方法。
15.機械によって処理されたときに、機械に方法を実行させる単一命令の少なくとも1つのインスタンスを格納した非一時的機械可読媒体であって、方法は、
単一命令のインスタンスをデコードする段階であって、単一命令のインスタンスは、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、オペコードは、回路が、ソースオペランドで指定されたバイトを含む提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、1バイトのデータは共有状態で格納されるためのものである、デコードする段階と、
オペコードに従ってデコードされた命令を実行する段階と
を含む、非一時的機械可読媒体。
16.オペコードは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例15に記載の非一時的機械可読媒体。
17.モデル固有レジスタは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例15に記載の非一時的機械可読媒体。
18.アドレシングフィールドの1つまたは複数のビットは、1バイトのデータが共有状態で格納されるためのものであることを示すためのものである、例15に記載の非一時的機械可読媒体。
19.ソースオペランドのためのフィールドは、メモリ位置を識別するためのものである、例15~18のいずれか一項に記載の非一時的機械可読媒体。
20.1バイトのデータは、最終レベルキャッシュ内にも共有状態で格納されるためのものである、例15~19のいずれか一項に記載の非一時的機械可読媒体。
さらに、上で説明された様々な例において、別途具体的に記載されなければ、語句「A、B、またはCのうちの少なくとも1つ」などの選言的文言は、A、BまたはCのいずれか、またはそれらの任意の組み合わせ(例えば、A、B、および/またはC)を意味すると理解されるよう意図される。したがって、選言的文言は、所与の実施形態がそれぞれ存在するためにAのうちの少なくとも1つ、Bのうちの少なくとも1つ、またはCのうちの少なくとも1つを必要とすることを意味するようには意図されておらず、また意味するように理解されるべきでもない。
したがって、明細書および図面は、限定的意味ではなく、むしろ例示的意味に関するとされるべきである。しかしながら、様々な修正および変更が、請求項に記載されたように開示のより広い趣旨および範囲から逸脱することなくこれらになされてよいことは明らかであろう。
[他の可能な項目]
[項目1]
単一命令をデコードするためのデコーダ回路であって、前記単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、前記オペコードは、回路が、前記ソースオペランドで指定された前記バイトを含む前記提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、前記1バイトのデータは共有状態で格納されるためのものである、デコーダ回路と、
前記オペコードに従って前記デコードされた命令を実行する実行回路と
を備える、装置。
[項目2]
前記オペコードは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目1に記載の装置。
[項目3]
モデル固有レジスタは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目1に記載の装置。
[項目4]
アドレシングフィールドの1つまたは複数のビットは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目1に記載の装置。
[項目5]
前記ソースオペランドのための前記フィールドは、メモリ位置を識別するためのものである、項目1に記載の装置。
[項目6]
前記1バイトのデータは、最終レベルキャッシュ内にも前記共有状態で格納されるためのものである、項目1に記載の装置。
[項目7]
前記実行回路は、キャッシュコヒーレンシ回路を少なくとも含む、項目1に記載の装置。
[項目8]
単一命令をデコードする段階であって、前記単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、前記オペコードは、回路が、前記ソースオペランドで指定された前記バイトを含む前記提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、前記1バイトのデータは共有状態で格納されるためのものである、デコードする段階と、
前記オペコードに従って前記デコードされた命令を実行する段階と
を備える、方法。
[項目9]
前記オペコードは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目8に記載の方法。
[項目10]
モデル固有レジスタは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目8に記載の方法。
[項目11]
アドレシングフィールドの1つまたは複数のビットは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目8に記載の方法。
[項目12]
前記ソースオペランドのための前記フィールドは、メモリ位置を識別するためのものである、項目8に記載の方法。
[項目13]
前記1バイトのデータは、最終レベルキャッシュ内にも前記共有状態で格納されるためのものである、項目8に記載の方法。
[項目14]
前記実行する段階は、少なくともキャッシュコヒーレンシ回路を利用する、項目8に記載の方法。
[項目15]
機械によって処理されたときに、前記機械に方法を実行させる単一命令の少なくとも1つのインスタンスを格納した非一時的機械可読媒体であって、前記方法は、
前記単一命令の前記インスタンスをデコードする段階であって、前記単一命令の前記インスタンスは、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、前記オペコードは、回路が、前記ソースオペランドで指定された前記バイトを含む前記提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、前記1バイトのデータは共有状態で格納されるためのものである、デコードする段階と、
前記オペコードに従って前記デコードされた命令を実行する段階と
を含む、非一時的機械可読媒体。
[項目16]
前記オペコードは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目15に記載の非一時的機械可読媒体。
[項目17]
モデル固有レジスタは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目15に記載の非一時的機械可読媒体。
[項目18]
アドレシングフィールドの1つまたは複数のビットは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、項目15に記載の非一時的機械可読媒体。
[項目19]
前記ソースオペランドのための前記フィールドは、メモリ位置を識別するためのものである、項目15に記載の非一時的機械可読媒体。
[項目20]
前記1バイトのデータは、最終レベルキャッシュ内にも前記共有状態で格納されるためのものである、項目15に記載の非一時的機械可読媒体。

Claims (21)

  1. 単一命令をデコードするためのデコーダ回路であって、前記単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、前記オペコードは、回路が、前記ソースオペランドで指定された前記バイトを含む前記提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、前記1バイトのデータは共有状態で格納されるためのものである、デコーダ回路と、
    前記オペコードに従って前記デコードされた命令を実行する実行回路と
    を備える、装置。
  2. 前記オペコードは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項1に記載の装置。
  3. モデル固有レジスタは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項1に記載の装置。
  4. アドレシングフィールドの1つまたは複数のビットは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項1に記載の装置。
  5. 前記ソースオペランドのための前記フィールドは、メモリ位置を識別するためのものである、請求項1~4のいずれか一項に記載の装置。
  6. 前記1バイトのデータは、最終レベルキャッシュ内にも前記共有状態で格納されるためのものである、請求項1~4のいずれか一項に記載の装置。
  7. 前記実行回路は、キャッシュコヒーレンシ回路を少なくとも含む、請求項1~4のいずれか一項に記載の装置。
  8. 単一命令をデコードする段階であって、前記単一命令は、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、前記オペコードは、回路が、前記ソースオペランドで指定された前記バイトを含む前記提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、前記1バイトのデータは共有状態で格納されるためのものである、デコードする段階と、
    前記オペコードに従って前記デコードされた命令を実行する段階と
    を備える、方法。
  9. 前記オペコードは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項8に記載の方法。
  10. モデル固有レジスタは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項8に記載の方法。
  11. アドレシングフィールドの1つまたは複数のビットは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項8に記載の方法。
  12. 前記ソースオペランドのための前記フィールドは、メモリ位置を識別するためのものである、請求項8~11のいずれか一項に記載の方法。
  13. 前記1バイトのデータは、最終レベルキャッシュ内にも前記共有状態で格納されるためのものである、請求項8~11のいずれか一項に記載の方法。
  14. 前記実行する段階は、少なくともキャッシュコヒーレンシ回路を利用する、請求項8~11のいずれか一項に記載の方法。
  15. コンピュータに、
    単一命令の少なくとも1つのインスタンスをデコードする手順であって、前記単一命令の前記インスタンスは、オペコードのための少なくとも1つのフィールドと、少なくとも1バイトのデータをメモリアドレスに提供するためのソースオペランドのための少なくとも1つのフィールドとを有し、前記オペコードは、回路が、前記ソースオペランドで指定された前記バイトを含む前記提供されたアドレスにおいてメモリからデータのラインをフェッチし、そのバイトを要求者にとってローカルな少なくとも1つのキャッシュに格納するためのものであることを示すためのものであり、前記1バイトのデータは共有状態で格納されるためのものである、デコードする手順と、
    前記オペコードに従って前記デコードされた命令を実行する手順と
    を実行させる、コンピュータプログラム。
  16. 前記オペコードは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項15に記載のコンピュータプログラム。
  17. モデル固有レジスタは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項15に記載のコンピュータプログラム。
  18. アドレシングフィールドの1つまたは複数のビットは、前記1バイトのデータが前記共有状態で格納されるためのものであることを示すためのものである、請求項15に記載のコンピュータプログラム。
  19. 前記ソースオペランドのための前記フィールドは、メモリ位置を識別するためのものである、請求項15に記載のコンピュータプログラム。
  20. 前記1バイトのデータは、最終レベルキャッシュ内にも前記共有状態で格納されるためのものである、請求項15に記載のコンピュータプログラム。
  21. 請求項15~19のいずれか一項に記載のコンピュータプログラムを格納する、非一時的機械可読媒体。
JP2022110690A 2021-09-25 2022-07-08 共有プリフェッチ命令およびサポート Pending JP2023048102A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/485,372 US20230101512A1 (en) 2021-09-25 2021-09-25 Shared prefetch instruction and support
US17/485,372 2021-09-25

Publications (1)

Publication Number Publication Date
JP2023048102A true JP2023048102A (ja) 2023-04-06

Family

ID=82608204

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2022110690A Pending JP2023048102A (ja) 2021-09-25 2022-07-08 共有プリフェッチ命令およびサポート

Country Status (4)

Country Link
US (1) US20230101512A1 (ja)
EP (1) EP4155911A1 (ja)
JP (1) JP2023048102A (ja)
CN (1) CN115878506A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240184702A1 (en) * 2022-12-02 2024-06-06 SiFive, Inc. Prefetching Cache Blocks Based on an Address for a Group and a Bit Field

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5055999A (en) * 1987-12-22 1991-10-08 Kendall Square Research Corporation Multiprocessor digital data processing system
US6202130B1 (en) * 1998-04-17 2001-03-13 Motorola, Inc. Data processing system for processing vector data and method therefor
US10606596B2 (en) * 2013-07-15 2020-03-31 Texas Instruments Incorporated Cache preload operations using streaming engine
US10042749B2 (en) * 2015-11-10 2018-08-07 International Business Machines Corporation Prefetch insensitive transactional memory

Also Published As

Publication number Publication date
EP4155911A1 (en) 2023-03-29
CN115878506A (zh) 2023-03-31
US20230101512A1 (en) 2023-03-30

Similar Documents

Publication Publication Date Title
EP3550437B1 (en) Adaptive spatial access prefetcher apparatus and method
KR20170118051A (ko) 벡터 캐시 라인 라이트 백 프로세서, 방법, 시스템, 및 명령어
US20190205137A1 (en) Methods and apparatus for multi-load and multi-store vector instructions
US20190138451A1 (en) Systems and methods for adaptive multipath probability (amp) prefetcher
US11915000B2 (en) Apparatuses, methods, and systems to precisely monitor memory store accesses
TWI830927B (zh) 用於處理器非回寫能力的設備、方法、及非暫時性機器可讀取媒體
EP3719655B1 (en) Apparatuses, methods, and systems to accelerate store processing
CN113535236A (zh) 基于指令集体系结构的和自动的加载跟踪的方法和装置
US10684858B2 (en) Indirect memory fetcher
US11422809B2 (en) Apparatus and method for multicasting a cache line update using delayed refetch messages
EP4155911A1 (en) Shared prefetch instruction and support
US11934830B2 (en) Method and apparatus for data-ready memory operations
US10860319B2 (en) Apparatus and method for an early page predictor for a memory paging subsystem
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
CN114691597A (zh) 自适应远程原子操作
US20230205685A1 (en) Read all zeros or random data upon a first read from volatile memory
US20220308998A1 (en) Apparatus and method to reduce bandwidth and latency overheads of probabilistic caches
US20220100516A1 (en) Circuitry and methods for power efficient generation of length markers for a variable length instruction set
US20230205531A1 (en) Random data usage
JP2023035849A (ja) Bfloat16平方根および/または逆数平方根命令
CN115858022A (zh) 集群化解码管线的可缩放切换点控制电路***