JP2021057005A - プロセッサのノンライトバック機能のための装置、方法、およびシステム - Google Patents
プロセッサのノンライトバック機能のための装置、方法、およびシステム Download PDFInfo
- Publication number
- JP2021057005A JP2021057005A JP2020103679A JP2020103679A JP2021057005A JP 2021057005 A JP2021057005 A JP 2021057005A JP 2020103679 A JP2020103679 A JP 2020103679A JP 2020103679 A JP2020103679 A JP 2020103679A JP 2021057005 A JP2021057005 A JP 2021057005A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- write
- processor
- access
- bit
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000015654 memory Effects 0.000 claims abstract description 355
- 230000006870 function Effects 0.000 claims description 54
- 230000008569 process Effects 0.000 claims description 4
- 239000013598 vector Substances 0.000 description 95
- VOXZDWNPVJITMN-ZBRFXRBCSA-N 17β-estradiol Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@H](CC4)O)[C@@H]4[C@@H]3CCC2=C1 VOXZDWNPVJITMN-ZBRFXRBCSA-N 0.000 description 74
- 238000006073 displacement reaction Methods 0.000 description 40
- 238000010586 diagram Methods 0.000 description 37
- 238000007667 floating Methods 0.000 description 20
- 239000000872 buffer Substances 0.000 description 19
- 238000006243 chemical reaction Methods 0.000 description 17
- 238000012545 processing Methods 0.000 description 14
- 239000000306 component Substances 0.000 description 9
- 238000013519 translation Methods 0.000 description 9
- 230000014616 translation Effects 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 239000003795 chemical substances by application Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 230000000873 masking effect Effects 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 5
- 230000006835 compression Effects 0.000 description 5
- 238000007906 compression Methods 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 238000004519 manufacturing process Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 239000008358 core component Substances 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002250 progressing effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001629 suppression Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013501 data transformation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 229910052754 neon Inorganic materials 0.000 description 1
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- -1 rr1 Chemical compound 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/22—Microcontrol or microprogram arrangements
- G06F9/223—Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1032—Reliability improvement, data loss prevention, degraded operation etc
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)
- Memory System (AREA)
- Executing Machine-Instructions (AREA)
Abstract
【課題】ソフトウェアがノンライトバックロックアクセスを選択的に無効にすることを可能にする方法を提供する。【解決手段】ハードウェアプロセッサ100は、複数の論理プロセッサと、ノンライトバックロック無効化ビットを備える制御レジスタ110と、複数の論理プロセッサによって共有されるキャッシュ128と、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効にし、ノンライトバックロック無効化ビットが第2の値に設定されている場合に、メモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを実装するメモリコントローラ130と、を備える。【選択図】図1
Description
本開示は、一般に電子機器に関し、より具体的には、本開示の実施形態は、ノンライトバック機能を備えたプロセッサに関する。
プロセッサまたはプロセッサのセットは、例えば命令セットアーキテクチャ(ISA)などの命令セットからの命令を実行する。命令セットは、プログラミングに関連するコンピュータアーキテクチャの一部であり、通常、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込みと例外処理、および外部入出力(I/O)を含む。本明細書における命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、またはマイクロ命令、例えば、プロセッサのデコーダがマクロ命令をデコードすることから生じる結果の命令を示してもよいことに留意されたい。
本開示は、添付の図面の図に限定されず例として示されている。図面では、同様の参照は同様の要素を示す。
以下の説明では、多くの具体的な詳細が示されている。しかしながら、本開示の複数の実施形態は、これらの具体的な詳細なしで実施されてもよいことが理解される。他の例では、この説明の理解を曖昧にしないために、周知の回路、構造、および技術は詳細には示されていない。
本明細書における「一実施形態」、「実施形態」、「例示的な一実施形態」などへの言及は、記載された実施形態が特定の特徴、構造、または特性を含み得るが、すべての実施形態が必ずしも特定の特徴、構造、または特性を含み得ないことを示す。さらに、そのような語句は、必ずしも同じ実施形態を参照するわけではない。さらに、特定の特徴、構造、または特性が一実施形態と関連して説明される場合、明示的に記載されているか否かにかかわらず、他の実施形態と関連してそのような特徴、構造、または特性に影響を与えることは、当業者の知識の範囲内であるといえる。
(例えば、ハードウェア)プロセッサ(例えば、1つまたは複数のコアを有する)は、命令(例えば、命令のスレッド)を実行して、例えば、演算、ロジック、または他の機能を実行するためにデータを操作することができる。例えば、ソフトウェアは、演算を要求することができ、ハードウェアプロセッサ(例えば、そのコアまたは複数のコア)は、要求に応答して演算を実行することができる。特定の実施形態では、(例えば、中央処理装置(CPU)の)1つまたは複数の論理プロセッサが、要求に応答して演算を実行する。論理プロセッサがコアであってもよい。複数の論理プロセッサを単一のコアに実装でき、例えば、コアのコンポーネントがマルチスレッディング(例えば、2つ以上の演算またはスレッドの並列セットの実行)をサポートし、時分割のマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングするスレッドのそれぞれに論理コアを提供する)、またはそれらの組み合わせ(例えば、時分割のフェッチとデコード、およびその後のインテルハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な態様で実行できる。
特定の実施形態では、複数の論理プロセッサが演算を実行する。少なくとも1つの論理プロセッサが、固定の読み取り、変更、書き込み(RMW)演算を実行し得る。RMW演算中は、読み取られ、次に変更され、変更状態で書き戻されるデータのストレージが他の論理プロセッサからロックされる。一例として、データ(例えば、データのキャッシュライン)を変更する第1の論理プロセッサは、そのデータのストレージに対してロックをアサートし、データ(例えば、その1つまたは複数のビット)を変更してから、変更されたバージョンのデータをストレージ(例えば、読み取られたのと同じ場所)に書き戻し、ロックをデアサートして、例えば、別の論理プロセッサが第1の論理プロセッサによる読み取りと書き込みの間に書き込みを実行することを防止する。ロック(例えば、バスロックなど)を実装するメモリ要求の読み取り−変更−書き込みタイプの非限定的な例は、特定のロック命令とフロー(例えば、ロックプレフィックス付きのADD、セグメントアクセスビットの更新、またはページテーブルアクセス/ダーティビット)である。
特定の実施形態では、ロックされたRMW演算は、複数の論理プロセッサによって共有されるキャッシュ(例えば、L1キャッシュ)に格納されるデータに対するものであり、このキャッシュを共有する同じ論理プロセッサ上で実行されるソフトウェアにのみ影響を与える。しかしながら、他の実施形態において、読み取りおよび変更されるデータを格納するストレージへのRMWタイプのメモリ要求に対して、ノンライトバックロックが実装される。一実施形態において、読み取りおよび変更されるデータは、RMW演算を実行するための論理プロセッサの(例えば、内部)キャッシュ内に格納されないため、ノンライトバックロックが実装されるが、ノンライトバックロックによって他のアクセスからロックされるキャッシュとは別個のメモリに格納される。例えば、複数の論理プロセッサをメモリに結合するバスをロックする。
しかしながら、特定の実施形態では、ノンライトバックロックは、RMW演算が完了するまで、すべての論理プロセッサ(例えば、ロックされているバスを介してメモリに結合されている)がメモリにアクセスするのをブロックする。これらの実施形態では、論理プロセッサの1つによるバスロックのバーストを有することにより、残りの論理プロセッサへのデータ枯渇が引き起こされる。リアルタイムソフトウェア(例えば、リアルタイムオペレーティングシステム(RTOS))および汎用ソフトウェア(例えば、汎用オペレーティングシステム(GPOS))を実行しているプロセッサでは、ノンライトバックロックの発行を引き起こす汎用ソフトウェアからのメモリ要求は、リアルタイムソフトウェアがメモリにアクセスすることを防ぎ、したがって、これらの実施形態においてリアルタイムソフトウェアが進行することを防ぐ。一実施形態において、これは、RTOSとGPOSの両方を含むシステムで起こり、GPOSは、ソフトウェアへのノンライトバック(非WB)アクセスを可能にするようにページテーブルを構成する。開示されるように、本明細書の実施形態は、実装の選択的制御またはノンライトバックロックの無効化を可能にすることによる、プロセッサ(例えば、コンピュータ)自体の機能の改善である。この機能を使用すると、モノのインターネット(IoT)システムでこれらのバスロックがなくなり得、プロセッサ(例えば、CPU)上の他のソフトウェアからの干渉なしにリアルタイムソフトウェアを実行できる。
本明細書の特定の実施形態は、ソフトウェア(例えば、オペレーティングシステム)がノンライトバックロックアクセスを選択的に無効にする(例えば、ノンライトバックロックを引き起こすことになったメモリ要求へのサービスを無効にする)ことを可能にする新しいアーキテクチャを提供し、例えば、すべてのタイプのロックを無効にするだけとは対照的である。一実施形態において、新しいモデル固有レジスタ(MSR)ビットが追加され、「オン」値に設定されると、プロセッサ(例えば、CPU)にノンライトバックロックアクセスを無効にさせることになり、例えば、このMSRビットが「オン」の値に設定されているときにソフトウェアが非WBロックアクセスを発行すると、一般保護(GP)違反が発生する。
図1は、本開示の複数の実施形態による、メモリ102に結合されたハードウェアプロセッサ100を示す。メモリ102は、例えば、キャッシュとは別個のシステムメモリであり得る。ハードウェアプロセッサ100は、1つまたは複数のコア(例えば、コア104−1から104−N、ここでNは1より大きい任意の整数)を含むことができる。各コアには、1または複数の論理プロセッサが含まれる場合がある。単一の論理プロセッサは単一のコアである場合がある。複数の論理プロセッサを単一のコアに実装でき、例えば、コアのコンポーネントがマルチスレッディング(例えば、2つ以上の演算またはスレッドの並列セットの実行)をサポートし、時分割のマルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングするスレッドのそれぞれに論理コアを提供する)、またはそれらの組み合わせ(例えば、時分割のフェッチとデコード、およびその後のインテルハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な態様で実装できる。論理プロセッサは、例えば、キャッシュやメモリなどの特定のコンポーネントへのアクセスを共有できる。
図1に示すように、ハードウェアプロセッサ100は、より高いレベルのキャッシュ128へのアクセスを共有する2つのコア、コア104−1およびコア104−Nを含む。各コアは、複数のハードウェアスレッドを実行できる。例えば、各コアによって2つの論理プロセッサが実装される一実施形態では、オペレーティングシステムなどのソフトウェアエンティティは、プロセッサ100を4つの別個の論理プロセッサとして見ることができ、プロセッサ100は4つのソフトウェアスレッドを実行することができる。コア104−Aから104−Nは、図示のように対称コアであってもよく、非対称コア、例えば、異なる構成、実行ユニットなどを備えたコアであってもよい。
特定の実施形態では、コア104−1は、データレジスタまたは複数のレジスタ106−1、制御レジスタまたは複数のレジスタ110−1、および機能レジスタまたは複数のレジスタ108−1の任意の組み合わせを含む。一実施形態では、データレジスタ106−1は、操作されるデータを格納するために使用される。一実施形態では、機能レジスタ108−1は、コア(またはすべてのコア)が、例えば図3に示され、本明細書で説明するノンライトバックロック無効化をサポートするかどうかを例えば示すために、それぞれが特定のコアの機能を表す1つまたは複数のビットを格納する。一実施形態では、制御レジスタ110−1は、特定の機能がそのコアに対して有効かをそれぞれ制御する1つまたは複数のビットを格納し、例えば、本明細書で論じるようにノンライトバックロック無効化をオンまたはオフにする。一実施形態では、制御レジスタ110−1は、例えば図2に示されるように、メモリ制御レジスタ112−1を含む。一実施形態では、制御レジスタ110−1は、例えば図4に示されるように、他の1つまたは複数の制御レジスタ114−1を含む。
図示されたコア104−1は、分岐目標バッファ(BTB)、命令キャッシュ(I−キャッシュ)、および/または命令トランスレーションルックアサイドバッファ(I−TLB)116−1を含み、例えば、BTBは、実行される/取得される分岐を予測し、命令キャッシュは、命令(例えば、より高いレベルのキャッシュおよび/またはメモリ102からの命令)をキャッシュし、および/またはI−TLBは、命令のアドレス変換エントリを(例えば、線形から物理へ)格納する。特定の実施形態では、投機的実行が可能なプロセッサ100は、予測された分岐をプリフェッチおよび投機的に実行する。
デコーダ118−1(例えば、デコード回路)は、命令(例えば、命令のフェッチから受信された)をデコードされた命令へデコードする。一実施形態では、プロセッサ100は、プロセッサ100上でデコード可能/実行可能である命令を定義および指定する命令セットアーキテクチャ(ISA)をサポートする。
図示されたコア104−1は、リネーム/アロケータ/スケジューラ120−1を含む。一実施形態では、リネーム回路は、プログラム/命令参照レジスタをプロセッサ100内部の他のレジスタにリネームするレジスタリネーマーである。一実施形態では、アロケータ回路は、命令結果を追跡するために、実行ユニットおよび/またはリオーダバッファなどのプロセッサリソースを割り当てる(例えば、予約する)。一実施形態では、スケジューラ回路は、プロセッサリソース(例えば、実行ユニット(複数可)122−1)上での命令(例えば、命令に対応するマイクロコード)の実行をスケジュールする。
特定の実施形態では、命令(例えば、マイクロコード)は、それらのタイプおよび/または利用可能性に従って実行ユニット(例えば、実行回路)上でスケジュールされる。例えば、浮動小数点命令は、使用可能な浮動小数点実行ユニットを有する実行ユニットのポート上でスケジュールされる。実行ユニットに関連する複数のレジスタファイルもまた、情報命令処理結果を格納するために含めることができる。例示的な実行ユニットは、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、または他の実行ユニットを含む。
図示されたコア104−1は、リオーダ/リタイヤユニット124−1を含む。一実施形態では、リオーダ/リタイヤユニット124−1は、上述のリオーダバッファ、ロードバッファ、およびストアバッファなどのコンポーネントを含み、アウトオブオーダ実行およびアウトオブオーダで実行される命令の後でインオーダーリタイアメントをサポートし、例えば、アロケータおよびリネーム回路は、命令結果を追跡するためのリオーダバッファなどの他のリソースも予約する。
特定の実施形態では、コア104−Nは、データレジスタまたは複数のレジスタ106−N、制御レジスタまたは複数のレジスタ110−N、および機能レジスタまたは複数のレジスタ108−Nの任意の組み合わせを含む。一実施形態では、データレジスタ106−Nは、操作されるデータを格納するために使用される。一実施形態では、機能レジスタ108−Nは、それぞれがその特定のコアの機能を表す1つまたは複数のビットを格納して、例えば、コア(またはすべてのコア)が例えば図3に示す本明細書で論じるようにノンライトバックロック無効化をサポートするかを示す。一実施形態では、制御レジスタ110−Nは、特定の機能がそのコアに対して有効かをそれぞれ制御する1つまたは複数のビットを格納し、例えば、本明細書で論じるようにノンライトバックロック無効化をオンまたはオフにする。一実施形態では、制御レジスタ110−Nは、例えば図2に示されるように、メモリ制御レジスタ112−Nを含む。一実施形態では、制御レジスタ110−Nは、例えば図4に示されるように、他の1つまたは複数の制御レジスタ114−Nを含む。
図示されたコア104−Nは、分岐目標バッファ(BTB)、命令キャッシュ(I−キャッシュ)、および/または命令トランスレーションルックアサイドバッファ(I−TLB)116−Nを含み、例えば、BTBは、実行される/取得される分岐を予測し、命令キャッシュ(I−キャッシュ)は、命令(例えば、より高いレベルのキャッシュおよび/またはメモリ102からの命令)をキャッシュし、および/またはI−TLBは、命令のアドレス変換エントリを(例えば、線形から物理へ)格納する。特定の実施形態では、投機的実行が可能なプロセッサ100は、予測された分岐をプリフェッチおよび投機的に実行する。
デコーダ118−N(例えば、デコード回路)は、(例えば、命令のフェッチから受信された)命令をデコードされた命令にデコードする。一実施形態では、プロセッサ100は、プロセッサ100上でデコード可能/実行可能である命令を定義および指定する命令セットアーキテクチャ(ISA)をサポートする。
図示されたコア104−Nは、リネーム/アロケータ/スケジューラ120−Nを含む。一実施形態では、リネーム回路は、プログラム/命令参照レジスタをプロセッサ100内部の他のレジスタにリネームするレジスタリネーマーである。一実施形態では、アロケータ回路は、命令結果を追跡するために、実行ユニットおよび/またはリオーダバッファなどのプロセッサリソースを割り当てる(例えば、予約する)。一実施形態では、スケジューラ回路は、プロセッサリソース(例えば、実行ユニット(複数可)122−N)上での命令(例えば、命令に対応するマイクロコード)の実行をスケジュールする。
特定の実施形態では、命令(例えば、マイクロコード)は、それらのタイプおよび/または利用可能性に従って実行ユニット(例えば、実行回路)上でスケジュールされる。例えば、浮動小数点命令は、使用可能な浮動小数点実行ユニットを持つ実行ユニットのポートでスケジュールされる。実行ユニットに関連する複数のレジスタファイルもまた、情報命令処理結果を格納するために含めることができる。例示的な実行ユニットは、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、または他の実行ユニットを含む。
図示されたコア104−Nは、リオーダ/リタイヤユニット124−Nを含む。一実施形態では、リオーダ/リタイヤユニット124−Nは、上述のリオーダバッファ、ロードバッファ、およびストアバッファなどのコンポーネントを含み、アウトオブオーダ実行およびアウトオブオーダで実行される命令の後でインオーダーリタイアメントをサポートし、例えば、アロケータおよびリネーム回路は、命令結果を追跡するためのリオーダバッファなどの他のリソースも予約する。
図示されたコア104−1は、より低いレベルのデータキャッシュ(d−キャッシュ)および/またはデータ変換ルックアサイドバッファ(D−TLB)、例えば、データ(例えば、より高いレベルのキャッシュおよび/またはメモリ102からのデータ)をキャッシュするデータキャッシュ、および/または、例えば、それぞれの実行ユニットまたは複数のユニットに結合された、格納されたデータのためのアドレス変換エントリを格納(例えば、線形から物理への)するD−TLBを含む。図示されたプロセッサ100は、より高いレベル(例えば、L2またはL3)のキャッシュ128を含む。キャッシュは、最近フェッチおよび/または操作された要素をキャッシュする特定の実施形態に含まれている。より高いレベルは、実行ユニットからさらに離れたキャッシュレベルを示す場合があることに留意されたい。一実施形態では、より高いレベルのキャッシュ128は、第2レベル(L2)のデータキャッシュである。一実施形態では、各データキャッシュは、変更された、排他的、共有、無効(MESI)などの状態であってこれに限定されない状態であるキャッシュコヒーレンシ状態で保持される可能性のあるデータオペランドなどの要素で最近使用/操作された要素を格納する。D−TLBは、最近の仮想(または線形)から物理へのアドレス変換を保存できる。具体的な例として、プロセッサは、物理メモリを複数の仮想ページへと分割するためのページテーブル構造を含むことができる。データキャッシュは、トランザクションの実行中に一時的なアクセスを追跡するトランザクションメモリまたは他のメモリとして利用できる。一実施形態では、ページテーブル136および/またはセグメント記述子テーブルは、メモリ102に格納され、例えば、1または複数のキャッシュにキャッシュされる。
プロセッサ100は、メモリコントローラ130を含み得る(またはプロセッサ100を有するシステムオンチップ(SoC)は、メモリコントローラを含み得る)。一実施形態では、メモリコントローラ130は、例えば、より高いレベルのキャッシュおよび/またはメモリ102を検索することにより、キャッシュ内のデータのミスを処理するために、メモリアクセスを制御する。一実施形態では、より高いレベルのキャッシュ128(例えば、およびメモリコントローラ130)がバス132に結合される。図1では、バス132は、メモリ102へのポート134を含む。バス132は、メモリ102、チップセット、または他の回路など、プロセッサ100の外部のデバイスと通信するための他のポートを含み得る。メモリ102は、プロセッサ100専用であっても、システム内の他のデバイスと共有されていてもよい。メモリ102の例には、ダイナミックランダムアクセスメモリ(DRAM)、静的RAM(SRAM)、不揮発性メモリ(NVメモリ)などが含まれる。バス132は、バス上でバス信号を送受信するための入出力(I/O)バッファを含むことができる。バスは相互接続であってもよい。
特定の実施形態では、複数の論理プロセッサ(例えば、単一のコア104−1または104−Nの、複数のコア104−1から104−N上の)が演算を実行している。少なくとも1つの論理プロセッサが、ストレージの読み取りデータに対する固定の読み取り、変更、書き込み(RMW)演算を実行し得、次に変更すると、変更状態で書き戻され、RMW演算中に、そのストレージを変更する他の論理プロセッサからロックされる。一例として、データ(例えば、データのキャッシュライン)を変更する第1の論理プロセッサ(例えば、コア104−1の)は、そのデータのストレージに対してロックをアサートし、データ(例えば、その1つまたは複数のビット)を変更してから、変更されたバージョンのデータをストレージ(例えば、読み取られたのと同じ場所)へ書き戻し、ロックをデアサートして、例えば、別の論理プロセッサ(例えば、コア104−1またはコア104−Nの)が第1の論理プロセッサによる読み取りと書き込みの間に書き込みを実行することを防止する。ロック(例えば、バスロックなど)を実装するメモリ要求の読み取り−変更−書き込みタイプの非限定的な例は、特定のロック命令とフロー(例えば、ロックプレフィックス付きのADD、セグメントアクセスビットの更新、またはページテーブルアクセス/ダーティビット)である。
特定の実施形態では、ロックされたRMW演算は、複数の論理プロセッサによって共有されるキャッシュ(例えば、コア104−1のL1キャッシュ)に格納されるデータに対するものであり、このキャッシュを共有する同じ論理プロセッサ(例えば、コア104−1のL1キャッシュ)上で実行されるソフトウェアにのみ影響を与える。しかしながら、他の実施形態において、読み取りおよび変更されるデータを格納するストレージへのRMWタイプのメモリ要求に対して、ノンライトバックロックが実装される。一実施形態において、読み取りおよび変更されるデータは、RMW演算を実行するための論理プロセッサの(例えば、内部)キャッシュ内に格納されないため、ノンライトバックロックが実装されるが、ノンライトバックロックによって他のアクセスからロックされるキャッシュとは別個のメモリ102に格納される。例えば、複数の論理プロセッサをメモリに結合するバス132をロックする。
一実施形態では、ロックされたRMW演算は、コア104−1またはコア104−Nの複数の論理プロセッサによって共有されるコア104−1またはコア104−N(例えば、より高いレベルのキャッシュ128)のキャッシュ、およびバス132のノンライトバックロックによって他のアクセスからロックされるキャッシュに格納されるデータ対するものである。したがって、この実施形態では、ノンライトバックロックは、RMW演算が完了するまで、すべての論理プロセッサまたはコア104−1またはコア104−Nがメモリにアクセスすることをブロックする。例えば、第1の論理プロセッサがリアルタイムコードを実行し、第2の論理プロセッサが汎用コードを実行しており、ノンライトバックロックの発行を引き起こす汎用ソフトウェアからのメモリ要求により、リアルライムソフトウェアがメモリにアクセスすることを妨げられ、したがって、特定の実施形態では、リアルタイムソフトウェアが進行するのを防ぐ。
本明細書の特定の実施形態は、ソフトウェア(例えば、オペレーティングシステム)がノンライトバックロックアクセスを選択的に無効にする(例えば、ノンライトバックロックを引き起こすことになったメモリ要求へのサービスを無効にする)ことを可能にする新しいアーキテクチャを提供し、例えば、すべてのタイプのロックを無効にするだけとは対照的である。一実施形態では、新しいビットが制御レジスタ110−1および/または制御レジスタ110−N(例えば、メモリ制御レジスタ112−1および/またはメモリ制御レジスタ112−N)に追加され、「オフ」値ではなく「オン」値に設定するとき、プロセッサ(例えば、CPU)に、ノンライトバックロックアクセスを無効化させ、例えば、このMSRビットが「オン」の値に設定されているときにソフトウェアが非WBロックアクセスを発行すると、一般保護(GP)違反が発生する。一実施形態では、各コアは、その制御レジスタ(例えば、メモリ制御レジスタ)にそれ自体のビットを含み、「オフ」値の代わりに「オン」値に設定されるとき、コアに、そのコア(例えば、そのコアに実装されている各論理プロセッサ)に対するノンライトバックロックアクセスを無効にさせる。一実施形態では、複数のコアの各コアは、共有制御レジスタ(例えば、メモリ制御レジスタ)内のビット(または複数ビットの単一のフィールド)を共有し、「オフ」値できはなく「オン」値に設定されるとき、コアに、これらのコア(例えば、これらのコアに実装されている各論理プロセッサ)に対するノンライトバックロックアクセスを無効にさせる。
特定の実施形態では、メモリ要求は要求エンティティによって送信され、例えば、実行ユニットはロード要求またはストア要求を送信する。メモリ要求は読み取り−変更−書き込みタイプであってよく、例えば、ストレージから実行ユニットに値を読み取り、その値を実行ユニットで変更し、その変更された値をストレージ(例えば、同じストレージの場所)に書き戻す。一実施形態では、メモリ要求は、(例えば、メモリ102にアクセスするために)メモリコントローラ130によって受信され、メモリコントローラは、制御レジスタ(例えば、メモリ制御レジスタ)に、その制御レジスタ(例えば、メモリ要求を生成したコアのメモリ制御レジスタ)内にビットを有すること、すなわち「オフ」値の代わりに「オン」値に設定されているかどうかをチェックし、したがって、メモリコントローラ130は、(例えば、そのメモリ要求に対してバス132のバスロックを許可しないことにより)メモリ102に対するノンライトバック(例えば、非キャッシュ)ロックアクセスを無効にする。一実施形態では、ノンライトバックメモリアクセスは、キャッシュからは処理可能でない(例えば、キャッシュできない)が、メモリ102からは処理可能であるメモリアクセスである。
特定の実施形態では、ページテーブル136および/またはセグメント記述子テーブル138に対するメモリ要求は、読み取り−変更−書き込みタイプのメモリ要求であり、したがって、バス132のロッキングアクセス(例えば、ノンライトバックロックアクセス)を引き起こし得る。特定の実施形態において、ページテーブル136は、コンピュータ(例えば、オペレーティングシステム)内の仮想メモリシステムによって使用されるデータ構造を格納し、物理メモリを複数の仮想ページに分割するための仮想アドレスと物理アドレスとの間のマップを示す。一実施形態では、現在のページディレクトリの物理アドレスは、レジスタCR3(例えば、図4)に格納され、ページディレクトリベースレジスタ(PDBR)と呼ばれることもある。特定の実施形態では、セグメント記述子テーブル138は、仮想(例えば、論理)アドレスを物理(例えば、線形)アドレスにマップするために仮想メモリシステムによってコンピュータ(例えば、オペレーティングシステム)内で使用されるデータ構造を格納する。
複数のレジスタは、プロセッサの演算モードと現在実行中のタスクの特性を決定する(例えば、いかなる組み合わせの)制御レジスタ(例えば、CR0からCR4)と、1つまたは複数のメモリ管理レジスタ(例えば、グローバル記述子テーブルレジスタ(GDTR)を含むメモリ制御レジスタと、割り込み記述子テーブルレジスタ(IDTR)と、タスクレジスタと、プロテクトモードのメモリ管理で使用されるデータ構造の場所を指定するローカル記述子テーブルレジスタ(LDTR)と、プロセッサのデバッグ操作を制御およびモニタリングするためのデバッグレジスタ(例えば、DR0からDR7)と、メモリタイプをメモリ領域に割り当てるために使用されるメモリタイプ範囲レジスタ(MTRRs)と、プロセッサ(例えば、コアごと)の性能(例えば、タイムスタンプカウンタ以外のMSRがシステム関連の機能を処理するためのものであり、アプリケーションプログラムからアクセスできない場合)を制御および報告するために使用されるマシン(例えば、モデル)固有のレジスタ(MSR)と、のうちの1つまたは複数を含んでよい。図2−4は、利用可能である様々なレジスタフォーマットを示す。
一実施形態では、プロセッサ100は、例えば、論理プロセッサごとまたはコアごとに、違反(例えば、割り込み)(例えば、バスのロックの要求の実行を停止し、オペレーティングシステムによって読み取られるなどの割り込みを送信する一般保護違反)を生成することにより、バスのノンライトバックロックアクセスを無効にする。
特定の実施形態では、バス(例えば、ロックされたRMWアクセス)のノンライトバックロック(例えば、ロックアクセス)が検出され、ノンライトバックロック無効化ビットが設定される(例えば、MEMORY_CONTROL[Non_WB_LOCK_DISABLE]ビットが設定される)場合であっても、プロセッサ(例えば、CPU)が一般保護違反を作成しないことが好ましい場合がある。1.ハードウェアおよび/またはソフトウェアがキャッシュを無効にして(例えば、レジスタCR0のビットCDを「オン」に設定することにより)、すべてのアクセスがキャッシュ不可になる場合、2.保護されたコンテナ(例えば、エンクレーブ)のメモリがノンライトバックメモリタイプのメモリ暗号化回路140によって使用される場合、例えば、インテルソフトウェアガードエクステンション(SGX)で使用される保存メモリは、ノンライトバックメモリタイプでプログラミングされ、3.仮想マシンモニタ(VMM)対応の拡張ページテーブル(EPT)およびEPTアクセス/ダーティ(A/D)およびEPTメモリタイプ(MEMTYPE)がノンライトバックであり(非WB)、または4.ノンライトバックメモリにマップされている場合は、割り込み記述子を通知する。
特定の実施形態では、ハードウェアおよび/またはソフトウェアは、(ノンライトバックロックされたアクセスの結果として)バスロックが決して取得されないことを保証する。1.ノンライトバックロック無効化ビット(例えば、TEST_CTRL [NON−WRITE−BACK LOCK DISABLE])を「オン」に設定し、2.キャッシュを無効にせず(例えば、CR0.CDを「オン」に設定しない)、3.プロセッサの予約済みメモリ範囲レジスタ(PRMRR)を常に「ライトバック」に構成(例えば、オペレーティングシステムソフトウェアにプロセッサによるメモリ範囲へのアクセスのキャッシュ方法の制御を提供する制御レジスタを設定することにより)4.EPTを使用し、EPT A/Dビットを有効にする場合、EPTページング構造をライトバックメモリに配置し、5.通知された割り込みを使用する場合、通知された割り込み記述子をノンライトバックメモリではなく、ライトバックメモリに配置する。
以下の表1は、バスロックがバスのノンライトバックロックアクセスから来る可能性がある場合の例を示す(例えば、読み取り−変更−書き込みタイプのメモリ要求)。以下でさらに論じる場合には、下記には、命令の例と、可能な命令フォーマットが含まれていることに留意されたい。
特定の実施形態では、ノンライトバックロックの有効および無効を制御するために制御ビットが追加される(例えば、MSR(RDMSR)の内容を読み取るためのMSRの読み取り命令の後に、MSR(WRMSR)の書き込み命令を実行するなど)(例えば、図2のTEST_CTRL MSR(アドレス033H)ビット#28など)。
特定の実施形態では、機能ビットが追加されて、(例えば、図3のIA32_コア_機能 MSR(アドレス0CFH)ビット#4において)ノンライトバックロック無効化機能の存在を列挙する。
図2は、本開示の複数の実施形態による、メモリ制御レジスタ(例えば、TEST_CTRL)の例示フォーマット200を示す。図示されたフォーマット200は、16進数33H(10進数51)のレジスタアドレス202を含む。フォーマット200には、ノンライトバックロックの有効化(例えば、ゼロに設定されている場合)および無効化(例えば、1に設定されている場合)を制御するためのビット28が含まれている。図示されたフォーマット200は、予約された(例えば、未使用の)ビット0から27、ビット29をさらに含み、分割ロックアクセスのアライメントチェック(#AC(0))を有効にし、例えば、EFLAGS.ACのCR0.AMに拘わらず(例えば、ビット29と31が設定されている場合、ビット29が優先される)、現在のすべての特権レベル(CPLs)で分割ロックアクセスのアライメントチェックの例外を引き起こし、ビット30が予約され、ビット31は分割ロックアクセスのバスロック(LOCK#信号など)のアサートを無効にする。一実施形態では、分割ロックは、2つのキャッシュラインがアクセスされている間にバスロックを引き起こす2つのキャッシュラインにアクセスするアトミック演算である。本明細書で論じられるバスのノンライトバックロックは、単一またはそれ以下のデータのキャッシュラインへのアクセスに利用され得る(例えば、分割ロックではない)。
数は例であり、他のフォーマットが使用されてもよいことを理解されたい(例えば、32ビットレジスタの代わりに64ビットレジスタ)。
図3は、本開示の複数の実施形態による、機能レジスタの例示フォーマット300を示す。図示されたフォーマット300は、16進数CFH(10進数207)のレジスタアドレス302を含む。フォーマット300にはビット4が含まれ、対応するコンポーネント(コアなど)にノンライトバックロック無効化機能(例えば、1に設定されている場合)が含まれている場合、またはノンライトバックロックの無効化のノンライトバックロック無効化機能が含まれていない場合(例えば、ゼロに設定されている場合)を示す。機能ビットは、製造中にプログラミングすることができ、例えば、ユーザが変更可能ではない。
図示されたフォーマット300は、予約された(例えば、未使用の)ビット0から3、ビット5をさらに含み、コンポーネント(例えば、コア)が分割ロックアクセスのアライメントチェックの例外(例えば、#AC(0))をサポートし、ビット6から31が予約されていることを示す(例えば、1に設定されている場合)。
数は例であり、他のフォーマットが使用されてもよいことを理解されたい(例えば、32ビットレジスタの代わりに64ビットレジスタ)。
図4は、本開示の複数の実施形態による、制御レジスタ(例えば、CR4からCR0)の例示フォーマットを示す。
レジスタCR4のフォーマットには、表2の以下のフィールドのうちの1または複数が含まれる場合がある。
レジスタCR3のフォーマットには、以下のうちの1または複数が含まれる。仮想アドレス指定が有効になっている場合(例えば、PGビットがCR0に設定されている場合)、CR3は、プロセッサが現在のタスクのページディレクトリとページテーブルを配置して線形アドレスを物理アドレスに変換できるようにする。一例として、CR3の上位20ビットは、最初のページディレクトリエントリの物理アドレスを格納するページディレクトリベースレジスタ(PDBR)である。CR4のPCIDEビットが設定されている場合、最下位12ビットがプロセスコンテキスト識別子(PCID)に使用される。ビット4は、ページレベルキャッシュ無効化(PCD)を格納して、現在のページング構造階層の最初のページング構造にアクセスするために使用されるメモリタイプを制御できる(例えば、物理アドレス拡張(PAE)ページングでページングが無効になっている場合、または4レベルのページングでCR4.PCIDE=1の場合、このビット4は使用されない)。ビット3は、ページレベルのライトスルー(PWT)を格納して、現在のページング構造階層の最初のページング構造にアクセスするために使用されるメモリタイプを制御できる(例えば、物理アドレス拡張(PAE)ページングでページングが無効になっている場合、または4レベルのページングでCR4.PCIDE=1の場合は、このビット4は使用されない)。
レジスタCR2のフォーマットは、ページフォルトリニアアドレス(PFLA)のストレージである場合があり、例えば、ページフォルトが発生すると、プログラムがアクセスしようとしたアドレスがCR2レジスタに格納される。
レジスタCR1のフォーマットは予約されている場合があり、例えば、プロセッサ(例えば、CPU)は、アクセスしようとするとき例外を投げる(#UDなどの)。
レジスタCR0のフォーマットには、表3の以下のフィールドのうちの1または複数が含まれる場合がある。
図5は、本開示の複数の実施形態による、フロー図である。図示のフロー500は、プロセッサ502の複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、バス504を介してメモリに結合されたキャッシュを共有するプロセッサの複数の論理プロセッサのそれぞれでそれぞれの動作を実行する段階と、メモリコントローラ506を用いて、複数の論理プロセッサのうちの1つの論理プロセッサからメモリに対するメモリ要求を受信する段階と、ノンライトバックロック無効化ビットが第1の値508に設定されている場合に、メモリコントローラで複数の論理プロセッサのうちの1つの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効にする段階と、ノンライトバックロック無効化ビットが第2の値510に設定されている場合、メモリコントローラでメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを実装する段階と、を含む。
上記で使用され得る例示的なアーキテクチャ、システムなどを以下で詳細に説明する。
開示される技術の少なくともいくつかの実施形態は、以下の例を参照して説明することができる。
例1。複数の論理プロセッサと、ノンライトバックロック無効化ビットを備える制御レジスタと、複数の論理プロセッサによって共有されるキャッシュと、キャッシュをメモリに結合して、複数の論理プロセッサからメモリに対するメモリ要求を処理するバスと、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効にし、ノンライトバックロック無効化ビットが第2の値に設定されている場合に、メモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを実装するメモリコントローラと、を備える装置。
例2。メモリコントローラは、ノンライトバックロックアクセスを無効にするために一般保護違反を生成する、例1に記載の装置。
例3。制御レジスタは、メモリ制御レジスタである、例1に記載の装置。
例4。メモリ制御レジスタのアドレスは16進数33である、例3に記載の装置。
例5。第1の値に設定されると、複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、第2の値に設定されると、複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートしていないことを示す、機能ビットを含む機能レジスタをさらに備える、例1に記載の装置。
例6。メモリコントローラは、キャッシュ無効化ビットが第2の制御レジスタ内の値に設定されてキャッシュを無効化する場合、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない、例1に記載の装置。
例7。メモリコントローラは、拡張ページテーブルが有効であり、メモリタイプがノンライトバックに設定されている場合、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない、例1に記載の装置。
例8。複数の論理プロセッサは、複数のプロセッサコアである、例1に記載の装置。
例9。プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、バスを介してメモリに結合されたキャッシュを共有するプロセッサの複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、メモリコントローラを備えたメモリのために複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、メモリコントローラで複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効にする段階と、ノンライトバックロック無効化ビットが第2の値に設定されている場合に、メモリコントローラでメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを実装する段階と、を備える方法。
例10。ノンライトバックロックアクセスを無効にすることは、一般保護違反を生成することを含む、例9に記載の方法。
例11。制御レジスタは、メモリ制御レジスタである、例9に記載の方法。
例12。メモリ制御レジスタのアドレスは、16進数33である、例11に記載の方法。
例13。プロセッサの機能レジスタの機能ビットを設定する段階であって、第1の値に設定して複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、機能ビットを第2の値に設定して、複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートしていないことを示す、設定する段階をさらに備える、例9に記載の方法。
例14。第2の制御レジスタ内のキャッシュ無効化ビットをキャッシュを無効化する値に設定する段階であって、メモリコントローラは、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない段階をさらに備える、例9に記載の方法。
例15。複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、メモリコントローラは、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない段階をさらに備える、例9に記載の方法。
例16。複数の論理プロセッサは、複数のプロセッサコアである、例9に記載の方法。
例17。機械によって実行されたときに、機械に、プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、バスを介してメモリに結合されたキャッシュを共有するプロセッサの複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、メモリコントローラを備えたメモリのために複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、メモリコントローラで複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効にする段階と、ノンライトバックロック無効化ビットが第2の値に設定されている場合に、メモリコントローラでメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを実装する段階と、を含む方法を実行させるコードを格納する非一時的な機械可読媒体。
例18。ノンライトバックロックアクセスを無効にすることは、一般保護違反を生成することを含む、例17に記載の非一時的な機械可読媒体。
例19。制御レジスタは、メモリ制御レジスタである、例17に記載の非一時的な機械可読媒体。
例20。メモリ制御レジスタのアドレスは、16進数33である、例19に記載の非一時的な機械可読媒体。
例21。プロセッサの機能レジスタの機能ビットを設定する段階であって、第1の値に設定して複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、機能ビットを第2の値に設定して、複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートしていないことを示す、設定する段階をさらに備える、例17に記載の非一時的な機械可読媒体。
例22。第2の制御レジスタ内のキャッシュ無効化ビットをキャッシュを無効化する値に設定する段階であって、メモリコントローラは、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない段階をさらに備える、例17に記載の非一時的な機械可読媒体。
例23。複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、メモリコントローラは、ノンライトバックロック無効化ビットが第1の値に設定されている場合に、複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない段階をさらに備える、例17に記載の非一時的な機械可読媒体。
例24。複数の論理プロセッサは、複数のプロセッサコアである、例17に記載の非一時的な機械可読媒体。
さらに他の実施形態において、装置は、コードを格納するデータストレージデバイスを備え、コードは、ハードウェアプロセッサによって実行されたときに、本明細書に開示される任意の方法をハードウェアプロセッサに実行させる。装置は、詳細な説明に記載されたものと同じであってよい。方法は、詳細な説明に記載されたものと同じであってよい。
命令セットは、1または複数の命令フォーマットを含んでよい。特定の命令フォーマットは、とりわけ、行われる演算(例えばオペコード)および当該演算が行われる対象となるオペランド、および/または他のデータフィールド(例えばマスク)を指定する様々なフィールド(例えばビットの数、ビットのロケーション)を定義してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義によってさらに分類される。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく(含まれるフィールドは通常、同じ順序であるが、少なくともいくつかは、含まれるフィールドの数がより少ないので、異なるビット位置を有する)、および/または、異なって解釈される特定のフィールドを有するように定義されてよい。故に、ISAの各命令は、特定の命令フォーマットを使用して(また、定義される場合には、その命令フォーマットの命令テンプレートのうちの特定の1つにおいて)表現され、演算およびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するためのオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するためのオペランドフィールドを含む命令フォーマットとを有する。命令ストリーム内にこのADD命令が出現すると、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することとなる。SIMD拡張のセットは、次世代ベクトル拡張(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)コーディングスキームの使用がリリースおよび/または公開される(例えば、インテル64およびIA−32アーキテクチャーソフトウェア開発者マニュアル、2018年11月を参照し、およびインテルアーキテクチャーインストラクションセット拡張プログラミングリファレンス、2018年10月、を参照されたい)。
[例示的な命令フォーマット]
本明細書に記載される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが下記で詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されることができるが、それらに限定されるものではない。
本明細書に記載される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、およびパイプラインが下記で詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されることができるが、それらに限定されるものではない。
[汎用ベクトル向け命令フォーマット]
ベクトル向け命令フォーマットは、(例えば、特定の複数のフィールド固有の複数のベクトル演算が存在する)複数のベクトル命令に適した命令フォーマットである。ベクトルおよびスカラ演算の両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトル演算のみを用いる。
ベクトル向け命令フォーマットは、(例えば、特定の複数のフィールド固有の複数のベクトル演算が存在する)複数のベクトル命令に適した命令フォーマットである。ベクトルおよびスカラ演算の両方がベクトル向け命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトル向け命令フォーマットによるベクトル演算のみを用いる。
図6A−6Bは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマットおよびこれらの命令テンプレートを示すブロック図である。図6Aは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマットおよびその複数のクラスA命令テンプレートを示すブロック図であり、図6Bは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマットおよびその複数のクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトル向け命令フォーマット600は、クラスA命令およびクラスB命令テンプレートに対して定義され、その両方が非メモリアクセス605の命令テンプレートおよびメモリアクセス620の命令テンプレートを含む。ベクトル向け命令フォーマットとの文脈で、汎用という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
本開示の実施形態では、ベクトル向け命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する以下の64バイトのベクトルオペランド長(またはサイズ)(したがって、64バイトのベクトルは、16個のダブルワードサイズの要素または代替的に8クワッドワードサイズの要素のいずれかから構成される)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートすることが説明され、代替的な実施形態は、より多い、より少ないまたは異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多い、より少ないおよび/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてよい。
図6AにおけるクラスA命令テンプレートは、1)非メモリアクセス605の命令テンプレート中に示される非メモリアクセス、フルラウンド制御タイプ演算610命令テンプレート、および非メモリアクセス、データ変換タイプ演算615の命令テンプレート、ならびに2)メモリアクセス620の命令テンプレート中に示されるメモリアクセス、一時的625の命令テンプレート、およびメモリアクセス、非一時的630の命令テンプレートを含む。図6BのクラスB命令テンプレートは、1)非メモリアクセス605の命令テンプレート中に示される非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプ演算612の命令テンプレート、および非メモリアクセス、ライトマスク制御、VSIZEタイプ演算617の命令テンプレート、ならびに2)メモリアクセス620の命令テンプレート中に示されるメモリアクセス、ライトマスク制御627の命令テンプレートを含む。
汎用ベクトル向け命令フォーマット600は、以下のフィールドを図6Aおよび図6B中に図示される順序で含む。
フォーマットフィールド640:このフィールドの特定の値(命令フォーマット識別子の値)は、ベクトル向け命令フォーマットを一意に特定し、よって命令ストリームにおける当該ベクトル向け命令フォーマットでの命令の発生を特定する。よって、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには不要であるという意味において任意的である。
基本演算フィールド642:このコンテンツは、異なるベース演算を識別する。
レジスタインデックスフィールド644:そのコンテンツは、直接的にまたはアドレス生成を介して、ソースおよびデスティネーションオペランドがレジスタ内にあるかまたはメモリ内にあるかを問わず、それらのロケーションを指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態では、Nは最大3つのソースおよび1つのデスティネーションレジスタであり得るが、代替実施形態は、より多いかまたは少ないソースおよびデスティネーションレジスタをサポートしてもよい(例えば、最大2つのソースをサポートし、これらのソースのうちの1つがデスティネーションとしても機能してもよく、最大3つのソースをサポートして、これらのソースのうちの1つがデスティネーションとしても機能してもよく、最大2つのソースおよび1つのデスティネーションをサポートしてもよい)。
修飾子フィールド646:その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の出現を、メモリアクセスを指定しない命令と区別する、すなわち、非メモリアクセス605の命令テンプレートおよびメモリアクセス620の命令テンプレートを区別する。メモリアクセス演算はメモリ階層に対して読み出しおよび/または書き込みを行い(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)、非メモリアクセス演算は行わない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態では、このフィールドは、メモリアドレス計算を実行する3つの異なる態様の間でも選択するが、代替実施形態は、より多い、少ない、または異なる態様のメモリアドレス計算を実行する方法をサポートし得る。
拡張演算フィールド650:その内容は、基本演算に加えて、様々な異なる演算のうちどれを実行するかを区別する。このフィールドはコンテキスト固有である。本開示の一実施形態において、このフィールドは、クラスフィールド668、アルファフィールド652、およびベータフィールド654に分割される。拡張演算フィールド650は、2、3または4個の命令ではなく、単一の命令の中で共通の演算グループが実行されることを可能にする。
スケールフィールド660:そのコンテンツは、メモリアドレス生成のための(例えば、2スケール×インデックス+ベースを用いるアドレス生成のための)インデックスフィールドのコンテンツをスケーリングすることを可能にする。
変位フィールド662A:その内容は、メモリアドレス生成の一部として(例えば、2スケール×インデックス+ベース+変位を使用するアドレス生成用に)使用される。
変位係数フィールド662B(変位係数フィールド662Bの真上の変位フィールド662Aの並置は、一方または他方が使用されることを示すことに留意されたい):その内容は、アドレス生成の一部として使用され、それは、メモリアクセスのサイズ(N)によってスケーリングされるべき変位係数を指定する。Nは、(例えば、2スケール×インデックス+ベース+スケーリングされた変位を使用するアドレス生成用の)メモリアクセスにおけるバイト数である。冗長下位ビットは無視されるため、実効アドレスの計算に使用されるべき最終的変位を生成するために、変位係数フィールドの内容はメモリオペランドの合計サイズ(N)と乗算される。Nの値は、(本明細書において後述される)フルオペコードフィールド674およびデータ操作フィールド654Cに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド662Aおよび変位係数フィールド662Bは、それらが非メモリアクセス605の命令テンプレートには使用されない、および/または、異なる実施形態がそれら2つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味において任意的である。
データ要素幅フィールド664:その内容は、(いくつかの実施形態ではすべての命令に、他の実施形態においてはいくつかの命令のみに)複数のデータ要素幅のうちのどのデータ要素幅の数が使用されるべきかを識別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、および/またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で、任意選択的である。
ライトマスクフィールド670:その内容は、データ要素位置ベースごとに、デスティネーションベクトルオペランド内のそのデータ要素位置が基本演算および拡張演算の結果を反映するかどうかを制御する。クラスA命令テンプレートは、マージング−ライトマスキングをサポートし、クラスB命令テンプレートは、マージングおよびゼロイングライトマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベース演算および追加演算により指定された)任意の演算の実行中に更新から保護されることを可能にする。他の一実施形態では、対応するマスクビットが0であるデスティネーションの各要素の古い値を保持する。対照的に、ゼロライトする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが(ベース演算および追加演算により指定された)任意の演算の実行中にゼロにされることを可能にする。一実施形態において、対応するマスクビットが0の値を有する場合、デスティネーションの要素は、0に設定される。この機能のサブセットは、実行されている演算のベクトル長(すなわち、修正される要素の、最初の要素から最後の要素までのスパン)を制御する能力であるが、しかしながら、修正される要素が連続している必要はない。したがって、ライトマスクフィールド670は、ロード、格納、演算、論理などを含む部分的なベクトル演算を可能にする。ライトマスクフィールド670のコンテンツが用いられるライトマスクを含む多数のライトマスクレジスタのうちの1つを選択する(したがって、ライトマスクフィールド670のコンテンツは、実行対象のそのマスキングを間接的に識別する)本開示の実施形態が説明されるが、代替的な実施形態では、代わりにまたは追加的に、ライトマスクフィールド670のコンテンツが実行されるマスキングを直接指定することを可能にする。
即値フィールド672:その内容は即値の指定を可能にする。このフィールドは、即値をサポートしていない汎用ベクトル向けフォーマットの実装において存在せず、即値を用いない命令中に存在しないという意味で任意選択である。
クラスフィールド668:その内容は異なるクラスの命令を区別する。図6A−Bを参照すると、このフィールドの内容は、クラスA命令およびクラスB命令の間で選択する。図6A−Bでは、特定の値がフィールド内に存在することを示すために、角丸四角形が使用されている(例えば、それぞれ図6A−Bにおけるクラスフィールド668のクラスA668AおよびクラスB668B)。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス605の命令テンプレートの場合、アルファフィールド652はRSフィールド652Aとして解釈され、その内容は、異なる拡張演算タイプのうちどれが実行されるべきかを区別し(例えば、ラウンド652A.1およびデータ変換652A.2が非メモリアクセス、ラウンドタイプ演算610および非メモリアクセス、データ変換タイプ演算615命令テンプレートに対してそれぞれ指定される)、ベータフィールド654は、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス605の命令テンプレートには、スケールフィールド660、変位フィールド662A、および変位スケールフィールド662Bは存在しない。
クラスAの非メモリアクセス605の命令テンプレートの場合、アルファフィールド652はRSフィールド652Aとして解釈され、その内容は、異なる拡張演算タイプのうちどれが実行されるべきかを区別し(例えば、ラウンド652A.1およびデータ変換652A.2が非メモリアクセス、ラウンドタイプ演算610および非メモリアクセス、データ変換タイプ演算615命令テンプレートに対してそれぞれ指定される)、ベータフィールド654は、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス605の命令テンプレートには、スケールフィールド660、変位フィールド662A、および変位スケールフィールド662Bは存在しない。
[非メモリアクセス命令テンプレート:フルラウンド制御タイプ演算]
非メモリアクセス、フルラウンド制御タイプ演算610命令テンプレートでは、ベータフィールド654はラウンド制御フィールド654Aとして解釈され、その内容は静的なラウンドを提供する。説明される本開示の複数の実施形態において、ラウンド制御フィールド654Aは、全浮動小数点例外抑制(SAE)フィールド656およびラウンド演算制御フィールド658を含み、代替的な実施形態では、これらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、または、これらの概念/フィールドの一方または他方のみを有してよい(例えば、ラウンド演算制御フィールド658のみを有してよい)。
非メモリアクセス、フルラウンド制御タイプ演算610命令テンプレートでは、ベータフィールド654はラウンド制御フィールド654Aとして解釈され、その内容は静的なラウンドを提供する。説明される本開示の複数の実施形態において、ラウンド制御フィールド654Aは、全浮動小数点例外抑制(SAE)フィールド656およびラウンド演算制御フィールド658を含み、代替的な実施形態では、これらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、または、これらの概念/フィールドの一方または他方のみを有してよい(例えば、ラウンド演算制御フィールド658のみを有してよい)。
SAEフィールド656:その内容は、例外イベント報告を無効化すべきか否かを区別する。SAEフィールド656の内容が、抑制が有効化されたことを示すとき、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない。
ラウンド演算制御フィールド658−その内容は、ラウンド演算グループのうちどれを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロ方向のラウンド、最近接ラウンド)。したがって、ラウンド演算制御フィールド658は、命令ベースでラウンドモードを変更することを可能にする。プロセッサがラウンドモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド演算制御フィールド650の内容は、そのレジスタ値をオーバライドする。
[非メモリアクセス命令テンプレート:データ変換タイプ演算]
非メモリアクセスデータ変換タイプ演算615命令テンプレートでは、ベータフィールド654はデータ変換フィールド654Bとして解釈され、その内容は、多数のデータ変換のうちどれが実行されるべきかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
非メモリアクセスデータ変換タイプ演算615命令テンプレートでは、ベータフィールド654はデータ変換フィールド654Bとして解釈され、その内容は、多数のデータ変換のうちどれが実行されるべきかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス620命令テンプレートの場合、アルファフィールド652はエビクションヒントフィールド652Bとして解釈され、その内容は、エビクションヒントのうちどれが使用されるべきかを区別し(図6Aでは、メモリアクセス、一時的625命令テンプレートおよびメモリアクセス、非一時的630命令テンプレートのために一時的652B.1および非一時的652B.2がそれぞれ指定される)、ベータフィールド654はデータ操作フィールド654Cとして解釈され、その内容は、多数のデータ操作演算(プリミティブとも称される)のうちどれが実行されるべきかを区別する(例えば、非マニピュレーション、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス620命令テンプレートは、スケールフィールド660、および任意選択で、変位フィールド662Aまたは変位スケールフィールド662Bを含む。
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、実際に転送される要素をライトマスクとして選択されたベクトルマスクの内容によって指示して、データ要素ごとにメモリとの間でデータ要素幅形式でデータを転送する。
[メモリアクセス命令テンプレート:一時的]
一時的データとは、キャッシュによる恩恵を得るのに十分早く再利用される可能性が高いデータである。しかしながらこれはわずかな差であり、異なるプロセッサが、ヒント全体を無視することを含む異なる方法でこれを実装し得る。
一時的データとは、キャッシュによる恩恵を得るのに十分早く再利用される可能性が高いデータである。しかしながらこれはわずかな差であり、異なるプロセッサが、ヒント全体を無視することを含む異なる方法でこれを実装し得る。
[メモリアクセス命令テンプレート:非一時的]
非一時的データは、レベル1キャッシュでのキャッシングの恩恵を受けるのに十分なほど早く再利用される可能性が低いデータであり、エビクションのために優先されるべきである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なる態様でこれを実装し得る。
非一時的データは、レベル1キャッシュでのキャッシングの恩恵を受けるのに十分なほど早く再利用される可能性が低いデータであり、エビクションのために優先されるべきである。しかしながらこれはヒントであり、異なるプロセッサが、ヒント全体を無視することを含む異なる態様でこれを実装し得る。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合、アルファフィールド652はライトマスク制御(Z)フィールド652Cとして解釈され、その内容は、ライトマスクフィールド670によって制御されたるライトマスキングがマージングであるべきかゼロイングであるべきかを区別する。
クラスBの命令テンプレートの場合、アルファフィールド652はライトマスク制御(Z)フィールド652Cとして解釈され、その内容は、ライトマスクフィールド670によって制御されたるライトマスキングがマージングであるべきかゼロイングであるべきかを区別する。
クラスBの非メモリアクセス605の命令テンプレートの場合、ベータフィールド654の一部はRLフィールド657Aとして解釈されるべきであり、その内容は、異なる拡張演算タイプのうちどれが実行されるべきかを区別し(例えば、ラウンド657A.1およびベクトル長(VSIZE)657A.2は、非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプ演算612命令テンプレートおよび非メモリアクセス、ライトマスク制御、VSIZEタイプ演算617命令テンプレートに対してそれぞれ指定される)、ベータフィールド654の残りは、指定されたタイプの演算のどれが実行されるべきかを区別する。非メモリアクセス605の命令テンプレートには、スケールフィールド660、変位フィールド662A、および変位スケールフィールド662Bは存在しない。
非メモリアクセス、ライトマスク制御、部分的ラウンド制御タイプ演算610命令テンプレートでは、ベータフィールド654の残りはラウンド演算フィールド659Aとして解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない)。
ラウンド演算制御フィールド659A:ラウンド演算制御フィールド658と同様に、その内容は、ラウンド演算グループのうちどれを実行すべきかを区別する(例えば、切り上げ、切り捨て、ゼロ方向のラウンド、最近接ラウンド)。故に、ラウンド演算制御フィールド659Aは、命令ベースごとにラウンドモードを変更できるようにする。プロセッサがラウンドモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド演算制御フィールド650のコンテンツは、そのレジスタ値をオーバライドする。
非メモリアクセス、ライトマスク制御、VSIZEタイプ演算617命令テンプレートでは、ベータフィールド654の残りはベクトル長フィールド659Bとして解釈され、その内容は、多数のデータベクトル長のうちどれが実行されるべきかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス620命令テンプレートの場合、ベータフィールド654の一部はブロードキャストフィールド657Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作演算が実行されるべきか否かを区別し、ベータフィールド654の残りはベクトル長フィールド659Bとして解釈される。メモリアクセス620命令テンプレートは、スケールフィールド660、および任意選択で変位フィールド662Aまたは変位スケールフィールド662Bを含む。
汎用ベクトル向け命令フォーマット600に関連し、フルオペコードフィールド674は、フォーマットフィールド640、ベース演算フィールド642およびデータ要素幅フィールド664を含むように表示されている。フルオペコードフィールド674がこれらのフィールドのうちすべてを含む一実施形態が示されているものの、これらのフィールドのすべてをサポートしていない実施形態においては、フルオペコードフィールド674は、これらのフィールドのすべてより少ないフィールドを含む。フルオペコードフィールド674は、演算コード(オペコード)を提供する。
拡張演算フィールド650、データ要素幅フィールド664、およびライトマスクフィールド670は、これらの特徴が汎用ベクトル向け命令フォーマットにおいて命令ベースごとに指定されることを可能にする。
ライトマスクフィールドおよびデータ要素幅フィールドの組み合わせは、異なるデータ要素幅に基づいてマスクを適用できるようにするという点で、型付き命令を作成する。
クラスAおよびクラスB内で見出される様々な命令テンプレートは、異なる状況で有益である。本開示の複数の実施形態のいくつかにおいて、複数の異なるプロセッサまたはプロセッサ内の複数の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてよい。例えば、汎用コンピューティング用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックスおよび/または科学(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方用のコアは、両方をサポートしてよい(勿論、コアは、両方のクラスからのテンプレートおよび命令のいくつかの混合を有するが、両方のクラスからのすべてのテンプレートおよび命令が本開示の範囲内にあるわけではない)。また、単一のプロセッサが複数のコアを含んでもよく、その全てが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックおよび汎用コアを有するプロセッサでは、主にグラフィックスおよび/または科学コンピューティング向けのグラフィックスコアのうち1つはクラスAのみをサポートすることができ、汎用コアのうちの1または複数は、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダー実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダーまたはアウトオブオーダコアを含み得る。勿論、1つのクラスからの複数の特徴は、本開示の複数の異なる実施形態における他のクラスで実装されてもよい。高水準言語で書かれたプログラムは、1)実行のためにターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)全てのクラスの命令の異なる組み合わせを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、様々の異なる実行可能な形式に変換される(例えば、ジャストインタイムコンパイルまたは静的コンパイル)。
[例示的な特定ベクトル向け命令フォーマット]
図7は、本開示の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図7は、位置、サイズ、解釈およびフィールド順序に加え、これらのフィールドのいくつかの値を指定するという意味において具体的な特定ベクトル向け命令フォーマット700を示す。特定ベクトル向け命令フォーマット700は、x86命令セットを拡張するために使用されてもよく、したがって、いくつかのフィールドは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと同様または同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。図6からのフィールドが図7のどのフィールドにマップされるかが示される。
図7は、本開示の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図7は、位置、サイズ、解釈およびフィールド順序に加え、これらのフィールドのいくつかの値を指定するという意味において具体的な特定ベクトル向け命令フォーマット700を示す。特定ベクトル向け命令フォーマット700は、x86命令セットを拡張するために使用されてもよく、したがって、いくつかのフィールドは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと同様または同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドと一致したままである。図6からのフィールドが図7のどのフィールドにマップされるかが示される。
本開示の複数の実施形態では、例示を目的として汎用ベクトル向け命令フォーマット600との文脈で特定ベクトル向け命令フォーマット700を参照して説明されているが、本開示は、特許請求の範囲に記載されたものを除いて、特定ベクトル向け命令フォーマット700に限定されるものではないことを理解されたい。例えば、特定ベクトル向け命令フォーマット700は具体的なサイズのフィールドを検討するように図示されているものの、汎用ベクトル向け命令フォーマット600は、様々なフィールドについて様々な考え得るサイズを想定している。具体的な例として、データ要素幅フィールド664は、特定ベクトル向け命令フォーマット700において、1ビットフィールドとして示されているが、本開示は、そこまで限定されることはない(すなわち、汎用ベクトル向け命令フォーマット600は、他のサイズのデータ要素幅フィールド664を検討する)。
汎用ベクトル向け命令フォーマット600は、図7Aに示される順序で以下に列挙される以下のフィールドを含む。
EVEXプレフィックス(バイト0−3)702は、4バイト形式にエンコードされる。
フォーマットフィールド640(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド640であり、それは、0x62(本開示の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる一意の値)を含む。
第2から第4のバイト(EVEXバイト1〜3)は、特定の機能を提供する複数のビットフィールドを含む。
REXフィールド705(EVEXバイト1、ビット[7‐5])は、EVEX.Rビットフィールド(EVEXバイト1、ビット[7]‐R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]‐X)および657BEXバイト1、ビット[5]‐B)から構成される。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能性を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のようにレジスタインデックスの下位3ビットをエンコードし(rrr、xxx、およびbbb)、これにより、EVEX.R、EVEX.XおよびEVEX.Bを追加することによってRrrr、Xxxx、およびBbbbが形成されてよい。
REX'フィールド610:これは、REX'フィールド610の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]―R')である。本開示の一実施形態において、このビットは、以下に示される他のものと共に、ビット反転フォーマットでストアされることにより、リアルオペコードバイトは62であるが、(後述の)MOD R/MフィールドにおいてMODフィールドの値11を受け付けない(周知のx86の32ビットモードにおける)BOUND命令から区別するが、本開示の複数の代替的な実施形態は、このビットおよび以下に示される反転フォーマットの他のビットをストアしない。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.R'、EVEX.Rおよび他のフィールドの他のRRRを組み合わせて、R'Rrrrが形成される。
オペコードマップフィールド715(EVEXバイト1、ビット[3:0]−mmmm):そのコンテンツは、暗黙に示される先頭オペコードバイト(0F、0F38または0F3)をエンコードする。
データ要素幅フィールド664(EVEXバイト2、ビット[7]−W)−表記EVEX.Wにより表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を規定するために用いられる。
EVEX.vvvv720(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下を含んでよい。1)EVEX.vvvvは、反転(1の補数)形式で指定される第1のソースレジスタオペランドをエンコードし、2または3以上のソースオペランドを有する複数の命令に対して有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードする。または、3)EVEX.vvvvは、いずれのオペランドもエンコードせず、当該フィールドは予約され、1111bを含まなくてはならない。したがって、EVEX.vvvvフィールド720は、反転形式(1の補数)で記憶された第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドは、指定子のサイズを32個のレジスタに拡張するために用いられる。
EVEX.U668クラスフィールド(EVEXバイト2、ビット[2]−U):EVEX.U=0の場合、これは、クラスAまたはEVEX.U0を示す。EVEX.U=1の場合、これは、クラスBまたはEVEX.U1を示す。
プレフィックスエンコードフィールド725(EVEXバイト2、ビット[1:0]‐pp)−これは、ベース演算フィールドの追加のビットを提供する。EVEXプレフィックスフォーマットにおけるレガシSSE命令のサポートの提供に加え、これはまた、SIMDプレフィックスのコンパクト化の利点を有する(SIMDプレフィックスを表わすために1バイトを要求する代わりに、EVEXプレフィックスは2ビットのみを要求する)。一実施形態において、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方において、SIMDプレフィックス(66H、F2H、F3H)を使用するレガシSSE命令をサポートすべく、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドにエンコードされる。これらのレガシSIMDプレフィックスは、デコーダのPLAに提供される前に、実行時にレガシSIMDプレフィックスに拡張される(よって、PLAは、変更なしで、これらのレガシ命令のレガシフォーマットおよびEVEXフォーマットの両方を実行できる)。より新しい命令はEVEXプレフィックスエンコードフィールドの内容をオペコード拡張として直接使用できるにもかかわらず、特定の実施形態は一貫性をもたせるために同様に拡張するが、これらのレガシSIMDプレフィックスによって異なる意味が指定されることが可能になる。代替的な実施形態は、2ビットSIMDプレフィックスエンコードをサポートするように、つまり拡張を要求しないように、PLAを再設計してよい。
アルファフィールド652(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.ライトマスク制御およびEVEX.Nとしても知られ、また、αを用いて示される)−前述したように、このフィールドは、コンテキストに固有のものである。
ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX、rr1、EVEX.LL0、EVEX.LLBとしても知られ、また、βββを用いて示される)−前述したように、このフィールドは、コンテキストに固有のものである。
REX'フィールド610−これは、REX'フィールドの残部であり、拡張された32個のレジスタセットの上位16または下位16のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットで格納される。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
ライトマスクフィールド670(EVEXバイト3、ビット[2:0]‐kkk)−上記の通り、その内容は、ライトマスクレジスタ内のレジスタのインデックスを指定する。本開示の一実施形態において、特定の値EVEX.kkk=000は、特定の命令に用いられるライトマスクが存在しないことを示唆する特別な挙動を有する(これは、すべてのものに対して物理的に組み込まれるライトマスク、または、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る)。
リアルオペコードフィールド730(バイト4)はオペコードバイトとしても知られる。オペコードの一部はこのフィールドで指定される。
MOD R/Mフィールド740(バイト5)は、MODフィールド742、Regフィールド744、およびR/Mフィールド746を含む。上記の通り、MODフィールド742の内容は、メモリアクセス演算および非メモリアクセス演算間を区別する。Regフィールド744の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、いかなる命令オペランドをエンコードするために使用されないこと、という2つの状況に要約できる。R/Mフィールド746の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードすることが含まれてよい。
スケール、インデックス、ベース(SIB)バイト(バイト6):上記の通り、スケールフィールド650の内容は、メモリアドレス生成に使用される。SIB.xxx754およびSIB.bbb 756:これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。
変位フィールド662A(バイト7−10):MODフィールド742が10を含む場合、バイト7−10は、変位フィールド662Aであり、これはレガシ32ビット変位(disp32)と同じく機能し、バイト粒度で機能する。
変位係数フィールド662B(バイト7):MODフィールド742が01を含むとき、バイト7は変位係数フィールド662Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は符号拡張されるので、disp8は−128〜127バイトオフセット間のアドレス指定のみ可能である。64バイトのキャッシュラインに関しては、disp8は4つの実際に有用な値、−128、−64、0および64のみに設定可能な8ビットを使用する。多くの場合、より広い範囲が必要であるので、disp32が使用されるが、disp32は4バイトを要求する。disp8およびdisp32と対照的に、変位係数フィールド662Bはdisp8の再解釈である。変位係数フィールド662Bを使用する場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算された変位係数フィールドの内容によって決定される。このタイプの変位は、disp8×Nと称される。これにより、平均命令長(単一バイトだが、はるかに大きなレンジの変位に用いられる)を小さくする。このような圧縮された変位は、有効な変位はメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットはエンコードの必要がないという前提に基づいている。換言すると、変位係数フィールド662Bが、レガシx86命令セットの8ビット変位と置き換わる。故に、変位係数フィールド662Bは、disp8がdisp8×Nにオーバーロードされる例外のみを除いては、x86命令セットの8‐ビット変位と同じ態様でエンコードされる(よって、ModRM/SIBエンコードルールの変更はない)。換言すると、エンコードルールまたはエンコード長に変更はなく、ハードウェアによる変位値の解釈のみに変更がある(バイト単位のアドレスオフセットを取得するには、メモリオペランドのサイズによって変位をスケールする必要がある)。即値フィールド672は、前述のとおりに動作する。
[フルオペコードフィールド]
図7Bは、本開示の一実施形態に係るフルオペコードフィールド674を作成する特定ベクトル向け命令フォーマット700のフィールドを示すブロック図である。具体的には、フルオペコードフィールド674は、フォーマットフィールド640、ベース演算フィールド642およびデータ要素幅(W)フィールド664を含む。ベース演算フィールド642は、プレフィックスエンコードフィールド725、オペコードマップフィールド715およびリアルオペコードフィールド730を含む。
図7Bは、本開示の一実施形態に係るフルオペコードフィールド674を作成する特定ベクトル向け命令フォーマット700のフィールドを示すブロック図である。具体的には、フルオペコードフィールド674は、フォーマットフィールド640、ベース演算フィールド642およびデータ要素幅(W)フィールド664を含む。ベース演算フィールド642は、プレフィックスエンコードフィールド725、オペコードマップフィールド715およびリアルオペコードフィールド730を含む。
[レジスタインデックスフィールド]
図7Cは、本開示の一実施形態に係るレジスタインデックスフィールド644を作成する特定ベクトル向け命令フォーマット700のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド644は、REXフィールド705、REX'フィールド710、MODR/M.regフィールド744、MODR/M.r/mフィールド746、VVVVフィールド720、xxxフィールド754およびbbbフィールド756を含む。
図7Cは、本開示の一実施形態に係るレジスタインデックスフィールド644を作成する特定ベクトル向け命令フォーマット700のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド644は、REXフィールド705、REX'フィールド710、MODR/M.regフィールド744、MODR/M.r/mフィールド746、VVVVフィールド720、xxxフィールド754およびbbbフィールド756を含む。
[拡張演算フィールド]
図7Dは、本開示の一実施形態に係る拡張演算フィールド650を作成する特定ベクトル向け命令フォーマット700のフィールドを示すブロック図である。クラス(U)フィールド668が0を含む場合、EVEX.U0(クラスA668A)を表し、1を含む場合は、EVEX.U1(クラスB668B)を表す。U=0、かつMODフィールド742が11を含む(非メモリアクセス演算を意味する)場合、アルファフィールド652(EVEXバイト3、ビット[7])−EH)は、RSフィールド652Aとして解釈される。RSフィールド652Aが1(ラウンド652A.1)を含む場合、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド654Aとして解釈される。ラウンド制御フィールド654Aは、1ビットのSAEフィールド656および2ビットのラウンド演算フィールド658を含む。RSフィールド652Aが0(データ変換652A.2)を含む場合、ベータフィールド654(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ変換フィールド654Bとして解釈される。U=0、かつMODフィールド742が00、01または10を含む(メモリアクセス演算を意味する)場合、アルファフィールド652(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド652Bとして解釈され、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド654Cとして解釈される。
図7Dは、本開示の一実施形態に係る拡張演算フィールド650を作成する特定ベクトル向け命令フォーマット700のフィールドを示すブロック図である。クラス(U)フィールド668が0を含む場合、EVEX.U0(クラスA668A)を表し、1を含む場合は、EVEX.U1(クラスB668B)を表す。U=0、かつMODフィールド742が11を含む(非メモリアクセス演算を意味する)場合、アルファフィールド652(EVEXバイト3、ビット[7])−EH)は、RSフィールド652Aとして解釈される。RSフィールド652Aが1(ラウンド652A.1)を含む場合、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド654Aとして解釈される。ラウンド制御フィールド654Aは、1ビットのSAEフィールド656および2ビットのラウンド演算フィールド658を含む。RSフィールド652Aが0(データ変換652A.2)を含む場合、ベータフィールド654(EVEXバイト3、ビット[6:4]‐SSS)は、3ビットのデータ変換フィールド654Bとして解釈される。U=0、かつMODフィールド742が00、01または10を含む(メモリアクセス演算を意味する)場合、アルファフィールド652(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド652Bとして解釈され、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド654Cとして解釈される。
U=1であるとき、アルファフィールド652(EVEXバイト3、ビット[7]−EH)は、ライトマスク制御(Z)フィールド652Cとして解釈される。U=1、かつMODフィールド742が11を含む(非メモリアクセス演算を意味する)場合、ベータフィールド654の一部(EVEXバイト3、ビット[4]−S0)は、RLフィールド657Aとして解釈され、1(ラウンド657A.1)を含む場合、ベータフィールド654の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ラウンド演算フィールド659Aとして解釈され、RLフィールド657Aが0(VSIZE657.A2)を含む場合、ベータフィールド654の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド659B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1、かつMODフィールド742が(メモリアクセス演算を意味する)00、01または10を含むとき、ベータフィールド654(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド659B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド657B(EVEXバイト3、ビット[4]−B)として解釈される。
[例示的なレジスタアーキテクチャ]
図8は、本開示の一実施形態に係るレジスタアーキテクチャ800のブロック図である。図示される実施形態には、512ビット幅の32個のベクトルレジスタ810がある。これらのレジスタは、zmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0から16上にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0から15上にオーバーレイされる。特定ベクトル向け命令フォーマット700は、これらの重なったレジスタファイルに対し、以下の表4に示されるように動作する。
図8は、本開示の一実施形態に係るレジスタアーキテクチャ800のブロック図である。図示される実施形態には、512ビット幅の32個のベクトルレジスタ810がある。これらのレジスタは、zmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0から16上にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0から15上にオーバーレイされる。特定ベクトル向け命令フォーマット700は、これらの重なったレジスタファイルに対し、以下の表4に示されるように動作する。
換言すると、ベクトル長フィールド659Bは、最大長さから1または複数の他のより短い長さまでの間から選択し、ここで、そのようなより短い長さの各々は、先述の長さの半分の長さであり、ベクトル長フィールド659Bを有さない命令テンプレートは、最大のベクトル長に対して動作する。さらに一実施形態において、特定ベクトル向け命令フォーマット700のクラスB命令テンプレートは、パックドもしくはスカラ単精度/倍精度浮動小数点データ、およびパックドもしくはスカラ整数データに対して動作する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置で実行される演算である。上位のデータ要素位置は、それらが命令前と同じままであるか、実施形態に応じてゼロにされるかのいずれかである。
ライトマスクレジスタ815:図示された実施形態では、各々が64ビットサイズの8つのライトマスクレジスタ(k0からk7)が存在する。代替的な実施形態において、ライトマスクレジスタ815は、16ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタk0は、ライトマスクとして用いられることができず、通常k0を示すエンコードがライトマスクに用いられる場合、0xFFFFのハードワイヤに組み込まれるライトマスクを選択することで、その命令に対するライトマスキングを効果的に無効にする。
汎用レジスタ825:図示された実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレッシングモードと共に使用される16個の64ビット汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15の名前で参照される。
MMXパック整数フラットレジスタファイル850がエイリアスされる、スカラー浮動小数点スタックレジスタファイル(x87スタック)845:図示される実施形態では、x87スタックは、x87命令セット拡張子を使用して32/64/80ビット浮動小数点データに対してスカラー浮動小数点演算を実行するために使用される8要素スタックである。MMXレジスタは、64ビットパック整数データに対して演算を実行するため、ならびにMMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のためにオペランドを保持するために、使用される。
本開示の複数の代替的な実施形態は、より広いまたはより狭い複数のレジスタを用いてよい。更に、本開示の複数の代替的な実施形態は、より多くの、より少ない、または異なる複数のレジスタファイルおよび複数のレジスタを用いてよい。
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサにおいて実装され得る。例えば、そのようなコアの実装形態には、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/または科学(スループット)コンピューティング向けの専用コアが含まれてもよい。異なるプロセッサの実装形態には、1)汎用コンピューティング向けの1つもしくは複数の汎用インオーダコアおよび/または汎用コンピューティング用の1つもしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックスおよび/または科学(スループット)向けの1つまたは複数の専用コアを含むコプロセッサが含まれてもよい。そのような異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、そのようなコンピュータシステムアーキテクチャには、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの専用ロジック、または専用コアと呼ばれることがある)、ならびに4)同一のダイ上に(アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある)説明されたCPU、上述したコプロセッサ、および追加の機能を含んでもよいシステムオンチップが含まれてもよい。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサにおいて実装され得る。例えば、そのようなコアの実装形態には、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/または科学(スループット)コンピューティング向けの専用コアが含まれてもよい。異なるプロセッサの実装形態には、1)汎用コンピューティング向けの1つもしくは複数の汎用インオーダコアおよび/または汎用コンピューティング用の1つもしくは複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィックスおよび/または科学(スループット)向けの1つまたは複数の専用コアを含むコプロセッサが含まれてもよい。そのような異なるプロセッサは異なるコンピュータシステムアーキテクチャをもたらし、そのようなコンピュータシステムアーキテクチャには、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/または科学(スループット)ロジックなどの専用ロジック、または専用コアと呼ばれることがある)、ならびに4)同一のダイ上に(アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある)説明されたCPU、上述したコプロセッサ、および追加の機能を含んでもよいシステムオンチップが含まれてもよい。例示的なコアアーキテクチャが次に説明され、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
[例示的なコアアーキテクチャインオーダおよびアウトオブオーダコアのブロック図]
図9Aは、本開示の複数の実施形態に係る例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図9Bは、本開示の複数の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図9A−Bの実線ボックスはインオーダパイプラインおよびインオーダコアを示し、破線ボックスの任意選択の追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図9Aは、本開示の複数の実施形態に係る例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図9Bは、本開示の複数の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図9A−Bの実線ボックスはインオーダパイプラインおよびインオーダコアを示し、破線ボックスの任意選択の追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様が説明される。
図9Aにおいて、プロセッサパイプライン900は、フェッチステージ902、長さデコードステージ904、デコードステージ906、割り当てステージ908、リネーミングステージ910、スケジューリング(ディスパッチまたは発行としても知られる)ステージ912、レジスタ読み取り/メモリ読み出しステージ914、実行ステージ916、ライトバック/メモリ書き込みステージ918、例外処理ステージ922およびコミットステージ924を含む。
図9Bは、実行エンジンユニット950に結合されるフロントエンドユニット930を含むプロセッサコア990を示し、それらの両方が、メモリユニット970に結合される。コア990は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってもよい。さらに別の選択肢として、コア990は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コアまたはグラフィックスコアなどの特別用途コアであってよい。
フロントエンドユニット930は、命令キャッシュユニット934に結合された分岐予測ユニット932を含み、命令キャッシュユニット934は、命令トランスレーションルックアサイドバッファ(TLB)936に結合され、TLB936は、命令フェッチユニット938に結合され、命令フェッチユニット938は、デコードユニット940に結合される。デコードユニット940(またはデコーダもしくはデコーダユニット)は、複数の命令(例えばマクロ命令)を復号し、1つまたは複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令からデコードされ、または他の方法でこれを反映し、またはこれから派生した他の制御信号を、出力として生成してよい。デコードユニット940は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例には、参照テーブル、ハードウェア実装、プログラマブルロジック配列(PLA)、マイクロコード読み出し専用メモリ(ROM)などが含まれるが、それらに限定されない。一実施形態において、コア990は、マイクロコードROM、または、特定のマクロ命令に対するマイクロコードを格納する(例えば、デコードユニット940における、そうでなければ、フロントエンドユニット930内の)他のメディアを含む。デコードユニット940は、実行エンジンユニット950におけるリネーム/アロケータユニット952に結合される。
実行エンジンユニット950は、リタイアメントユニット954および1または複数のスケジューラユニット(複数可)956のセットに結合されるリネーム/アロケータユニット952を含む。スケジューラユニット956は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット956は、物理レジスタファイルユニット958に結合されている。物理レジスタファイルユニット958のそれぞれは、1または複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)など、1つまたは複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット958は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイルユニット958は、リタイアメントユニット954が重ね合わされており、レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファおよびリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、およびリタイアメントレジスタファイルを用いる、並びにレジスタマップおよびレジスタのプールを用いるなどして)実装され得る様々な態様を示す。リタイアメントユニット954および物理レジスタファイルユニット958は、実行クラスタ960に結合されている。実行クラスタ960は、1または複数の実行ユニット962のセットと、1または複数のメモリアクセスユニット964のセットとを含む。実行ユニット962は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してよい。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでもよいが、他の実施形態は、ただ1つの実行ユニットまたはすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。特定の実施形態は、特定のタイプのデータ/演算に対して別個のパイプラインを形成するので、スケジューラユニット956、物理レジスタファイルユニット958、および実行クラスタ960は、可能性として複数であると示されている(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプラインはそれぞれ、独自のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット964を有する特定の実施形態が実装される)。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数がアウトオブオーダ発行/実行であり、残りがインオーダであり得ることも理解されるべきである。
メモリアクセスユニット964のセットは、メモリユニット970に結合され、それは、レベル2(L2)キャッシュユニット976に結合されるデータキャッシュユニット974に結合されるデータTLBユニット972を含む。例示的な一実施形態では、メモリアクセスユニット964が、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含み得、それらのそれぞれが、メモリユニット970内のデータTLBユニット972に結合される。命令キャッシュユニット934は、メモリユニット970内のレベル2(L2)キャッシュユニット976にさらに結合される。L2キャッシュユニット976は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーミング・アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン900を以下のように実装してよい。すなわち、1)命令フェッチ938がフェッチステージ902およびレングスデコードステージ904を実行する。2)デコードユニット940がデコードステージ906を実行する。3)リネーム/アロケータユニット952が割り当てステージ908およびリネーミングステージ910を実行する。4)スケジューラユニット956がスケジュールステージ912を実行する。5)物理レジスタファイルユニット958およびメモリユニット970がレジスタ読み取り/メモリ読み出しステージ914を実行する。実行クラスタ960が実行ステージ916を実行する。6)メモリユニット970および物理レジスタファイルユニット958がライトバック/メモリ書き込みステージ918を実行する。7)様々なユニットが例外処理ステージ922に関与し得る。8)リタイアメントユニット954および物理レジスタファイルユニット958がコミットステージ924を実行する。
コア990は、本明細書で説明される命令を含む、1または複数の命令セット(例えば、x86命令セット(新しいバージョンで追加されたいくつかの拡張機能付き)、カリフォルニア州サニーベールのMIPSテクノロジーのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEONなどの任意選択追加拡張)をサポートしてもよい。一実施形態では、コア990は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションによって使用される演算がパックドデータを使用して実行されることを可能にする。
コアはマルチスレッディング(2つ以上の演算またはスレッドの並列セットを実行)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよび復号、並びにその後のインテルハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な態様でサポートしてよいことが理解されたい。
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャで使用されてもよいことを理解されたい。示されたプロセッサの実施形態はまた、別個の命令キャッシュユニット934とデータキャッシュユニット974、並びに共有L2キャッシュユニット976を含むが、代替的な実施形態は、命令およびデータの両方に対して、例えばレベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
図10A−Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)の1つになるであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに応じて、いくつかの固定機能ロジック、メモリI/Oインタフェースおよび他の必要なI/Oロジックと通信する。
図10A−Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)の1つになるであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに応じて、いくつかの固定機能ロジック、メモリI/Oインタフェースおよび他の必要なI/Oロジックと通信する。
図10Aは、本開示の複数の実施形態に係る、オンダイの相互接続ネットワーク1002へのその接続、およびレベル2(L2)キャッシュ1004のそのローカルサブセットを加えた、単一のプロセッサコアのブロック図である。一実施形態において、命令デコードユニット1000は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1006は、キャッシュメモリへの低レイテンシアクセスがスカラユニットおよびベクトルユニットに入ることを可能にする。一実施形態では、(設計を簡略化するために)、スカラユニット1008およびベクトルユニット1010は、別個のレジスタセット(それぞれ、スカラレジスタ1012およびベクトルレジスタ1014)を用いており、それらの間を転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ1006からリードバックされるが、本開示の複数の代替的な実施形態では、異なるアプローチ(例えば、単一のレジスタセットを用いる、または、書き込まれることもリードバックされることもなく2つのレジスタファイル間でデータが転送されることを可能にする通信パスを含む)を用いてよい。
L2キャッシュ1004のローカルサブセットは、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1004の自身のローカルサブセットへの直接のアクセス経路を有する。プロセッサコアにより読み出されたデータは、L2キャッシュサブセット1004に格納され、他のプロセッサコアが独自のローカルL2キャッシュサブセットにアクセスするのと並列して、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット1004に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、双方向性であり、プロセッサコア、L2キャッシュおよび他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータパスは、一方向当たり1012ビット幅である。
図10Bは、本開示の複数の実施形態に係る図10Aにおけるプロセッサコアの一部の拡大図である。図10Bは、L1キャッシュ1004の一部であるL1データキャッシュ1006Aと、ベクトルユニット1010およびベクトルレジスタ1014に関するより詳細とを含む。具体的には、ベクトルユニット1010は16幅のベクトル処理ユニット(VPU)(16幅のALU1028を参照)であり、整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1または複数を実行する。VPUは、スウィズルユニット1020を用いたレジスタ入力のスウィズル処理、数値変換ユニット1022A‐Bを用いた数値変換、並びに複製ユニット1024を用いたメモリ入力の複製をサポートする。ライトマスクレジスタ1026は、結果として生じるベクトルライトをプレディケートすることを可能にする。
図11は、本開示の複数の実施形態に係る、1つより多くのコアを有し得、統合メモリコントローラを有し得、かつ統合グラフィックを有し得る、プロセッサ1100のブロック図である。図11の実線ボックスは、単一のコア1102A、システムエージェント1110、1つまたは複数のバスコントローラユニット1116のセットを有するプロセッサ1100を示し、任意選択の追加の破線ボックスは、複数のコア1102Aから1102N、システムエージェントユニット1110内にある1つまたは複数の統合メモリコントローラユニット1114のセット、および専用ロジック1108を有する代替のプロセッサ1100を示す。
故に、プロセッサ1100の異なる実装は、1)(1つまたは複数のコアを含み得る)統合グラフィックおよび/または科学的(スループット)ロジックである専用ロジック1108、ならびに1つまたは複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、それらの2つの組み合わせ)であるコア1102A‐Nを有するCPU、2)主にグラフィックスおよび/または科学的(スループット)向けの多数の専用コアであるコア1102A‐Nを有するコプロセッサ、なおかつ3)多数の汎用インオーダコアであるコア1102A‐Nを有するコプロセッサを含み得る。故に、プロセッサ1100は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多数統合コア(MIC)コプロセッサ(30個またはそれより多くのコアを含む)、組み込みプロセッサなどであってもよい。プロセッサは、1または複数のチップ上に実装されてもよい。プロセッサ1100は、例えば、BiCMOS、CMOS、またはNMOSなどの多数のプロセス技術のいずれかを用いる1または複数の基板の一部であってよく、および/または当該基板上に実装されてもよい。
メモリ階層は、コア、1または複数の共有キャッシュユニット1106のセット、および1組の統合メモリコントローラユニット1114に結合される外部メモリ(不図示)内に1または複数のレベルのキャッシュを含む。共有キャッシュユニット1106のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)などの、1つまたは複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態では、リングベースの相互接続ユニット1112が、統合グラフィックスロジック1108、共有キャッシュユニット1106のセット、およびシステムエージェントユニット1110/統合メモリコントローラユニット1114を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の周知の技術を用いてよい。一実施形態において、1または複数のキャッシュユニット1106と、コア1102A‐1102Nとの間でコヒーレンシが保持される。
いくつかの実施形態では、コア1102A‐Nのうちの1または複数がマルチスレッディング可能である。システムエージェント1110は、コア1102A‐Nを調整し動作させるそれらのコンポーネントを含む。システムエージェントユニット1110は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア1102A−Nおよび統合グラフィックスロジック1108の電力状態を調整するのに必要なロジックおよびコンポーネントであってよく、または当該ロジックおよび当該コンポーネントを含んでもよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア1102A−Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア1102A−Nのうち2つまたはそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセットまたは別の命令セットだけを実行することが可能であってもよい。
[例示的なコンピュータアーキテクチャ]
図12−図15は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスについて当技術分野において既知の他のシステム設計および構成もまた好適である。一般に、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般に好適である。
図12−図15は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスについて当技術分野において既知の他のシステム設計および構成もまた好適である。一般に、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが一般に好適である。
ここで、図12を参照すると、本開示の一実施形態によるシステム1200のブロック図が示される。システム1200は、1または複数のプロセッサ1210、1215を含んでよく、これらはコントローラハブ1220に結合されている。一実施形態において、コントローラハブ1220は、グラフィックスメモリコントローラハブ(GMCH)1290および入出力ハブ(IOH)1250(別個のチップ上にあり得る)を含む。GMCH1290は、メモリおよびグラフィックコントローラを含み、これらにメモリ1240およびコプロセッサ1245が結合される。IOH1250は、入/出力(I/O)デバイス1260をGMCH1290に結合する。代替的に、メモリおよびグラフィックコントローラのうち一方または両方は、(本明細書において説明されるように)プロセッサ内に統合され、メモリ1240およびコプロセッサ1245は、プロセッサ1210と、IOH1250を有する単一チップ内のコントローラハブ1220とに直接結合される。メモリ1240は、例えば、実行時にプロセッサに本開示の任意の方法を実行させるコードを格納するために、ノンライトバックロック無効化コード1240Aを含み得る。
任意選択的な性質の追加のプロセッサ1215が、破線を用いて図12に示される。各プロセッサ1210、1215は、本明細書で説明される処理コアのうちの1または複数を含んでよく、何らかのバージョンのプロセッサ1100であってよい。
メモリ1240は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこの2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ1220は、フロントサイドバス(FSB)などのマルチドロップバス、クイックパス相互接続(QPI)などのポイントツーポイントインタフェース、または同様の接続1295を介してプロセッサ1210、1215と通信する。
一実施形態では、コプロセッサ1245が、専用プロセッサ、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ、または同様のものなどである。一実施形態では、コントローラハブ1220は統合グラフィックスアクセラレータを含んでよい。
物理リソース1210、1215の間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む幅広い価値基準に関して、様々な差異が存在し得る。
一実施形態では、プロセッサ1210が、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内には、コプロセッサ命令が埋め込まれていてもよい。プロセッサ1210は、これらのコプロセッサ命令を、付属のコプロセッサ1245が実行すべきタイプの命令であると認識する。従って、プロセッサ1210は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他の相互接続を使ってコプロセッサ1245に発行する。コプロセッサ1245は、受信したコプロセッサ命令を受け取って実行する。
ここで、図13を参照すると、本開示の実施形態に係る第1のより具体的な例示的システム1300のブロック図が示される。図13に示されるように、マルチプロセッサシステム1300はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1350を介して結合される第1のプロセッサ1370と、第2のプロセッサ1380とを含む。プロセッサ1370および1380のそれぞれは、何らかのバージョンのプロセッサ1100であってよい。本開示の一実施形態において、プロセッサ1370および1380は、それぞれ、プロセッサ1210および1215であり、コプロセッサ1338は、コプロセッサ1245である。別の実施形態において、プロセッサ1370および1380はそれぞれプロセッサ1210およびコプロセッサ1245である。
プロセッサ1370およびプロセッサ1380は、それぞれ、統合メモリコントローラ(IMC)ユニット1372および統合メモリコントローラ(IMC)ユニット1382を含むものとして示されている。プロセッサ1370はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1376および1378を含み、同様に第2のプロセッサ1380はP−Pインタフェース1386および1388を含む。プロセッサ1370、1380は、ポイントツーポイント(P−P)インタフェース1350を介し、P−Pインタフェース回路1378、1388を用いて情報を交換してよい。図13に示されるように、IMC1372および1382は、プロセッサをそれぞれのメモリ、すなわちメモリ1332およびメモリ1334に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの部分であってよい。
プロセッサ1370、1380はそれぞれ、個々のP−Pインタフェース1352、1354を介し、ポイントツーポイントインタフェース回路1376、1394、1386、1398を用いてチップセット1390と情報を交換してよい。チップセット1390は、任意選択で、高性能インターフェース1339を介してコプロセッサ1338と情報を交換してもよい。一実施形態では、コプロセッサ1338は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどのような専用プロセッサである。
いずれかのプロセッサまたは両方のプロセッサの外部には、共有キャッシュ(不図示)が含まれてもよく、しかもP−P相互接続を介してこれらのプロセッサと接続され、よって、プロセッサが低電力モードに配置されれば、一方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得る。
チップセット1390は、インタフェース1396を介して第1のバス1316に結合されてよい。一実施形態において、第1のバス1316はペリフェラルコンポーネントインターコネクト(PCI)バス、すなわちPCI Expressバス若しくは別の第3世代I/O相互接続バスなどのバスであってよいが、本開示の範囲はそのようには限定されない。
図13に示されるように、様々なI/Oデバイス1314が、第1のバス1316を第2のバス1320に結合するバスブリッジ1318と共に、第1のバス1316に結合され得る。一実施形態において、1または複数の追加のプロセッサ1315が第1のバス1316に結合される。追加のプロセッサとは、コプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ、またはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、またはその他のプロセッサなどである。一実施形態では、第2のバス1320はローピンカウント(LPC)バスであってよい。様々なデバイスが第2のバス1320に結合されてよく、一実施形態では、そのようなデバイスには例えば、キーボードおよび/またはマウス1322、通信デバイス1327、及びストレージユニット1328が含まれ、ストレージユニットには、命令/コード及びデータ1330を含み得るディスクドライブまたは他の大容量ストレージデバイスなどがある。さらに、オーディオI/O1324が第2のバス1320に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図13のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装してよい。
ここで、図14を参照すると、本開示の実施形態に係る第2のより具体的な例示的システム1400のブロック図が示される。図13および図14内の同様の要素は同様の参照番号を有しており、図13の特定の態様が、図14の他の態様を不明瞭にするのを避けるために、図14から省略されている。
図14は、プロセッサ1370、1380が、統合メモリを含み、またI/O制御ロジック(「CL」)1372および1382をそれぞれ含んでよいことを示す。したがって、CL1372、1382は統合メモリコントローラユニットを含み、且つI/O制御ロジックを含む。図14は、メモリ1332、1334だけがCL1372、1382に結合されているのでなく、I/Oデバイス1414もまた、制御ロジック1372、1382に結合されていることを示している。レガシI/Oデバイス1415がチップセット1390に結合されている。
ここで、図15を参照すると、本開示の実施形態に係るSoC1500のブロック図が示される。図11の同様の要素は、同様の参照番号を有している。また、破線ボックスは、次世代SoCs上の任意選択的な特徴である。図15において、相互接続ユニット1502が、1つ又は複数のコア202A−N及び共有キャッシュユニット1106のセットを含むアプリケーションプロセッサ1510と、システムエージェントユニット1110と、バスコントローラユニット1116と、統合メモリコントローラユニット1114と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得るコプロセッサ1520のセットあるいは1つ又は複数のコプロセッサ1520と、スタティックランダムアクセスメモリ(SRAM)ユニット1530と、ダイレクトメモリアクセス(DMA)ユニット1532と、1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット1540とに結合されている。一実施形態では、コプロセッサ1520は専用プロセッサを含み、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどがある。
本明細書に開示される(例えば、メカニズムの)実施形態は、ハードウェア、ソフトウェア、ファームウェア又はそのような実装アプローチの組み合わせで実装されてよい。本開示の複数の実施形態では、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装されてよい。
図13に示されるコード1330などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する命令を入力するのに適用されてよい。出力情報は、1または複数の出力デバイスに既知の方式で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向のプログラミング言語で実装されてもよい。プログラムコードはまた、必要な場合、アセンブリ言語または機械語で実装されてもよい。実際には、本明細書で説明されたメカニズムは、いかなる特定のプログラミング言語にも範囲が限定されない。いずれの場合でも、言語は、コンパイル型言語またはインタープリタ型言語であってよい。
少なくとも一実施形態の1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的命令によって実装されてもよく、機械可読媒体は、機械によって読み取られると、機械に本明細書で説明された技術を実行するようにロジックを組み立てさせる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に記憶され、実際にロジックまたはプロセッサを作成する製造機械にロードするために様々な顧客または製造設備に供給されてもよい。
そのような機械可読記憶媒体には、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RWs)、および光磁気ディスクを含む任意の他のタイプのディスク、読み出し専用メモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラム可能型読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能型読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気カードもしくは光学式カード、または電子命令を記憶するのに好適な任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成された物品の非一時的な有形の構成が含まれてもよいが、それらに限定されない。
従って、本開示の複数の実施形態は、複数の命令を含み、又は本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサおよび/またはシステムの複数の特徴を定義するハードウェア記述言語(HDL)のような設計データを含む、非一時的な有形の機械可読媒体をもさらに含む。そのような実施形態は、また、プログラム製品と称され得る。
[エミュレーション(バイナリ変換、コードモーフィング等を含む)]
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令をコアによって処理されるべき1または複数の他の命令に変換し(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィングし、エミュレートし、または別の方法で変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせに実装されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、又は一部がオンプロセッサで一部がオフプロセッサであってよい。
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令をコアによって処理されるべき1または複数の他の命令に変換し(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィングし、エミュレートし、または別の方法で変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせに実装されてもよい。命令コンバータは、オンプロセッサ、オフプロセッサ、又は一部がオンプロセッサで一部がオフプロセッサであってよい。
図16は、本開示の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図16は、高水準言語1602のプログラムがx86コンパイラ1604を用いてコンパイルされ、少なくとも1つのx86命令セットコアを持つプロセッサ1616によってネイティブに実行され得るx86バイナリコード1606を生成し得ることを示す。少なくとも1つのx86命令セットコアを持つプロセッサ1616は、少なくとも1つのx86命令セットコアを持つインテルプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも1つのx86命令セットコアを持つインテルプロセッサと実質的に同一の結果を得るべく、(1)インテルx86命令セットコアの命令セットの実質的部分、または(2)少なくとも1つのx86命令セットコアを持つインテルプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換的に実行またはそれ以外の方法で処理することによってである。x86コンパイラ1604は、追加のリンク処理を用いて、又は用いることなく、少なくとも1つのx86命令セットコアを持つプロセッサ1616上で実行可能なx86バイナリコード1606(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図16は、高水準言語1602のプログラムが、代替的な命令セットバイナリコード1610を生成する代替的な命令セットコンパイラ1608を使用してコンパイルされ得ることを示しており、当該代替的な命令セットバイナリコード1610は、少なくとも1つのx86命令セットコアを持たないプロセッサ1614(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ1612は、x86バイナリコード1606を、x86命令セットコアを持たないプロセッサ1614によってネイティブに実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1610と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは、製造が困難だからである。しかしながら、変換されたコードは、一般的な演算を実現し、代替的な命令セットからの命令で構成される。故に、命令コンバータ1612は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、x86バイナリコード1606を実行できるようにする。
[他の可能なクレーム]
(項目1)
複数の論理プロセッサと、
ノンライトバックロック無効化ビットを備える制御レジスタと、
上記複数の論理プロセッサによって共有されるキャッシュと、
上記キャッシュをメモリに結合して、上記複数の論理プロセッサから上記メモリに対するメモリ要求を処理するバスと、
上記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、上記複数の論理プロセッサのうちの論理プロセッサによって発行された上記メモリ要求の読み取り−変更−書き込みタイプの上記バスのノンライトバックロックアクセスを無効にし、上記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを実装するメモリコントローラと、を備える装置。
(項目2)
上記メモリコントローラは、上記ノンライトバックロックアクセスを無効にするために一般保護違反を生成する、項目1に記載の装置。
(項目3)
上記制御レジスタは、メモリ制御レジスタである、項目1に記載の装置。
(項目4)
上記メモリ制御レジスタのアドレスは16進数33である、項目3に記載の装置。
(項目5)
第1の値に設定されると、上記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、第2の値に設定されると、上記複数の論理プロセッサが上記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す、機能ビットを含む機能レジスタをさらに備える、項目1に記載の装置。
(項目6)
上記メモリコントローラは、キャッシュ無効化ビットが第2の制御レジスタ内の値に設定されて上記キャッシュを無効化する場合、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、項目1に記載の装置。
(項目7)
上記メモリコントローラは、拡張ページテーブルが有効であり、メモリタイプがノンライトバックに設定されている場合、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない、項目1に記載の装置。
(項目8)
上記複数の論理プロセッサは、複数のプロセッサコアである、項目1に記載の装置。
(項目9)
プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、バスを介してメモリに結合されたキャッシュを共有する上記プロセッサの上記複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、メモリコントローラを備えた上記メモリのために上記複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、上記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、上記メモリコントローラで上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の読み取り−変更−書き込みタイプの上記バスのノンライトバックロックアクセスを無効にする段階と、上記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、上記メモリコントローラで上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを実装する段階と、を備える方法。
(項目10)
上記ノンライトバックロックアクセスを無効にすることは、一般保護違反を生成することを含む、項目9に記載の方法。
(項目11)
上記制御レジスタは、メモリ制御レジスタである、項目9に記載の方法。
(項目12)
上記メモリ制御レジスタのアドレスは、16進数33である、項目11に記載の方法。
(項目13)
上記プロセッサの機能レジスタの機能ビットを第1の値に設定して上記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、上記機能ビットを第2の値に設定して、上記複数の論理プロセッサが上記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す段階をさらに備える、項目9に記載の方法。
(項目14)
第2の制御レジスタ内のキャッシュ無効化ビットを上記キャッシュを無効化する値に設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行されたメモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、項目9に記載の方法。
(項目15)
上記複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、項目9に記載の方法。
(項目16)
上記複数の論理プロセッサは、複数のプロセッサコアである、項目9に記載の方法。
(項目17)
機械によって実行されたときに、上記機械に、
プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、
バスを介してメモリに結合されたキャッシュを共有する上記プロセッサの上記複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、
メモリコントローラを備えた上記メモリのために上記複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、
上記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、上記メモリコントローラで上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の読み取り−変更−書き込みタイプの上記バスのノンライトバックロックアクセスを無効にする段階と、
上記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、上記メモリコントローラで上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを実装する段階と、
を含む方法を実行させるコードを格納する非一時的な機械可読媒体。
(項目18)
上記ノンライトバックロックアクセスを無効にすることは、一般保護違反を生成することを含む、項目17に記載の非一時的な機械可読媒体。
(項目19)
上記制御レジスタは、メモリ制御レジスタである、項目17に記載の非一時的な機械可読媒体。
(項目20)
上記メモリ制御レジスタのアドレスは、16進数33である、項目19に記載の非一時的な機械可読媒体。
(項目21)
上記プロセッサの機能レジスタの機能ビットを第1の値に設定して上記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、上記機能ビットを第2の値に設定して、上記複数の論理プロセッサが上記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す段階をさらに備える、項目17に記載の非一時的な機械可読媒体。
(項目22)
第2の制御レジスタ内のキャッシュ無効化ビットを上記キャッシュを無効化する値に設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、項目17に記載の非一時的な機械可読媒体。
(項目23)
上記複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない段階をさらに備える、項目17に記載の非一時的な機械可読媒体。
(項目24)
上記複数の論理プロセッサは、複数のプロセッサコアである、項目17に記載の非一時的な機械可読媒体。
[他の可能なクレーム]
(項目1)
複数の論理プロセッサと、
ノンライトバックロック無効化ビットを備える制御レジスタと、
上記複数の論理プロセッサによって共有されるキャッシュと、
上記キャッシュをメモリに結合して、上記複数の論理プロセッサから上記メモリに対するメモリ要求を処理するバスと、
上記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、上記複数の論理プロセッサのうちの論理プロセッサによって発行された上記メモリ要求の読み取り−変更−書き込みタイプの上記バスのノンライトバックロックアクセスを無効にし、上記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを実装するメモリコントローラと、を備える装置。
(項目2)
上記メモリコントローラは、上記ノンライトバックロックアクセスを無効にするために一般保護違反を生成する、項目1に記載の装置。
(項目3)
上記制御レジスタは、メモリ制御レジスタである、項目1に記載の装置。
(項目4)
上記メモリ制御レジスタのアドレスは16進数33である、項目3に記載の装置。
(項目5)
第1の値に設定されると、上記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、第2の値に設定されると、上記複数の論理プロセッサが上記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す、機能ビットを含む機能レジスタをさらに備える、項目1に記載の装置。
(項目6)
上記メモリコントローラは、キャッシュ無効化ビットが第2の制御レジスタ内の値に設定されて上記キャッシュを無効化する場合、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、項目1に記載の装置。
(項目7)
上記メモリコントローラは、拡張ページテーブルが有効であり、メモリタイプがノンライトバックに設定されている場合、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない、項目1に記載の装置。
(項目8)
上記複数の論理プロセッサは、複数のプロセッサコアである、項目1に記載の装置。
(項目9)
プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、バスを介してメモリに結合されたキャッシュを共有する上記プロセッサの上記複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、メモリコントローラを備えた上記メモリのために上記複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、上記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、上記メモリコントローラで上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の読み取り−変更−書き込みタイプの上記バスのノンライトバックロックアクセスを無効にする段階と、上記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、上記メモリコントローラで上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを実装する段階と、を備える方法。
(項目10)
上記ノンライトバックロックアクセスを無効にすることは、一般保護違反を生成することを含む、項目9に記載の方法。
(項目11)
上記制御レジスタは、メモリ制御レジスタである、項目9に記載の方法。
(項目12)
上記メモリ制御レジスタのアドレスは、16進数33である、項目11に記載の方法。
(項目13)
上記プロセッサの機能レジスタの機能ビットを第1の値に設定して上記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、上記機能ビットを第2の値に設定して、上記複数の論理プロセッサが上記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す段階をさらに備える、項目9に記載の方法。
(項目14)
第2の制御レジスタ内のキャッシュ無効化ビットを上記キャッシュを無効化する値に設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行されたメモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、項目9に記載の方法。
(項目15)
上記複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、項目9に記載の方法。
(項目16)
上記複数の論理プロセッサは、複数のプロセッサコアである、項目9に記載の方法。
(項目17)
機械によって実行されたときに、上記機械に、
プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、
バスを介してメモリに結合されたキャッシュを共有する上記プロセッサの上記複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、
メモリコントローラを備えた上記メモリのために上記複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、
上記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、上記メモリコントローラで上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の読み取り−変更−書き込みタイプの上記バスのノンライトバックロックアクセスを無効にする段階と、
上記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、上記メモリコントローラで上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを実装する段階と、
を含む方法を実行させるコードを格納する非一時的な機械可読媒体。
(項目18)
上記ノンライトバックロックアクセスを無効にすることは、一般保護違反を生成することを含む、項目17に記載の非一時的な機械可読媒体。
(項目19)
上記制御レジスタは、メモリ制御レジスタである、項目17に記載の非一時的な機械可読媒体。
(項目20)
上記メモリ制御レジスタのアドレスは、16進数33である、項目19に記載の非一時的な機械可読媒体。
(項目21)
上記プロセッサの機能レジスタの機能ビットを第1の値に設定して上記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、上記機能ビットを第2の値に設定して、上記複数の論理プロセッサが上記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す段階をさらに備える、項目17に記載の非一時的な機械可読媒体。
(項目22)
第2の制御レジスタ内のキャッシュ無効化ビットを上記キャッシュを無効化する値に設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、項目17に記載の非一時的な機械可読媒体。
(項目23)
上記複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、上記メモリコントローラは、上記ノンライトバックロック無効化ビットが上記第1の値に設定されている場合に、上記複数の論理プロセッサのうちの上記論理プロセッサによって発行された上記メモリ要求の上記読み取り−変更−書き込みタイプの上記バスの上記ノンライトバックロックアクセスを無効化しない段階をさらに備える、項目17に記載の非一時的な機械可読媒体。
(項目24)
上記複数の論理プロセッサは、複数のプロセッサコアである、項目17に記載の非一時的な機械可読媒体。
Claims (25)
- 複数の論理プロセッサと、
ノンライトバックロック無効化ビットを備える制御レジスタと、
前記複数の論理プロセッサによって共有されるキャッシュと、
前記キャッシュをメモリに結合して、前記複数の論理プロセッサから前記メモリに対するメモリ要求を処理するバスと、
前記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、前記複数の論理プロセッサのうちの論理プロセッサによって発行された前記メモリ要求の読み取り−変更−書き込みタイプの前記バスのノンライトバックロックアクセスを無効にし、前記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、前記メモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを実装するメモリコントローラと、
を備える装置。 - 前記メモリコントローラは、前記ノンライトバックロックアクセスを無効にするために一般保護違反を生成する、請求項1に記載の装置。
- 前記制御レジスタは、メモリ制御レジスタである、請求項1または2に記載の装置。
- 前記メモリ制御レジスタのアドレスは16進数33である、請求項3に記載の装置。
- 第1の値に設定されると、前記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、第2の値に設定されると、前記複数の論理プロセッサが前記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す、機能ビットを含む機能レジスタをさらに備える、請求項1から4のいずれか1項に記載の装置。
- 前記メモリコントローラは、キャッシュ無効化ビットが第2の制御レジスタ内の値に設定されて前記キャッシュを無効化する場合、前記ノンライトバックロック無効化ビットが前記第1の値に設定されている場合に、前記複数の論理プロセッサのうちの前記論理プロセッサによって発行された前記メモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを無効化しない、請求項1から5のいずれか1項に記載の装置。
- 前記メモリコントローラは、拡張ページテーブルが有効であり、メモリタイプがノンライトバックに設定されている場合、前記ノンライトバックロック無効化ビットが前記第1の値に設定されている場合に、前記複数の論理プロセッサのうちの前記論理プロセッサによって発行された前記メモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを無効化しない、請求項1から6のいずれか1項に記載の装置。
- 前記複数の論理プロセッサは、複数のプロセッサコアである、請求項1から7のいずれか1項に記載の装置。
- プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する段階と、
バスを介してメモリに結合されたキャッシュを共有する前記プロセッサの前記複数の論理プロセッサのそれぞれとそれぞれの動作を実行する段階と、
メモリコントローラを備えた前記メモリのために前記複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する段階と、
前記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、前記メモリコントローラで前記複数の論理プロセッサのうちの前記論理プロセッサによって発行された前記メモリ要求の読み取り−変更−書き込みタイプの前記バスのノンライトバックロックアクセスを無効にする段階と、
前記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、前記メモリコントローラで前記メモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを実装する段階と、
を備える方法。 - 前記ノンライトバックロックアクセスを前記無効にすることは、一般保護違反を生成することを含む、請求項9に記載の方法。
- 前記制御レジスタは、メモリ制御レジスタである、請求項9または10に記載の方法。
- 前記メモリ制御レジスタのアドレスは、16進数33である、請求項11に記載の方法。
- 前記プロセッサの機能レジスタの機能ビットを第1の値に設定して前記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、前記機能ビットを第2の値に設定して、前記複数の論理プロセッサが前記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す段階をさらに備える、請求項9から12のいずれか1項に記載の方法。
- 第2の制御レジスタ内のキャッシュ無効化ビットを前記キャッシュを無効化する値に設定する段階であって、前記メモリコントローラは、前記ノンライトバックロック無効化ビットが前記第1の値に設定されている場合に、前記複数の論理プロセッサのうちの前記論理プロセッサによって発行されたメモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、請求項9から13のいずれか1項に記載の方法。
- 前記複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する段階であって、前記メモリコントローラは、前記ノンライトバックロック無効化ビットが前記第1の値に設定されている場合に、前記複数の論理プロセッサのうちの前記論理プロセッサによって発行された前記メモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを無効化しない、段階をさらに備える、請求項9から14のいずれか1項に記載の方法。
- 前記複数の論理プロセッサは、複数のプロセッサコアである、請求項9から15のいずれか1項に記載の方法。
- 機械に、
プロセッサの複数の論理プロセッサの制御レジスタにノンライトバックロック無効化ビットを設定する手順と、
バスを介してメモリに結合されたキャッシュを共有する前記プロセッサの前記複数の論理プロセッサのそれぞれとそれぞれの動作を実行する手順と、
メモリコントローラを備えた前記メモリのために前記複数の論理プロセッサのうちの論理プロセッサからメモリ要求を受信する手順と、
前記ノンライトバックロック無効化ビットが第1の値に設定されている場合に、前記メモリコントローラで前記複数の論理プロセッサのうちの前記論理プロセッサによって発行された前記メモリ要求の読み取り−変更−書き込みタイプの前記バスのノンライトバックロックアクセスを無効にする手順と、
前記ノンライトバックロック無効化ビットが第2の値に設定されている場合に、前記メモリコントローラで前記メモリ要求の前記読み取り−変更−書き込みタイプの前記バスの前記ノンライトバックロックアクセスを実装する手順と、
実行させるためのプログラム。 - 前記ノンライトバックロックアクセスを前記無効にすることは、一般保護違反を生成することを含む、請求項17に記載のプログラム。
- 前記制御レジスタは、メモリ制御レジスタである、請求項17または18に記載のプログラム。
- 前記メモリ制御レジスタのアドレスは、16進数33である、請求項19に記載のプログラム。
- 前記機械に、
前記プロセッサの機能レジスタの機能ビットを第1の値に設定して前記複数の論理プロセッサがノンライトバックロックアクセス無効化機能をサポートすることを示し、前記機能ビットを第2の値に設定して、前記複数の論理プロセッサが前記ノンライトバックロックアクセス無効化機能をサポートしていないことを示す手順をさらに実行させる、請求項17から20のいずれか1項に記載のプログラム。 - 前記機械に、
第2の制御レジスタ内のキャッシュ無効化ビットを前記キャッシュを無効化する値に設定する手順であって、前記メモリコントローラは、前記ノンライトバックロック無効化ビットが前記第1の値に設定されている場合に、前記複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない手順をさらに実行させる、請求項17から21のいずれか1項に記載のプログラム。 - 前記機械に、
前記複数の論理プロセッサのための拡張ページテーブルを有効化し、メモリタイプをノンライトバックに設定する手順であって、前記メモリコントローラは、前記ノンライトバックロック無効化ビットが前記第1の値に設定されている場合に、前記複数の論理プロセッサのうちの論理プロセッサによって発行されたメモリ要求の読み取り−変更−書き込みタイプのバスのノンライトバックロックアクセスを無効化しない手順をさらに実行させる、請求項17から22のいずれか1項に記載のプログラム。 - 前記複数の論理プロセッサは、複数のプロセッサコアである、請求項17から23のいずれか1項に記載のプログラム。
- 請求項17から24のいずれか1項に記載のプログラムを格納するコンピュータ可読記録媒体。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/586,028 | 2019-09-27 | ||
US16/586,028 US11301309B2 (en) | 2019-09-27 | 2019-09-27 | Apparatuses, methods, and systems for processor non-write-back capabilities |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021057005A true JP2021057005A (ja) | 2021-04-08 |
Family
ID=71083531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020103679A Pending JP2021057005A (ja) | 2019-09-27 | 2020-06-16 | プロセッサのノンライトバック機能のための装置、方法、およびシステム |
Country Status (5)
Country | Link |
---|---|
US (1) | US11301309B2 (ja) |
EP (1) | EP3798854B1 (ja) |
JP (1) | JP2021057005A (ja) |
CN (1) | CN112579158A (ja) |
TW (1) | TWI830927B (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2021140842A (ja) * | 2020-03-04 | 2021-09-16 | キオクシア株式会社 | メモリ回路、情報処理回路、及び情報処理装置 |
CN114691592A (zh) * | 2022-02-21 | 2022-07-01 | 阿里巴巴(中国)有限公司 | 处理器、控制方法、设备及介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5974508A (en) * | 1992-07-31 | 1999-10-26 | Fujitsu Limited | Cache memory system and method for automatically locking cache entries to prevent selected memory items from being replaced |
US6006299A (en) * | 1994-03-01 | 1999-12-21 | Intel Corporation | Apparatus and method for caching lock conditions in a multi-processor system |
US9183145B2 (en) | 2009-04-27 | 2015-11-10 | Intel Corporation | Data caching in a network communications processor architecture |
US8904117B1 (en) | 2012-12-21 | 2014-12-02 | Symantec Corporation | Non-shared write-back caches in a cluster environment |
US10402218B2 (en) * | 2016-08-30 | 2019-09-03 | Intel Corporation | Detecting bus locking conditions and avoiding bus locks |
US10169238B2 (en) * | 2016-09-30 | 2019-01-01 | International Business Machines Corporation | Memory access for exactly-once messaging |
-
2019
- 2019-09-27 US US16/586,028 patent/US11301309B2/en active Active
-
2020
- 2020-06-10 EP EP20179236.3A patent/EP3798854B1/en active Active
- 2020-06-15 CN CN202010542534.2A patent/CN112579158A/zh active Pending
- 2020-06-16 JP JP2020103679A patent/JP2021057005A/ja active Pending
- 2020-06-19 TW TW109120805A patent/TWI830927B/zh active
Also Published As
Publication number | Publication date |
---|---|
CN112579158A (zh) | 2021-03-30 |
EP3798854A1 (en) | 2021-03-31 |
US11301309B2 (en) | 2022-04-12 |
EP3798854B1 (en) | 2024-04-03 |
US20210096930A1 (en) | 2021-04-01 |
TWI830927B (zh) | 2024-02-01 |
TW202113608A (zh) | 2021-04-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20170118051A (ko) | 벡터 캐시 라인 라이트 백 프로세서, 방법, 시스템, 및 명령어 | |
JP6849275B2 (ja) | インデックスおよび即値を用いてベクトル置換を実行するための方法および装置 | |
EP3550437B1 (en) | Adaptive spatial access prefetcher apparatus and method | |
EP3719655B1 (en) | Apparatuses, methods, and systems to accelerate store processing | |
US20220308980A1 (en) | Apparatus and method for pausing processor trace for efficient analysis | |
EP3757767B1 (en) | Asynchronous cache flush engine to manage platform coherent and memory side caches | |
JP2021057005A (ja) | プロセッサのノンライトバック機能のための装置、方法、およびシステム | |
US10073775B2 (en) | Apparatus and method for triggered prefetching to improve I/O and producer-consumer workload efficiency | |
US11055094B2 (en) | Heterogeneous CPUID spoofing for remote processors | |
CN113204448A (zh) | 用于请求处理器核的历史重置的指令的设备、方法和系统 | |
US11934830B2 (en) | Method and apparatus for data-ready memory operations | |
EP3547118A2 (en) | Apparatus and method for processing efficient multicast operation | |
JP2017538215A (ja) | 逆分離演算を実行するための命令及びロジック | |
US11615031B2 (en) | Memory management apparatus and method for managing different page tables for different privilege levels | |
JP2022151658A (ja) | コアにおけるメモリ帯域幅制御 | |
US10095517B2 (en) | Apparatus and method for retrieving elements from a linked structure | |
JP7456570B2 (ja) | 権限横断リニアプローブに対する防護のためのシステム、方法および装置 | |
US20230205685A1 (en) | Read all zeros or random data upon a first read from volatile memory | |
EP3798824A1 (en) | Apparatus and method for store pairing with reduced hardware requirements | |
US9898408B2 (en) | Sharing aware snoop filter apparatus and method | |
JP2023048102A (ja) | 共有プリフェッチ命令およびサポート | |
JPWO2019182855A5 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230613 |