この記事は技術的すぎるため、ほとんどの読者には理解しにくいかもしれません。技術的な詳細を削除せずに、(2025年1月) |
x86アーキテクチャにおいて、CPUID命令(CPUIDオペコードで識別される)はプロセッサ補助命令(「 CPU Identification」に由来する)であり、ソフトウェアがプロセッサの詳細情報を取得できるようにします。これは、1993年にIntelによってPentiumおよび後期486プロセッサの発売時に導入されました。[ 1 ]
プログラムは を使用して、プロセッサの種類や、 MMX / SSECPUIDなどの機能が実装されているかどうかを判断できます。
歴史
この命令が一般に利用可能になる前はCPUID、プログラマーはCPUの動作のわずかな違いを利用してプロセッサーのメーカーとモデルを判別する難解なマシンコードを書いていました。 [ 2 ] [ 3 ] [ 4 ] [ 5 ] 80386プロセッサーの導入により、リセット時のEDXはリビジョンを示しましたが、これはリセット後にのみ読み取ることができ、アプリケーションが値を読み取るための標準的な方法は存在しませんでした。
x86 ファミリ以外では、開発者はほとんどの場合、CPU 設計のバリエーションを判断するために難解なプロセス (命令のタイミングや CPU 障害のトリガーを含む) を使用する必要があります。
例えば、モトローラ68000シリーズCPUIDでは、いかなる種類の命令も存在しませんでしたが、特定の命令には昇格された権限が必要でした。これらの権限によって、CPUファミリーの異なるCPUを区別することができました。モトローラ68010では、SRからのMOVE命令が特権命令になりました。68000ではSRからのMOVE命令が非特権命令として提供されていたため、CPUエラー状態をトリガーすることで、2つの異なるCPUを区別することができました。
命令は x86 アーキテクチャに固有ですがCPUID、他のアーキテクチャ (ARM など) では、規定の方法で読み取って x86 命令によって提供されるのと同じ種類の情報を取得できるオンチップ レジスタが提供されることがよくありCPUIDます。
CPUIDの呼び出し
オペコードCPUIDは です0F A2。
アセンブリ言語では、このCPUID命令はパラメータを取りません。EAXCPUIDレジスタを暗黙的に使用して、返される情報の主なカテゴリを決定します。Intelの最近の用語では、これはCPUIDリーフと呼ばれます。を最初CPUIDに呼び出す必要がありますEAX = 0。これは、CPUが実装する最大のEAX呼び出しパラメータ(リーフ)をEAXレジスタに格納するためです。
拡張機能情報を取得するには、CPUIDEAXの最上位ビットをセットして呼び出します。拡張機能呼び出しパラメータの最上位値を決定するには、 を呼び出しCPUIDますEAX = 80000000h。
CPUIDリーフのうち3以上80000000未満のものには、モデル固有レジスタのIA32_MISC_ENABLE.BOOT_NT4 [ビット22] = 0(デフォルト)が設定されている場合にのみアクセスできます。名前が示すように、Windows NT 4.0 SP6まではこのビットが設定されていないと正常に起動しませんでしたが[ 6 ]、それ以降のバージョンのWindowsではこのビットは不要であるため、現在のWindowsシステムでは4より大きい基本リーフが表示されていると想定できます。2024年4月現在、有効な基本リーフは23hまでですが、一部のリーフから返される情報は公開されているドキュメントには記載されていません。つまり、それらは「予約済み」となっています。
最近追加されたリーフの中にはサブリーフを持つものもあり、それらは を呼び出す前に ECX レジスタを介して選択されますCPUID。
EAX=0: 最高機能パラメータとメーカーID
これはCPUの製造元ID文字列(EBX、EDX、ECX(この順)に格納された12文字のASCII文字列)を返します。EAXには、呼び出し前にEAXに設定できる最大の基本呼び出しパラメータ(値CPUID)が返されます。
以下にプロセッサと実装されている最高機能の一覧を示します。
| プロセッサ | 基本 | 拡張 |
|---|---|---|
| 以前のIntel 486 | CPUIDは実装されていません | |
| その後のIntel 486とPentium | 0x01 | 実装されていません |
| Pentium Pro、Pentium II、Celeron | 0x02 | 実装されていません |
| ペンティアムIII | 0x03 | 実装されていません |
| ペンティアム4 | 0x02 | 0x8000 0004 |
| ゼオン | 0x02 | 0x8000 0004 |
| ペンティアムM | 0x02 | 0x8000 0004 |
| ハイパースレッディング対応Pentium 4 | 0x05 | 0x8000 0008 |
| ペンティアムD(8xx) | 0x05 | 0x8000 0008 |
| ペンティアムD(9xx) | 0x06 | 0x8000 0008 |
| コアデュオ | 0x0A | 0x8000 0008 |
| コア2デュオ | 0x0A | 0x8000 0008 |
| Xeon 3000、5100、5200、5300、5400(5000シリーズ) | 0x0A | 0x8000 0008 |
| Core 2 Duo 8000シリーズ | 0x0D | 0x8000 0008 |
| Xeon 5200、5400シリーズ | 0x0A | 0x8000 0008 |
| 原子 | 0x0A | 0x8000 0008 |
| Nehalemベースのプロセッサ | 0x0B | 0x8000 0008 |
| Ivy Bridgeベースのプロセッサ | 0x0D | 0x8000 0008 |
| Skylakeベースのプロセッサ (プロセッサ ベース & 最大周波数; バス参照周波数) | 0x16 | 0x8000 0008 |
| システムオンチップベンダー属性列挙メインリーフ | 0x17 | 0x8000 0008 |
| Meteor Lakeベースのプロセッサ | 0x23 | 0x8000 0008 |
既知のプロセッサ製造元 ID 文字列は次のとおりです。
"AuthenticAMD"– AMD"CentaurHauls"– IDT WinChip/ Centaur(一部のVIAおよびZhaoxin CPUを含む)"CyrixInstead"–サイリックス/ 初期のSTマイクロエレクトロニクスとIBM"GenuineIntel"–インテル"GenuineIotel"– インテル(レア)[ 7 ] [ 8 ]"TransmetaCPU"–トランスメタ"GenuineTMx86"–トランスメタ"Geode by NSC"–ナショナルセミコンダクター"NexGenDriven"–ネクスジェン"RiseRiseRise"-上昇"SiS SiS SiS "– SiS"UMC UMC UMC "– UMC"Vortex86 SoC"– DM&Pボルテックス86" Shanghai "– 趙新"HygonGenuine"–ハイゴン"Genuine RDC"– RDCセミコンダクター株式会社[ 9 ]"E2K MACHINE "– MCSTエルブルス[ 10 ]"VIA VIA VIA "-経由"AMD ISBETTER"– AMD K5プロセッサ の初期エンジニアリングサンプル[ 11 ] [ 12 ]
以下はオープンソースのソフト CPU コアで使用される ID 文字列です。
"GenuineAO486"– ao486 CPU(旧型)[ 13 ] [ 14 ]"MiSTer AO486"– ao486 CPU(新)[ 15 ] [ 14 ]"GenuineIntel"– v586コア[ 16 ](これはIntel ID文字列と同一)
以下は仮想マシンの既知の ID 文字列です。
"ConnectixCPU"– Connectix Virtual PC(バージョン6以下)[ 17 ] [ 18 ]"Virtual CPU "– Microsoft Virtual PC 7; [ 18 ] Microsoft x86-to-ARM (32ビットx86) [ 19 ]"AuthenticAMD"– Microsoft x86-to-ARM(64ビットx86)[ 19 ]"GenuineIntel"–アップル・ロゼッタ2 [ 20 ]"Insignia 586"– Insignia RealPC [ 21 ] [ 22 ]およびSoftWindows 98 [ 23 ]"Compaq FX!32"– Compaq FX!32 ( DEC Alphaプロセッサ用x86エミュレータ)[ 24 ]"PowerVM Lx86"– PowerVM Lx86 (IBM POWER5 / POWER6プロセッサ用のx86エミュレータ) [ 25 ]"Neko Project"– Neko Project II ( PC-98エミュレータ) (エミュレートするCPUが「Neko Processor II」に設定されている場合に使用) [ 26 ] [ 27 ]
例えば、GenuineIntelプロセッサでは、EBX に返される値は0x756e6547、EDX に返される値は0x49656e69、ECX に返される値は です0x6c65746e。次のサンプルコードは、ベンダーID文字列と、CPU が実装する最大の呼び出しパラメータを表示します。
.intel_syntaxプレフィックスなし。文章.m0: .string "CPUID: %x\n".m1: .string "実装されている最大基本関数番号: %i\n".m2: .string "ベンダーID: %s\n".globlメイン主要:R12を押すmov eax , 1サブrsp 、16cpuidlea rdi , .m0 [ rip ]mov esi 、eaxprintfを呼び出すxor eax 、eaxcpuidlea rdi , .m1 [ rip ]mov esi 、eaxmov r12d 、edxmov ebp 、ecxprintfを呼び出すmov 3 [ rsp ], ebxレアrsi 、3 [ rsp ]lea rdi , .m2 [ rip ]mov 7 [ rsp ], r12dmov 11 [ rsp ], ebpprintfを呼び出すrspを追加、16ポップr12ret.section .note.GNU -スタック、"" 、@ progbits一部のプロセッサでは、CPUID.(EAX=0)命令を用いて特定のMSR(モデル固有レジスタ)に新しいID文字列を書き込むことで、CPUID.(EAX=0)によって報告される製造元ID文字列を変更することが可能WRMSRです。これは、Intel以外のプロセッサにおいて、ID文字列を返さないCPU向けにソフトウェアで無効化されている機能や最適化を有効にするために利用されてきましたGenuineIntel。[ 28 ]このようなMSRを持つことが知られているプロセッサには、以下のものがあります。
| プロセッサ | MSR |
|---|---|
| IDTウィンチップ | 108h-109h[ 29 ] |
| C3、C7経由 | 1108h-1109h[ 30 ] |
| VIAナノ | 1206h-1207h[ 31 ] |
| トランスメタ・クルーソー、エフィセオン | 80860001h-80860003h[ 32 ] [ 33 ] |
| AMDジオードGX、LX | 3000h-3001h[ 34 ] |
| DM&Pボルテックス86 EX2 | 52444300h-52444301h[ 35 ] |
EAX=1: プロセッサ情報と機能ビット
これは、CPUのステッピング、モデル、およびファミリー情報をEAXレジスタ(CPUのシグネチャとも呼ばれる)に返し、機能フラグをEDXレジスタとECXレジスタに返し、追加の機能情報をEBXレジスタに返します。 [ 36 ]
| イーアックス | |||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 予約済み | 拡大家族ID | 拡張モデルID | 予約済み | プロセッサタイプ | 家族ID | モデル | ステッピングID | ||||||||||||||||||||||||
- ステッピング ID は、エラッタの修正やその他の変更により割り当てられる製品リビジョン番号です。
- 実際のプロセッサモデルは、モデル、拡張モデルID、およびファミリIDフィールドから算出されます。ファミリIDフィールドが6または15の場合、モデルは拡張モデルIDフィールドを4ビット左にシフトしたものとモデルフィールドの合計に等しくなります。それ以外の場合、モデルはモデルフィールドの値に等しくなります。
- 実際のプロセッサファミリは、ファミリIDフィールドと拡張ファミリIDフィールドから算出されます。ファミリIDフィールドが15の場合、ファミリは拡張ファミリIDフィールドとファミリIDフィールドの合計に等しくなります。それ以外の場合、ファミリはファミリIDフィールドの値に等しくなります。
- プロセッサ タイプ フィールドの意味を以下の表に示します。
| タイプ | バイナリでのエンコード |
|---|---|
| オリジナル機器製造会社(OEM)プロセッサ | 00 |
| インテル オーバードライブ プロセッサー | 01 |
| デュアルプロセッサ(Intel P5 Pentiumプロセッサのみ)[ 37 ] | 10 |
| 予約値 | 11 |
2023年10月現在、以下のx86プロセッサファミリーIDが知られています。[ 38 ]
| 家族ID +拡張家族ID | インテル | AMD | 他の | |
|---|---|---|---|---|
| 六角形 | 12月 | |||
0h | 0 | 該当なし | 該当なし | 該当なし |
1h | 1 | 該当なし | 該当なし | 該当なし |
2h | 2 | 該当なし | 該当なし | 該当なし |
3h | 3 | [あ] | 該当なし | 該当なし |
4h | 4 | 486 | 486 , [ 39 ] 5x86 ,エランSC4xx/5xx [ 40 ] | Cyrix 5x86 , [ 41 ] Cyrix MediaGX , [ 42 ] UMC Green CPU , [ 4 ] MCST Elbrus (ほとんどのモデル), [ 10 ] MiSTer ao486 [ 43 ] |
5h | 5 | ペンティアム、ペンティアムMMX、クォークX1000 | K5、K6 | Cyrix 6x86 , Cyrix MediaGXm , [ 42 ] Geode (NXを除く), NexGen Nx586, [ 4 ] IDT WinChip , IDT WinChip 2, IDT WinChip 3, Transmeta Crusoe , Rise mP6 , SiS 550, DM&P Vortex86 (初期), [ 44 ] RDC IAD 100, MCST Elbrus-8C2 [ 10 ] |
6h | 6 | Pentium Pro、Pentium II、Pentium III、Pentium M、Intel Core(全タイプ)、Intel Atom(全タイプ)、Xeon(NetBurstタイプを除く)、Xeon Phi(KNC を除く) | K7:アスロン、アスロン XP | Cyrix 6x86 MX/MII、VIA C3、VIA C7、VIA Nano、DM&P Vortex86(DX3、EX2 [ 45 ])、Zhaoxin ZX-A/B/C/C+、(Centaur CNS [ 46 ])、MCST Elbrus-12C/16C/2C3 [ 10 ] |
7h | 7 | Itanium(IA-32モード) | 該当なし | 趙信開賢、趙信開賢 |
8h | 8 | [ b ] | 該当なし | 該当なし |
9h | 9 | 該当なし | 該当なし | 該当なし |
0Ah | 10 | 該当なし | 該当なし | 該当なし |
0Bh | 11 | Xeon Phi(ナイツコーナー)[ 48 ] | 該当なし | 該当なし |
0Ch | 12 | 該当なし | 該当なし | 該当なし |
0Dh | 13 | 該当なし | 該当なし | 該当なし |
0Eh | 14 | 該当なし | 該当なし | 該当なし |
0Fh | 15 | ネットバースト(Pentium 4) | K8/Hammer ( Athlon 64 ) | トランスメタ・エフィセオン |
10h | 16 | 該当なし | K10 :天才 | 該当なし |
11h | 17 | Itanium 2 [ 49 ](IA-32モード) | トゥリオンX2 | 該当なし |
12h | 18 | Intel Core(Nova Lake以降)[ 50 ] | リャノ | 該当なし |
13h | 19 | Xeon(パンサーコーブ以降)[ 51 ] | 該当なし | 該当なし |
14h | 20 | 該当なし | ボブキャット | 該当なし |
15h | 21 | 該当なし | ブルドーザー、杭打ち機、蒸気ローラー、掘削機 | 該当なし |
16h | 22 | 該当なし | ジャガー、プーマ | 該当なし |
17h | 23 | 該当なし | 禅1、禅2 | 該当なし |
18h | 24 | 該当なし | ハイゴン・ディヤーナ | |
19h | 25 | 該当なし | 禅3、禅4 | 該当なし |
1Ah | 26 | 該当なし | 禅5、(禅6) | 該当なし |
| ビット | EBX | 有効 |
|---|---|---|
| 7:0 | ブランドインデックス | |
| 15:8 | CLFLUSHラインサイズ(値 * 8 = キャッシュラインサイズ(バイト単位)) | CLFLUSH機能フラグが設定されている 場合。CPUID.01.EDX.CLFSH [ビット19]= 1 |
| 23:16 | この物理パッケージ内の論理プロセッサのアドレス指定可能な ID の最大数。 この値より小さくない最も近い2のべき乗の整数は、物理パッケージ内の異なる論理プロセッサをアドレス指定するために予約されている一意の初期APIC IDの数です。[ a ] 旧用法: 物理プロセッサあたりの論理プロセッサ数。ハイパースレッディングテクノロジを搭載したPentium 4プロセッサの場合は2つ。[ 54 ] | ハイパースレッディング機能フラグが設定されている 場合。 CPUID.01.EDX.HTT [ビット28]= 1 |
| 31:24 | ローカルAPIC ID: 初期APIC-IDは実行中の論理プロセッサを識別するために使用されます。[ b ] | Pentium 4 以降のプロセッサ。 |
プロセッサ情報と機能フラグは製造元によって異なりますが、通常、互換性のために他の製造元では Intel の値が使用されます。
| 少し | EDX | ECX [ a ] | 少し | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 0 | fpu | オンボードx87 FPU | sse3 | SSE3 (プレスコット新命令- PNI) | 0 | |
| 1 | vme | 仮想8086モード拡張(VIF、VIP、PVIなど) | pclmulqdq | PCLMULQDQ(キャリーレス乗算)命令 | 1 | |
| 2 | デ | デバッグ拡張機能(CR4ビット 3) | dtes64 | 64ビットデバッグストア(edxビット21) | 2 | |
| 3 | プセ | ページサイズ拡張(4 MB ページ) | モニター | MONITORおよびMWAIT指示(PNI) | 3 | |
| 4 | tsc | タイムスタンプカウンターとRDTSC指示 | ds-cpl | CPL認定デバッグストア | 4 | |
| 5 | msr | モデル固有のレジスタとRDMSR/WRMSR命令 | vmx | 仮想マシン拡張機能 | 5 | |
| 6 | ペイ | 物理アドレス拡張 | smx | セーフモード拡張機能(LaGrande)(GETSEC説明) | 6 | |
| 7 | マク | マシンチェック例外 | EST(東部基準時 | 強化されたスピードステップ | 7 | |
| 8 | cx8 [ b ] | CMPXCHG8B(比較スワップ)命令 | tm2 | サーマルモニター2 | 8 | |
| 9 | アピック[ c ] | オンボードの高度なプログラマブル割り込みコントローラ | ssse3 | 補足SSE3命令 | 9 | |
| 10 | (mtrr)[ d ] | (予約済み) | cnxt-id | L1コンテキストID | 10 | |
| 11 | 9月[ e ] | SYSENTER高速SYSEXITシステムコール命令 | sdbg | シリコンデバッグインターフェース | 11 | |
| 12 | mtrr | メモリタイプ範囲レジスタ[ f ] | FMAA | 融合乗算加算(FMA3) | 12 | |
| 13 | ページ | CR4のページグローバル有効化ビット | cx16 | CMPXCHG16B指示[ g ] | 13 | |
| 14 | mca | マシンチェックアーキテクチャ | エクスプロール | タスク優先度メッセージの送信を無効にすることができます | 14 | |
| 15 | cmov | 条件付き移動:CMOV、FCMOVおよびFCOMI命令[ h ] | PDCM | パフォーマンスモニターとデバッグ機能 | 15 | |
| 16 | パット | ページ属性テーブル | (予約済み)[ i ] | 16 | ||
| 17 | pse-36 | 36ビットページサイズ拡張 | PCID | プロセスコンテキスト識別子(CR4ビット17) | 17 | |
| 18 | プレイステーション | プロセッサシリアル番号がサポートされ、有効になっています[ j ] | dca | DMA書き込みのための直接キャッシュアクセス[ 65 ] [ 66 ] | 18 | |
| 19 | クルフシュ | CLFLUSHキャッシュラインフラッシュ命令(SSE2) | sse4.1 | SSE4.1命令 | 19 | |
| 20 | (nx) | 実行禁止(NX)ビット(Itaniumのみ、他のCPUでは予約済み)[ 67 ] [ k ] | sse4.2 | SSE4.2命令 | 20 | |
| 21 | ds | デバッグストア: 実行されたジャンプのトレースを保存する | x2apic | x2APIC(拡張APIC) | 21 | |
| 22 | acpi | ACPI用オンボード熱制御MSR | 動く | MOVBE命令(ビッグエンディアン) | 22 | |
| 23 | mmx | MMX命令(64ビットSIMD) | 人口 | POPCNT命令 | 23 | |
| 24 | fxsr | FXSAVE、FXRSTOR命令、CR4ビット9 | TSC締め切り | APICはTSC期限値を使用してワンショット操作を実装します | 24 | |
| 25 | sse | ストリーミング SIMD 拡張命令 (SSE) (別名「Katmai New Instructions」、128 ビット SIMD) | アエスニ | AES命令セット | 25 | |
| 26 | sse2 | SSE2命令 | xsave | 拡張可能なプロセッサ状態の保存/復元: XSAVE、、、命令 XRSTORXSETBVXGETBV | 26 | |
| 27 | ss | CPUキャッシュは自己スヌープを実装する | osxsave | XSAVEOSによって有効化 | 27 | |
| 28 | htt | 最大APIC ID予約フィールドは有効です[ l ] | avx | 高度なベクトル拡張(256 ビット SIMD) | 28 | |
| 29 | ™ | 温度モニターが自動的に温度を制限します | f16c | FP16形式 との間の浮動小数点変換命令 | 29 | |
| 30 | ia64 | x86をエミュレートするIA64プロセッサ[ 67 ] | 3番目 | RDRAND(オンチップ乱数発生器)機能 | 30 | |
| 31 | pbe | 保留中のブレーク イネーブル (PBE# ピン) ウェイクアップ機能 | ハイパーバイザー | ハイパーバイザーあり(物理CPUでは常にゼロ)[ 70 ] [ 71 ] [ 72 ] | 31 | |
- ^一部の古いプロセッサでは、リーフインデックス(EAX)を0より大きい値で実行するリーフインデックスを1にして
CPUID実行する前に、EBXとECXを0にすることをお勧めしますCPUIDこの動作を示すことが知られているプロセッサには、Cyrix MII [ 55 ]とIDT WinChip 2 [ 56 ]がある。
- ^ IDT、Transmeta、Riseのプロセッサ(ベンダーIDが
CentaurHauls、 、GenuineTMx86)RiseRiseRiseでは、このCMPXCHG8B命令は常にサポートされますが、この命令の機能ビットが設定されていない可能性があります。これはWindows NTのバグに対する回避策です。 [ 57 ] - ^初期のAMD K5(
AuthenticAMDファミリー5モデル0)プロセッサのみ、EDXビット9はPGEのサポートを示していました。これはK5モデル1以降、ビット13に移動されました。 [ 58 ] - ^ Intel AP-485、リビジョン006 [ 59 ]から008では、 CPUID.(EAX=1):EDX[ビット10]が「MTRR」という名前でリストされています(ただし、「予約済み」/「その値に頼らないでください」と説明されています)。この名前はAP-485の後のリビジョンで削除され、それ以降、このビットは名前なしで予約済みとしてリストされています。
- ^ Pentium Pro(のみ、EDXビット11は無効です。ビットは設定されていますが、Pentium Proでは命令はサポートされていません。 [ 60 ]
GenuineIntelSYSENTERSYSEXIT - ^ MTRRの場合、追加機能情報はCPUIDではなく、読み取り専用の
MTRRCAPMSR(MSR0FEh)を通じて取得できます。このMSRのレイアウトは以下のとおりです。ビット 使用法 7:0 可変範囲MTRRの数 8 固定範囲MTRRをサポート 9 (予約済み) 10 書き込み結合メモリタイプをサポート 11 SMRR(システム管理範囲レジスタ)をサポート 12 PRMRR(プロセッサ予約メモリ範囲レジスタ、SGXの一部)をサポート 13 SMRR2をサポート[ 61 ] 14 SMRRロック対応 15 SEAMRR(SEcure Arbitration Mode Range Register、 TDXの一部)をサポート[ 62 ] 63:16 (予約済み) - ^初期のIntel 64プロセッサの中には、
CMPXCHG16B命令をサポートしていないにもかかわらず機能ビットが設定されているものがあります。これは、GenuineIntelファミリー0Fhモデル3ステッピング4チップ(90nm Pentium 4)にのみ適用されます。 [ 63 ] - ^
FCMOVおよびFCOMI命令は、オンボード x87 FPU も存在する場合にのみ利用可能です (EDX ビット 0 で示されます)。 - ^ ECXビット16は、IntelおよびAMDの公開ドキュメントでは「予約済み」と記載されており、既知のプロセッサでは設定されていません。ただし、 Windows Vistaカーネルの一部のバージョンではこのビットをチェックしていると報告されています[ 64 ]。このビットが設定されている場合、Vistaはそれを「プロセッサチャネル」機能として認識します。
- ^ PSN(プロセッサシリアル番号)をサポートするIntelおよびTransmeta [ 32 ]
119hCPUでは、MSR (のビット21を1に設定することでPSNを無効にすることができます。BBL_CR_CTLこれを行うと、リーフ3が削除され、 CPUID.(EAX = 1):EDX[ビット18]が0を返します。 - ^ Itanium以外のx86プロセッサでは、 No-executeビットのサポートはCPUID.(EAX=8000_0001):EDX[ビット 20]で示されます。
- ^ EDXビット28が設定されている場合、CPUID.(EAX=1):EBXのビット23:16が有効であることを示します。このビットが設定されていない場合、CPUパッケージには論理プロセッサが1つだけ含まれています。
古いドキュメントでは、このビットは「ハイパースレッディングテクノロジー」フラグとして記載されていることがよくあります[ 68 ]。ただし、このフラグはハイパースレッディングサポートの前提条件ですが、それ自体ではハイパースレッディングのサポートを示すものではなく、マルチスレッディングテクノロジーを搭載していない多くのCPUで設定されています[ 69 ] 。
予約フィールドは、プロセッサ識別目的で使用する前にマスクする必要があります。
EAX=2: キャッシュおよびTLB記述子情報
これは、EAX、EBX、ECX、EDX レジスタ内の キャッシュおよびTLB機能を示す記述子のリストを返します。
このリーフをサポートするプロセッサでは、CPUIDEAX=2 で呼び出すと、EAX の下位バイトが01h[ a ]に設定され、EAX/EBX/ECX/EDX の残りの 15 バイトに 1 バイトずつ 15 個の記述子が格納されます。これらの記述子は、プロセッサのキャッシュ、TLB、およびプリフェッチに関する情報を提供します。通常、記述子 1 つにつき 1 つのキャッシュまたは TLB が含まれますが、一部の記述子値は他の情報も提供します。具体的には、 は00h空の記述子に使用され、リーフにFFh有効なキャッシュ情報が含まれていないため、代わりにリーフ 4h を使用する必要があることを示します。また、 はFEhリーフに有効な TLB 情報が含まれていないため、代わりにリーフ 18h を使用する必要があることを示します。記述子は任意の順序で出現できます。
4 つのレジスタ (EAX、EBX、ECX、EDX) のそれぞれについて、ビット 31 が設定されている場合、レジスタには有効な記述子が含まれているとは見なされません (たとえば、IA-32 モードの Itanium では、CPUID(EAX=2) が80000000hEDX で返されます。これは、EDX に 512K L2 キャッシュの記述子が含まれているという意味ではなく、有効な情報が含まれていないという意味と解釈されます)。
以下の表は、既知の記述子値について、その記述子値(または該当する場合はその他の情報)が示すキャッシュまたはTLBの簡潔な説明を示しています。表で使用されている接尾辞は以下のとおりです。
- K、M、G : バイナリ キロバイト、メガバイト、ギガバイト (キャッシュの容量、TLB のページ サイズ)
- E : エントリ(TLBの場合、例:64E = 64エントリ)
- p : ページサイズ (例: 各エントリが 1 つの 4 KBページを記述する TLB の場合は 4Kp 、各エントリが 1 つの 4 KB ページまたは 1 つの 2 MB ヒュージページを記述できる TLB の場合は 4K/2Mp)
- L : キャッシュラインサイズ(例:32L = 32バイトのキャッシュラインサイズ)
- S : キャッシュセクタサイズ(例:2Sは、キャッシュがそれぞれ2つのキャッシュラインのセクタを使用することを意味します)
- A : 連想性(例:6A = 6ウェイセットアソシエイティブ、FA = 完全連想性)
| レベル1命令またはデータキャッシュ | レベル2キャッシュ | レベル3キャッシュ | 命令またはデータTLB | レベル2共有TLB | その他の情報 | (予約済み) |
| x0 | 1個 | 2倍 | 3倍 | 4倍 | 5倍 | 6個 | 7倍 | 8倍 | 9倍 | xA | xB | xC | xD | xE | xF | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0x | ヌル記述子 | ITLB: 32E、4Kp、4A | ITLB: 2E、4Mp、FA | DTLB: 64E、4Kp、4A | DTLB: 8E、4Mp、4A | DTLB: 32E、4Mp、4A | L1I: 8K、4A、32L | 0x | L1I: 16K、4A、32L | L1I: 32K、4A、64L | L1D: 8K、2A、32L | ITLB: 4E、4Mp、FA | L1D: 16K、4A、32L | L1D: 16K、4A、64L [ b ] | L1D: 24K、6A、64L [ b ] | 0x | ||
| 1倍 | (L1D:16K、4A、32L)[ c ] | (L1I:16K、4A、32L)[ c ] | 1倍 | (L2C:96K、6A、64L)[ c ] | L2C: 128K、2A、64L | 1倍 | ||||||||||||
| 2倍 | L2C: 256K、8A、64L [ d ] | L3C: 512K、4A、64L、2S | L3C: 1M、8A、64L、2S | L2C: 1M、16A、64L | L3C: 2M、8A、64L、2S | (128バイトのプリフェッチ)[ e ] | (128バイトのプリフェッチ)[ e ] | 2倍 | (128バイトのプリフェッチ)[ e ] | L3C: 4M、8A、64L、2S | L1D: 32K、8A、64L | 2倍 | ||||||
| 3倍 | L1I: 32K、8A、64L | 3倍 | L2C: 128K、4A、64L、2S [ f ] | L2C: 192K、6A、64L、2S [ f ] | L2C: 128K、2A、64L、2S [ f ] | L2C: 256K、4A、64L、2S [ f ] | L2C: 384K、6A、64L、2S [ f ] | L2C: 512K、4A、64L、2S [ f ] | L2C: 256K, 2A, 64L [ g ] | 3倍 | ||||||||
| 4倍 | L3キャッシュが存在しない | L2C: 128K、4A、32L | L2C: 256K、4A、32L [ h ] | L2C: 512K、4A、32L | L2C: 1M、4A、32L | L2C: 2M、4A、32L | L3C: 4M、4A、64L | L3C: 8M、8A、64L | 4倍 | L2C: 3M、12A、64L | L2C/L3C: [ i ] 4M、16A、64L | L3C: 6M、12A、64L | L3C: 8M、16A、64L | L3C: 12M、12A、64L | L3C: 16M、16A、64L | L2C: 6M、24A、64L | ITLB: 32E, 4Kp [ j ] | 4倍 |
| 5倍 | ITLB: 64E、FA、 4K/2M/4Mp | ITLB: 128E、FA、 4K/2M/4Mp | ITLB: 256E、FA、 4K/2M/4Mp | ITLB: 7E、2M/4Mp、FA | DTLB: 16E、4Mp、4A | DTLB: 16E、 4Kp、4A | 5倍 | DTLB: 16E、4Kp、FA | DTLB: 32E、2M/4Mp、4A | DTLB: 64E 4K/4Mp、FA | DTLB: 128E、4K/4Mp、FA | DTLB: 256E、4K/4Mp、FA | 5倍 | |||||
| 6倍 | L1D: 16K、8A、64L | ITLB: 48E、4Kp、FA | 2 つの DTLB: 32E、2M/4Mp、4A + 4E、1Gp、FA | DTLB: 512E、 4Kp、4A | L1D: 8K、4A、64L | L1D: 16K、4A、64L | 6倍 | L1D: 32K、4A、64L | DTLB: 64E、4Kp、8A | DTLB: 256E、4Kp、8A | DTLB: 128E、2M/4Mp、8A | DTLB: 16E、1Gp、FA | 6倍 | |||||
| 7倍 | トレースキャッシュ、12K-μop、8A [ k ] | トレースキャッシュ、16K-μop、8A | トレースキャッシュ、32K-μop、8A | トレースキャッシュ、64K-μop、8A [ f ] | [ h ] | ITLB: 8E、2M/4Mp、FA [ l ] | (L1I: 16K、4A、64L) [ m ] [ h ] | 7倍 | L2C: 1M、4A、64L | L2C: 128K、8A、64L、2S | L2C: 256K、8A、64L、2S | L2C: 512K、8A、64L、2S | L2C: 1M、8A、64L、2S | L2C: 2M、8A、64L | (L2C:256K、8A、128L)[ m ] | L2C: 512K、 2A、64L | 7倍 | |
| 8倍 | L2C: 512K、8A、64L [ k ] | (L2C:128K、8A、32L)[ e ] | L2C: 256K、8A、32L [ h ] | L2C: 512K、8A、32L | L2C: 1M、8A、32L | L2C: 2M、8A、32L | L2C: 512K、4A、64L | L2C: 1M、8A、64L | 8倍 | (L3C:2M、4A、64L)[ c ] | (L3C:4M、4A、64L)[ c ] | (L3C:8M、4A、64L)[ c ] | (L3C:3M、12A、128L)[ m ] [ n ] | 8倍 | ||||
| 9倍 | (ITLB:64E、FA、 4K-256Mp)[ c ] | (DTLB: 32E、FA、 4K-256Mp) [ c ] | 9倍 | (DTLB:96E、FA、 4K-256Mp) [ c ] | 9倍 | |||||||||||||
| 斧 | DTLB: 32E、4Kp、FA | 斧 | 斧 | |||||||||||||||
| バックス | ITLB: 128E、4Kp、4A | ITLB: 8E, 2M/4Mp, 4A [ o ] | ITLB: 64E、4Kp、4A | DTLB: 128E、4Kp、4A | DTLB: 256E、4Kp、4A | ITLB: 64E、4Kp、8A | ITLB: 128E、4Kp、8A | バックス | DTLB: 64E、4Kp、4A | バックス | ||||||||
| センチ | DTLB: 8E、4K/4Mp、4A | L2TLB: 1024E、 4K/2Mp、8A | DTLB: 16E, 2M/4Mp, 4A [ 90 ] | 2つのL2 STLB:1536E、4K / 2Mp、6A [ p ] + 16E、1Gp、4A | DTLB: 32E、2M/4Mp、4A | センチ | L2TLB: 512E、 4Kp、4A | センチ | ||||||||||
| 診断 | L3C: 512K、4A、64L | L3C: 1M、4A、64L | L3C: 2M、4A、64L | L3C: 1M、8A、64L | L3C: 2M、8A、64L | 診断 | L3C: 4M、8A、64L | L3C: 1.5M、12A、64L | L3C: 3M、12A、64L | L3C: 6M、12A、64L | 診断 | |||||||
| 元 | L3C: 2M、16A、64L | L3C: 4M、16A、64L | L3C: 8M、16A、64L | 元 | L3C: 12M、24A、64L | L3C: 18M、24A、64L [ 93 ] | L3C: 24M、24A、64L | 元 | ||||||||||
| FX | 64バイトプリフェッチ[ q ] | 128バイトのプリフェッチ[ q ] | FX | リーフ2にはTLB情報がないので、リーフ18hを使用してください | リーフ2にはキャッシュ情報がないので、リーフ4を使用してください | FX | ||||||||||||
| x0 | 1個 | 2倍 | 3倍 | 4倍 | 5倍 | 6個 | 7倍 | 8倍 | 9倍 | xA | xB | xC | xD | xE | xF |
- ^古いIntelのドキュメントでは、EAXに返される値の下位バイトは、すべてのキャッシュ/TLB記述子を取得するためにEAX=2で呼び出す必要がある回数を指定すると説明されていますこのバイトを返し、新しいIntelのドキュメント(SDM rev 053 [ 73 ]以降)では、このバイトの値は であると規定されています。
CPUID01h01h - ^ a b記述子とについては
0Dh、0EhIntel AP-485 rev 37 [ 74 ]にECCを持つと説明されているキャッシュがリストされていますが、これは rev 38 以降の Intel ドキュメントでは削除されました。 - ^ a b c d e f g h i記述子
10h、、、、、、、、15hはItaniumのIA-32動作モードについてのみ文書化さ1Ahれています。[ 75 ]88h89h8Ah90h96h9Bh - ^記述子で記述されるキャッシュは
21h、いくつかの場所では(例えばAP-485 rev 36 [ 76 ]、rev 37ではそうではない)、"MLC"(中間レベルキャッシュ)と呼ばれています。 - ^ a b c d記述子値
26h、27h、28hは81hインテルのドキュメントには記載されておらず、リリースされているCPUでは使用されていない。 (キャンセルされたインテルTimna81hのエンジニアリングサンプルで確認されている。[ 86 ] )ただし、 Windows NTカーネルv5.1(Windows XP )以降では認識されると報告されている。はv5.0( Windows 2000 )でも認識される。[ 87 ]81h - ^ a b c d e f g記述子
39h-3Ehは73hIntel AP-485のrev 36に記載されていますが、[ 76 ] 、そのうちのいくつかはIntel CPU(主にNetburstベースのCeleron CPU、例えば「Willamette-128」[ 77 ]、「Northwood-128」[ 78 ]、「Prescott-256」[ 79 ]39h)で使用されているにもかかわらず、それ以降のIntelのドキュメントからは削除されています。3Bh3Ch - ^この記述子
3Fhは、2024年11月現在、Intelの既知のドキュメントには記載されていないが、Intel Tolapaiプロセッサでは使用されており[ 80 ]、Intelが提供するLinuxカーネルパッチにも記載されている。 [ 81 ] - ^ a b c d VIA Cyrix III "Joshua"プロセッサ(
CyrixInsteadファミリー6モデル5)のドキュメントには、このプロセッサがTLBに記述子値74hとを使用し、キャッシュに値とを使用することが記載されているが、これらの記述子値がプロセッサ内のどのキャッシュ/TLBに対応するかは指定されていない。[ 82 ]77h42h82h - ^記述子は
49hではレベル 3 キャッシュを示しGenuineIntel、その他の CPU ではレベル 2 キャッシュを示します。 - ^ IntelのCPUIDドキュメントでは、記述子で示されるITLBの連想性は規定されていない
4Fh。この記述子を使用するプロセッサ(Intel Atom "Bonnell" [ 83 ])は、他の文献では、完全連想型の32エントリITLBを備えていると説明されている。 [ 84 ] - ^ a b CyrixおよびGeode CPU(ベンダーID
CyrixInsteadおよびGeode by NSC)では、記述子70hおよびは80h異なる意味を持つ:[ 85 ]- 記述子は
70h、4K ページ サイズを持つ 32 エントリの共有命令 + データ 4 ウェイ セット アソシエティブ TLB を示します。 - 記述子は
80h、4 ウェイ セット アソシアティビティと 16 バイトのキャッシュ ライン サイズを持つ 16 KB の共有命令 + データ L1 キャッシュを示します。
- 記述子は
- ^記述子
76hはIntel AP-485のrev 37では1MBのL2キャッシュとして記載されているが[ 74 ]、rev 38以降のすべてのIntelドキュメントでは命令TLBとして記載されている。 - ^ a b c記述子
77h、7EhはItanium 28DhのIA-32動作モードについてのみ文書化されています。[ 88 ] - ^ Itanium 2のIA-32動作モードでは、L3キャッシュサイズは実際のキャッシュサイズに関係なく常に3MBと報告されます。 [ 89 ]
- ^記述子の場合
B1h、TLB 容量は 2 MB ページを使用すると 8 要素ですが、4 MB ページを使用すると 4 要素に減少します。 - ^記述子については
C3h、この記述子を使用する多くのIntelプロセッサは、6ウェイ・セットアソシアティブではなく、12ウェイ・セットアソシアティブのL2 TLBを備えています。これは少なくともSkylake [ 91 ]およびWhiskey/Kaby/Coffee/Comet Lake [ 92 ]のCPUに当てはまります。 - ^ a b記述子によって指定されるプリフェッチは
F0h、命令F1hによるメモリプリフェッチの推奨ストライドですPREFETCHNTA。[ 94 ]
EAX=3: プロセッサのシリアル番号
プロセッサのシリアル番号を返します。プロセッサのシリアル番号はIntel Pentium IIIで導入されましたが、プライバシー上の懸念から、この機能は以降のモデルでは実装されていません(PSN機能ビットは常にクリアされています)。TransmetaのEfficeonおよびCrusoeプロセッサもこの機能を提供しています。ただし、AMD CPUはどのCPUモデルにもこの機能を実装していません。
Intel Pentium III CPU の場合、96ビットシリアル番号の下位64ビットは EDX:ECX レジスタに返されます。Transmeta Efficeon CPU の場合、EBX:EAX レジスタに返されます。Transmeta Crusoe CPU の場合、EBX レジスタにのみ返されます。
プロセッサのシリアル番号機能が機能するには、 BIOS設定で有効にする必要があることに注意してください。
EAX=4 および EAX=8000'001Dh: キャッシュ階層とトポロジ
これら2つのリーフは、命令が実行されるプロセッサコアで利用可能なキャッシュ階層レベルに関する情報を提供するために使用されます。leafはIntelプロセッサで使用され、 leaf はAMDプロセッサで使用されます。どちらもEAX、EBX、ECX、EDXでデータを返します。データ形式は同じですが、 leaf はleaf 用に「予約済み」と見なされるいくつかの追加フィールドを返します。どちらもECXによって選択される一連のサブリーフでCPUキャッシュ情報を提供します。すべてのキャッシュレベルに関する情報を取得するには、EAX=またはとECX を0から始まる増加値(0、1、2、...)に設定して、キャッシュを記述しないサブリーフ(EAX[4:0]=0)が見つかるまで繰り返し呼び出す必要があります。キャッシュ情報を返すサブリーフは任意の順序で出現する可能性がありますが、それらはすべて、キャッシュを記述しない最初のサブリーフよりも前に出現します。 CPUID48000'001Dh48000'001DhCPUID48000'001Dh
以下の表では、リーフに対して定義されている4が、リーフに対しては定義されていないフィールドが8000'001Dh、黄色のセルの色と(#4)項目で強調表示されています。
| 少し | イーアックス | EBX | EDX [ a ] | 少し | ||
|---|---|---|---|---|---|---|
| 0 | キャッシュタイプ:
| システムコヒーレンスラインサイズ(バイト単位)から1を引いた値 | WBINVDキャッシュ無効化の実行範囲。値が0の場合、INVD/WBINVD命令は、このキャッシュを共有する兄弟プロセッサに属するキャッシュを含む、このキャッシュのすべての下位キャッシュを無効化します。値が1の場合、このキャッシュを共有している兄弟プロセッサの下位キャッシュがすべてクリアされる保証はありません。 | 0 | ||
| 1 | キャッシュの包含性。1 の場合、キャッシュには下位レベルのキャッシュが含まれます。 | 1 | ||||
| 2 | 複雑なキャッシュインデックス。1の場合、キャッシュは複雑な関数を使用してキャッシュインデックスを作成します。それ以外の場合は、キャッシュは直接マップされます。(#4) | 2 | ||||
| 3 | (予約済み) | 3 | ||||
| 4 | (予約済み) | 4 | ||||
| 7時5分 | キャッシュレベル(1から始まる) | (予約済み) | 7時5分 | |||
| 8 | 自己初期化キャッシュレベル(1 = リセット後にソフトウェア初期化は不要) | (予約済み) | 8 | |||
| 9 | 完全連想キャッシュ | (予約済み) | 9 | |||
| 10 | (WBINVDキャッシュ無効化実行範囲)[ b ] (#4) | (予約済み) | 10 | |||
| 11 | (キャッシュの包含性)[ b ] (#4) | (予約済み) | 11 | |||
| 13時12分 | (予約済み) | 物理ラインパーティション(キャッシュアドレスタグを共有するキャッシュラインの数)から1を引いた数 | (予約済み) | 13時12分 | ||
| 21:14 | このキャッシュを共有する論理プロセッサのアドレス指定可能なIDの最大数から1を引いた数 | (予約済み) | 21:14 | |||
| 25:22 | キャッシュ連想方法、マイナス1 | (予約済み) | 25:22 | |||
| 31:26 | 物理パッケージ内のプロセッサ コアのアドレス指定可能な ID の最大数から1 を引いた値(#4) | (予約済み) | 31:26 |
有効で完全連想型ではないキャッシュの場合、ECX に返される値は、キャッシュ内のセットの数から 1 を引いた値です (完全連想型キャッシュの場合、ECX は値 0 を返すものとして扱われます)。リーフCPUIDまたは4のサブリーフで記述される任意のキャッシュの場合8000'001Dh、合計キャッシュ サイズ (バイト単位) は次のように計算できます。
CacheSize = (EBX[11:0]+1) * (EBX[21:12]+1) * (EBX[31:22]+1) * (ECX+1)
たとえば、Intel Crystalwell CPU で、EAX=4 および ECX=4 で CPUID を実行すると、プロセッサは EBX および ECX のレベル 4 キャッシュについて次のサイズ情報を返します。EBX=03C0F03FこれECX=00001FFFは、このキャッシュのキャッシュ ライン サイズが 64 バイト (EBX[11:0]+1)、タグごとに 16 のキャッシュ ライン (EBX[21:12]+1)、16 ウェイ セット アソシアティブ (EBX[31:22]+1)、8192 セット (ECX+1) であり、合計サイズが 64*16*16*8192=134217728 バイト、つまり 128 バイナリ メガバイトであることを意味します。
EAX=4 および EAX=Bh: Intel スレッド/コアおよびキャッシュ トポロジ
これら2つのリーフは、Intelマルチコア(およびハイパースレッド)プロセッサのプロセッサトポロジ(スレッド、コア、パッケージ)とキャッシュ階層の列挙に使用されます。[ 96 ] 2013年現在、AMDはこれらのリーフを使用していませんが、コア列挙を行う代替方法があります。[ 97 ]
他のほとんどのCPUIDリーフとは異なり、リーフBhはCPUID命令が実行される論理プロセッサに応じてEDXに異なる値を返します。EDXに返される値は、実際には論理プロセッサのx2APIC IDです。ただし、x2APIC ID空間は論理プロセッサに連続的にマッピングされるわけではなく、マッピングにギャップが生じる可能性があります。つまり、一部の中間x2APIC IDは必ずしもどの論理プロセッサにも対応するとは限りません。x2APIC IDをコアにマッピングするための追加情報は、他のレジスタに提供されています。リーフBhにはサブリーフ(後述するようにECXによって選択される)がありますが、EDXに返される値は、命令が実行されている論理プロセッサによってのみ影響を受け、サブリーフによって影響を受けることはありません。
リーフBhによって公開されるプロセッサトポロジは階層構造ですが、この階層における(論理)レベルの順序は、物理階層(SMT /コア/パッケージ)の順序と必ずしも一致しないという奇妙な注意点があります。ただし、すべての論理レベルは、ECXサブリーフ(Bhリーフ)として「レベルタイプ」(SMT、コア、または「無効」のいずれか)との対応を照会できます。レベルID空間は0から始まり、連続しています。つまり、あるレベルIDが無効な場合、それより上位のすべてのレベルIDも無効になります。レベルタイプはECXのビット15:08に返され、照会されたレベルの論理プロセッサの数はEBXに返されます。最後に、これらのレベルとx2APIC IDの関係は、次のレベルで一意のIDを取得するためにx2APIC IDをシフトする必要があるビット数として、EAX[4:0]に返されます。
たとえば、ハイパースレッディングが可能なデュアルコアのWestmereプロセッサ(合計 2 つのコアと 4 つのスレッドを持つ) には、4 つの論理プロセッサに対して x2APIC ID 0、1、4、5 が割り当てられます。CPUID のリーフ Bh (=EAX)、サブリーフ 0 (=ECX) は、たとえば ECX に 100h を返します。これは、レベル 0 が SMT (ハイパースレッディング) 層を表していることを意味します。また、物理コアごとに 2 つの論理プロセッサ (SMT ユニット) があるため、EBX に 2 を返します。この場合、この 0 サブリーフの EAX に返される値は 1 になります。前述の x2APIC ID を 1 ビット右にシフトすると、一意のコア番号 (レベル ID 階層の次のレベル) が割り当てられ、各コア内の SMT ID ビットが消去されるためです。この情報を解釈するより簡単な方法は、x2APIC ID の最後のビット (ビット番号 0) が、この例の各コア内の SMT/ハイパースレッディング ユニットを識別することです。サブリーフ 1 に進むと (EAX=Bh および ECX=1 で CPUID をもう一度呼び出すことにより)、たとえば ECX に 201h (これはコア タイプ レベルであることを意味します) が返され、EBX には 4 (パッケージ内に 4 つの論理プロセッサがあるため) が返されます。返される EAX は 3 より大きい任意の値になる可能性があります。これは、x2APIC ID でコアを識別するためにビット番号 2 が使用されるためです。x2APIC ID のビット番号 1 はこの例では使用されないことに注意してください。ただし、このレベルで返される EAX は 4 になる可能性があります (Clarkdale Core i3 5x0 ではたまたまそうなのですが)。これは、x2APIC ID を 4 ビットシフトすると、パッケージ レベルでも一意の ID (明らかに =0) が提供されるためです。最後に、EAX=4 のリーフが、私たちがまだ知らないことを伝えることができるのか疑問に思うかもしれません。EAX[31:26] は、パッケージ用に予約されているAPIC マスクビットを返します。この例では、ビット 0 から 2 はこのパッケージ内の論理プロセッサを識別するために使用されますが、ビット 1 も予約されていますが、論理プロセッサ識別スキームの一部としては使用されません。つまり、APIC ID 0 から 7 はパッケージ用に予約されていますが、これらの値の半分は論理プロセッサにマッピングされません。
プロセッサのキャッシュ階層は、リーフ4のサブリーフを調べることで確認できます。この階層では、APIC IDも使用され、SMTユニットとコア間で異なるレベルのキャッシュがどのように共有されているかに関する情報が伝達されます。例を続けると、Westmereでは、同じコアのSMTユニット間では共有されますが、物理コア間では共有されないL2キャッシュは、EAX[26:14]が1に設定されていることで示されます。一方、L3キャッシュがパッケージ全体で共有されている情報は、これらのビットが(少なくとも)111bに設定されていることで示されます。キャッシュの種類、サイズ、アソシエティビティなどのキャッシュの詳細は、リーフ4の他のレジスタを介して伝達されます。
インテルのアプリケーションノート485の古いバージョンには、特にマルチコアプロセッサーのコアの識別とカウントに関して、誤解を招く情報が含まれていることに注意してください。[ 98 ]この情報の誤った解釈によるエラーは、CPUIDを使用するためのMicrosoftのサンプルコード(Visual Studioの2013エディション用)にも組み込まれています。[ 99 ]また、CPUIDのsandpile.orgページにも含まれています。[ 100 ]しかし、プロセッサートポロジーを識別するためのインテルのコードサンプル[ 96 ]には正しい解釈があり、現在のインテルソフトウェア開発者マニュアルではより明確な言葉が使用されています。Wildfire Gamesの(オープンソースの)クロスプラットフォーム製品コード[ 101 ]も、インテルのドキュメントの正しい解釈を実装しています。
x2APIC がない (したがって EAX=Bh リーフを実装していない) 古い (2010 年より前の) Intel プロセッサに関するトポロジ検出の例は、2010 年の Intel プレゼンテーションで示されています。[ 102 ]古い検出方法を 2010 年以降の Intel プロセッサで使用すると、コアと論理プロセッサの数を過大評価する可能性があることに注意してください。これは、古い検出方法では APIC ID 空間にギャップがないものと想定されており、この想定は一部の新しいプロセッサ (Core i3 5x0 シリーズ以降) では違反しているためです。ただし、これらの新しいプロセッサには x2APIC も搭載されているため、EAX=Bh リーフ方法を使用してトポロジを正しく判別できます。
EAX=5: MONITOR/MWAIT機能
これは、EAX、EBX、ECX、および EDX レジスタ内の命令 に関連するMONITOR機能情報を返します。MWAIT
| 少し | イーアックス | EBX | EDX | 少し | ||
|---|---|---|---|---|---|---|
| 3:0 | 最小モニターラインサイズ(バイト単位) | 最大モニターラインサイズ(バイト単位) | C0 [ a ]サブステートの数MWAIT | 3:0 | ||
| 7時4分 | サポートされているC1サブステートの数MWAIT | 7時4分 | ||||
| 11時8分 | サポートされているC2サブステートの数MWAIT | 11時8分 | ||||
| 15:12 | サポートされているC3サブステートの数MWAIT | 15:12 | ||||
| 19時16分 | (予約済み) | (予約済み) | サポートされているC4サブステートの数MWAIT | 19時16分 | ||
| 23時20分 | サポートされているC5サブステートの数MWAIT | 23時20分 | ||||
| 27:24 | サポートされているC6サブステートの数MWAIT | 27:24 | ||||
| 31:28 | サポートされているC7サブステートの数MWAIT | 31:28 |
| 少し | ECX | |
|---|---|---|
| 短い | 特徴 | |
| 0 | EMX | ECX および EDX での MONITOR/MWAIT 拡張の列挙がサポートされています |
| 1 | IBE | MWAIT割り込みが無効の場合でも 割り込みをブレークイベントとして扱うことをサポート |
| 2 | (予約済み) | |
| 3 | モニターレス_MWAIT | [ 103 ]MWAITメモリ監視を設定せずに電源管理に使用できるようにするMONITOR |
| 31:4 | (予約済み) | |
EAX=6: 熱と電力管理
これは、EAX レジスタの機能ビットと、EBX、ECX、および EDX レジスタの追加情報を返します。
| 少し | イーアックス | |
|---|---|---|
| 短い | 特徴 | |
| 0 | DTS | デジタル熱センサー機能 |
| 1 | インテル ターボ ブーストテクノロジーの機能 | |
| 2 | ARAT [ a ] | 常時実行APICタイマー機能 |
| 3 | (予約済み) | |
| 4 | PLN | 電力制限通知機能 |
| 5 | ECMD | 拡張クロック変調デューティ機能 |
| 6 | PTM | パッケージ熱管理機能 |
| 7 | HWP | ハードウェア制御のパフォーマンス状態。MSR が追加されました:
|
| 8 | HWP_通知 | 動的保証パフォーマンス変更のHWP通知 - IA32_HWP_INTERRUPT( 773h) MSR |
| 9 | HWP_アクティビティ_ウィンドウ | HWP アクティビティウィンドウ制御 - IA32_HWP_REQUESTMSR のビット 41:32 |
| 10 | HWP_エネルギーパフォーマンス設定 | HWP エネルギー/パフォーマンス優先制御 - IA32_HWP_REQUESTMSR のビット 31:24 |
| 11 | HWP_パッケージレベルリクエスト | HWP パッケージレベルの制御 - IA32_HWP_REQUEST_PKG( 772h) MSR |
| 12 | (予約済み) | |
| 13 | HDC | ハードウェアデューティ サイクリングをサポート。MSR を追加:
|
| 14 | インテル ターボ・ブースト・マックス・テクノロジー 3.0 が利用可能 | |
| 15 | IA32_HWP_CAPABILITIES.Highest_Performance(ビット7:0) の変更による割り込みをサポート | |
| 16 | HWP PECIIA32_HWP_PECI_REQUEST_INFOオーバーライドをサポート - ( 775h) MSR のビット63:60 | |
| 17 | IA32_HWP_REQUESTフレキシブル HWP - MSR のビット 63:59 | |
| 18 | 高速アクセスモード | IA32_HWP_REQUESTMSRの高速アクセスモードをサポート[ b ] |
| 19 | ハードウェアフィードバック | ハードウェアフィードバックインターフェース。追加されたMSR:
|
| 20 | IA32_HWP_REQUEST物理プロセッサを共有する2 つの論理プロセッサのうち 1 つだけがアクティブな場合、アイドル状態の論理プロセッサは無視されます。 | |
| 21 | (予約済み) | |
| 22 | HWP コントロール MSR | IA32_HWP_CTL(776h)MSRがサポート[ 105 ] |
| 23 | Intel Thread Director をサポート。MSR を追加:
| |
| 24 | IA32_THERM_INTERRUPTMSRビット25をサポート | |
| 31:25 | (予約済み) | |
- ^ Intel Pentium 4ファミリープロセッサのみ、EAXのビット2はARATの代わりにOPP(動作点保護) [ 104 ]を示すために使用されます。
- ^ MSRをサポートするCPUでMSRの高速(非シリアル化)アクセスモードを有効にするには(
IA32_HWP_REQUESTのビット0を設定する必要があります。FAST_UNCORE_MSRS_CTL657h
| 少し | EBX | ECX | EDX | 少し | ||
|---|---|---|---|---|---|---|
| 0 | デジタル温度センサーの割り込みしきい値の数 | 有効な周波数インターフェースがサポートされています - IA32_MPERF( 0E7h) およびIA32_APERF( 0E8h) MSR | ハードウェアフィードバックレポート: パフォーマンス機能レポートをサポート | 0 | ||
| 1 | (ACNT2機能)[ a ] | ハードウェアフィードバックレポート: 効率機能レポートをサポート | 1 | |||
| 2 | (予約済み) | (予約済み) | 2 | |||
| 3 | パフォーマンスエネルギーバイアス機能 - IA32_ENERGY_PERF_BIAS( 1B0h) MSR | 3 | ||||
| 7時4分 | (予約済み) | (予約済み) | 7時4分 | |||
| 11時8分 | ハードウェアでサポートされる Intel Thread Director クラスの数 | ハードウェアフィードバックインターフェース構造のサイズ(4KB単位)から1を引いた値 | 11時8分 | |||
| 15:12 | (予約済み) | 15:12 | ||||
| 31:16 | (予約済み) | ハードウェアフィードバックインターフェース構造におけるこの論理プロセッサの行のインデックス | 31:16 |
EAX=7、ECX=0: 拡張機能
EBX、ECX、EDXの拡張機能フラグを返します。EAXでは、EAX=7のECXの最大値を返します。
| 少し | EBX | ECX | EDX | 少し | |||||
|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | ||||
| 0 | fsgsベース | %fs と %gs のベースへのアクセス | プリフェッチwt1 | PREFETCHWT1命令 | (sgx-tem) [ a ] | ? | 0 | ||
| 1 | tsc_adjust | IA32_TSC_ADJUST MSR | avx512-vbmi | AVX-512ベクトルビット操作命令 | sgxキー | Intel SGX向け認証サービス | 1 | ||
| 2 | sgx | ソフトウェアガード拡張 | ウミップ | ユーザーモード命令防止 | avx512-4vnniw | AVX-512 4レジスタニューラルネットワーク命令 | 2 | ||
| 3 | BMI1 | ビット操作命令セット1 | pku | ユーザーモードページのメモリ保護キー | avx512-4fマップ | AVX-512 4レジスタ乗算累算単精度 | 3 | ||
| 4 | ホール | TSXハードウェアロックエリシオン | ospke | OSによって有効化されたPKU | フォース | 速いショートREP MOVSB | 4 | ||
| 5 | avx2 | 高度なベクトル拡張 2 | 待機パッケージ | 時間制限付き一時停止およびユーザーレベルの監視/待機命令(TPAUSE、、) UMONITORUMWAIT | ユニット | ユーザープロセッサ間割り込み | 5 | ||
| 6 | fdp-exceptn-only | x87 FPUデータポインタレジスタは例外時にのみ更新されます | avx512-vbmi2 | AVX-512ベクトルビット操作命令 2 | (予約済み) | 6 | |||
| 7 | スメップ | スーパーバイザーモード実行防止 | cet_ss/shstk | 制御フロー強制(CET):シャドウスタック(SHSTK 別名) | (予約済み) | 7 | |||
| 8 | BMI2 | ビット操作命令セット2 | ガールフレンド | ガロア体命令 | avx512-vp2インターセクト | 32/64ビット整数に対する AVX-512ベクトル交差命令 | 8 | ||
| 9 | えーと | 強化されたREP MOVSB/STOSB | ヴァース | ベクターAES命令セット(VEX-256/EVEX) | srbds-ctrl | 特殊レジスタバッファデータサンプリング緩和策 | 9 | ||
| 10 | 無効 | INVPCID命令 | vpclmulqdq | CLMUL命令セット(VEX-256/EVEX) | md-クリア | VERW命令はCPUバッファをクリアする | 10 | ||
| 11 | rtm | TSX制限付きトランザクションメモリ | avx512-vnni | AVX-512ベクトルニューラルネットワーク命令 | rtm-always-abort [ 108 ] | すべてのTSX取引は中止されました | 11 | ||
| 12 | rdt-m/pqm | Intel Resource Director (RDT) モニタリングまたはAMD プラットフォーム QOS モニタリング | avx512-bitalg | AVX-512 BITALG の指示 | (予約済み) | 12 | |||
| 13 | fcs_fds_deprecation | x87 FPU CSとDSは非推奨 | tme_en | 利用可能なメモリ暗号化MSRの合計数 | rtm-force-abort [ 108 ] | TSX_FORCE_ABORT (MSR 0x10f) が利用可能 | 13 | ||
| 14 | mpx | Intel MPX (メモリ保護拡張機能) | avx512-vpopcntdq | AVX-512 ベクトルポピュレーションカウント ダブルワードおよびクワッドワード | シリアライズ | SERIALIZE命令 | 14 | ||
| 15 | rdt-a/pqe | Intel Resource Director (RDT) の割り当てまたはAMD プラットフォーム QOS の適用 | (fzm) [あ] | ? | ハイブリッド | プロセッサトポロジにおける CPU タイプの混在 (例: Alder Lake ) | 15 | ||
| 16 | avx512-f | AVX-512財団 | la57 | 5レベルページング(57アドレスビット) | tsxldtrk | TSXロードアドレス追跡中断/再開命令(TSUSLDTRKおよびTRESLDTRK) | 16 | ||
| 17 | avx512-dq | AVX-512ダブルワードおよびクワッドワード命令 | マワウ | 64ビットモードで のBNDLDXおよびBNDSTXIntel MPX命令で使用されるユーザー空間MPXアドレス幅調整の値 | (予約済み) | 17 | |||
| 18 | rdseed | RDSEED命令 | pconfig | プラットフォーム構成(メモリ暗号化テクノロジの手順) | 18 | ||||
| 19 | adx | Intel ADX (多精度加算・桁上げ命令拡張) | 左 | 建築最終支店記録 | 19 | ||||
| 20 | スマップ | スーパーバイザーモードアクセス防止 | cet-ibt | 制御フロー強制(CET):間接分岐追跡 | 20 | ||||
| 21 | avx512-ifma | AVX-512整数融合積和命令 | (予約済み) | 21 | |||||
| 22 | (コミット) | (PCOMMIT命令、非推奨)[ 110 ] | rdpid | RDPID(プロセッサID読み取り)命令とIA32_TSC_AUX MSR | amx-bf16 | bfloat16数値 のAMXタイル計算 | 22 | ||
| 23 | clflushopt | CLFLUSHOPT命令 | kl | AESキーロッカー | avx512-fp16 | AVX-512半精度浮動小数点演算命令[ 111 ] | 23 | ||
| 24 | クラウブ | CLWB(キャッシュラインライトバック)命令 | バスロック検出 | バスロックデバッグ例外 | amxタイル | AMXタイル ロード/ストア命令 | 24 | ||
| 25 | pt | インテル プロセッサー トレース | cldemote | CLDEMOTE(キャッシュライン降格)命令 | amx-int8 | 8ビット整数の AMXタイル計算 | 25 | ||
| 26 | avx512-pf | AVX-512プリフェッチ命令 | (mprr) [ a ] | ? | ibrs / スペックコントロール | 投機制御、間接分岐制御(IBC)の一部:間接分岐制限投機(IBRS)と間接分岐予測バリア(IBPB)[ 112 ] [ 113 ] | 26 | ||
| 27 | avx512-er | AVX-512指数および逆数命令 | movdiri | MOVDIRI命令 | スティップ | シングルスレッド間接分岐予測器(IBCの一部) [ 112 ] | 27 | ||
| 28 | avx512-cd | AVX-512競合検出命令 | movdir64b | MOVDIR64B(64バイト直接ストア)命令 | L1D_フラッシュ | IA32_FLUSH_CMD MSR | 28 | ||
| 29 | シャ | SHA-1およびSHA-256拡張 | enqcmd | エンキューストアとEMQCMD/EMQCMDS命令 | アーキテクチャ機能 | IA32_ARCH_CAPABILITIES MSR(投機的サイドチャネル緩和策をリスト[ 112 ]) | 29 | ||
| 30 | avx512-bw | AVX-512バイトおよびワード命令 | sgx-lc | SGX起動構成 | コア機能 | IA32_CORE_CAPABILITIES MSR (モデル固有のコア機能をリストします) | 30 | ||
| 31 | avx512-vl | AVX-512ベクトル長拡張 | PK戦 | スーパーバイザーモードページの保護キー | ssbd | 投機的ストアバイパスの無効化、[ 112 ]投機的ストアバイパスの緩和策(IA32_SPEC_CTRL) | 31 | ||
EAX=7、ECX=1: 拡張機能
これにより、4 つのレジスタすべてに拡張機能フラグが返されます。
| 少し | イーアックス | EBX | ECX | EDX | 少し | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | |||||
| 0 | sha512 | SHA-512拡張 | ピン | Intel PPIN (保護されたプロセッサ インベントリ番号): IA32_PPIN_CTL ( 04Eh) および IA32_PPIN ( 04Fh) MSR。 | 非対称RDTモニタリング機能 | (予約済み) | 0 | |||||
| 1 | sm3 | SM3ハッシュ拡張 | pbndkb | トータル ストレージ暗号化:PBNDKB命令および TSE_CAPABILITY ( 9F1h) MSR。 | 非対称RDT割り当て機能 | (予約済み) | 1 | |||||
| 2 | sm4 | SM4暗号拡張 | (予約済み) | (レガシー削減ISA) | (X86S、[ 114 ]キャンセル[ 115 ]) | (予約済み) | 2 | |||||
| 3 | ラオイント | 整数に対するリモートアトミック操作: AADD、、、命令 AANDAORAXOR | CPUIDMAXVAL_LIM_RMV | 1 の場合、 のビット 22 をIA32_MISC_ENABLE1 に設定して、 によって返される値を制限することはできませんCPUID.(EAX=0):EAX[7:0]。 | (予約済み) | (予約済み) | 3 | |||||
| 4 | avx-vnni | AVXベクトルニューラルネットワーク命令(VNNI)(VEXエンコード) | (予約済み) | (シピ64) | 64 ビット SIPI (スタートアップ プロセッサ間割り込み) (キャンセルされた X86S の一部) | avx-vnni-int8 | AVX VNNI INT8命令 | 4 | ||||
| 5 | avx512-bf16 | bfloat16数値 用のAVX-512命令 | (予約済み) | MSR_IMM | RDMSRおよびWRMSRNS指示 の即時フォーム | avx-ne-convert | AVX 例外なし FP 変換命令 ( bfloat16 ↔FP32 およびFP16 →FP32) | 5 | ||||
| 6 | 娘 | リニアアドレス空間分離(CR4 ビット 27) | (予約済み) | (予約済み) | (予約済み) | 6 | ||||||
| 7 | cmpccxadd | CMPccXADD説明書 | (予約済み) | (予約済み) | (予約済み) | 7 | ||||||
| 8 | アーチパフォーマンスモネクスト | アーキテクチャパフォーマンスモニタリング拡張リーフ (EAX=23h) | (予約済み) | (予約済み) | amx複合体 | AMX の「複雑な」タイルのサポート (TCMMIMFP16PSおよびTCMMRLFP16PS) | 8 | |||||
| 9 | (重複除去)[ a ] | ? | (予約済み) | (予約済み) | (予約済み) | 9 | ||||||
| 10 | fzrm | 高速ゼロ長 REP MOVSB | (予約済み) | (予約済み) | avx-vnni-int16 | AVX VNNI INT16命令 | 10 | |||||
| 11 | fsrs | 速い短いREP STOSB | (予約済み) | (予約済み) | (予約済み) | 11 | ||||||
| 12 | rsrcs | 速くて短くREP CMPSBてREP SCASB | (予約済み) | (予約済み) | (予約済み) | 12 | ||||||
| 13 | (予約済み) | (予約済み) | (予約済み) | utmr | ユーザータイマーイベント: IA32_UINTR_TIMER ( 1B00h) MSR | 13 | ||||||
| 14 | (予約済み) | (予約済み) | (予約済み) | 先見の明 | 命令キャッシュプリフェッチ命令(PREFETCHIT0およびPREFETCHIT1) | 14 | ||||||
| 15 | (予約済み) | (予約済み) | (予約済み) | ユーザー_msr | ユーザーモードMSRアクセス命令(URDMSRおよびUWRMSR) | 15 | ||||||
| 16 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 16 | |||||||
| 17 | フレッド | 柔軟な返品とイベント配信[ 116 ] | (予約済み) | (予約済み) | uiret-uif-from-rflags | 1 の場合、UIRET(ユーザー割り込みリターン) 命令は、UIF (ユーザー割り込みフラグ) をスタックからポップされた RFLAGS イメージのビット 1 の値に設定します。 | 17 | |||||
| 18 | キログラム | LKGS指示[ 116 ] | (予約済み) | (予約済み) | cet-sss | 1の場合、制御フロー強制(CET)スーパーバイザーシャドウスタック(SSS)は、シャドウスタックの切り替えによって切り替え先のスタックでページフォールトが発生しない限り、早期にビジー状態にならないことが保証されます。[ 117 ] [ 118 ] [ 119 ] | 18 | |||||
| 19 | wrmsrns | WRMSRNS命令( MSRへの非シリアル化書き込み) | (予約済み) | (予約済み) | avx10 | AVX10 収束型ベクターISA(リーフ24hも参照)[ 120 ] | 19 | |||||
| 20 | nmi_src | NMIの情報源による報告[ 116 ] | (予約済み) | (予約済み) | (予約済み) | 20 | ||||||
| 21 | amx-fp16 | FP16数値 用のAMX命令 | (予約済み) | (予約済み) | APX_F | アドバンストパフォーマンス拡張、Foundation(REX2と拡張EVEXプレフィックスエンコーディングを追加し、32GPRをサポートするほか、いくつかの新しい命令を追加)[ 121 ] | 21 | |||||
| 22 | リセット | HRESET命令、IA32_HRESET_ENABLE(17DAh)MSR、およびプロセッサ履歴リセットリーフ(EAX = 20h) | (予約済み) | (予約済み) | (予約済み) | 22 | ||||||
| 23 | avx-ifma | AVX IFMA の指示 | (予約済み) | (予約済み) | 待って | MWAIT命令[ b ] | 23 | |||||
| 24 | (予約済み) | (予約済み) | (予約済み) | slsm | 静的ロックステップモード(MSRのビット0IA32_INTEGRITY_STATUSが使用可能) | 24 | ||||||
| 25 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 25 | |||||||
| 26 | ラム | リニアアドレスマスキング | (予約済み) | (予約済み) | (予約済み) | 26 | ||||||
| 27 | msrlist | RDMSRLISTおよびWRMSRLIST命令、およびIA32_BARRIER(02Fh)MSR | (予約済み) | (予約済み) | (予約済み) | 27 | ||||||
| 28 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 28 | |||||||
| 29 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 29 | |||||||
| 30 | invd_disable_post_bios_done | 1 の場合、INVDBIOS 完了後の命令実行防止をサポートします。 | (予約済み) | (予約済み) | (予約済み) | 30 | ||||||
| 31 | ムーバーズ | MOVRSおよびPREFETCHRST2命令のサポート(読み取り共有ヒントによるメモリ読み取り/プリフェッチ) | (予約済み) | (予約済み) | (予約済み) | 31 | ||||||
- ^ 2024年4月現在、DEDUPビットはIntel TDXのドキュメント[ 109 ]にのみ記載されており、既知のプロセッサでは設定されていません。
- ^命令のサポートは、 CPUID.(EAX=1).ECX[3]またはCPUID.(EAX=7,ECX=1).EDX[23]
MWAITのいずれかで示されます(どちらか一方、または両方が設定される場合があります。) 前者は命令のサポートも示しますが、後者は命令の存在の有無を明示的に示しません。「モニターレスMWAIT」機能をサポートするシステムでは、このフラグが存在する場合があります(この機能自体はCPUID.(EAX=5).ECX[3]で示されます)。MONITORMONITORMWAITMONITOR
EAX=7、ECX=2: 拡張機能
これは、EDX で拡張機能フラグを返します。
EAX、EBX、ECX は予約されています。
| 少し | EDX | |
|---|---|---|
| 短い | 特徴 | |
| 0 | psfd | 高速ストア転送予測器[ 122 ]無効化がサポートされています。 ( SPEC_CTRL(MSR 48h) ビット 7) |
| 1 | ipred_ctrl | IPRED_DIS制御[ 123 ]がサポートされている。(SPEC_CTRLビット3と4) IPRED_DIS は、分岐ターゲット アドレスが解決されるまで、間接分岐ターゲットでの命令の投機的実行を防止します。 |
| 2 | rrsba_ctrl | RRSBAの動作[ 124 ] [ 123 ]無効化がサポートされています。(SPEC_CTRLビット5と6) |
| 3 | ddpd_u | データ依存プリフェッチャー[ 125 ] 無効化がサポートされています。 (SPEC_CTRLビット8) |
| 4 | bhi_ctrl | BHI_DIS_Sの動作[ 123 ]の有効化がサポートされています。(SPEC_CTRLビット10) BHI_DIS_S は、リング 3 で実行された分岐からの分岐履歴に基づいて、リング 0/1/2 で実行された間接分岐の予測ターゲットが選択されるのを防ぎます。 |
| 5 | mcdt_no | 設定されている場合、プロセッサはMXCSR構成に依存するタイミングを示しません。 |
| 6 | UC ロック無効化機能がサポートされました。 | |
| 7 | モニター_mitg_no | 設定されている場合、MONITOR/UMONITOR命令は内部モニター追跡テーブルの容量を超える命令によって引き起こされるパフォーマンス/電力の問題の影響を受けないことを示します。[ 126 ] |
| 31:8 | (予約済み) | |
EAX=0Dh: XSAVE 機能と状態コンポーネント
このリーフは、XSAVE 機能と状態コンポーネントを列挙するために使用されます。
XSAVE 命令セット拡張は、CPU 拡張状態 (通常はコンテキスト スイッチング用) を保存/復元するように設計されています。この保存/復元は、OS のコンテキスト スイッチング コードが新しい拡張機能の詳細を理解する必要なく、新しい命令セット拡張機能をカバーするように拡張できます。これは、一連の状態コンポーネントを定義することによって行われます。状態コンポーネントはそれぞれ、特定の保存領域内でサイズとオフセットを持ち、ある CPU 拡張または別の CPU 拡張に必要な状態のサブセットに対応します。CPUIDEAX=0Dhリーフは、CPU がサポートする状態コンポーネントとそのサイズ/オフセットに関する情報を提供するために使用され、OS は適切な量のスペースを予約し、関連する有効ビットを設定できます。
状態コンポーネントは、ユーザー状態(アプリケーションから参照可能な状態項目、例:AVX-512ベクターレジスタ)とスーパーバイザ状態(アプリケーションに影響を与えるが、ユーザーからは直接参照できない状態項目、例:ユーザーモード割り込み設定)の2つのグループに分類できます。ユーザー状態項目はXCR0制御レジスタ内の関連ビットを設定することで有効化され、スーパーバイザ状態項目はIA32_XSS( )MSR内の関連ビットを設定することで有効化されます。これらの状態項目は、 /命令ファミリ0DA0hで保存および復元可能な状態コンポーネントとなります。 XSAVEXRSTOR
XSAVEメカニズムは、この方法で最大63個の状態コンポーネントを処理できます。状態コンポーネント0と1(それぞれx87とSSE )は固定のオフセットとサイズを持ちます。状態コンポーネント2から62については、状態コンポーネントのインデックスを指定 CPUIDしてEAX=0Dh実行することで、サイズ、オフセット、およびいくつかの追加フラグを取得できます。これにより、EAX、EBX、ECX(EDXは予約済み)に以下の項目が返されます。ECX
| 少し | イーアックス | EBX | ECX | 少し |
|---|---|---|---|---|
| 0 | 状態コンポーネントのバイト単位のサイズ | XSAVE/XRSTOR保存領域 の開始からの状態コンポーネントのオフセット
| ユーザー/スーパーバイザー状態コンポーネント:
| 0 |
| 1 | 状態保存圧縮が使用される場合、64 バイトのアライメントが有効になります。 このビットが状態コンポーネントに対して設定されている場合、状態を圧縮して保存する際に、64バイトのアライメントを確保するために、前の状態コンポーネントとこの状態コンポーネントの間に必要に応じてパディングが挿入されます。このビットが設定されていない場合、状態コンポーネントは前の状態コンポーネントの直後に保存されます。 | 1 | ||
| 31:2 | (予約済み) | 31:2 |
この方法でサポートされていない状態コンポーネントを照会しようとすると、EAX、EBX、ECX、EDX がすべて 0 に設定されます。
CPUIDリーフのサブリーフ 0 と 1 は、0Dh機能情報を提供するために使用されます。
| EBX | ECX | EDX:EAX |
|---|---|---|
現在設定されている状態コンポーネント セットの XSAVE 保存領域の最大サイズ (バイト単位) XCR0。 | この CPUでサポートされているすべての状態コンポーネントがXCR0同時に有効になっている場合の XSAVE 保存領域の最大サイズ (バイト単位)。 | XCR0この CPU でサポートされている状態コンポーネントの 64 ビット ビットマップ。 |
| イーアックス | EBX | EDX:ECX |
|---|---|---|
| XSAVE 機能フラグ(下の表を参照) | XCR0現在設定され結合されているすべての状態コンポーネントを含む XSAVE 領域のサイズ (バイト単位) IA32_XSS。 | IA32_XSSこの CPU でサポートされている状態コンポーネントの 64 ビット ビットマップ。 |
| 少し | イーアックス | |
|---|---|---|
| 短い | 特徴 | |
| 0 | xsaveopt | XSAVEOPT命令: 前回から変更された状態コンポーネントを保存するXRSTOR |
| 1 | xsavec | XSAVEC命令: 圧縮による状態の保存/復元 |
| 2 | xgetbv_ecx1 | XGETBVECX=1サポート 付き |
| 3 | xss | XSAVESおよびXRSTORS命令とIA32_XSSMSR: スーパーバイザー状態を含む、圧縮による状態の保存/復元。 |
| 4 | xfd | XFD(拡張機能無効化)をサポート |
| 31:5 | (予約済み) | |
2023 年 7 月現在、アーキテクチャ的に定義されている XSAVE 状態コンポーネントは次のとおりです。
| 索引 | 説明 | 有効 |
|---|---|---|
| 0 | x87状態 | XCR0 [ a ] |
| 1 | SSE状態: XMM0-XMM15およびMXCSR | XCR0 |
| 2 | AVXの状態: 上位半分YMM0からYMM15 | |
| 3 | MPX状態: BND0-BND3境界レジスタ | |
| 4 | MPX状態:BNDCFGUおよびBNDSTATUSレジスタ | |
| 5 | AVX-512状態: opmask レジスタk0-k7 | |
| 6 | AVX-512 "ZMM_Hi256"状態: 〜の上ZMM0半分ZMM15 | |
| 7 | AVX-512 "Hi16_ZMM" 状態: ZMM16-ZMM31 | |
| 8 | プロセッサトレース状態 | IA32_XSS |
| 9 | PKRU(ユーザー保護キー)レジスタ | XCR0 |
| 10 | PASID(プロセスアドレス空間ID)状態 | IA32_XSS |
| 11 | CET_U 状態 (制御フロー強制テクノロジ: ユーザー モード機能 MSR) | |
| 12 | CET_S 状態 (CET: リング 0、1、2 のシャドウ スタック ポインタ) | |
| 13 | HDC(ハードウェアデューティサイクリング)状態 | |
| 14 | UINTR(ユーザーモード割り込み)状態 | |
| 15 | LBR(最終分岐レコード)状態 | |
| 16 | HWP(ハードウェアPステート制御)状態 | |
| 17 | AMXタイル構成状態:TILECFG | XCR0 |
| 18 | AMX タイルデータレジスタ: tmm0-tmm7 | |
| 19 | APX拡張汎用レジスタ: r16- r31[ 121 ] | |
| 20~61歳 | (予約済み) | |
| 62 | 軽量プロファイリング (LWP) (AMD のみ) | XCR0 |
| 63 | (予約済み)[ b ] | |
EAX=12h: SGXの機能
このリーフは、Intel Software Guard Extensions (SGX) 機能のサポート情報を提供します。このリーフには、ECX で選択される複数のサブリーフがあります。
サブリーフ0は、EAXでサポートされているSGXリーフ機能と、EDXでサポートされている最大SGXエンクレーブサイズに関する情報を提供します。ECXは予約済みです。EBXは、SECS(SGXエンクレーブ制御構造)のMISCSELECTフィールドに設定できるビットのビットマップを提供します。このフィールドは、AEX(SGX非同期エンクレーブ出口)が発生したときにSSA(SGX保存状態領域)のMISC領域に書き込まれる情報を制御するために使用されます。
| 少し | イーアックス | EBX | EDX | 少し | |||||
|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | ||||
| 0 | sgx1 | SGX1リーフ機能 | エクソ | MISCSELECT: エンクレーブ内で発生したページフォールトと一般保護例外に関する情報を報告します。 | 最大エンクレーブサイズ_Not64 | 非64ビットモードでサポートされる最大エンクレーブサイズのLog2 | 0 | ||
| 1 | sgx2 | SGX2リーフ関数 | CPINFO | MISCSELECT: エンクレーブ内で発生した制御保護例外に関する情報を報告します | 1 | ||||
| 2 | (予約済み) | (予約済み) | 2 | ||||||
| 3 | (予約済み) | (予約済み) | 3 | ||||||
| 4 | (予約済み) | (予約済み) | 4 | ||||||
| 5 | オス | ENCLV葉: EINCVIRTCHILD、、EDECVIRTCHILDおよびESETCONTEXT | (予約済み) | 5 | |||||
| 6 | ENCLS葉:ETRACKC、ERDINFO、ELDBC、ELDUC | (予約済み) | 6 | ||||||
| 7 | ENCLU葉:EVERIFYREPORT2 | (予約済み) | 7 | ||||||
| 8 | (予約済み) | (予約済み) | 最大エンクレーブサイズ_64 | 64 ビット モードでサポートされる最大エンクレーブ サイズの Log2 | 8 | ||||
| 9 | (予約済み) | (予約済み) | 9 | ||||||
| 10 | ENCLS葉:EUPDATESVN | (予約済み) | 10 | ||||||
| 11 | ENCLU葉:EDECSSA | (予約済み) | 11 | ||||||
| 12 | 256ビットSGX | ENCLUリーフ関数EGETKEY256とEREPORT2 | (予約済み) | 12 | |||||
| 13 | (予約済み) | (予約済み) | 13 | ||||||
| 14 | (予約済み) | (予約済み) | 14 | ||||||
| 15 | (予約済み) | (予約済み) | 15 | ||||||
| 31:16 | (予約済み) | (予約済み) | (予約済み) | 31:16 | |||||
サブリーフ1は、EDX:ECX:EBX:EAXのSECSの128ビットATTRIBUTESフィールドに設定可能なビットマップを提供します(これは、ENCLS[ECREATE]リーフ関数への入力として使用されるSECSコピーに適用されます)。上位64ビット(EDX:ECXで指定)は、XFRM(X機能要求マスク)に設定可能なビットマップです。このマスクは、AEX発生時にSSAに保存されるCPU状態コンポーネント(リーフ0Dhを参照)のビットマスクです。これはXCR0制御レジスタと同じレイアウトです。その他のビットは、EAXとEBXで次のように指定されます。
| 少し | イーアックス | EBX | 少し | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 0 | (初期設定) | (0でなければなりません)[ a ] | (予約済み) | 0 | ||
| 1 | デバッグ | デバッガがエンクレーブデータの読み取りと書き込みを行えるようにEDBGRDするEDBGWR | 1 | |||
| 2 | モード64ビット | 64ビットモードのエンクレーブ | 2 | |||
| 3 | (予約済み) | 3 | ||||
| 4 | プロビジョンキー | プロビジョニングキーは以下から入手可能ですEGETKEY | 4 | |||
| 5 | EINITTOKEN_KEY | EINITトークンキーは以下から入手可能EGETKEY | 5 | |||
| 6 | 中央ヨーロッパ標準時 | CET(制御フロー強制技術)属性により、 | 6 | |||
| 7 | KSS | 鍵の分離と共有 | 7 | |||
| 8 | (予約済み) | 8 | ||||
| 9 | (予約済み) | 9 | ||||
| 10 | AEXNOTIFY | エンクレーブ内のスレッドはAEX通知を受信する可能性がある[ 127 ] | 10 | |||
| 31:11 | (予約済み) | 31:11 | ||||
- ^エクスクレーブ内に存在するSECSのコピーの場合、SECS.ATTRIBUTESのビット0(INIT)は、そのエンクレーブが で初期化されていることを示すために使用されます
ENCLS[EINIT]。 への入力として与えられるSECSコピーでは、このビットは0である必要がありますENCLS[CREATE]。
サブリーフ 2 以上は、SGX で EPC (Enclave Page Cache) セクションとして使用できる物理メモリ領域に関する情報を提供するために使用されます。
| ビット | イーアックス | EBX | ECX | EDX | ビット | |||
|---|---|---|---|---|---|---|---|---|
| 3:0 | サブリーフタイプ:
| EPCセクションの物理ベースアドレスのビット51:32 | EPC セクションのプロパティ:
| EPCセクションのサイズのビット51:32 | 3:0 | |||
| 11時4分 | (予約済み) | (予約済み) | 11時4分 | |||||
| 19時12分 | EPCセクションの物理ベースアドレスのビット31:12 | EPCセクションのサイズのビット31:12 | 19時12分 | |||||
| 31:20 | (予約済み) | (予約済み) | 31:20 |
EAX=14h: プロセッサトレース
このリーフは、Intel Processor Trace (Real Time Instruction Trace とも呼ばれます) の機能情報を提供します。
サブリーフ0の場合、EAXに返される値は、EAX=14hのCPUIDでサポートされる最上位サブリーフのインデックスです。EBXとECXは機能フラグを提供し、EDXは予約されています。
| 少し | EBX | ECX | 少し | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 0 | cr3_フィルター | CR3フィルタリングをサポート | トップアウト | トレースパケット用のToPA(物理アドレステーブル)出力メカニズムをサポート | 0 | |
| 1 | サイク_acc | 設定可能なPSB(パケットストリーム境界)パケットレートとサイクルアキュレートモード(CYCパケット)をサポート | メントリー | ToPAテーブルには複数の出力エントリを保持できます | 1 | |
| 2 | IPフィルター | IPフィルタリング、TraceStopフィルタリング、ウォームリセット中のPT MSRの保存をサポート | sngl_rng_out | シングルレンジ出力方式をサポート | 2 | |
| 3 | mtc | MTC (Mini Time Counter) タイミング パケットがサポートされ、COFI (Change of Flow Instructions) パケットの抑制がサポートされます。 | トレーストランスポートサブシステム | トレーストランスポートサブシステムへの出力がサポートされています | 3 | |
| 4 | ptwrite | PTWRITEサポートされている命令 | (予約済み) | 4 | ||
| 5 | pwr_evt_trace | 電源イベントトレースをサポート | (予約済み) | 5 | ||
| 6 | pmi_preserve | PSBおよびPMI(パフォーマンス監視割り込み)の保存をサポート | (予約済み) | 6 | ||
| 7 | イベントトレース | イベント トレース パケット生成をサポート | (予約済み) | 7 | ||
| 8 | tnt_dis | TNT (Branch Taken-Not-Taken) パケット生成の無効化がサポートされています。 | (予約済み) | 8 | ||
| 9 | PTTT(プロセッサ トレース トリガー トレース)をサポート | (予約済み) | 9 | |||
| 30:10 | (予約済み) | (予約済み) | 30:10 | |||
| 31 | (予約済み) | リップ | IP ペイロードを含むトレース パケットの IP (命令ポインター) 形式:
| 31 | ||
| 少し | イーアックス | EBX | ECX | 少し | |||||
|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | ||||
| 0 | 範囲数 | フィルタリング用に設定可能なアドレス範囲の数 | サイクルしきい値 | サポートされているサイクル閾値エンコーディングのビットマップ | トリガーアクションアトリビューションをサポート | 0 | |||
| 1 | トリガーアクションTRACE_PAUSEとTRACE_RESUMEがサポートされています | 1 | |||||||
| 2 | (予約済み) | 2 | |||||||
| 7:3 | (予約済み) | (予約済み) | 7:3 | ||||||
| 10時8分 | IA32_RTIT_TRIGGERx_CFG MSR の数。 (サポートされるトリガーの数は、この値の 4 倍です) | (予約済み) | 10時8分 | ||||||
| 14:11 | (予約済み) | (予約済み) | 14:11 | ||||||
| 15 | (予約済み) | トリガー入力DRマッチをサポート | 15 | ||||||
| 31:16 | mtc_rate | サポートされているMTC期間エンコーディングのビットマップ | psb_rate | サポートされている構成可能な PSB 周波数エンコーディングのビットマップ | (予約済み) | 31:16 | |||
EAX=15h および EAX=16h: CPU、TSC、バス、コアの水晶クロック周波数
これら 2 つのリーフは、EAX、EBX、ECX で CPU のさまざまな周波数に関する情報を提供します (EDX は両方のリーフで予約されています)。
| イーアックス | EBX | ECX |
|---|---|---|
| TSC周波数とコアクリスタルクロック周波数の比(分母) | TSC周波数とコアクリスタルクロック周波数の比、分子[ a ] | コア水晶クロック周波数(単位:Hz ) [ a ] |
| ビット | イーアックス | EBX | ECX | ビット |
|---|---|---|---|---|
| 15:0 | プロセッサベース周波数(MHz)[ a ] | プロセッサ最大周波数(MHz)[ a ] | バス/基準周波数(MHz)[ a ] | 15:0 |
| 31:16 | (予約済み) | (予約済み) | (予約済み) | 31:16 |
リーフ 15h の EBX と ECX に返された値が両方ともゼロ以外の場合、TSC (タイム スタンプ カウンター) 周波数 (Hz) は次のように表されますTSCFreq = ECX*(EBX/EAX)。
一部のプロセッサ(例:Intel Skylake)では、CPUID_15h_ECXはゼロですが、CPUID_16h_EAXはゼロではありません。このような状況にある既知のプロセッサ[ 128 ]では、 TSC周波数はプロセッサベース周波数と等しく、コアクリスタルクロック周波数(Hz)は次のように計算できますCoreCrystalFreq = (CPUID_16h_EAX * 10000000) * (CPUID_15h_EAX/CPUID_15h_EBX)。
CPUIDリーフ15hにTSC/コアクリスタルクロック比を列挙するプロセッサでは、APICタイマー周波数はコアクリスタルクロック周波数をAPICの除算構成レジスタで指定された除数で割ったものになります。[ 129 ]
EAX=17h: SoCベンダー属性列挙
このリーフは、x86 CPU IP コアが他社製SoC ( System on ChipCPUID ) に実装されているシステムに存在します。他のリーフはx86 CPU コアに関する情報を提供しますが、このリーフは SoC に関する情報を提供します。このリーフは ECX のサブリーフインデックスを取得します。
サブリーフ 0 は、EAX の最大サブリーフ インデックス (少なくとも 3) と、EBX/ECX/EDX の SoC 識別情報を返します。
| 少し | EBX | ECX | EDX | 少し | ||
|---|---|---|---|---|---|---|
| 15:0 | SoCベンダーID | SoC プロジェクト ID | SoC プロジェクト内の SoC ステッピング ID | 15:0 | ||
| 16 | SoCベンダーIDスキーム | 16 | ||||
| 31:17 | (予約済み) | 31:17 |
サブリーフ1から3は、UTF-8形式の48バイトのSoCベンダーブランド文字列を返します。サブリーフ1はEAX、EBX、ECX、EDX(この順序)の最初の16バイトを返し、サブリーフ2は次の16バイトを返し、サブリーフ3は最後の16バイトを返します。文字列はヌル終端されていても構いませんが、必須ではありません。
EAX=19h: Intel Key Lockerの機能
このリーフは、EAX、EBX、ECX の Intel Key Locker の機能情報を提供します。EDX は予約済みです。
| 少し | イーアックス | EBX | ECX | 少し | |||||
|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | ||||
| 0 | cpl0_restrict | CPL0のみのキーロッカー制限がサポートされています | aes_kle | AES「キーロッカー」命令が有効 | バックアップなし | バックアップなしパラメータをLOADIWKEYサポート | 0 | ||
| 1 | 暗号化制限なし | キーロッカーの非暗号化制限をサポート | (予約済み) | rand_iwkey | KeySource エンコーディング 1 (内部ラッピングキーのランダム化) をサポート | 1 | |||
| 2 | 復号化制限なし | キーロッカーの非復号化制限をサポート | aes_wide_kl | AES「ワイドキーロッカー」説明書をサポート | (予約済み) | 2 | |||
| 3 | (プロセス制限)[ a ] | (予約済み) | (予約済み) | 3 | |||||
| 4 | (予約済み) | iwkeyバックアップ | 「キーロッカー」MSRと内部ラッピングキーのバックアップをサポート | (予約済み) | 4 | ||||
| 31:5 | (予約済み) | (予約済み) | (予約済み) | 31:5 | |||||
EAX=1Dh: Intel AMXタイル情報
の場合ECX=0、サポートされている最高位の「パレット」サブリーフがEAXに列挙されます。 の場合、パレットnECX≥1の情報が返されます。
| ビット | イーアックス | EBX | ECX | EDX | ビット | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | |||||
| 15:0 | タイルの合計バイト数 | すべてのタイルレジスタのサイズ(バイト単位、8192) | 行あたりのバイト数 | (64) | 最大行数 | (16) | (予約済み) | 15:0 | ||||
| 31:16 | タイルあたりのバイト数 | 1タイルのサイズ(バイト単位、1024) | 最大名前数 | タイルレジスタの数(8) | (予約済み) | (予約済み) | 31:16 | |||||
EAX=1Eh: Intel AMX タイル乗数 ( TMUL) 情報
このリーフはAMXTMUL(タイル乗数)ユニットに関する情報を返します。リーフは複数のサブリーフを備えており、ECXで選択されます。
サブリーフ 0 は、EAX でサポートされている最大のサブリーフと EBX の基本 TMUL 情報を返します。サブリーフ 1 は、EAX の追加機能情報を返します。
| ビット | EBX | ECX | EDX | ビット | |||||
|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | ||||
| 7:0 | tmul_maxk | 行または列の最大数(16) | (予約済み) | (予約済み) | 7:0 | ||||
| 23:8 | tmul_maxn | 列あたりの最大バイト数(64) | (予約済み) | (予約済み) | 23:8 | ||||
| 31:24 | (予約済み) | (予約済み) | (予約済み) | 31:24 | |||||
| ビット | イーアックス | EBX | ECX | EDX | ビット | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | |||||
| 0 | amx-int8 | 8ビット整数のサポート | (予約済み) | (予約済み) | (予約済み) | 0 | ||||||
| 1 | amx-bf16 | bfloat16サポート | (予約済み) | (予約済み) | (予約済み) | 1 | ||||||
| 2 | amx複合体 | 複素数のサポート | (予約済み) | (予約済み) | (予約済み) | 2 | ||||||
| 3 | amx-fp16 | float16のサポート | (予約済み) | (予約済み) | (予約済み) | 3 | ||||||
| 4 | amx-fp8 | float8のサポート | (予約済み) | (予約済み) | (予約済み) | 4 | ||||||
| 5 | (amx-転置) [ a ] | (転置指示サポート) | (予約済み) | (予約済み) | (予約済み) | 5 | ||||||
| 6 | amx-tf32 | tf32/fp19 サポート | (予約済み) | (予約済み) | (予約済み) | 6 | ||||||
| 7 | amx-avx512 | AMX-AVX512 サポート | (予約済み) | (予約済み) | (予約済み) | 7 | ||||||
| 8 | amx-movrs | AMX-MOVRSサポート | (予約済み) | (予約済み) | (予約済み) | 8 | ||||||
| 31:9 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 31:9 | |||||||
EAX=21h: TDX列挙用に予約済み
Intel TDX(信頼ドメイン拡張CPUID)がアクティブな場合、 TD(信頼ドメイン)ゲストによる命令実行の試みはTDXモジュールによって傍受されます。このモジュールは、がおよび(リーフ、サブリーフ0)CPUIDで呼び出されると、リーフでサポートされている最高のサブリーフのインデックスと、TDXモジュールベンダーID文字列をEBX、EDX、ECX(この順序)の12バイトASCII文字列として返します。Intel独自のモジュール実装は、ベンダーID文字列(末尾に4つのスペースを含む)を返します[ 133 ]。このモジュールでは、追加機能情報はを通じては利用できず、代わりにTDX固有の命令を通じて取得する必要があります。 EAX=21hECX=021h21hEAX"IntelTDX "CPUIDTDCALL
21hこのリーフはハードウェアで予約されており、 CPU 上で直接実行されると、EAX/EBX/ECX/EDX に 0 を返します (最高の基本リーフが 以上のプロセッサの場合)。
EAX=24h、ECX=0: AVX10 統合ベクター ISA
これは、EAXでサポートされている最大のサブリーフとEBXのAVX10機能情報を返します。[ 120 ](ECXとEDXは予約されています。)
| 少し | EBX | |
|---|---|---|
| 短い | 特徴 | |
| 7:0 | ベクターISAバージョン | AVX10 コンバージドベクター ISA バージョン (≥1) |
| 15:8 | (予約済み) | |
| 18時16分 | (111bとして予約)[ a ] | |
| 31:19 | (予約済み) | |
- ^これらの3ビットはもともと「サポートされるベクトル幅」を示すために設計されており、ビット16は128ビットベクトルのサポート、ビット17は256ビット、ビット18は512ビットベクトルのサポートを示していた。最大128ビットのCPUは「AVX10/128」サポート、最大256ビットは「AVX10/256」サポート、最大512ビットは「AVX10/512」サポートを備えていると言われていた。スラッシュの後の数字はサポートされる最大ベクトル幅を示している。AVX10.1の発表後まもなく、Intelは開発者からの反発を受けてAVX10/128の計画を断念し、 [ 134 ]最大256ビットと512ビットのベクトル幅のみがサポートされるようになった。AVX10.2では、Intelはベクトル幅の区別を完全に廃止し、代わりに512ビットベクトルのサポートを義務付けた。出荷されたAVX10.1 CPUは、Pコアのみの設計であるGranite Rapids (後にAVX10/512も搭載)をベースにしたものだけだったため、 AVX10/256 CPUは出荷されませんでした。つまり、出荷されたAVX10搭載CPUは128ビット、256ビット、512ビットをサポートし、3ビットすべてが111bでした。これらのビットは現在、予約済みと記載されていますが、実際には111bと読み取られます。
EAX=24h、ECX=1: ディスクリート AVX10 機能
サブリーフ 1 は、バージョンにバインドされていない AVX10 機能用に予約されています。
| 少し | ECX | |
|---|---|---|
| 短い | 特徴 | |
| 0 | (VPMM) | (ベクトル拡張パック行列乗算)[ 135 ] |
| 1 | (予約済み) | |
| 2 | AVX10_VNNI_INT | AVX10.2 VNNI命令[ a ] [ 136 ] |
| 31:3 | (予約済み) | |
- ^ AVX10.2 VNNI命令は、AVX10バージョンが2以上(CPUID.(EAX=24h).EBX[7:0]を参照)またはAVX10_VNNI_INTビットがセットされている場合に存在します。
EAX=2000'0000h: 実装された最高のXeon Phi関数
最高位の関数はEAXに返されます。このリーフはXeon Phiプロセッサにのみ存在します。[ 137 ]
EAX=2000'0001h: Xeon Phi 機能ビット
この関数は機能フラグを返します。
| 少し | イーアックス | EBX | ECX | EDX | 少し | |||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | 短い | 特徴 | |||||
| 3:0 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 3:0 | |||||||
| 4 | (予約済み) | (予約済み) | (予約済み) | k1om | K1OM [ 137 ] | 4 | ||||||
| 31:5 | (予約済み) | (予約済み) | (予約済み) | (予約済み) | 31:5 | |||||||
EAX=4000'0000h-4FFFF'FFFh:ハイパーバイザー用に予約済み
命令がIntel VT-x または AMD-v 仮想化環境CPUIDで実行されると、ハイパーバイザーによってインターセプトされ、ハイパーバイザーは基盤となるハードウェアとは異なる機能フラグを返すことができます。リーフはハードウェアに実装されておらず、このインターセプト メカニズムを通じてハイパーバイザー固有の識別情報と機能情報を提供するためにハイパーバイザーによって予約されています。 CPUIDCPUID40000000h4FFFFFFFh
リーフ については40000000h、ハイパーバイザーは EAX にサポートされている最高のハイパーバイザー CPUID リーフのインデックスと、EBX、ECX、EDX (この順序で) に 12 文字のハイパーバイザー ID 文字列を返すことが期待されます。 リーフ については、ハイパーバイザーは EAX にインターフェイス識別シグネチャを返す場合があります。たとえば、 Hyper-V40000001h互換であることをアドバタイズしたいハイパーバイザーは、EAX に—を返すことができます。 [ 138 ] [ 139 ]リーフ からサポートされている最高レベルのリーフまでの形式は、それ以外はハイパーバイザー固有です。これらのリーフを実装するハイパーバイザーは通常、CPUID リーフ 1 の ECX のビット 31 も設定して、それらの存在を示します。 0x31237648"Hv#1"40000001h
複数のハイパーバイザーインターフェースを公開するハイパーバイザーは、追加インターフェースごとに100hリーフの間隔で、追加のCPUIDリーフセットを提供する場合があります。例えば、QEMUがHyper-VインターフェースとKVMインターフェースの両方を提供するように構成されている場合、CPUIDリーフから始まるHyper-V情報40000000hと、リーフから始まるKVM情報を提供します40000100h。[ 140 ] [ 141 ]
リーフにハイパーバイザー ID 文字列を返すことが知られているハイパーバイザーに40000000hは、次のようなものがあります。
| ハイパーバイザー | ID文字列(ASCII) | 注記 |
|---|---|---|
| マイクロソフトHyper-V | "Microsoft Hv"[ 138 ] | |
| Linux KVM | "KVMKVMKVM\0\0\0"[ 142 ] | \0 は ASCII NUL 文字を表します。 |
"Linux KVM Hv"[ 143 ] | Hyper-Vエミュレーション[ 144 ] | |
| バイブ | "BHyVE BHyVE "、"bhyve bhyve " | ID文字列は2013年に大文字と小文字の混合から小文字に変更されました。[ 145 ] 小文字の文字列は、xhyveやHyperKitなどのbhyve由来のハイパーバイザーでも使用されます。[ 146 ] |
| ゼン | "XenVMMXenVMM"[ 147 ] | HVM (ハードウェア仮想マシン) モードを使用する場合のみ。 |
| QEMU | "TCGTCGTCGTCG"[ 148 ] | TCG (Tiny Code Generator) が有効な場合のみ。 |
| 類似点 | "prl hyperv "、" lrpepyh vr" | この文字列は、Parallels Workstationのいくつかのバージョンで見られる、エンディアンを交換した文字列のバージョンです。[ 149 ]" lrpepyh vr""prl hyperv " |
| ヴイエムウェア | "VMwareVMware"[ 150 ] | |
| ACRNプロジェクト | "ACRNACRNACRN"[ 151 ] | |
| バーチャルボックス | "VBoxVBoxVBox"[ 152 ] | 「hyperv」準仮想化プロバイダーを使用するように構成されている場合のみ。 |
| QNXハイパーバイザー | "QXNQSBMV" | 公式QNXドキュメント[ 153 ]で提供されているQNXハイパーバイザー検出方法は、EBXとECX(エンディアンネススワップを含む)で提供されている文字列の最初の8文字のみをチェックします。EDXは無視され、任意の値を取る可能性があります。 |
| NetBSD NVMM | "___ NVMM ___"[ 154 ] | |
| OpenBSD VMM | "OpenBSDVMM58"[ 155 ] | |
| シーメンス刑務所 | "Jailhouse\0\0\0"[ 156 ] | \0 は ASCII NUL 文字を表します。 |
| ビットディフェンダーナポカ | "Napocahv "[ 157 ] | |
| FEX-エミュ | "FEXIFEXIEMU\0"[ 158 ] | \0 は ASCII NUL 文字を表します。 |
| インテル HAXM | "HAXMHAXMHAXM"[ 159 ] | プロジェクトは中止されました。 |
| インテル KGT (信頼) | "EVMMEVMMEVMM"[ 160 ] | Trusty OS の Intel x86 アーキテクチャ ディストリビューションに使用される KGT の「trusty」ブランチのみ(アーカイブ) (KGTはリーフ3の署名も返します |
| ユニシスs-Par | "UnisysSpar64"[ 161 ] | |
| ロッキード・マーティンLMHS | "SRESRESRESRE"[ 162 ] |
EAX=8000'0000h: 実装された最高拡張機能
最も高い呼び出しパラメータが EAX に返されます。
EBX/ECX/EDX は、AMD CPU では製造元 ID 文字列 (EAX=0 と同じ) を返しますが、Intel CPU では返しません。
EAX=8000'0001h: 拡張プロセッサ情報および機能ビット
これは、EDX および ECX の拡張機能フラグを返します。
のビットの多くEDX(ビット 0 ~ 9、12 ~ 17、23、および 24)はリーフEDXからの重複ですEAX=1。これらのビットは薄い黄色で強調表示されています。(これらの重複ビットは AMD CPU には存在しますが、Intel CPU には存在しません。)
AMD機能フラグは以下のとおりです。[ 163 ] [ 164 ]
| 少し | EDX | ECX | 少し | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 0 | fpu | オンボードx87 FPU | lahf_lm | LAHF/SAHFロングモード | 0 | |
| 1 | vme | 仮想モード拡張(VIF) | cmp_legacy | ハイパースレッディングが無効です | 1 | |
| 2 | デ | デバッグ拡張機能(CR4ビット 3) | svm | セキュア仮想マシン | 2 | |
| 3 | プセ | ページサイズ拡張 | エクスタピック | 拡張APICスペース | 3 | |
| 4 | tsc | タイムスタンプカウンター | cr8_legacy | 32ビットモードの CR8 | 4 | |
| 5 | msr | モデル固有のレジスタ | アブム/lzcnt | 高度なビット操作 と) (LZCNTPOPCNT | 5 | |
| 6 | ペイ | 物理アドレス拡張 | sse4a | SSE4a | 6 | |
| 7 | マク | マシンチェック例外 | ずれ | 不整合SSEモード | 7 | |
| 8 | CX8 | CMPXCHG8B(比較スワップ)命令 | 3dnowprefetch | PREFETCHおよびPREFETCHW指示 | 8 | |
| 9 | アピック | オンボードの高度なプログラマブル割り込みコントローラ | osvw | OS で確認できる回避策 | 9 | |
| 10 | (システムコール) [ a ] | (SYSCALL/ SYSRET、K6のみ) | IBS | 命令ベースサンプリング | 10 | |
| 11 | システムコール[ b ] | SYSCALLおよびSYSRET指示 | xop | XOP命令セット | 11 | |
| 12 | mtrr | メモリタイプ範囲レジスタ | スキニット | SKINIT/STGI説明書 | 12 | |
| 13 | ページ | CR4のページグローバル有効化ビット | wdt | ウォッチドッグタイマー | 13 | |
| 14 | mca | マシンチェックアーキテクチャ | (予約済み) | 14 | ||
| 15 | cmov | 条件付き移動とFCMOV命令 | lwp | 軽量プロファイリング[ 168 ] | 15 | |
| 16 | パット[ c ] | ページ属性テーブル | fma4 | 4オペランド融合乗算加算命令 | 16 | |
| 17 | pse36 | 36ビットページサイズ拡張 | tce | 翻訳キャッシュ拡張機能 | 17 | |
| 18 | (予約済み) | (予約済み) | 18 | |||
| 19 | 等 | 「Athlon MP」/「Sempron」CPUブランド識別[ d ] | ノードID_msr | ノードID MSR ( C001_100C) [ 173 ] | 19 | |
| 20 | ネクス | NXビット | (予約済み) | 20 | ||
| 21 | (予約済み) | tbm | 末尾ビット操作 | 21 | ||
| 22 | mmxext | 拡張MMX | トポエクスト | トポロジ拡張 | 22 | |
| 23 | mmx | MMX命令 | パフォーマンスコア | コアパフォーマンスカウンター拡張 | 23 | |
| 24 | fxsr [ c ] | FXSAVE、FXRSTOR命令、CR4ビット9 | パーフクトル_nb | ノースブリッジパフォーマンスカウンター拡張 | 24 | |
| 25 | fxsr_opt | FXSAVE/FXRSTOR最適化 | (ストリームパフォーマンスモニタ) | (ストリーミングパフォーマンスモニターのアーキテクチャ)[ e ] | 25 | |
| 26 | pdpe1gb | ギガバイトページ | dbx | データブレークポイント拡張 | 26 | |
| 27 | rdtscp | RDTSCP命令 | パーフェクト | パフォーマンスタイムスタンプカウンター(PTSC) | 27 | |
| 28 | (予約済み) | pcx_l2i | L2I パフォーマンス カウンター拡張 | 28 | ||
| 29 | 映画 | ロングモード | モニターx | MONITORXおよびMWAITX指示 | 29 | |
| 30 | 3dnowext | 拡張された3DNow! | アドレスマスク拡張子 | 命令ブレークポイントのアドレスマスクを32ビットに拡張 | 30 | |
| 31 | 3dnow | 3Dナウ! | (予約済み) | 31 | ||
- ^ /のサポートを示すための EDX ビット 10 の使用は、ファミリー 5モデル 7 CPU ( AMD K6、250nm "Little Foot")でのみ有効です。他のすべてのプロセッサでは、代わりに EDX ビット 11 を使用する必要があります。
SYSCALLSYSRETAuthenticAMDこれらの命令はモデル7で初めて導入されました[ 165 ] - これらの命令のサポートを示すCPUIDビットはモデル8( AMD K6-2 )以降はEDXビット11に移動されました[ 166 ]。
- ^ Intel CPUでは、 /のCPUIDビット命令が64ビットモードで実行された場合にのみ設定されます。 [ 167 ]
SYSCALLSYSRETCPUID - ^ a b一部のプロセッサ(Cyrix MediaGXm [ 169 ]、いくつかのGeode(NatSemi Geode GXm、GXLV、GX1、AMD Geode GX1 [ 170 ])およびTransmeta Crusoe [ 171 ])では、EDXビット16と24の意味が異なります。
- ^ EDXビット19は、ファミリー6プロセッサのCPUブランド識別にのみ使用されます。このビットは、プロセッサ署名とFSB速度と組み合わせて、プロセッサがマルチプロセッサ対応であるか、 Sempronブランド名を持っているかを識別するために使用されます。 [ 172 ]
AuthenticAMD - ^ ECXビット25は、AMD APM [ 174 ]のリビジョン3.20でのみStreamPerfMonとしてリストされており、それ以降のリビジョンでは予約済みとしてリストされています。このビットはExcavatorとSteamrollerのCPUでのみセットされています。
EAX=8000'0002h,8000'0003h,8000'0004h: プロセッサブランド文字列
これらは、EAX、EBX、ECX、EDXでプロセッサブランド文字列を返します。48CPUIDバイトのASCIIプロセッサブランド文字列全体を取得するには、各パラメータを順番に発行する必要があります。[ 175 ]CPUID最初にを発行しEAX = 80000000h、返された値が以上であるかどうかを確認することで、CPUにこの機能が存在するかどうかを確認する必要があります80000004h。
Intel/AMDのドキュメントでは、文字列はヌル終端されるように指定されていますが、これは常に当てはまるわけではありません(たとえば、DM&P Vortex86DX3とAMD Ryzen 7 6800HSは、リーフでヌル終端されていないブランド文字列を返すことが知られています80000002h- 80000004h[ 176 ] [ 177 ])。そのため、ソフトウェアはこれに依存しないでください。
#include <stdio.h> #include <string.h> #include <cpuid.h>int main () { unsigned int regs [ 12 ]; char str [ sizeof ( regs ) + 1 ];__cpuid ( 0x80000000 , regs [ 0 ], regs [ 1 ], regs [ 2 ], regs [ 3 ]);if ( regs [ 0 ] < 0x80000004 ) 1 を返します。__cpuid ( 0x80000002 , regs [ 0 ], regs [ 1 ], regs [ 2 ], regs [ 3 ]); __cpuid ( 0x80000003 , regs [ 4 ], regs [ 5 ], regs [ 6 ], regs [ 7 ]); __cpuid ( 0x80000004 , regs [ 8 ], regs [ 9 ], regs [ 10 ], regs [ 11 ]);memcpy ( str , regs , sizeof ( regs )); str [ sizeof ( regs )] = '\0' ; printf ( "%s \n " , str );0を返す; }AMDプロセッサでは、180nm Athlon以降(AuthenticAMDファミリー6モデル2以降)では、CPUIDリーフによって返されるプロセッサブランド文字列を変更することが可能です80000002h。これは、MSRに48バイトの置換文字列を書き込む命令80000004hを使用することで可能です。[ 172 ] [ 178 ] AMD Geode GX/LXでも、 MSRを使用することで同様のことが可能です。[ 179 ]WRMSRC0010030hC0010035h300Ah300Fh
CPUID によって返される文字列には80000002h、80000004h先頭、末尾、または中間の複数のスペースが含まれることがよくあります。Intel/AMD CPU に見られるような、連続するスペースが多数含まれるプロセッサ ブランド文字列の例をいくつか挙げると、次のとおりです。
Intel(R) Core(TM) i7-3960X CPU @ 3.30GHz[ 180 ]Intel(R) Xeon(R) CPU W3670 @ 3.20GHz[ 181 ]AMD EPYC 9655 96-Core Processor[ 182 ]
場合によっては、CPUベンダーを特定するには、CPUIDリーフ0のベンダーIDとリーフ1のCPUシグネチャだけでなく、リーフ80000002h-のプロセッサブランド文字列も調べる必要があります80000004h。既知のケースとしては、以下が挙げられます。
MontageMontage Jintide CPU は、Montage CPU のブランド文字列にサブ文字列が含まれていることで、ベースとなっている Intel Xeon CPU モデルと区別できます(例: Montage Jintide C2460 [ 183 ]と Intel Xeon Platinum 8160 [ 184 ]は、どちらもGenuineIntelFamily 6 Model 55h Stepping 4 として識別されるため、この方法で区別できます)。CentaurHaulsファミリー 6 CPU は VIA または Zhaoxin CPU のいずれかです。これらは、ZHAOXINZhaoxin CPU のブランド文字列内のサブ文字列の存在によって区別できます (例: Zhaoxin KaiXian ZX-C+ C4580 [ 185 ]と VIA Eden X4 C4250 [ 186 ]はどちらもCentaurHaulsファミリー 6 モデル 0Fh ステッピング 0Eh として識別され、この方法で区別できます)。- AppleのRosetta 2 x86エミュレータ(ファミリー6として識別されます)は、Rosetta 2のブランド文字列内の
GenuineIntelサブ文字列の存在によって、エミュレートしているIntel Xeonプロセッサと区別できます。[ 19 ]VirtualApple - マイクロソフトのx86-on-ARMエミュレーターは、64ビットモードではファミリー0Fhとして識別されますが、エミュレーターのブランド文字列に
AuthenticAMDサブ文字列が存在することで、エミュレートしているAMDプロセッサーと区別できます。 [ 19 ]Virtual CPU
EAX=8000'0005h: L1キャッシュとTLB識別子
これは、EAX、EBX、ECX、EDXにおけるプロセッサのレベル1キャッシュとTLB特性に関する情報を次のように提供します。[ a ]
- EAX: L1ヒュージページTLB(2M/4Mページに対応するエントリを保持するTLB)に関する情報[ b ]
- EBX: L1 スモールページ TLB (4K ページに対応するエントリを保持する TLB) に関する情報
- ECX: L1データキャッシュに関する情報
- EDX: L1命令キャッシュに関する情報
| ビット | イーアックス | EBX | ECX | EDX | ビット | |
|---|---|---|---|---|---|---|
| 7:0 | 命令TLBエントリ数[ c ] | キャッシュラインサイズ(バイト単位) | 7:0 | |||
| 15:8 | 命令TLBの連想性[ d ] | タグあたりのキャッシュライン数 | 15:8 | |||
| 23:16 | データTLBエントリ数[ c ] | キャッシュアソシエティビティ[ d ] | 23:16 | |||
| 31:24 | データTLBの連想性[ d ] | キャッシュサイズ(キロバイト) | 31:24 | |||
- ^古いCyrixおよびGeode CPU(具体的には、Family 5 Model 4 CPUのみ)には
CyrixInsteadleafGeode by NSCが80000005h存在するが、leaf 2と似た完全に異なるフォーマットになっている。 [ 187 ] - ^ TLB内でスモールページしか扱えないプロセッサでは、このリーフはEAXに0を返します。(AMD K6やTransmeta Crusoeなどのそのようなプロセッサでは、ページテーブル内のヒュージページエントリは、TLBへのエントリ時に必要に応じて4Kページに分割されます。) VIA Cyrix III "Samuel" [ 188 ]などの一部のプロセッサでは、このリーフはEAXに0を返します。これはEAX=0、つまりヒュージページTLBがないのと同じ意味です。
0x80000005 - ^ a b Transmeta CPU では、この値は
FFh256 エントリの TLB を示すために使用されます。 - ^ a b c leaf の結合フィールドには
80000005h、次の値が使用されます。価値 意味 0 (予約済み) 1 ダイレクトマップ 2から FEhNウェイセットアソシアティブ(フィールドはNをエンコード) FFh完全連想型
EAX=8000'0006h: 拡張L2キャッシュ機能
ECX の L2 キャッシュの詳細を返します。これには、バイト単位のライン サイズ (ビット 07 - 00)、連想の種類 (4 ビット フィールドでエンコード、ビット 15 - 12)、および KB 単位のキャッシュ サイズ (ビット 31 - 16) が含まれます。
#include <stdio.h> #include <cpuid.h>int main () { unsigned int eax 、ebx 、ecx 、edx ; unsigned int lsize 、assoc 、cache ;__cpuid ( 0x80000006 , eax , ebx , ecx , edx ); lsize = ecx & 0xff ; assoc = ( ecx >> 12 ) & 0x07 ; cache = ( ecx >> 16 ) & 0xffff ;printf ( "行サイズ: %d B、アソシエーションタイプ: %d、キャッシュサイズ: %d KB。\n " 、lsize 、assoc 、cache );0を返す; }EAX=8000'0007h: プロセッサ電源管理情報とRAS機能
この機能は、CPU の 電力管理、電力レポート、および RAS (信頼性、可用性、保守性) 機能に関する情報を提供します。
| 少し | EBX | EDX | 少し | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 0 | MCAオーバーフロー回復 | MCA(マシンチェックアーキテクチャ)オーバーフロー回復サポート | TS | 温度センサー | 0 | |
| 1 | 助け | ソフトウェアの修正不可能なエラーの抑制と回復機能 | FID | 周波数ID制御 | 1 | |
| 2 | HWA | ハードウェアアサートサポート(MSRC001_10C0からC001_10DF) | ビデオ | 電圧ID制御 | 2 | |
| 3 | スケーラブルMca | スケーラブルなMCAをサポート | TTP | サームトリップ | 3 | |
| 4 | (予約済み) | TM | ハードウェア熱制御(HTC)をサポート | 4 | ||
| 5 | (予約済み) | STC | ソフトウェア熱制御(STC)対応[ 189 ] | 5 | ||
| 6 | (予約済み) | 100MHzステップ | 100 MHz 乗算器制御 | 6 | ||
| 7 | (予約済み) | HwP状態 | ハードウェアPステート制御(MSRC001_0061からC001_0063) | 7 | ||
| 8 | (予約済み) | Tsc不変 | 不変 TSC — TSC (タイムスタンプ カウンター) レートは、すべての P 状態、C 状態、および停止許可遷移にわたって不変であることが保証されます。 | 8 | ||
| 9 | (予約済み) | CPB | コアパフォーマンスブースト | 9 | ||
| 10 | (予約済み) | 有効頻度RO | 読み取り専用有効周波数インターフェース(MSRC000_00E7およびC000_00E8) | 10 | ||
| 11 | (予約済み) | プロセスフィードバックインターフェース | プロセッサフィードバックインターフェースをサポート | 11 | ||
| 12 | (予約済み) | プロセスパワーレポート | プロセッサ電力レポートインターフェースをサポート | 12 | ||
| 13 | (予約済み) | コネクテッドスタンバイ | コネクトスタンバイ[ 190 ] | 13 | ||
| 14 | (予約済み) | ラプル | 走行平均パワー制限[ 190 ] | 14 | ||
| 15 | (予約済み) | 高速CPPC | 高速CPPC(協調プロセッサパフォーマンス制御)をサポート[ 190 ] | 15 | ||
| 31:16 | (予約済み) | (予約済み) | 31:16 | |||
| ビット | イーアックス | ECX | ビット | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 7:0 | モニターの数 | C001_0080MSR以降に利用可能なプロセッサフィードバックMSRペアの数[ 191 ] | CPU電力サンプル時間比 | コンピューティング ユニット電力アキュムレータのサンプル期間と TSC カウンター期間の比。 | 7:0 | |
| 15:8 | バージョン | プロセッサフィードバック機能バージョン | 15:8 | |||
| 31:16 | 最大ラップ時間 | 2 回のラップを回避するためにソフトウェアが使用する読み取り間の最大時間 (ミリ秒単位)。 | 31:16 | |||
EAX=8000'0008h: 仮想アドレスと物理アドレスのサイズ
| 少し | EBX | |
|---|---|---|
| 短い | 特徴 | |
| 0 | クゼロ | CLZERO命令 |
| 1 | 退職したインストラクター | 廃止命令数MSR(C000_00E9h)サポート |
| 2 | xrstor_fp_err | XRSTORFPエラーを復元する |
| 3 | 無効 | INVLPGBおよびTLBSYNC指示 |
| 4 | rdpru | RDPRU命令 |
| 5 | (PS5「xotext」/実行専用メモリ)[ 192 ] [ a ] | |
| 6 | ムベ | メモリ帯域幅の強制 |
| 7 | (予約済み)[ a ] | |
| 8 | mコミット | MCOMMIT命令 |
| 9 | wbnoinvd | WBNOINVD命令 |
| 10 | (予約済み) | |
| 11 | (予約済み)[ a ] | |
| 12 | IBPB | PRED_CMD間接分岐予測バリア( MSRのビット0に1を書き込むことによって実行される049h) |
| 13 | wbinvd_int | WBINVD中断WBNOINVD可能 |
| 14 | IBRS | 間接分岐制限投機 |
| 15 | STIBP | シングルスレッド間接分岐予測モード |
| 16 | IbrsAlwaysOn | IBRSモードはパフォーマンスが向上しているため、常にオンにしておく必要があります。 |
| 17 | スティブプ常時オン | STIBPモードはパフォーマンスが向上しているため、常にオンにしておく必要があります。 |
| 18 | ibrs_preferred | ソフトウェアよりもIBRSが優先される |
| 19 | ibrs_same_mode_protection | IBRSは同一モード保護を提供します |
| 20 | いいえ | EFER.LMSLEサポートされていません[ b ] |
| 21 | invlpgb_nested | INVLPGBネストされたページのサポート |
| 22 | (予約済み) | |
| 23 | ピン | 保護されたプロセッサインベントリ番号 -
|
| 24 | ssbd | 投機的ストアバイパスの無効化 |
| 25 | ssbd_legacy | 投機的ストアバイパス無効化レガシー |
| 26 | ssbd_no | 投機的ストアバイパスの無効化は不要 |
| 27 | cppc | 協調型プロセッサパフォーマンス制御 |
| 28 | psfd | 予測ストアフォワードの無効化 |
| 29 | btc_no | ブランチタイプの混乱: プロセッサは影響を受けません |
| 30 | IBPB_RET | IBPB(ビット12参照)はリターンアドレス予測器もクリアする |
| 31 | ブランチサンプリング | ブランチサンプリングのサポート[ 195 ] |
| ビット | イーアックス | ECX | EDX | ビット | ||
|---|---|---|---|---|---|---|
| 7:0 | 物理アドレスビット数 | プロセッサ内の物理スレッド数(マイナス1) | INVLPGB説明書 の最大ページ数 | 7:0 | ||
| 11時8分 | リニアアドレスビット数 | (予約済み) | 11時8分 | |||
| 15:12 | APIC ID サイズ | 15:12 | ||||
| 17時16分 | ゲスト物理アドレスサイズ[ c ] | パフォーマンスタイムスタンプカウンターのサイズ | RDPRU命令 によって認識される最大ECX値 | 17時16分 | ||
| 23:18 | (予約済み) | 23:18 | ||||
| 31:24 | (予約済み) | 31:24 |
- ^ a b c 2025年6月現在、 CPUID.(EAX=8000_0008):EBXのビット5、7、11はAMDの既知の公開ドキュメントには記載されていないが、AMD 4700Sデスクトップキットプロセッサでは設定されていることが確認されている。[ 193 ]
- ^ LMSLE(Long Mode Segment Limit Enable)機能には独自のCPUIDフラグがなく、CPUファミリーとモデルをチェックすることで検出されます。この機能は
AuthenticAMDファミリー0Fh モデル14h [ 194 ] (90nm Athlon64/Opteron)CPUで導入され、それ以降のすべてのAMD CPUに搭載されています(ただし、「no_efer_lmsle」フラグが設定されているものは除きます)。 - ^値が0の場合、「ゲスト物理アドレスサイズ」がEAX[7:0]で指定された「物理アドレスビット数」と同じであることを示します。
EAX=8000'000Ah: SVM機能
このリーフは、EAX、EBX、EDX の AMD SVM (セキュア仮想マシン) 機能に関する情報を返します。
| ビット | イーアックス | EBX | ECX | ビット | ||
|---|---|---|---|---|---|---|
| 5:0 | SVM リビジョン番号 | 利用可能なASID (アドレス空間識別子) の数 | (予約済み) | 5:0 | ||
| 6 | x2AVIC_EXT (x2AVIC モードで 4096 個の vCPU をサポート) | 6 | ||||
| 7 | (予約済み) | 7 | ||||
| 8 | (ハイパーバイザー)[ a ] | 8 | ||||
| 31:9 | (予約済み) | 31:9 |
| 少し | EDX | |
|---|---|---|
| 短い | 特徴 | |
| 0 | NP | 高速仮想化インデックス(ネストされたページング) |
| 1 | LbrVirt | LBR(Last Branch Records)仮想化 |
| 2 | SVML | SVMロック |
| 3 | NRIPS | #VMEXIT での nRIP (次の連続命令ポインタ) 保存がサポートされています |
| 4 | TscRateMsr | MSRベースのTSCレート制御(MSR C000_0104h) |
| 5 | Vmcbクリーン | VMCB(仮想マシン制御ブロック)クリーンビットをサポート |
| 6 | フラッシュバイアシド | TLBフラッシュイベント(例:CR3書き込み、CR4.PGEトグル)は、現在のASID(アドレス空間ID)のTLBエントリのみをフラッシュします。 |
| 7 | デコードアシスト | デコードアシストをサポート |
| 8 | PmcVirt | PMC(パフォーマンス監視カウンタ)仮想化 |
| 9 | (SseIsa10Compat)[ b ] | (予約済み) |
| 10 | 一時停止フィルター | PAUSEインターセプトフィルターをサポート |
| 11 | (予約済み) | |
| 12 | 一時停止フィルターしきい値 | PAUSEフィルターサイクルカウントしきい値をサポート |
| 13 | AVIC | AMD Advanced Virtualized Interrupt Controller をサポート |
| 14 | (予約済み) | |
| 15 | VMSAVEvirt | VMSAVEおよびVMLOAD仮想化 |
| 16 | VGIF | グローバル割り込みフラグ(GIF)仮想化 |
| 17 | GMET | ゲストモード実行トラップ |
| 18 | x2AVIC | AVICでx2APICモードをサポート |
| 19 | SSSチェック | SVMスーパーバイザーシャドウスタックの制限 |
| 20 | スペックコントロール | SPEC_CTRL(MSR 2E0h)仮想化 |
| 21 | ROGPT | 読み取り専用ゲストページテーブルをサポート |
| 22 | (予約済み) | |
| 23 | ホスト_MCE_オーバーライド | ホストとゲストがシャットダウンではなくインターセプトを引き起こす 場合のゲスト モードのマシン チェック例外CR4.MCE=1CR4.MCE=0 |
| 24 | TLBIコントロール | INVLPGBVMCBでのハイパーTLBSYNCバイザーの有効化とTLBSYNCインターセプトのサポート |
| 25 | ベトナム | NMI(マスク不可能割り込み)仮想化 |
| 26 | IbsVirt | IBS(命令ベースサンプリング)仮想化 |
| 27 | 外部レベルオフセット障害変更 | 拡張LVTオフセット(APICアドレス0x500-0x530)の読み取り/書き込み障害の動作が読み取り許可、書き込み#VMEXITに変更されました[ 202 ] |
| 28 | VmcbAddrChkChg | VMCBアドレスチェックの変更[ 202 ] |
| 29 | バスロックしきい値 | バスロックしきい値 |
| 30 | アイドルホップインターセプト | アイドルHLT(HLT仮想割り込みが保留されていない間に実行される命令)インターセプト |
| 31 | 強化されたシャットダウンインターセプト | シャットダウンインターセプトにおけるEXITINFO1のサポートと、ネストされたシャットダウンインターセプトは、インターセプト不可能なシャットダウンをもたらします。[ 203 ] |
- ^ AMDの「Pacifica」ドキュメントの初期の改訂版では、EAXビット8はハイパーバイザー用に予約された常にゼロのビットとして記載されていました。 [ 196 ]
AMDのそれ以降のドキュメント、例えば#25481「CPUID仕様」rev 2.18 [ 197 ]以降では、このビットは予約済みとしてのみリストされています。
rev 2.30 [ 198 ]以降では、別のビットがハイパーバイザー用に予約済みとしてリストされています: CPUID.(EAX=1):ECX[ビット31]。
- ^ EDXビット9は、AMDの文書#25481「CPUID仕様」のいくつかの古いリビジョンに簡単に記載されており、一部のAMD Bobcat CPUでのみ設定されています。 [ 199 ]
#25481のRev 2.28では、このビットは「Ssse3Sse5Dis」としてリストされています[ 200 ]。Rev 2.34では、このビットはRev 2.32で「SseIsa10Compat」という名前で仕様から削除されたと記載されています[ 201 ] 。
EAX=8000'001Fh: 暗号化メモリ機能
| 少し | イーアックス | |
|---|---|---|
| 短い | 特徴 | |
| 0 | 中小企業 | 安全なメモリ暗号化 |
| 1 | SEV | 安全な暗号化仮想化 |
| 2 | ページフラッシュMSR | ページフラッシュMSR(C001_011Eh)をサポート |
| 3 | SEV-ES | SEV 暗号化状態 |
| 4 | SEV-SNP | SEV セキュアネストページング |
| 5 | VMPL | VM 権限レベル |
| 6 | RMPクエリ | RMPQUERYサポートされている命令 |
| 7 | VmplSSS | VMPLスーパーバイザシャドウスタックをサポート |
| 8 | セキュアTSC | セキュアTSC対応 |
| 9 | TscAux仮想化 | TSC_AUXMSR(C000_0103) の仮想化をサポート |
| 10 | HwEnfCacheCoh | 暗号化ドメイン間のハードウェアキャッシュの一貫性を強制 |
| 11 | 64ビットホスト | SEV ゲスト実行は 64 ビット ホストからのみ許可されます |
| 12 | 制限された注入 | SEV-ES ゲストは、#HV (ハイパーバイザー インジェクション例外) を除くすべてのイベント インジェクションを拒否できます。 |
| 13 | 代替注入 | SEV-ESゲストは、イベントインジェクションのために暗号化されたVMCBフィールドを使用できる。 |
| 14 | デバッグVirt | SEV-ES および SEV-SNP ゲストで完全なデバッグ状態仮想化がサポートされています |
| 15 | ホストIBSの防止 | SEV-ESゲストのホストIBSを防止する |
| 16 | 静脈血栓塞栓症 | SEV 向け仮想透過暗号化 |
| 17 | Vmgexitパラメータ | VMGEXITパラメータがサポートされています(RAXレジスタを使用) |
| 18 | バーチャルトムMsr | 仮想TOM(メモリの先頭)MSR(C001_0135)をサポート |
| 19 | IbsVirtゲストコントロール | IBS仮想化はSEV-ESおよびSEV-SNPゲストでサポートされています |
| 20 | PmcVirtゲストコントロール | PMC仮想化はSEV-ESおよびSEV-SNPゲストでサポートされています |
| 21 | RMPREAD | RMPREADサポートされている命令 |
| 22 | ゲストインターセプトコントロール | SEV-ESゲスト向けのゲストインターセプト制御がサポートされています |
| 23 | セグメント化されたRmp | セグメント化されたRMP(リバースマップテーブル)をサポート |
| 24 | VmsaRegProt | VMSA(VM保存領域)レジスタ保護をサポート |
| 25 | スマート保護 | SMT保護をサポート |
| 26 | セキュアアビック | セキュアAVIC対応 |
| 27 | 許可されたSEV機能 | VMCBのALLOWED_SEV_FEATURES_MASKフィールド(オフセット138h)がサポートされています |
| 28 | SVSM通信ページMSR | SVSM(セキュアVMサービスモジュール[ 204 ])通信ページMSR(C001_F000h)サポート |
| 29 | ネストされたVirtSnpMsr | VIRT_RMPUPDATE( C001_F001h) およびVIRT_PSMASH( C001_F002h) MSR がサポートされています |
| 30 | 使用不可 | 使用中とマークされているときにハイパーバイザー所有のページへの書き込みが許可されます |
| 31 | IbpbOnEntry | 仮想マシンへのエントリ時のIBPBがサポートされています |
| ビット | EBX | ECX | EDX | ビット |
|---|---|---|---|---|
| 5:0 | ページテーブルエントリ内のCビット(暗号化有効ビット)の位置 | SEV 対応ゲストに使用できる最大 ASID 値 (同時にサポートできる暗号化ゲストの最大数) | SEV が有効だが SEV-ES が有効ではないゲストの最小 ASID 値 | 5:0 |
| 11時6分 | メモリ暗号化が有効な場合の物理アドレス幅の縮小 | 11時6分 | ||
| 15:12 | サポートされる VMPL (VM 特権レベル) の数 | 15:12 | ||
| 31:16 | (予約済み) | 31:16 |
EAX=8000'0021h: 拡張機能識別
| 少し | イーアックス | ECX | 少し | |||
|---|---|---|---|---|---|---|
| 短い | 特徴 | 短い | 特徴 | |||
| 0 | ネストなしデータBp | プロセッサはネストされたデータブレークポイントを無視します | (予約済み) | 0 | ||
| 1 | FsGsKernelGsBaseNonSerializing | WRMSR、およびMSRFS_BASEは非シリアル化です[ 205 ]GS_BASEKernelGSBase | TSA_SQ_NO | 設定されている場合、CPUはTSA-SQに対して脆弱ではない[ 206 ] | 1 | |
| 2 | LFenceAlwaysSerializing | LFENCE常にシリアル化をディスパッチします | TSA_L1_NO | 設定されている場合、CPUはTSA-L1に対して脆弱ではない[ 206 ] | 2 | |
| 3 | スマートページ設定ロック | SMM ページング構成ロックがサポートされています | (予約済み) | 3 | ||
| 4 | (予約済み) | (予約済み) | 4 | |||
| 5 | クリア | VERWこの命令は、リング0のメモリオペランドで実行されると、マイクロアーキテクチャデータバッファをクリアしてTSA(Transient Scheduler Attacks)を軽減するために使用できます。[ 206 ] | (予約済み) | 5 | ||
| 6 | NullSelectClearsBase | ヌルセグメントセレクタロードは宛先セグメントレジスタのベースとリミットもクリアします。 | (予約済み) | 6 | ||
| 7 | 上位アドレス無視 | 上位アドレスの無視がサポートされています | (予約済み) | 7 | ||
| 8 | 自動IBRS | 自動IBRS | (予約済み) | 8 | ||
| 9 | いいえSmmCtlMSR | SMM_CTLMSR ( C0010116h) はサポートされていません | (予約済み) | 9 | ||
| 10 | FSRS | 高速ショートREP STOSB対応 | (予約済み) | 10 | ||
| 11 | FSRC | 高速ショートREPE CMPSB対応 | (予約済み) | 11 | ||
| 12 | PMC2PreciseRetire | PreciseRetireパフォーマンスカウンタ制御ビット(MSRC0010002hビット43)がサポートされている[ 203 ] | (予約済み) | 12 | ||
| 13 | プリフェッチコントロールメッセージ | PrefetchControl MSR ( C0000108h) がサポートされています | (予約済み) | 13 | ||
| 14 | L2TlbSIzeX32 | 設定されている場合、L2 TLBサイズ(リーフ80000006h)は32の倍数としてエンコードされます。 | (予約済み) | 14 | ||
| 15 | AMD_ERMSB | プロセッサはAMDのEnhancedREP MOVSBおよびREP STOSB | (予約済み) | 15 | ||
| 16 | OPCODE_0F017_RECLAIM | 0F 01 /7AMD用にオペコードを予約し、#UDを返します。 [ 203 ] | (予約済み) | 16 | ||
| 17 | CpuidUserDis | CPUID非特権ソフトウェアを無効にする (#GP) | (予約済み) | 17 | ||
| 18 | EPSF | 拡張予測ストア転送をサポート[ 205 ] | (予約済み) | 18 | ||
| 19 | 高速REP_SCASB | 高速ショートREP SCASB対応 | (予約済み) | 19 | ||
| 20 | プリフェッチ | 命令キャッシュプリフェッチ命令をサポート | (予約済み) | 20 | ||
| 21 | FP512_ダウングレード | 512ビットデータパスから256ビットへのダウングレードがサポートされています。[ a ] | (予約済み) | 21 | ||
| 22 | WL_CLASS_サポート | スケジューリング決定のためのOSへのワークロードベースのヒューリスティックフィードバックのサポート[ 203 ] | (予約済み) | 22 | ||
| 23 | AVX512_BMM | AVX-512 ビット行列乗算およびビット反転命令[ 208 ] | (予約済み) | 23 | ||
| 24 | エラプス | 強化されたリターンアドレス予測セキュリティ(EBX[23:16]「RapSize」も参照) | (予約済み) | 24 | ||
| 25 | (予約済み) | (予約済み) | 25 | |||
| 26 | (予約済み) | (予約済み) | 26 | |||
| 27 | SBPB | 選択分岐予測バリア対応[ 209 ] | (予約済み) | 27 | ||
| 28 | IBPB_BRTYPE | IBPBはすべての分岐予測をフラッシュする[ 209 ] | (予約済み) | 28 | ||
| 29 | SRSO_NO | CPUはSRSO(投機的リターンスタックオーバーフロー)脆弱性の影響を受けない[ 209 ] | (予約済み) | 29 | ||
| 30 | SRSO_USER_KERNEL_NO | CPUはユーザー/カーネル境界を越えたSRSO脆弱性の影響を受けない[ 209 ] | (予約済み) | 30 | ||
| 31 | SRSO_MSR_FIX | SRSOはBP_CFGのビット4を設定することで軽減できる(MSR C001_102E)[ 209 ] | (予約済み) | 31 | ||
| 少し | EBX | |
|---|---|---|
| 短い | 特徴 | |
| 15:0 | マイクロコードパッチサイズ | マイクロコードパッチのサイズ(16バイト単位)。0の場合、パッチのサイズは最大5568(15C0h)バイトです。 |
| 23:16 | ラップサイズ | リターン アドレス プレディクタのサイズ。RapSize * 8 は、リターン アドレス プレディクタをフラッシュするために必要な、 一致する命令のない命令の最小数です。CALLRET |
| 31:24 | (予約済み) | |
EAX=8FFF'FFFEh および EAX=8FFF'FFFFh: AMD イースターエッグ
いくつかのAMD CPUモデルでは、CPUIDが の場合、 EAX、EBX、ECX、EDXにイースターエッグ文字EAX=8FFF'FFFFh列が返されます。 [ 210 ] [ 211 ]既知のイースターエッグ文字列には以下のものがあります。
| プロセッサ | 弦 |
|---|---|
| AMD K6 | NexGenerationAMD |
| AMD K8 | IT'S HAMMER TIME |
| AMDジャガー[ 212 ] | HELLO KITTY! ^-^ |
さらに、AMD K6 CPUは、CPUIDが の場合EAX=8FFF'FFFEh、EAXに「DEI 」へのイースターエッグ参照を返します。 [ 213 ]
EAX=C000'0000h: 最高ケンタウロス拡張機能
EAX 内の最上位 Centaur リーフのインデックスを返します。EAX の戻り値が 未満の場合C0000001h、Centaur 拡張リーフはサポートされません。
IDT WinChip CPU(CentaurHaulsファミリー5)では、拡張リーフはC0000001h-C0000005hCentaur固有の機能をエンコードせず、代わりにリーフのエイリアスです80000001h-80000005h。[ 214 ]
EAX=C000'0001h: Centaur 機能情報
このリーフはCentaurの機能情報(主にVIA/Zhaoxin PadLock)をEDXで返します。[ 215 ] [ 216 ] [ 217 ] [ 218 ](EAX、EBX、ECXは予約済みです。)
| 少し | EDX | |
|---|---|---|
| 短い | 特徴 | |
| 0 | sm2 [ a ] | GMISM2命令あり |
| 1 | sm2_en [あ] | SM2対応 |
| 2 | 乱数 | PadLock RNGあり:XSTOREおよびREP XSTORE手順 |
| 3 | rng_en | RNGが有効 |
| 4 | ccs [ a ] | GMI SM3 / SM4命令が存在する:CCS_HASHおよびCCS_ENCRYPT |
| 5 | ccs_en [ a ] | SM3/SM4命令が有効 |
| 6 | xcrypt | PadLock Advanced Cryptographic Engine (ACE、AES暗号を使用) 搭載:REP XCRYPT(ECB,CBC,CFB,OFB)説明書 |
| 7 | xcrypt_en | ACE 対応 |
| 8 | エース2 | ACE v2 が存在:REP XCRYPTCTR命令、および ACE のREP XCRYPT*命令のダイジェスト モードと不整列データのサポート。 |
| 9 | ace2_en | ACE v2 対応 |
| 10 | フェ | PadLockハッシュエンジン(PHE):REP XSHA1およびREP XSHA256手順 |
| 11 | phe_en | PHE対応 |
| 12 | 午後 | PadLockモンゴメリ乗算器(PMM):REP MONTMUL命令 |
| 13 | pmm_en | PMMが有効 |
| 14 | (予約済み) | |
| 15 | zx_fma | FMA対応 |
| 16 | 視差 | 適応型P状態制御あり |
| 17 | 視差 | 適応型P状態制御が有効 |
| 18 | 過度のストレス | 自動オーバークロックのためのオーバーストレス機能搭載 |
| 19 | 過度のストレス | 自動オーバークロックのオーバーストレス機能が有効化 |
| 20 | tm3 | サーマルモニター3搭載 |
| 21 | tm3_en | サーマルモニター3有効 |
| 22 | 乱数2 | RNG v2 - 第2世代RNGの現在:REP XRNG2命令 |
| 23 | rng2_en | RNG v2 有効 |
| 24 | セム | SME機能あり |
| 25 | phe2 | PHE v2: SHA384とSHA512が存在 |
| 26 | phe2_en | PHE v2 対応 |
| 27 | xmodx | RSA命令が存在する:XMODEXPおよびMONTMUL2命令 |
| 28 | xmodx_en | RSA命令が有効 |
| 29 | 悩ませる | VEX命令が存在する |
| 30 | vex_en | VEX命令が有効 |
| 31 | stk | STKが存在する |
EAX=C000'0006h, ECX=0: Zhaoxin機能情報
このサブリーフは、EAX でフィーチャ情報を返します。EBX、ECX、EDX は予約されています。
| 少し | イーアックス | |
|---|---|---|
| 短い | 特徴 | |
| 0 | 一時停止オプション | PAUSEOPT指示[ 220 ] |
| 31:1 | (予約済み) | |
高水準言語からのCPUIDの使用
インラインアセンブリ
この情報は他の言語からも簡単にアクセスできます。例えば、以下のgccのCコードは、cpuidによって返される最初の5つの値を出力します。
#include <stdio.h> #include <cpuid.h>int main () { unsigned int i 、eax 、ebx 、ecx 、edx ;for ( i = 0 ; i < 5 ; i ++ ) { __cpuid ( i , eax , ebx , ecx , edx ); printf ( "InfoType %x \n EAX: %x \n EBX: %x \n ECX: %x \n EDX: %x \n " , i , eax , ebx , ecx , edx ); }0を返す; }MSVC および Borland/Embarcadero C コンパイラ (bcc32) のフレーバー付きインライン アセンブリでは、上書き情報は命令に暗黙的に含まれています。
#include <stdio.h>int main () { unsigned int a 、b 、c 、d 、i = 0 ;__asm { /* 呼び出しを実行します。 */ mov EAX , i ; cpuid ; /* 結果を保存します。 */ mov a , EAX ; mov b , EBX ; mov c , ECX ; mov d , EDX ; }printf ( "InfoType %x \n EAX: %x \n EBX: %x \n ECX: %x \n EDX: %x \n " , i , a , b , c , d ); 0 を返す; }どちらかのバージョンが単純なアセンブリ言語で記述されている場合、値を使い続けたいときは、プログラマーは EAX、EBX、ECX、EDX の結果を別の場所に手動で保存する必要があります。
ラッパー関数
<cpuid.h>GCCは、 CPUIDを持つシステムで呼び出されるヘッダーも提供します。これは__cpuidインラインアセンブリに展開されるマクロです。典型的な使用法は次のとおりです。
#include <stdio.h> #include <cpuid.h>int main () { unsigned int eax 、ebx 、ecx 、edx ;__cpuid ( 0 /* ベンダー文字列 */ 、eax 、ebx 、ecx 、edx ); printf ( "EAX: %x \n EBX: %x \n ECX: %x \n EDX: %x \n " 、eax 、ebx 、ecx 、edx );0を返す; }しかし、このCPUに存在しない拡張機能を要求した場合、そのことに気づかず、予期せぬランダムな結果が返される可能性があります。より安全なバージョンも提供されています<cpuid.h>。これは拡張機能をチェックし、追加の安全性チェックを行います。出力値は、参照のようなマクロパラメータではなく、より一般的なポインタで渡されます。
#include <stdio.h> #include <cpuid.h>int main () { unsigned int eax 、ebx 、ecx 、edx ;/* 0x81234567 は存在しませんが、存在すると想定します */ if ( ! __get_cpuid ( 0x81234567 , & eax , & ebx , & ecx , & edx )) { printf ( "警告: CPUID 要求 0x81234567 は無効です! \n " ); return 1 ; }printf ( "EAX: %x \n EBX: %x \n ECX: %x \n EDX: %x \n " , eax , ebx , ecx , edx );0を返す; }&a, &b, &c, &d条件文のアンパサンドに注目してください。__get_cpuid呼び出しが正しいリクエストを受け取った場合はゼロ以外の値を返し、失敗した場合はゼロを返します。[ 221 ]
Microsoft Visual C コンパイラには組み込み関数が用意されており__cpuid()、cpuid 命令をインラインアセンブリを使用せずに埋め込むことができます。これは、x86-64 版の MSVC ではインラインアセンブリが全くサポートされていないため便利です。MSVC で同じプログラムを実行すると、以下のようになります。
#include <stdio.h> #ifdef _MSC_VER #include <intrin.h> #endifint main () { unsigned int regs [ 4 ]; int i ;for ( i = 0 ; i < 4 ; i ++ ) { __cpuid ( regs , i ); printf ( "コード %d は %d、%d、%d、%d を返します" 、regs [ 0 ]、regs [ 1 ]、regs [ 2 ]、regs [ 3 ]); }0を返す; }多くのインタプリタ型またはコンパイル型のスクリプト言語は、 FFIライブラリを介してCPUIDを使用できます。そのような実装の1つは、 RubyのFFIモジュールを使用してCPUIDオペコードを含むアセンブリ言語を実行する例です。
.NET 5以降のバージョンでは、このSystem.Runtime.Intrinsics.X86.X86base.CpuIdメソッドが提供されています。例えば、以下のC#コードは、CPUID命令をサポートしている場合、プロセッサのブランド名を出力します。
System.Runtime.InteropServicesを使用します。System.Runtime.Intrinsics.X86を使用します。System.Textを使用します。namespace X86CPUID { class CPUBrandString { public static void Main ( string [] args ) { if ( ! X86Base . IsSupported ) { Console . WriteLine ( "お使いのCPUはCPUID命令をサポートしていません。" ); } else { Span < int > raw = stackalloc int [ 12 ]; ( raw [ 0 ], raw [ 1 ], raw [ 2 ], raw [ 3 ]) = X86Base . CpuId ( unchecked ( ( int ) 0x80000002 ), 0 ); ( raw [ 4 ], raw [ 5 ], raw [ 6 ], raw [ 7 ]) = X86Base . CpuId ( unchecked ( ( int ) 0x80000003 ), 0 ); ( raw [ 8 ], raw [ 9 ], raw [ 10 ], raw [ 11 ]) = X86Base . CpuId ( unchecked ( ( int ) 0x80000004 ), 0 );Span < byte > bytes = MemoryMarshal.AsBytes ( raw ) ; string brand = Encoding.UTF8.GetString ( bytes ) .Trim ( ) ; Console.WriteLine ( brand ) ; } } } }x86以外のCPU固有の情報
x86 以外の CPU アーキテクチャの中には、プロセッサの機能に関する特定の形式の構造化情報を、通常は特殊レジスタのセットとして提供するものもあります。
- ARMアーキテクチャには、アクセスに例外レベルEL1以上を
CPUID必要とするコプロセッサレジスタがあります。 [ 222 ] - System/370からz/ArchitectureまでのIBMメインフレームプロセッサには、スーパーバイザモード専用のStore CPU ID(
STIDP)命令があり、CPUタイプなどの情報を提供します。[ 223 ] [ 224 ] : 10-147–10-149 - z/Architectureメインフレームプロセッサには、インストールされているハードウェア機能を一覧表示するスーパーバイザモード専用のStore Facilities List(
STFL)[ 224 ]:10-149 命令と、非特権のStore Facilities List Extended(STFLE)命令、:7-394–7-395 もあります。 - MIPS32 /64アーキテクチャは、必須のプロセッサ識別(
PrId)と一連のデイジーチェーン構成レジスタを定義しています。[ 225 ] - PowerPCプロセッサには、使用中のプロセッサモデルを識別する32ビットの読み取り専用プロセッサバージョンレジスタ( )があります。この命令はスーパーバイザアクセスレベルを必要とします。 [ 226 ]
PVR - RISC -Vアーキテクチャには
mcpuid「CPU実装の機能に関する情報を含む読み取り専用レジスタ」がある[ 227 ]
DSPやトランスピュータのようなチップファミリは、設計のバリエーションが(相対的に)豊富であるにもかかわらず、この命令を目立った形で採用していません。シリコン識別の代替手段が存在する可能性があります。例えば、Texas InstrumentsのDSPには、各機能ユニットごとにメモリベースのレジスタセットが搭載されており、ユニットの種類とモデル、ASIC設計リビジョン、設計段階で選択された機能を識別する識別子から始まり、ユニット固有の制御レジスタとデータレジスタが続きます。これらの領域へのアクセスは、既存のロード命令とストア命令を使用するだけで実行されるため、このようなデバイスでは、デバイス識別のためにレジスタセットを拡張する必要はありません。
参照
- x86-cpuid.orgは、 LinuxカーネルとXenハイパーバイザーの両方で使用される完全なx86アーキテクチャCPUIDデータベースと関連コード生成ツールです。[ 228 ]
- CPU-Z は
CPUID、さまざまなシステム設定を識別するために使用するWindowsユーティリティです。 - CPU-X、 Linux および FreeBSD 用の CPU-Z の代替
- スペクター(セキュリティ脆弱性)
- 投機的ストアバイパス(SSB)
- /proc/cpuinfo、特定のシステムによって生成されるテキストファイルで、CPUID情報の一部が含まれています。
参考文献
- ^ 「Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル」(PDF) . Intel.com . 2013年4月11日閲覧。
- ^ 「Intelプロセッサーの検出 - システムCPUの世代を知る」 Rcollins.org . 2013年4月11日閲覧。
- ^ "LXR linux-old/arch/i386/kernel/head.S" . Lxr.linux.no. 2012年7月13日時点のオリジナルよりアーカイブ。 2013年4月11日閲覧。
- ^ a b c Debbie Wiles, CPU Identification , 2006年6月4日アーカイブ
- ^ B-CoolWare、 TMi0SDGL x86 CPU/FPU検出ライブラリ(ソースコード付き)、v2.15、2000年6月 - CPUID以前のx86 CPU検出ルーチンの大規模なコレクションについては、/SOURCE/REALCODE.ASMを参照してください。2023年3月14日にアーカイブ。
- ^ 「CPUID、EAX=4 - 奇妙な結果(解決済み)」 . Software.intel.com . 2014年7月10日閲覧。
- ^ @InstLatX64 (2019年2月28日). 「『GenuineIotel』との初遭遇(Iの後のnではなくo)」(ツイート)– Twitter経由。
- ^ 「 Intel Xeon E3-1231 用の GenuineIotel CPUID ダンプ」。instlatx64 。
- ^ instlatx64、 RDC IAD 100のCPUIDダンプ。2022年12月22日閲覧。
- ^ a b c d smxi, Inxi 197号: Elbrus CPUのサポートデータと実装。2023年10月23日閲覧。2023年10月23日アーカイブ。
- ^ Grzegorz Mazur、「CPUID サポートによる x86 CPU の識別」 、1997年5月5日。1997年5月24日時点のオリジナルよりアーカイブ。
- ^ Ingo Böttcher, CPUDET.PAS v1.61、1996年10月23日 - 「AMD ISBETTER」文字列をテストするCPU識別プログラム。2024年4月26日アーカイブ。
- ^ sorgelig (2017年8月3日). 「ao486 CPUID命令(コミット43a2004内)」 . GitHub . 2023年12月4日時点のオリジナルよりアーカイブ。 2023年12月4日閲覧。
- ^ a b sorgelig (2020年8月30日). “Update cpuid. · MiSTer-devel/ao486_MiSTer@82f5014” . GitHub . 2023年12月4日時点のオリジナルよりアーカイブ。 2023年12月4日閲覧。
- ^ sorgelig (2020年8月30日). 「ao486 CPUID命令」 . GitHub . 2023年10月23日時点のオリジナルよりアーカイブ。2023年12月4日閲覧。
- ^ 「v586: FPGA用586互換ソフトコア」GitHub。2021年12月6日。
- ^ Peter Ferrie、「さらなる仮想マシンエミュレータへの攻撃」5ページ。2010年2月15日アーカイブ。
- ^ a b Amit Singh, Miscellaneous、Solarisセクションを参照。 2004年12月10日時点のオリジナルよりアーカイブ。
- ^ a b c d Darek Mihocka、「ARM64 Boot Camp: Understanding x86/x64 Emulation on Windows on ARM」、2024年1月28日、「CPUIDの調査」セクションを参照。2024年2月24日アーカイブ。
- ^ 「タイマーとcpuidを楽しむ - Jim Cownie著 - CPUの楽しみ」。2021年3月3日。
- ^ Insignia Solutions、『RealPC インストールおよびユーザーズガイド』、1997年、71ページ。 2015年11月28日時点のオリジナルよりアーカイブ。
- ^ Philippe Geneste、 (情報) Emulation PC sur Mac (フランス語)、1998 年 1 月 21 日。2025年 6 月 24 日アーカイブ。
- ^ Insignia Solutions、『SoftWindows 98 インストールおよびユーザーズガイド』、1998年、127ページ。 2015年11月25日時点のオリジナルよりアーカイブ。
- ^ VOGONS ディスカッション スレッド「386/486/586 クラス + Alpha CPU および 3dfx + S3 + SiS + Matrox + XGI + 古い ATI + NVidia GPU の SIV サポート - テスト ヘルプ」、投稿者 lolo799、2021 年 9 月 12 日 17:10 - スクリーンショットおよび文字列をリストした CPUID ダンプについては、SIV32L 添付ファイルを参照してください
"Compaq FX!32"。 - ^ virt-what ソースツリー、 tests/lx86/proc/cpuinfo - PowerVM Lx86 cpuinfo ダンプ。 2024年11月10日にアーカイブ。
- ^ Neko Project 21/W, help/configure (日本語).2024年9月22日アーカイブ。
- ^ CPU-World、 「Neko Project」文字列を含むエミュレートされたNeko Project CPUのCPUID。2024年12月21日アーカイブ。
- ^ iXBT Labs、 VIA Nano CPUID Tricks、2010年8月26日。2010年8月29日アーカイブ。
- ^ IDT、 WinChip 2A データシート、v1.0、1999 年 1 月、A-3 ページ。
- ^ VIA、 C3 Nehemiah データシート、改訂 1.13、2004 年 9 月 29 日、A-3 ページ。
- ^ Agner Fog, CpuIDFake, v1.00、2010年1月22日、「Instructions.txt」を参照。2010年7月9日アーカイブ。
- ^ a b Transmeta、Crusoe BIOS Programmer's Guide、2004 年 1 月 23 日、63 ~ 65 ページ。
- ^ Transmeta、Efficeon BIOSプログラマーズガイド、2003年8月19日、セクション8.3、148ページ。
- ^ AMD、 Geode LXデータブック、pub.id. 33234H、2009年2月、107ページ。 2023年12月3日にアーカイブ。
- ^ DM&P、 Vortex86EX2_A9133_Master_Data_Sheet_V11_BF、2019年5月8日、72ページ。
- ^ 「第3章 命令セットリファレンス、AL」(PDF) . Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル. Intel Corporation. 2018年12月20日. 2018年12月20日閲覧。
- ^ Intel、『Pentium プロセッサ ファミリ デベロッパーズ マニュアル』、1997 年、注文番号 241428-005、セクション 3.4.1.2 (ページ 91)、17.5.1 (ページ 489)、および付録 A (ページ 522) には、「プロセッサ タイプ」フィールドと「デュアル プロセッサ」指定の動作に関する詳細が記載されています。
- ^ InstLatx64、 x86、x64 命令レイテンシ、メモリレイテンシ、CPUID ダンプ、2023 年 9 月 30 日。
- ^ AMD、「Enhanced Am486DX Microprocessor Family」、pub.no. 20736 rev B、1997年3月、セクション9.2.2、55ページ。2023年10月18日アーカイブ。
- ^ AMD、 ÉlanSC400およびÉlanSC410マイクロコントローラユーザーズマニュアル、pub.no. 21030、1997、セクション3.6.2、ページ73。 2023年10月18日にアーカイブ。
- ^ Cyrix、 5x86 BIOSライターガイド、改訂1.12、注文番号92426-00、1995年、7ページ
- ^ a b Cyrix、CPU 検出ガイド、改訂 1.01、1997 年 10 月 2 日、6 ページ。
- ^ MiSTer ao486 ソースコード、 rtl/ao486/defines.v、70行目。 2023年10月23日にアーカイブ。
- ^ CPU-World、 Vortex86DX2 933 MHzのCPUID。2023年10月17日アーカイブ。
- ^ CPU-World、 Vortex86EX2のCPUID。2023年10月18日アーカイブ。
- ^ InstLatx64、 Centaur CNS CPUIDダンプ。2023年5月30日アーカイブ。
- ^ Jeff Atwood、「Nasty Software Hacks and Intel's CPUID」、 Coding Horror、2005年8月16日。
- ^ a b Intel、「Intel Xeon Phi コプロセッサ命令セットアーキテクチャリファレンスマニュアル」、2012年9月、注文番号327364-001、付録B.8、673-674ページ。2021年8月4日アーカイブ。
- ^ CPU-World、 Intel Itanium 2 1.50GHzのCPUID。2023年10月17日アーカイブ。
- ^ 「[PATCH] x86/cpu: NovalakeのCPUモデル番号を追加 - Tony Luck」 lore.kernel.org . 2025年8月16日閲覧。
- ^ 「[PATCH] x86/cpu: 2つのIntel CPUモデル番号を追加 - Tony Luck」 lore.kernel.org . 2024年9月24日閲覧。
- ^ InstLatX64、72コア Intel Xeon Phi 7290 CPUIDダンプ
- ^ InstLatx64、96コアAMD Ryzen Threadripper Pro 7995WXのCPUIDダンプ
- ^ Intelプロセッサ識別とCPUID命令(PDF)、Intel、2002年5月、2021年4月17日時点のオリジナル(PDF)からアーカイブ
- ^ Linux 6.3 カーネルソース、 /arch/x86/include/asm /cpuid.h、69行目
- ^ gcc-patches メーリングリスト、 IDT Winchip 用 CPUID パッチ、2019 年 5 月 21 日
- ^ Geoff Chappell、「32 ビット Windows カーネルでの CMPXCHG8B サポート」、2008 年 1 月 23 日。2023年 1 月 30 日にアーカイブ。
- ^ AMD、 AMDプロセッサ認識アプリケーションノート、出版物#20734、改訂D、1997年1月、13ページ
- ^ Intel、 AP-485 アプリケーションノート - Intel プロセッサ識別および CPUID 命令、注文番号 241618-006、1997 年 3 月、10 ページの表 5、ビット 10 を参照。
- ^ Michal Necasek、 SYSENTER、Where Are You?、 OS/2 Museum、2017年7月20日
- ^ Intel、 TDXモジュールソースコード、v1.0.03.03、2023年6月22日、src/common/helpers/smrrs.hを参照。2025年1月20日アーカイブ。
- ^ Intel、「Trust Domain CPU Architectural Extensions」、注文番号343754-002、2021年5月。2024年12月17日アーカイブ。
- ^ Intel、 Pentium 4プロセッサ90 nmプロセス仕様アップデート、注文番号302352-031、2006年9月、59ページのエラッタR85を参照。 2008年12月31日にアーカイブ。
- ^ Geoff Chappell、「ECX」、CPUID Leaf 1より、2020年1月26日。2020年5月9日アーカイブ。
- ^ Huggahalli, Ram; Iyer, Ravi; Tetrick, Scott (2005). 「高帯域幅ネットワークI/Oのためのダイレクトキャッシュアクセス」. ACM SIGARCH Computer Architecture News . 33 (2): 50– 59. CiteSeerX 10.1.1.85.3862 . doi : 10.1145/1080695.1069976 . CiteSeerX : 10.1.1.91.957 .
- ^ Drepper, Ulrich (2007)、「すべてのプログラマがメモリについて知っておくべきこと」、CiteSeerX : 10.1.1.91.957
- ^ a b Intel、Itanium アーキテクチャ ソフトウェア開発者向けマニュアル、rev 2.3、ボリューム 4: IA-32 命令セット、2010 年 5 月、文書番号: 323208、表 2-5、ページ 4:81、ビット 20 と 30 を参照。2012 年 2 月 15 日にアーカイブ。
- ^ Intel、 AP-485、プロセッサ識別とCPUID命令フラグ、改訂第30版、2006年1月、26ページ
- ^ Michal Necasek、「HTT はハイパースレッディングの意味で、正しいのか?」、 OS/2 Museum、2017 年 12 月 11 日
- ^ 「VMware仮想マシンでソフトウェアが実行されているかどうかを判断するメカニズム」。VMwareナレッジベース。VMWare 。2015年5月1日。Intel
およびAMD CPUは、CPUIDリーフ0x1のECXビット31をハイパーバイザー存在ビットとして予約しています。このビットにより、ハイパーバイザーはゲストOSに自身の存在を示すことができます。ハイパーバイザーはこのビットを設定し、物理CPU(既存および将来導入されるすべてのCPU)はこのビットを0に設定します。ゲストOSはビット31を検査することで、仮想マシン内で実行されているかどうかを検出できます。
- ^ Kataria, Alok; Hecht, Dan (2008-10-01). 「ハイパーバイザーCPUIDインターフェース提案」 . lore.kernel.orgのLKMLアーカイブ。2019年3月15日にオリジナルからアーカイブ。CPUID
リーフ0x1のECXのビット31。このビットは、ハイパーバイザー用にIntelとAMDによって予約されており、ハイパーバイザーの存在を示します。仮想CPU(ハイパーバイザー)はこのビットを1に設定し、物理CPU(既存および将来のすべてのCPU)はこのビットを0に設定します。ゲストソフトウェアはこのビットを調べて、仮想マシン内で実行されているかどうかを検出できます。
- ^ "AMD64 Technology AMD64 Architecture Programmer's Manual Volume 2: System Programming" (PDF) (3.41 ed.). Advanced Micro Devices, Inc. p. 498. 24593. 2023年9月30日時点のオリジナル(PDF)からのアーカイブ。 2023年9月9日閲覧。
15.2.2 ゲストモード この新しいプロセッサモードは、VMRUN命令によって開始されます。ゲストモードでは、仮想化を容易にするために一部のx86命令の動作が変更されます。CPUID機能番号4000_0000h~4000_00FFhはソフトウェア用に予約されています。ハイパーバイザーはこれらの機能番号を使用して、ハイパーバイザーからゲストに情報を渡すためのインターフェースを提供できます。これは、CPUIDを使用して物理CPUに関する情報を抽出するのと似ています。ハイパーバイザーは、CPUID Fn 400000[FF:00]ビットを使用して仮想プラットフォームを示します。機能ビットCPUID Fn0000_0001_ECX[31]は、ハイパーバイザーの存在を示すためにハイパーバイザーが使用するために予約されています。ハイパーバイザーはこのビットを1に設定し、物理CPUはこのビットを0に設定します。ゲストソフトウェアはこのビットを調べて、仮想マシン内で実行されているかどうかを検出できます。
- ^ Intel SDM vol 2A、注文番号253666-053、2015年1月、p. 244
- ^ a b Intel、「プロセッサ識別とCPUID命令アプリケーションノート485」、注文番号241618-037、2011年1月、31-32ページ。2023年10月17日アーカイブ。
- ^ Intel、「Itanium プロセッサ ソフトウェア開発リファレンスマニュアル」、改訂 2.0、注文番号 245320-003、2001年12月、110 ページ。2004年2月18日時点のオリジナルよりアーカイブ。
- ^ a b Intel、「プロセッサ識別およびCPUID命令アプリケーションノート485」、注文番号241618-036、2009年8月、26ページ。2023年10月6日にアーカイブ。
- ^ InstLatX64、 Willamette-128 CPUIDダンプ。2019年12月7日アーカイブ。
- ^ InstLatX64、 Northwood-128 CPUIDダンプ。2019年12月7日アーカイブ。
- ^ InstLatX64、 Prescott-256 CPUIDダンプ。2019年12月6日アーカイブ。
- ^ InstLatX64、 Intel Tolapai CPUIDダンプ。2019年1月19日アーカイブ。
- ^ Jason Gaston、 (PATCH 2.6.24-rc5) x86 intel_cacheinfo.c: Intel TolapaiのCPUキャッシュ情報エントリ、 LKML、2007年12月20日。 2024年11月9日にアーカイブ。
- ^ VIA-Cyrix、「アプリケーションノート120:Cyrix III CPU BIOSライターガイド」 、改訂1.1、1999年11月24日、13ページ。2000年9月29日時点のオリジナルよりアーカイブ。
- ^ InstlatX64、 Intel Atom 230 CPUIDダンプ。2019年12月7日アーカイブ。
- ^ WikiChip、 Bonnell。2017年7月16日アーカイブ。
- ^ Cyrix、「Cyrix CPU 検出ガイド」、改訂 1.01、1997 年 10 月 2 日、13 ページ。
- ^ CPU-Worldフォーラム、 Working Timna desktop 2023、2ページ目- TimnaエンジニアリングサンプルのCPUIDダンプが掲載されています。2024年11月9日アーカイブ。
- ^ Geoff Chappell、 CPUID Leaf 2、2020年1月26日。2023年9月4日アーカイブ。
- ^ Intel、 Itanium 2 プロセッサリファレンスマニュアル、注文番号 251110-003、2004年5月、192ページ。2006年12月7日時点のオリジナルよりアーカイブ。
- ^ Intel、 Itanium 2 プロセッサ仕様アップデート、注文番号 251141-028、2004年11月、26ページのエラータ 6。 2004年11月25日時点のオリジナルよりアーカイブ。
- ^ Intel、 Atom C3000プロセッサー製品ファミリー仕様アップデート、注文番号336345-020、16ページ、2023年3月。2023年10月7日にアーカイブ。
- ^ Intel、第6世代Intelプロセッサー仕様アップデート、注文番号332689-030、2023年7月、66ページのエラッタSKL148を参照。 2023年3月8日時点のオリジナルよりアーカイブ。
- ^ Intel、第10世代Intel Coreプロセッサー仕様アップデート、注文番号615213-013、2023年4月、41ページのエラッタCML081を参照。 2024年7月19日にアーカイブ。
- ^ Intel、 Xeonプロセッサー7500シリーズデータシート、注文番号323341-001、2010年3月、150ページ。2023年10月8日にアーカイブ。
- ^ Intel,最適化リファレンスマニュアル、第1巻、注文番号248966-049、2024年1月、第9.6.3.3章、361ページ。2024年4月19日アーカイブ。
- ^ Intel、「プロセッサ識別とCPUID命令」、注文番号241618-031、2006年9月、32ページ。
- ^ a b Shih Kuo (2012年1月27日). 「Intel 64アーキテクチャ・プロセッサ・トポロジー一覧」 .
- ^ 「CPUIDを使用したプロセッサとコアの列挙 | AMD」 Developer.amd.com。2014年7月14日時点のオリジナルよりアーカイブ。 2014年7月10日閲覧。
- ^ 「Sandybridgeプロセッサが誤ったコア数を報告?」 Software.intel.com. 2012年12月29日. 2014年7月10日閲覧。
- ^ "cpuid, __cpuidex" . Msdn.microsoft.com. 2014年6月20日. 2014年7月10日閲覧。
- ^ "x86アーキテクチャ - CPUID" . sandpile.org . 2014年7月10日閲覧。
- ^ "topology.cpp in ps/trunk/source/lib/sysdep/arch/x86_x64 – Wildfire Games" . Trac.wildfiregames.com. 2011年12月27日. 2021年3月9日時点のオリジナルよりアーカイブ。 2014年7月10日閲覧。
- ^ハイパースレッディングテクノロジーとマルチコアプロセッサ検出
- ^ Intel、「アーキテクチャ命令セット拡張プログラミングリファレンス」、注文番号319433-052、2024年3月、第17章。2024年4月7日にアーカイブ。
- ^ Intel、「Intel プロセッサ識別および CPUID 命令 (AP-485、改訂 30)」、注文番号 241618-030、2006 年 1 月、19 ページ。
- ^ Intel、 Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル、注文番号 352462-079、第 3B 巻、セクション 15.4.4.4、ページ 3503
- ^ Intel、「プロセッサ識別とCPUID命令」、注文番号241618-038、2012年4月、p.38
- ^ Intel、製品変更通知108701、2008年8月1日。2023年5月11日アーカイブ
- ^ a b「Intel Transactional Synchronization Extensionのメモリ順序付け問題によるパフォーマンス監視への影響」(PDF) . Intel . 2023年6月. p. 8 . 2024年5月8日閲覧。
- ^ a b c Intel、「アーキテクチャー仕様:Intel Trust Domain Extensions(Intel TDX)モジュール」、注文番号344425-001、2020年9月、120-122ページ。 2021年7月29日時点のオリジナルよりアーカイブ。
- ^ Intel、「PCOMMIT 命令の非推奨」、2016年9月12日。 2023年4月23日にアーカイブ。
- ^ Intel、 AVX512-FP16アーキテクチャ仕様(PDF)、文書番号347407-001、2021年6月。2022年10月26日にアーカイブ
- ^ a b c d「投機的実行サイドチャネル緩和策」(PDF)。リビジョン2.0。Intel 。 2018年5月[2018年1月]。文書番号:336996-002 。 2018年5月26日閲覧。
- ^ 「IBRSパッチシリーズ[LWN.net]」。
- ^ Intel、 X86S外部アーキテクチャ仕様v1.2、2024年6月、注文番号351407-002、セクション3.5、13ページ。 2024年10月2日時点のオリジナルよりアーカイブ。
- ^ Intel、「簡素化されたIntelアーキテクチャの構想」(2024年12月20日時点)には、IntelがX86Sの採用を見送ったとの記述がある。2024年12月20日アーカイブ。
- ^ a b c Intel、「Flexible Return and Event Delivery (FRED) 仕様」、改訂 6.1、2023年12月、注文番号 346446-007、14ページ。2023年12月22日にアーカイブ。
- ^ Intel、『ソフトウェア開発者マニュアル』、注文番号 325462-080、2023 年 6 月 - 早期にビジー状態になるシャドウ スタックに関する情報は、第 1 巻、410 ページのセクション 17.2.3、第 2 巻 A、820 ページの表 3.8 (CPUID EAX=7、ECX=2)、第 3 巻 C、3958 ページの表 25-14、および 3984 ページのセクション 26.4.3 に記載されています。
- ^ Intel、「複雑なシャドウスタックの更新(Intel制御フロー実施テクノロジー)」、注文番号356628-001、2023年8月。2024年4月2日アーカイブ。
- ^ LKML、 Re: (PATCH v3 00/21) Enable CET Virtualization、2023年6月16日 - CET-SSSの早期ビジースタック問題が仮想化とどのように相互作用するかについての追加的な議論を提供しています。2023年8月7日アーカイブ。
- ^ a b Intel、「Advanced Vector Extensions 10」、改訂1.0、2023年7月、注文番号355989-001。2023年7月24日アーカイブ。
- ^ a b Intel、「Advanced Performance Extensions - Architecture Specification」、rev 2.0、2023年8月、注文番号355828-002、37ページ。2023年9月10日にアーカイブ。
- ^ Intel、「Fast Store Forwarding Predictor」、2022年2月8日。2024年4月6日アーカイブ。
- ^ a b c Intel、Branch History Injection および Intra-mode Branch Target Injection / CVE-2022-0001、CVE-2022-0002 / INTEL-SA-00598、2022年8月4日。2023年5月5日にアーカイブ。
- ^ Intel、リターンスタックバッファアンダーフロー / CVE-2022-29901、CVE-2022-28693 / INTEL-SA-00702、2022年7月12日。2022年7月13日アーカイブ。
- ^ Intel、「データ依存型プリフェッチャー」、2022年11月10日。2024年8月4日時点のアーカイブ。
- ^ Intel、 MONITORおよびUMONITORパフォーマンスガイダンス、2024年7月10日。2024年11月27日アーカイブ。
- ^ Intel、「非同期エンクレーブ終了通知とEDECCSSAユーザーリーフ関数」、2022年6月30日。2022年11月21日にアーカイブ。
- ^ Linux カーネル git コミット 604dc91、 x86/tsc: CPUID.0x16 を使用して、不足している水晶周波数を計算します、2019 年 5 月 9 日 - 周波数を指定していない CPU でのコア水晶クロック周波数の計算に関するメモと、対応する C コードが含まれています。
- ^ Intel、 SDM Volume 3A、注文番号253668-083、2024年3月、第11.5.4章、408ページ
- ^ instlatx64、 Spreadtrum SC9853I-IA CPUIDダンプ
- ^ 「Intel® アーキテクチャ命令セット拡張と将来の機能」(PDF) (第58版). 2025年6月. p. 41. 319433-058. 2025年7月17日時点のオリジナルよりアーカイブ(PDF) . 2025年10月30日閲覧。
- ^ 「Intel® Architecture Instruction Set Extensions and Future Features」(PDF)(第59版)2025年10月2日、p. 41、319433-059。2025年10月3日時点のオリジナルよりアーカイブ(PDF) 。 2025年10月3日閲覧。
- ^ Intel、「アーキテクチャ仕様:Intel Trust Domain Extensions(Intel TDX)モジュール」、注文番号344425-005、93ページ、2023年2月。2023年7月20日にアーカイブ。
- ^ Intel、「Intel Advanced Vector Extensions 10 Architecture Specification」、注文番号355989-003US、2024年7月、13ページの改訂履歴を参照。 2024年10月8日にアーカイブ。
- ^ Intel、「Trust Domain Extensions (Intel TDX) モジュールベースアーキテクチャ仕様」、注文番号348549-006US、2025年4月、p. 116。2025年4月24日アーカイブ。
- ^ Intel、「Advanced Vector Extensions 10.2 Architecture Specification」、リビジョン4.0、注文番号361050-004US、2025年5月、p. 16。2025年5月25日アーカイブ。
- ^ a b Intel、「Intel Xeon Phi コプロセッサー命令セットアーキテクチャーリファレンスマニュアル」、2012年9月、注文番号327364-001、付録B.8、677ページ。2021年8月4日にアーカイブ。
- ^ a b Microsoft、「Hyper-V の機能とインターフェイスの検出」、2022年7月8日。2023年11月18日にアーカイブ。
- ^ Geoff Chappell、 HV_HYPERVISOR_INTERFACE、2022年12月10日。2023年2月1日アーカイブ。
- ^ QEMUドキュメント、 Hyper-V Enlightenments。2024年4月17日アーカイブ。
- ^ Linux 6.8.7 カーネルソース、 /source/arch/x86/kvm /cpuid.c、1482-1488行目
- ^ Linuxカーネルドキュメント、 KVM CPUIDビット。2022年8月22日アーカイブ。
- ^ Linux 6.8.7 カーネルソース、 /arch/x86/kvm/hyperv.c、行 2793
- ^ Linuxカーネルドキュメント、仮想化サポート: 4.118 KVM_GET_SUPPORTED_HV_CPUID。2024年3月26日アーカイブ。
- ^ FreeBSDコミット560d5ed、2013年6月28日、ファイル/sys/amd64/vmm/x86.cの48行目を参照。 2024年4月22日にアーカイブ。
- ^ HyperKitソースコード、 /src/lib/vmm/x86.cの42行目、2021年5月8日。
- ^ Xen、 XenへのCPUIDインターフェース。2024年4月22日アーカイブ。
- ^ QEMUソースコード、 fb/target/i386/cpu.c、行6475、2024年3月18日。
- ^ Xakep, Детектим виртуалки [仮想マシンの検出] (ロシア語), 2013年11月8日 - Parallels Workstation上のCPUID.(EAX=40000000)に対してEBX/ECX/EDXで返される値がそれぞれ0x70726c20、0x68797065、0x72762020と記載されています。これはエンディアンが入れ替わった文字列に相当します。 2015年3月25日アーカイブ。
" lrpepyh vr" - ^ VMWare、「VMware 仮想マシンでソフトウェアが実行されているかどうかを判断するメカニズム」、2015年5月1日。2023年6月18日アーカイブ。
- ^ Project ACRN、 CPUID仮想化、2022年10月20日。2023年3月25日アーカイブ。
- ^ VirtualBoxドキュメント、 9.30準仮想化デバッグ。2024年4月22日アーカイブ。
- ^ QNX、ハイパーバイザー - ゲストの環境の確認、2022年3月25日。2024年4月22日アーカイブ。
- ^ NetBSDソースコード、 /sys/dev/nvmm/x86/nvmm_x86_vmx.c、行1430、2023年11月6日。
- ^ OpenBSDソースコード、 /sys/arch/amd64/include/vmmvar.h、24行目、2024年4月9日。
- ^ Siemens Jailhouseハイパーバイザードキュメント、 hypervisor-interfaces.txt、39行目、2020年1月27日。 2024年7月5日にアーカイブ。
- ^ Bitdefender Napoca ソース コード、 /napoca/kernel/guestenlight.c、293 行目、2020 年 7 月 30 日。
- ^ FEX-Emuドキュメント、 FEXCoreカスタムCPUID関数、2024年5月24日。
- ^ Intel HAXMソースコード、 /core/cpuid.c、行979、2023年1月20日。 2024年4月22日にアーカイブ。
- ^ Intel KGT ソースコード (trusty ブランチ)、 /vmm/vmexit/vmexit_cpuid.c、17-75 行目、2019 年 5 月 15 日
- ^ Linuxカーネルv5.18.19ソースコード、 /source/drivers/visorbus/visorchipset.c、28行目
- ^ N. Moore, virt: LMHS SREゲストの検出をサポート #25594、2022年12月1日 - Lockheed Martin提供のsystemd向けプルリクエスト。LMHS SREハイパーバイザーのCPUIDハイパーバイザーID文字列を追加。2024年4月23日アーカイブ。
- ^ CPUID仕様、発行番号25481、改訂2.34(PDF)、AMD 、2010年9月、オリジナル(PDF)から2022年8月18日にアーカイブ
- ^ Linuxカーネルのソースコード
- ^ AMD、 AMD-K6プロセッサデータシート、注文番号20695H/0、1998年3月、セクション24.2、ページ283
- ^ AMD、 AMD-K6プロセッサリビジョンガイド、注文番号21846H/0、1999年6月、セクション3.2.1、17ページ
- ^ Intel、 Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル、注文番号 325462-079、2023 年 3 月、3-238 ページの表 3-8
- ^軽量プロファイリング仕様(PDF)、AMD、2010年8月、オリジナル(PDF)から2012年11月27日にアーカイブ、 2013年4月3日取得
- ^ Cyrix、 Cyrix CPU 検出ガイド、改訂 1.01、1997 年 10 月 2 日、12 ページ
- ^ AMD、 Geode GX1プロセッサデータブック、rev 5.0、2003年12月、202ページと226ページ。2020年4月20日アーカイブ。
- ^ Transmeta、プロセッサ認識、2002 年 5 月 7 日、5 ページ
- ^ a b AMD、「プロセッサ認識アプリケーションノート」、pub.no. 20734、rev. 3.13、2005年12月。セクション2.2.2(p.20)とセクション3(33~40ページ)では、CPUID.(EAX=8000_0001):EDX[ビット19]をプロセッサの識別にどのように使用するかについて詳しく説明されています。セクション3では、AMDのブランド名文字列MSRに関する情報も提供されています。2006年6月26日時点のオリジナルからのアーカイブ。
- ^ AMD、 Family 10h BKDG、文書番号31116、改訂3.62、2013年1月11日、p. 388 - NodeIdビットを記載。2019年1月16日アーカイブ。
- ^ AMD、 AMD64アーキテクチャプログラマーズマニュアル第3巻、出版番号24594、改訂3.20、2013年5月、579ページ - StreamPerfMonビットをリストしています
- ^ 「Intelプロセッサ識別とCPUID命令」(PDF) . Download.intel.com. 2012年3月6日. 2013年4月11日閲覧。
- ^ InstLatx64、 Vortex86DX3 CPUIDダンプ、2021年9月27日。2021年10月21日アーカイブ。
- ^ InstLatx64、 AMD Ryzen 7 6800HS CPUIDダンプ、2022年2月21日。 2023年3月24日にアーカイブ。
- ^ Chips and Cheese、「CPUIDを信頼できない理由」、2022年10月27日。2022年11月3日アーカイブ。
- ^ AMD、 Geode LXデータブック、pub.id. 33234H、2009年2月、207ページ。
- ^ InstLatx64、 HexaCore Intel Core i7-3960X Extreme Edition CPUIDダンプ
- ^ InstLatx64、 HexaCore Intel Xeon W3670 CPUIDダンプ
- ^ InstLatx64、 AMD EPYC 9655 CPUIDダンプ
- ^ InstLatx64、2x 24コア Montage Jintide C2460 CPUID ダンプ
- ^ InstLatx64、2x 24コア Intel Xeon Platinum 8160 CPUIDダンプ
- ^ InstLatx64、 Zhaoxin KaiXian ZX-C+ C4580 CPUID ダンプ
- ^ InstLatx64、 VIA Eden X4 C4250 CPUID ダンプ
- ^ Cyrix、アプリケーションノート112:Cyrix CPU検出ガイド、17ページ、1998年7月21日。
- ^ Instlatx64、 VIA Cyrix III "Samuel" CPUID ダンプ
- ^ AMD、「AMDファミリー10hプロセッサ用BKDG」、pub.no. 31116、rev 3.62、2013年1月11日、392ページ。2019年1月16日アーカイブ。
- ^ a b c d AMD、「AMD Family 19h Model 61h rev B1プロセッサ向けPPR」、pub.no. 56713、rev 3.05、2023年3月8日、99-100ページ。2023年4月25日アーカイブ。
- ^ AMD、「AMD Family 16h Models 00-0Fh processors」、pub.no. 48571、rev 3.03、2015年2月19日、482ページ。2019年1月16日アーカイブ。
- ^ SpecterDev、「次世代エクスプロイト:PS5のセキュリティ環境の調査」、2023年6月hardwear.ioカンファレンスのプレゼンテーションスライドデッキ、34、41、53ページ。2023年6月10日アーカイブ。
- ^ Instlatx64、 AMD 4700S 8コアプロセッサデスクトップキットCPUIDダンプ
- ^ AMD、 AMD Athlon 64 および AMD Opteron プロセッサ向け BIOS およびカーネル開発者ガイド、出版物 #26094、改訂 3.30、2006 年 2 月、29 ~ 30 ページ (LMSLE を含む Athlon 64 リビジョンの相違点を一覧表示) (2019 年 1 月 16 日にアーカイブ)、およびAMD Athlon 64 および AMD Opteron プロセッサ向けリビジョン ガイド、出版物 #25759、改訂 3.79、2009 年 7 月、7 ~ 8 ページ (Athlon 64 リビジョン ID を一覧表示) (2019 年 1 月 18 日にアーカイブ)。
- ^ AMD、「AMDファミリー19hモデル01h、リビジョンB1プロセッサ用PPR」、第1巻/第2巻、文書番号55898、リビジョン0.50、2021年5月27日、98ページ - 分岐サンプリングビットを記載。2022年7月24日アーカイブ
- ^ AMD、 AMD64仮想化コードネーム「Pacifica」テクノロジー、発行番号33047、改訂3.01、2005年5月、付録B、81ページ。2011年6月13日にアーカイブ。
- ^ AMD、 CPUID仕様、出版物#25481、改訂2.18、2006年1月、18ページ。
- ^ AMD、 CPUID仕様、出版物#25481、改訂2.34、2010年9月、5ページと11ページ。
- ^ Instlatx64、 AMD E-350 CPUIDダンプ- CPUID.(EAX=8000000A):EDX[9]が設定されています。
- ^ AMD、 CPUID仕様、出版物#25481、改訂2.28、2008年4月、21ページ。
- ^ AMD、 CPUID 仕様、出版物 #25481、リビジョン 2.34、2010 年 9 月、5 ページ - 「SseIsa10Compat」は 2009 年 11 月に削除されたと記載されています。
- ^ a b AMD、「AMD ファミリー 19h モデル 61h、リビジョン B1 プロセッサの PPR」、文書番号 56713、改訂 3.05、2023 年 3 月 8 日、102 ページ。2023年 4 月 25 日にアーカイブ。
- ^ a b c d AMD、「AMD ファミリー 1Ah モデル 70h、リビジョン B0 プロセッサのプロセッサプログラミングリファレンス (PPR)」、注文番号 57930、改訂 3.00、2025年4月30日、103、119、200ページ。2026年1月19日にアーカイブ。
- ^ AMD、「SEV-SNPゲスト向けセキュアVMサービスモジュール」、pub.no #58019、rev 1.00、2023年7月、13ページ。2023年8月5日にアーカイブ。
- ^ a b AMD、「AMD ファミリー 19h モデル 61h、リビジョン B1 プロセッサの PPR」、文書番号 56713、改訂 3.05、2023 年 3 月 8 日、116 ページ。2023年 4 月 25 日にアーカイブ。
- ^ a b c AMD、「一時スケジューラ攻撃の緩和に関する技術ガイダンス」、改訂2.0、2025年7月、3ページ。2025年8月14日アーカイブ。
- ^ AMD、「第5世代AMD EPYCプロセッサアーキテクチャ」、初版、2024年10月、9ページ。2024年12月28日アーカイブ。
- ^ Binutils メーリングリスト、 [PATCH] AMD znver6 プロセッサのサポートを追加、2025 年 11 月 7 日。
- ^ a b c d e AMD、「投機的リターンのスタックオーバーフローに関する技術アップデート」、rev 2.0、2024年2月。2024年4月12日アーカイブ。
- ^ Ferrie, Peter. 「仮想マシンエミュレータへの攻撃」(PDF) . Symantec . Symantec Advanced Threat Research. 2007年2月7日時点のオリジナル(PDF)からアーカイブ。 2017年3月15日閲覧。
- ^ Sandpile、 x86アーキテクチャCPUID。2022年12月22日閲覧。
- ^ instlatx64、 AMD A4-5000のCPUIDダンプ、CPUIDリーフに「HELLO KITTY」文字列をリスト
8FFFFFFFh。2022年12月22日閲覧。 - ^ Sandpile、 x86アーキテクチャCPUID。2025年7月30日閲覧。
- ^ IDT、 WinChip 2B プロセッサ データシート、v0.9、1999 年 4 月、第 3.3.3 章、31 ページ。
- ^ VIA、 PadLockプログラミングガイドrev. 1.66、2005年8月4日、5ページ。2010年5月26日時点のオリジナルからのアーカイブ。
- ^ OpenEuler 1.0 LTS カーネルソース、 /arch/x86/ include/ asm/cpufeatures.h の147-178行目。2023年7月30日アーカイブ。
- ^ Zhaoxin、「Padlock命令セットリファレンス」 、2024年12月26日。2025年3月15日時点のオリジナルよりアーカイブ。
- ^ Zhaoxin, GMI reference 、2024年12月26日。2025年3月15日時点のオリジナルよりアーカイブ
- ^ VIA、 C3 Nehemiah プロセッサ データシート、rev 1.13、2004年9月29日、21ページ
- ^ Zhaoxin、 PAUSEOPT 指令说明、セクション 3.1.1 (中国語)、改訂 1.0.0、2024 年 8 月 13 日。2026年 1 月 14 日にアーカイブ。
- ^ “GCC-mirror/GCC” . GitHub . 2022年3月13日.
- ^ 「ARMインフォメーションセンター」 . Infocenter.arm.com . 2013年4月11日閲覧。
- ^ IBM System/370 Principles Of Operation (PDF) (初版). IBM. 1970年6月. p. 29. GA22-7000-0.
- ^ a b z/Architecture Principles of Operation (PDF) (第14版). 2022年5月. SA22-7832-13.
- ^ 「MIPS32アーキテクチャ プログラマーズ編 第3巻:MIPS32特権リソースアーキテクチャ」(PDF)。MIPS Technologies, Inc. 2001年3月12日。
- ^ 「PowerPC オペレーティング環境アーキテクチャ、第 3 巻」(PDF)。
- ^ 「RISC-V命令セットマニュアル第2巻:特権アーキテクチャバージョン1.7」(PDF)。2015年5月9日。セクション3.1.1。
- ^ S. Darwish, Ahmed. 「[ANNOUNCE] x86-cpuid.org: 機械可読CPUIDリポジトリ」 Linuxカーネルメーリングリストアーカイブ. 2024年7月20日閲覧。
さらに読む
- 「AMD64テクノロジー間接分岐制御拡張」(PDF)(ホワイトペーパー)。リビジョン4.10.18。Advanced Micro Devices, Inc.(AMD)。2018年。 2018年5月9日時点のオリジナルからアーカイブ(PDF) 。 2018年5月9日閲覧。
外部リンク
- Intelプロセッサ識別とCPUID命令(アプリケーションノート485)、最終版。2013年にIntel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル に組み込まれたとされていますが、2014年7月現在もマニュアルではノート485を参照するよう指示されています。
- ただし、特にプロセッサ トポロジの識別に関しては、誤解される可能性のある、あるいは誤解されやすい情報も含まれています。
- 大規模なIntelマニュアルは、このページの冒頭にあるIntel ISAドキュメントよりも遅れている傾向があります。このドキュメントは、まだ公開されていないプロセッサについても更新されているため、通常はCPUIDビットが多く含まれています。例えば、この記事の執筆時点では、ISAブック(2014年5月版、リビジョン19)ではリーフ7のCLFLUSHOPTビットについて説明していますが、大規模なマニュアルは明らかにより新しい(2014年6月版、リビジョン51)にもかかわらず、このビットについて言及していません。
- AMD64 アーキテクチャ プログラマーズ マニュアル 第 3 巻: 汎用命令とシステム命令
- Linux用のcpuidコマンドラインプログラム
- cpuprint.com、cpuprint.exe、cpuprint.raw などの Windows 用コマンドライン プログラム
- instlatx64 - x86/x64 命令レイテンシ、メモリレイテンシ、CPUID ダンプのコレクション