cpuid (x86)

読み:スィーピーユーアイディー
外語:cpuid 英語
品詞:固有名詞

x86系プロセッサーの命令の一つで、CPUの種類などを得ることができる。互換CPUでも利用可能。

目次

この命令は、i386末期から利用可能となった。公式にはi486以降対応。

元々、CPUID命令対応以前のCPUでも、CPUリセット時にDXレジスターに16ビットでCPUの種類を表わすIDがセットされていた(これはEAX=1としてCPUID命令で得られる32ビット値中の下位16ビットそのままである)。これを32ビットに拡張し、また他の情報も得られるようにし、命令で取得可能にしたものである。

具体的には、フラグレジスター(EFLAGS)のビット21が変更可能である場合に命令が利用できる。オペコードは「0F A2」の2バイトである。

この命令を使うとCPUの種類を表わすコードやプロセッサーシリアルナンバー、そのCPUが持つ機能、メーカーなどを取得することができる。

cpuidという命令であることからも分かるように、CPUIDを得ることが主たる目的となる命令である。詳細は後述するが、これはEAX=1でcpuidを呼び出してEAXに返る32ビットの値である。

下位16ビットが従来から使われていたコードで、上位16ビットは拡張された内容である。

このコードは、最下位4ビットがステッピング、つぎの4ビットがモデル、次の4ビットがファミリー、残りの4ビットがタイプと予備(CPUの種類により微妙に違っている)となる。

CPUの大まかな種類はファミリーで表わし、i486=4、Pentiumシリーズ=5、Pentium Pro、Peintium Ⅱ〜Ⅲまで=6、Pentium 4=15となる。そして、各ファミリー中の細かい違い(SXとDXや、Pentium ⅡとⅢの違いなど)はモデルで表わされる。ステッピングはダイのバージョンなどを表わすものである。

実際には、EAXレジスターに取得したい情報の番号を入れcpuid命令を実行すると、EAXに応じた内容が各レジスターに返る。

利用できるEAXの範囲は、cpuid命令にて取得できる。

範囲の確認

まずEAX=0でcpuid命令を実行すると、EAXに利用できる最大の番号(例えばEAX=2)が返る。

また拡張で、EAX=8000_0000でcpuid命令を実行すると、EAXに利用できる最大の番号(例えばEAX=8000_0004)が返る。

この範囲を越える値を入れて実行した場合、返却値は未定義となる。無効オペコード例外などは生成されないので注意。

基本機能

EAX=0000_0000

EAX=0でcpuidを実行すると、次の値が得られる。cpuid対応の全CPU対象。

  • EAX: 基本CPUID情報の最大入力値
  • EBX:EDX:ECX: ベンダー文字列
    • "GenuineIntel" ‐ Intel
    • "AuthenticAMD" ‐ AMD
    • "CentaurHauls" ‐ Centaur
    • "CyrixInstead" ‐ Cyrix
    • "Geode by NSC" ‐ National Semiconductor
    • "NexGenDriven" ‐ NexGen
    • "RiseRiseRise" ‐ Rise
    • "SiS SiS SiS " ‐ SiS
    • "GenuineTMx86"、"TransmetaCPU" ‐ Transmeta
    • "UMC UMC UMC " ‐ UMC
    • "VIA VIA VIA " ‐ VIA Technologies

GenuineIntelの場合、EBX=0x756e6547、EDX=0x49656e69、ECX=0x6c65746eが返される。

EAX=0000_0001

EAX=1でcpuidを実行すると、次の値が得られる。cpuid対応の全CPU対象。

  • EAX: プロセッサーシグネチャ
    • CPUID番号(プロセッサーシリアルナンバーの上位32ビット)

      i486以降の内容は次のとおり。

      • ビット0〜3: Stepping ID (i386ではMinor Stepping)
      • ビット4〜7: Model Number (i386ではMajor Stepping)
      • ビット8〜11: Family Code
      • ビット12〜13: Processor Type (i386ではビット15〜12がProcessor Type)
      • ビット14〜15: 予備
      • ビット16〜19: Extended Model
      • ビット20〜27: Extended Family
      • ビット28〜31: 予備
  • EBX: ファンクションフラグ
    • ビット31〜24: APIC ID
    • ビット23〜16: 論理CPU数
    • ビット15〜8: CLFLUSH
    • ビット7〜0: ブランドID
  • ECX: Feature flags(その2) 特に記載がない場合は各ビットが0で無効(機能なし)、1で有効(機能あり)。
    0SSE3ストリーミングSIMD拡張命令3対応
    1PCLMULQDQPCLMULQDQ Instruction
    2DTES6464bit Debug Trace and EMON Store MSRs
    3MONITORMONITOR/MWAIT命令対応
    4DS-CPLCPLの条件を満たすデバッグストア拡張機能
    5VMXIntel VT (Virtual Machine Extensions)
    6SMXSafer Mode Extensions
    7EST拡張版 Intel SpeedStep テクノロジー
    8TM2温度モニター2の温度制御回路(TCC)を実装
    9SSSE3Supplemental SSE3
    10CNXT-IDコンテキストID、BIOSからL1データキャッシュモードを設定可
    11SDBGシリコンデバッグ用のIA32_DEBUG_INTERFACE MSRに対応
    12FMAYMM状態を使用したFMA拡張に対応
    13CX16CMPXCHG16B命令対応
    14xTPRタスク・プライオリティ・メッセージの送信を停止する機能に対応
    15PDCMPerformance/Debug Capability MSR
    16 予約
    17PCIDProcess-context Identifiers
    18DCADirect Cache Access
    19SSE4_1Streaming SIMD Extensions 4.1
    20SSE4_2Streaming SIMD Extensions 4.2
    21x2APICx2APIC
    22MOVBEMOVBE
    23POPCNTPopulation Count Instruction
    24TSC-DeadlineTSC-Deadline
    25AESNIAES
    26XSAVECR4.OSXSAVE
    27OSXSAVECR4.OSXSAVE
    28AVXAVX
    29F16C16ビット浮動小数点変換命令
    30RDRANDRDRAND instruction
    31HYPERVISOR何らかのHYPERVISOR状態
  • EDX: Feature flags(その1)
    0FPUx87浮動小数点命令に対応するFPU機能
    1VME仮想8086モード拡張機能
    2DEI/Oブレークポイントをサポートするデバッグ拡張機能
    3PSE4Miバイトページをサポートするページサイズ拡張機構
    4TSCタイムスタンプ・カウンター、RDTSC命令に対応
    5MSRモデル固有レジスター、RDMSR命令、WRMSR命令
    6PAE32ビットを超える物理アドレスをサポートする物理アドレス拡張機構
    7MCEマシンチェック例外(例外18)とCR4.MCEイネーブル・ビットに対応
    8CX8CMPXCHG8命令のサポート
    9APICオンチップAPICハードウェアのサポート
    10 予約
    11SEP高速システムコール命令SYSENTER/SYSEXITに対応
    12MTRRメモリータイプ範囲レジスター(MTRR_CAPレジスター)対応
    13PGEページ・グローバル・イネーブル、PDE内とPTE内でグローバル・ビットに対応
    14MCAマシン・チェック・アーキテクチャー(MCG_CAPレジスター)対応
    15CMOV条件付MOVE命令、CMOVcc(FPU対応時はFCMOVccとFCOMI命令も)対応
    16PATページ属性テーブル対応
    17PSE-3636ビット・ページ・サイズ拡張機構
    18PSNプロセッサーシリアルナンバー対応かつ有効
    19CLFSHCLFLUSH命令対応
    20 予約
    21DSデバッグストア(アドレスへ/からの分岐履歴をメモリーバッファに書く機能)対応
    22ACPIACPI機能対応
    23MMXMMXテクノロジー拡張命令セット対応
    24FXSR高速浮動小数点セーブ/リストア命令FXSAVE/FXRSTOR対応
    25SSEストリーミングSIMD拡張命令対応
    26SSE2ストリーミングSIMD拡張命令2対応
    27SS自己スヌープ対応
    28HTTハイパースレッディング・テクノロジー機能を搭載
    29TMT温度モニターの自動温度制御回路(TCC)を実装
    30IA-64IA-64 Processor Capable
    31PBEペンディング・ブレーク・イネーブルFERR#/PBE#ピン対応

現在のIA-32プロセッサーの仕様書では、ビット30は予約としか記載がない。IA-64は名を出すことも憚られる黒歴史だったらしい。

EAX=0000_0002

EAX=2でcpuidを実行すると、次の値が得られる。cpuid対応の全CPU対象。

  • EAX,EBX,ECX,EDX: CPUキャッシュとTLBディスクリプター

EAX=0000_0003

EAX=3でcpuidを実行すると、次の値が得られる。これは、プロセッサーシリアルナンバー対応製品のみで有効で、事前にEAX=0で最大入力値を確認せねばならない。

  • EDX:ECX: プロセッサーシリアルナンバーの下位64ビット (上位32ビットはEAX=1のEAX)

Transmetaの場合、EAXとEBXにも値を返す。CrusoeではEBXに、EfficeonではEAXとEBXに返される。

EAX=0000_0004〜5

基本cpuid情報の最大入力値が4〜5以上で、かつIA32_CR_MISC_ENABLES.BOOT_NT4(ビット22)が0(デフォルト)時には、EAX=4またはEAX=5で、次の値が得られる。

  • EAX=4時: キャッシュ・コンフィグレーション・ディスクリプターの情報
  • EAX=5時: MONITOR/MWAIT機能の情報

EAX=4では、引数ECXが必要である。0ならL1D、1ならL2の情報、あるいは、0ならL1D、1ならL1I、2ならL2、を得る、といった動作をする。

いずれも、MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。

EAX=0000_0006

EAX=6でcpuidを実行すると、パワーマネージメント情報が得られる。基本CPUID情報の最大入力値が6以上の場合のみ有効。

  • EAX:
    • ビット0: 1=ディジタル温度計あり
    • ビット1: 1=Intel Turbo Boost Technology有効
    • ビット2: ARAT, 1=常時実行のAPICタイマー有効
    • ビット3: 予約
    • ビット4: PLN, 1=電力制限通知制御に対応
    • ビット5: ECMD, 1=クロック変調デューティーサイクル拡張に対応
    • ビット6: PTM, 1=パッケージの熱管理に対応
    • ビット7: HWP, 1=HWPベースレジスター (IA32_PM_ENABLE[ビット0]、IA32_HWP_CAPABILITIES、IA32_HWP_REQUEST、IA32_HWP_STATUS)に対応
    • ビット8: HWP_Notification, 1=IA32_HWP_INTERRUPT MSRに対応
    • ビット9: HWP_Activity_Window, 1=IA32_HWP_REQUEST[ビット41〜32]に対応
    • ビット10: HWP_Energy_Performance_Preference, 1=IA32_HWP_REQUEST[ビット31〜24]に対応
    • ビット11: HWP_Package_Level_Request. 1=IA32_HWP_REQUEST_PKG MSRに対応
    • ビット12: 予約
    • ビット13: HDC, 1=HDCベースレジスターのIA32_PKG_HDC_CTL、IA32_PM_CTL1、IA32_THREAD_STALL MSRsに対応
    • ビット14: 1=Intel Turbo Boost Max Technology 3.0 有効
    • ビット15: HWP Capabilities, 1=最高パフォーマンスチェンジに対応
    • ビット16: 1=HWP PECI オーバーライドに対応
    • ビット17: フレキシブルHWPに対応
    • ビット18: IA32_HWP_REQUESTMSRの高速アクセスモードに対応
    • ビット19: HW_FEEDBACK, 1=IA32_HW_FEEDBACK_PTR MSR、IA32_HW_FEEDBACK_CONFIG MSR、IA32_PACKAGE_THERM_STATUS MSR ビット26、および IA32_PACKAGE_THERM_INTERRUPT MSR ビット25に対応
    • ビット20: 1=アイドル論理プロセッサーHWP要求の無視に対応
    • ビット31〜21: 予約
  • EBX:
    • ビット3〜0: ディジタル温度計の割込スレッショルド数
  • ECX:
    • ビット0: 1=ハードウェア調整フィードバック機能(IA32_MPERFおよびIA32_APERFの存在)
    • ビット2〜0: 予約(0)
    • ビット3: 1=CPUID.06H:ECX.SETBH [ビット3]が設定されている場合、プロセッサーはパフォーマンスエネルギーバイアス設定に対応する

      これは、IA32_ENERGY_PERF_BIAS(1B0H)と呼ばれる新しいアーキテクチャーのMSRの存在も意味する。

    • ビット31〜4: 予約(0)
  • EDX:
    • ビット7〜0: サポートされているハードウェアフィードバックインターフェイス機能のビットマップ
      • ビット0: 1=パフォーマンス機能レポートが有効
      • ビット1: 1=エネルギー効率能力レポートが有効
      • ビット7〜2: 予約
    • ビット11〜8: ハードウェアフィードバックインターフェイス構造のサイズを4KiBページの数で列挙する。結果を得るには戻り値に1を加算する
    • ビット31〜16: ハードウェアフィードバックインターフェイス構造内の、この論理プロセッサの行のインデックス(0から開始)

      インデックスは複数のプロセッサーで同じである場合がある

      インデックスは必ずしも連続しておらず、未使用の行(row)が存在しうる

EAX=0000_0007

使い方

ECXにサブリーフ番号を入れ、EAX=7でcpuidを実行すると、EBX:ECX:EDXに拡張Feature flags情報が得られる。基本CPUID情報の最大入力値が7以上の場合のみ有効。特に記載がない場合は各ビットが0で無効(機能なし)、1で有効(機能あり)。

EAX=0000_0001を使い切ったため拡張されたが、今後の更なる拡張でEAXを消費せずに済むよう、ECXで参照する情報(リーフ; leaf=葉)を切り替えられるようになっている。実際、2020(令和2)年頃の製品で既にECX=0の情報欄が埋まりつつあり、近い将来のCPUからECX=1のサブリーフが追加される可能性は高い。

もしECXに無効なサブリーフ番号を入れた場合、つまりそのCPUがまだ対応していないサブリーフ番号を参照しようとした場合、EAX=0が返る。ECXのサブリーフ番号が有効の場合は、EAXに対応する最大サブリーフ番号を返す。

ECX=0
  • EAX: 対応する最大サブリーフ番号
  • EBX: 拡張Feature flags
    0FSGSBASERDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE
    1TSC_ADJUSTTSC adjustment MSR 0x3b
    2SGXIntel Software Guard Extensions(Intel SGX Extensions)
    3BMI11st group bit manipulation extensions
    4HLEHardware Lock Elision
    5AVX2AVX2 instructions
    6FDP_EXCPTN_ONLYx87 FPUデータポインターはx87例外でのみ更新される
    7SMEPSupervisor Mode Execution Protection
    8BMI22nd group bit manipulation extensions
    9ERMSEnhanced REP MOVSB/STOSB
    10INVPCIDInvalidate Processor Context ID
    11RTMRestricted Transactional Memory
    12RDT-MIntel Resource Director Technology (Intel RDT) Monitoring capability
    13 Deprecates FPU CS and FPU DS values
    14MPXIntel Memory Protection Extensions
    15RDT-ASupports Intel Resource Director Technology (Intel RDT) Allocation capability
    16AVX512F 
    17AVX512DQ 
    18RDSEEDThe RDSEED instruction
    19ADXThe ADCX and ADOX instructions
    20SMAPSupervisor-Mode Access Prevention (および CLAC/STAC 命令)
    21AVX512_IFMA 
    22 予約
    23CLFLUSHOPT 
    24CLWB 
    25PTIntel Processor Trace
    26AVX512PFAVX512PF (Intel Xeon Phi のみ)
    27AVX512ERAVX512ER (Intel Xeon Phi のみ)
    28AVX512CD 
    29SHAIntel Secure Hash Algorithm Extensions (Intel SHA Extensions)
    30AVX512BW 
    31AVX512VL 
  • ECX: 拡張Feature flags
    0PREFETCHWT1PREFETCHWT1 (Intel Xeon Phi のみ)
    1AVX512_VBMI 
    2UMIPuser-mode instruction prevention
    3PKUprotection keys for user-mode pages
    4OSPKEOSは、保護キー(およびRDPKRU/WRPKRU命令)を有効にするようにCR4.PKEを設定した
    5WAITPKG 
    6AVX512_VBMI2 
    7CET_SSCET shadow stack features
    8GFNI 
    9VAES 
    10VPCLMULQDQ 
    11AVX512_VNNI 
    12AVX512_BITALG 
    13 予約
    14AVX512_VPOPCNTDQAVX512_VPOPCNTDQ (Intel Xeon Phi のみ)
    15 予約
    16 予約
    17MAWAU64ビットモードでBNDLDXおよびBNDSTX命令によって使用されるMAWAUの値
    18
    19
    20
    21
    22 RDPID and IA32_TSC_AUX are available
    23 予約
    24 予約
    25CLDEMOTEcache line demote
    26 予約
    27MOVDIRIMOVDIRI
    28MOVDIR64BMOVDIR64B
    29 予約
    30SGX_LCSGX Launch Configuration
    31PKSprotection keys for supervisor-mode pages
  • EDX: 拡張Feature flags
    0 ※(仕様書に記載なし)
    1 予約
    2AVX512_4VNNIWAVX512_4VNNIW (Intel Xeon Phi のみ)
    3AVX512_4FMAPSAVX512_4FMAPS (Intel Xeon Phi のみ)
    4 Fast Short REP MOV
    5 予約
    6 予約
    7 予約
    8 予約
    9 予約
    10 MD_CLEAR
    11 予約
    12 予約
    13 予約
    14 予約
    15Hybridthe processor is identified as a hybrid part
    16 予約
    17 予約
    18 予約
    19 予約
    20CET_IBTCET indirect branch tracking features
    21 予約
    22 予約
    23 予約
    24 予約
    25 予約
    26 Enumerates support for indirect branch restricted speculation (IBRS) and the indirect branch predictor barrier (IBPB)
    27 Enumerates support for single thread indirect branch predictors (STIBP)
    28 Enumerates support for L1D_FLUSH
    29 Enumerates support for the IA32_ARCH_CAPABILITIES MSR
    30 Enumerates support for the IA32_CORE_CAPABILITIES MSR
    31 Enumerates support for Speculative Store Bypass Disable (SSBD)

EAX=0000_0008

予約 (未使用)

EAX=0000_0009

EAX=9でcpuidを実行すると、DCA(Direct Cache Access)パラメーターが得られる。基本CPUID情報の最大入力値が9以上の場合のみ有効。

  • EAX: PLATFORM_DCA_CAP MSR 0000_01F8h
  • EBX: 予約 (未使用)
  • ECX: 予約 (未使用)
  • EDX: 予約 (未使用)

MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。

EAX=0000_000A

EAX=10でcpuidを実行すると、DCAパラメーターが得られる。基本CPUID情報の最大入力値が10以上の場合のみ有効。

  • EAX:
    • ビット7〜0: リビジョン
    • ビット15〜8: 1論理プロセッサーに対するPeMoカウンター数
    • ビット23〜16: PeMoカウンターのビット幅
    • ビット31〜24: EBXビットベクター長
  • EBX:
    • ビット0: core cycles event unavailable
    • ビット1: instructions retired event unavailable
    • ビット2: reference cycles event unavailable
    • ビット3: last level cache references event unavailable
    • ビット4: last level cache misses event unavailable
    • ビット5: branch instructions retired event unavailable
    • ビット6: branch mispredicts retired event unavailable
    • ビット31〜7: 予約=0
  • ECX: 予約 (未使用)
  • EDX:
    • ビット4〜0: 固定機能PeMoカウンターの数
    • ビット12〜5: 固定機能PeMoカウンターのビット幅
    • ビット14〜13: 予約=0
    • ビット15: AnyThread deprecation
    • ビット31〜16: 予約=0

EDXのビット12〜0は、リビジョン2以降で有効。

MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。

EAX=0000_000B

EAX=11でcpuidを実行すると、topology enumeration情報が得られる。基本CPUID情報の最大入力値が11以上の場合のみ有効。

引数としてECXを求める。ECX=0でcpuidを実行するとSMTの情報が得られる。

MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。

EAX=0000_000C

予約 (未使用)

EAX=0000_000D

EAX=13、ECXにサブリーフ番号を入れてcpuidを実行すると、extended state enumeration情報が得られる。基本CPUID情報の最大入力値が13以上の場合のみ有効。

ECXのサブリーフ番号は、0でメイン、1でサブ、2〜62でXCR0.nのsub情報が得られる。

MSRのMISC_ENABLEのLCMVが0の場合に有効となる。Windows NTのバグ対策のためとされる。

EAX=0000_000F〜0000_0010

EAX=15〜16、ECXにサブリーフ番号を入れてcpuidを実行すると、Intel Resource Director Technology (Intel RDT)やキャッシュ、Memory Bandwidth Allocation Enumerationなどに関する各種の情報が得られる。基本CPUID情報の最大入力値がEAXに入れる値以上の場合のみ有効。

EAX=0000_0012

ECXにサブリーフ番号を入れ、EAX=18(=12H)でcpuidを実行すると、Intel SGXに関する情報が得られる。基本CPUID情報の最大入力値が18以上の場合のみ有効。

EAX=0000_0014

ECXにサブリーフ番号を入れ、EAX=20(=14H)でcpuidを実行すると、Intel Processor Trace Enumeration情報が得られる。基本CPUID情報の最大入力値が20以上の場合のみ有効。

EAX=0000_0015

EAX=21(=15H)でcpuidを実行すると、タイムスタンプカウンター(TSC)やNominal Core Crystal Clockに関する情報が得られる。サブリーフ番号はない。基本CPUID情報の最大入力値が21以上の場合のみ有効。

EAX=0000_0016

EAX=22(=16H)でcpuidを実行すると、CPUの周波数情報が得られる。サブリーフ番号はない。基本CPUID情報の最大入力値が22以上の場合のみ有効。

  • EAX
    • ビット15〜0: Processor Base Frequency (MHz)
    • ビット31〜16: 予約 (=0)
  • EBX
    • ビット15〜0: Maximum Frequency (MHz)
    • ビット31〜16: 予約 (=0)
  • ECX
    • ビット15〜0: Bus (Reference) Frequency (MHz)
    • ビット31〜16: 予約 (=0)
  • EDX: 予約

EAX=0000_0017

ECXにサブリーフ番号を入れ、EAX=23(=17H)でcpuidを実行すると、System-On-Chip Vendor Attribute Enumerationに関する情報が得られる。基本CPUID情報の最大入力値が23以上の場合のみ有効。

EAX=0000_0018

ECXにサブリーフ番号を入れ、EAX=24(=18H)でcpuidを実行すると、Deterministic Address Translation Parametersに関する情報が得られる。基本CPUID情報の最大入力値が24以上の場合のみ有効。

EAX=0000_001A

ECXにサブリーフ番号を入れ、EAX=26(=1AH)でcpuidを実行すると、Hybrid Information Enumerationに関する情報が得られる。基本CPUID情報の最大入力値が26以上の場合のみ有効。

EAX=0000_001F

ECXにサブリーフ番号を入れ、EAX=31(=1FH)でcpuidを実行すると、V2 Extended Topology Enumerationに関する情報が得られる。基本CPUID情報の最大入力値が31以上の場合のみ有効。

未実装機能

後述する他社による実装EAX=8000_0000にIntelが対応するにあたり追加で用意した範囲。つまりIntelが使用しないことを宣言した範囲。未実装である。

  • EAX=4000_0000〜4FFF_FFFF

互換プロセッサーでは、この番号で独自の情報を得られる可能性がある。

拡張機能

これは、元々はAMDが自社プロセッサーの情報取得用に作った仕様である。

Intel製品にない機能の有無を表現するのに、Intelの用意したフラグの空きを使っては、のちのち競合する恐れがあったためである。このため、この仕様においてビットの定義についてはAMD側に主導権があり、IntelもPentium 4以降で対応するようになったがここに独自のフラグを追加したりはしていない。

EAX=8000_0000

EAX=80000000Hでcpuidを実行すると、次の値が得られる。拡張機能対応チェックも兼ねている。

  • EAX: 拡張CPUID情報の最大入力値
  • EBX: 予約 (未使用)
  • ECX: 予約 (未使用)
  • EDX: 予約 (未使用)

拡張CPUIDに対応していない場合、EAXは80000000Hよりも小さな値を返す。

IntelではEBX,ECX,EDXは0だが、他のブランドではEAX=0000_0000と同じベンダー文字列を返すことがある(AMD、Transmeta、NSCのGX2など)。

EAX=8000_0001

EAX=80000001Hでcpuidを実行すると、次の値が得られる。対応しているCPUのみ。

  • EAX: 拡張プロセッサー種類情報(AMD系CPUの種類)
  • EBX: 拡張プロセッサー種類情報(AMD系CPUの種類)
  • ECX: Extended Feature flags(その2)
    0LAHF64ビットモードでのlahf/sahfの使用可否
    1CMPLHTT=1がHTT(0)かCMP(1)を示す
    2SVMSecure Virtual Machine
    3EASExtended APIC
    4AMC8LOCK MOV CR0 means MOV CR8
    5ABMAdvanced Bit Manipulation. LZCNT
    6SSE4AStreaming SIMD Extensions 4a
    7MASSEMisaligned SSE mode
    8PREFETCHPREFETCHとPREFETCHW命令のサポート
    9OSVWOS Visible Workaround
    10IBSinstruction based sampling
    11XOPeXtended Operations
    12SKINITSKINITとSTGIのサポート
    13WDTウォッチドッグタイマーのサポート
    14 予約
    15LWPLight Weight Profiling
    16FMA44 operands MAC instructions
    17TCEtranslation cache extension
    18 予約
    19MSRNodeId MSR
    20 予約
    21TBMtrailing bit manipulations
    22TOPOEXTtopology extensions CPUID leafs
    23PERFCTR_COREcore performance counter extensions
    24PERFCTR_NBNB performance counter extensions
    25 予約
    26DBXData breakpoint extensions
    27PERFTSCPerformance TSC
    28PERFCTR_L2L2 performance counter extensions
    29 予約
    30 予約
    31 予約
  • EDX: Extended Feature Flags(その1)
    0 Feature flags(EAX=0000_0001、EDX) 0〜9と同じ
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10 予約
    11SYSCALLsyscall/sysret命令のサポート
    12 Feature flags 12〜17と同じ
    13
    14
    15
    16
    17
    18 予約
    19MPMultiprocessing Capable
    20NX/XDNo-execute Page Protection
    21 予約
    22MMX+MMX Instruction Extensions
    23 Feature flags 23〜24と同じ
    24
    25FFXSRFXSAVE/FXRSTOR命令オプティマイズ
    26P1GB1GB large pageの対応
    27RDTSCPRDTSCP命令とIA32_TSC_AUXのサポート
    28 予約
    29LMAMD64/Intel 64 ロングモード
    303DNow!+3DNow! Instruction Extensions (Enhanced 3DNow!)
    313DNow!3DNow! Instructions

Feature flagsと同じ、とされている領域については、CPU種類によっては別の情報が格納されていることもある。

殆どがAMD用の情報ビットで、Intelの仕様書では、ECXのビット0、5、8と、EDXのビット11、20、26、27、29のみ明記があり、他は予約としている。

EAX=8000_0002〜0004

対応しているCPUでEAX=80000002〜4Hでcpuidを実行すると、EAX,EBX,ECX,EDXにNUL末端のプロセッサーブランド文字列が得られる。最大48バイト。

Intelのプロセッサーも対応している。

EAX=8000_0005

EAX=80000005Hでcpuidを実行すると、1次キャッシュの情報が得られる。対応しているCPUのみ。

  • EAX: 4/2 MB L1 TLB configuration descriptor
  • EBX: 4 KB L1 TLB configuration descriptor
  • ECX: data L1 cache configuration descriptor
  • EDX: code L1 cache configuration descriptor

Intelのプロセッサーは対応せず、予約で値は全て0としている。

EAX=8000_0006

EAX=80000006Hでcpuidを実行すると、2次キャッシュ、3次キャッシュの情報が得られる。対応しているCPUのみ。

  • EAX: 4/2 MB L2 TLB configuration descriptor
  • EBX: 4 KB L2 TLB configuration descriptor
  • ECX: unified L2 cache configuration descriptor
  • EDX: unified L3 cache configuration descriptor

Intelプロセッサーの仕様書では、次のような記載がある。

  • EAX: 予約 (未使用)
  • EBX: 予約 (未使用)
  • ECX:
    • ビット7〜0: キャッシュラインサイズ(バイト数)
    • ビット11〜8: 予約 (未使用)
    • ビット15〜12: L2 Associativity field
      • 00H ‐ Disabled
      • 01H ‐ Direct mapped
      • 02H ‐ 2-way
      • 03H ‐ (予約)
      • 04H ‐ 4-way
      • 05H ‐ (予約)
      • 06H ‐ 8-way
      • 07H ‐ (予約)
      • 08H ‐ 16-way
      • 09H ‐ (予約)
      • 0AH ‐ 32-way
      • 0BH ‐ (予約)
      • 0CH ‐ 64-way
      • 0DH ‐ 96-way
      • 0EH ‐ 128-way
      • 0FH ‐ Fully associative
    • ビット31〜16: Cache size in 1K units
  • EDX: 予約=0 (未使用)

EAX=8000_0007

EAX=80000007Hでcpuidを実行すると、電源管理関係の機能の情報が得られる。対応しているCPUのみ。

  • EDX: Power Management
    0TSTemperature Sensor
    1FIDFrequency ID Control
    2VIDVoltage ID Control
    3TTPThermal Trip
    4TMThermal Monitoring
    5STCSoftware Thermanl Control
    6MUL100MHz Multiplier Steps
    7HWPSHardware P-State Control
    8ITSCInvariant TSC
    9 予約
    10 予約
    11 予約
    12 予約
    13 予約
    14 予約
    15 予約
    16 予約
    17 予約
    18 予約
    19 予約
    20 予約
    21 予約
    22 予約
    23 予約
    24 予約
    25 予約
    26 予約
    27 予約
    28 予約
    29 予約
    30 予約
    31 予約

Intelプロセッサーでは、ビット8(ITSC)のみ定義している。

EAX=8000_0008

EAX=80000008Hでcpuidを実行すると、拡張アドレス長機能などの情報が得られる。対応しているCPUのみ。

  • EAX:
    • ビット7〜0: 物理アドレス
    • ビット15〜8: リニアアドレス長
    • ビット23〜16: ゲスト物理アドレス長 (0ならビット7〜0を参照)
    • ビット31〜24: 予約
  • EBX:
    • ビット0: CLZERO、RAXのアドレスでキャッシュラインをクリアする
    • ビット4: RDPRU、リング3からMPERFまたはAPERFを読み取る
    • ビット8: MCOMMIT、ストアをメモリーにコミットする。メモリーフェンシングおよびECCエラーの取得用
    • ビット9: WBNOINVD、ライトバック、およびキャッシュを無効にしない
  • ECX:
    • ビット7〜0: ダイ数−1あたりのコア数
    • ビット11〜8: 予約
    • ビット15〜12: number of LSBs in APIC ID that indicate core ID
    • ビット31〜16: 予約

Intelプロセッサーの仕様書では、EAXのビット15〜0の範囲のみ定義がある。

EAX=8000_000A

EAX=8000000AHでcpuidを実行すると、SVM情報が得られる。対応しているCPUのみ。

EAX=8000_0019

EAX=80000019Hでcpuidを実行すると、TLBコンフィギュレーションディスクリプターが得られる。対応しているCPUのみ。

EAX=8000_001A

EAX=8000001AHでcpuidを実行すると、パフォーマンス最適化に関する情報が得られる。対応しているCPUのみ。

EAX=8FFF_FFFF

AMD K7とK8に限り、EAX=8FFFFFFFHでcpuidを実行すると、EAX:EBX:ECX:EDXに文字列 "IT'S HAMMER TIME" を返すイースターエッグがある。

特殊拡張機能

AMDの拡張とは別に、TransmetaとVIAは、それぞれ独自のFeature Flagを提供している。

Transmeta

EAX=8086_0000

EAX=80860000Hでcpuidを実行すると、次の値が得られる。拡張機能対応チェックも兼ねている。

  • EAX: 拡張CPUID情報の最大入力値
  • EBX:EDX:ECX: ベンダー文字列

拡張CPUIDに対応していない場合、EAXは80860000Hよりも小さな値を返す。

EAX=8086_0001

EAX=80860001Hでcpuidを実行すると、CPUの情報を返す。対応しているCPUのみ。

EAX,EBXにCPUの種類、ECXにコアクロック周波数、EDXにFeature Flagが得られる。EDXの内容は次の通り。

0BADrecovery CMS active
1LRLongRun
2 予約
3LRTILongRun Table Interface
4 予約
5 予約
6 予約
7 予約
8 予約
9 予約
10 予約
11 予約
12 予約
13 予約
14 予約
15 予約
16 予約
17 予約
18 予約
19 予約
20 予約
21 予約
22 予約
23 予約
24 予約
25 予約
26 予約
27 予約
28 予約
29 予約
30 予約
31 予約
EAX=8086_0002

EAX=80860002Hでcpuidを実行すると、プロセッサーの情報を返す。対応しているCPUのみ。

  • EAX: ハードウェアリビジョン
  • EBX: ソフトウェアリビジョン1/2
  • ECX: ソフトウェアリビジョン2/2
EAX=8086_0003〜6

EAX=80860003〜6Hでcpuidを実行すると、CPUの情報文字列を返す。対応しているCPUのみ。

EAX=8086_0007

EAX=80860007Hでcpuidを実行すると、CPUの情報を返す。対応しているCPUのみ。

  • EAX: カレントのコアクロック周波数(MHz)
  • EBX: カレントのコア電圧(mV)
  • ECX: カレント(LongRun)パフォーマンスレベル(0〜100%)
  • EDX: カレントのゲートディレイ(fs)

VIA

EAX=C000_0000

EAX=C0000000Hでcpuidを実行すると、次の値が得られる。拡張機能対応チェックも兼ねている。

  • EAX: 拡張CPUID情報の最大入力値

拡張CPUIDに対応していない場合、EAXはC0000000Hよりも小さな値を返す。

EAX=C000_0001

EAX=C0000001Hでcpuidを実行すると、EDXにFeature Flagが得られる。対応しているCPUのみ。

0AISAlternate Instruction Set
1AIS_ENAlternate Instruction Set enabled
2RNGRandom Number Generator (XSTORE)
3RNG_ENRandom Number Generator (XSTORE) enabled
4LHLongHaul MSR 0000_110Ah
5FEMMSFEMMS
6ACEAdvanced Cryptography Engine (XCRYPT)
7ACE_ENAdvanced Cryptography Engine (XCRYPT) enabled
8ACE2Advanced Cryptography Engine v2
9ACE2_ENACE v2 enabled
10PHEPadLock Hash Engine
11PHE_ENPHE enabled
12PMMPadLock Montgomery Multiplier
13PMM_ENPMM enabled
14 予約
15 予約
16 予約
17 予約
18 予約
19 予約
20 予約
21 予約
22 予約
23 予約
24 予約
25 予約
26 予約
27 予約
28 予約
29 予約
30 予約
31 予約

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club