CPUID - CPUID

İçinde x86 mimari, CPUID talimat (bir CPUID opcode ) bir işlemci ek talimatı (adı türetilmiştir İşlemci Tanımlama) yazılımın işlemcinin ayrıntılarını keşfetmesine izin verir. Tarafından tanıtıldı Intel 1993 yılında Pentium ve SL destekli 486 işlemciler.[1]

Bir program, CPUID işlemci türünü ve aşağıdaki gibi özelliklerin olup olmadığını belirlemek için MMX /SSE uygulanmaktadır.

Tarih

Genel kullanıma sunulmadan önce CPUID talimat, programcılar ezoterik yazardı makine kodu işlemci markasını ve modelini belirlemek için CPU davranışındaki küçük farklılıkları kullandı.[2][3] 80386 işlemcisinin piyasaya sürülmesiyle, sıfırlama sırasında EDX revizyonu gösterdi, ancak bu yalnızca sıfırlamadan sonra okunabilirdi ve uygulamaların değeri okuması için standart bir yol yoktu.

X86 ailesinin dışında, geliştiricilerin, mevcut CPU tasarımındaki varyasyonları belirlemek için çoğunlukla ezoterik süreçleri (talimat zamanlaması veya CPU hata tetikleyicileri dahil) kullanmaları gerekir.

Asla herhangi bir CPUID talimatı olmayan Motorola 680x0 ailesinde, belirli özel talimatlar yüksek ayrıcalıklar gerektiriyordu. Bunlar, çeşitli CPU ailesi üyelerini birbirinden ayırmak için kullanılabilir. İçinde Motorola 68010 talimat SR'den MOVE ayrıcalıklı hale geldi. Bu önemli talimat (ve durum makinesi) değişikliği, 68010'un Popek ve Goldberg sanallaştırma gereksinimleri. 68000, ayrıcalıksız bir SR'den MOVE 2 farklı CPU, tetiklenen bir CPU hatası durumu ile ayırt edilebilir.

İken CPUID komut x86 mimarisine özeldir, diğer mimariler (ARM gibi) genellikle x86 CPUID talimatı tarafından sağlanan aynı tür bilgileri elde etmek için önceden belirlenmiş yollarla okunabilen yonga üstü kayıtlar sağlar.

CPUID aranıyor

CPUID opcode şudur 0Fh, A2h (iki bayt olarak veya A20Fh tek olarak kelime).

İçinde montaj dili, CPUID komut hiçbir parametre almaz CPUID Döndürülen bilgilerin ana kategorisini belirlemek için EAX kaydını örtük olarak kullanır. Intel'in daha yeni terminolojisinde buna CPUID yaprağı denir. CPUID ile çağrılmalı EAX = 0 ilk olarak, bu EAX kaydında CPU'nun uyguladığı en yüksek EAX çağrı parametresini (yaprak) saklayacaktır.

Genişletilmiş işlev bilgisi almak için CPUID EAX setinin en önemli biti ile çağrılmalıdır. En yüksek genişletilmiş işlev çağırma parametresini belirlemek için CPUID ile EAX = 80000000h.

CPUID, 3'ten büyük bırakır ancak 80000000'den daha azına yalnızca modele özgü kayıtlar IA32_MISC_ENABLE.BOOT_NT4 [bit 22] = 0 (varsayılan olarak böyledir). Adından da anlaşılacağı gibi, Windows NT 4.0 bu bit ayarlanmadıkça SP6 düzgün şekilde önyükleme yapmayana kadar,[4][ölü bağlantı ] ancak Windows'un sonraki sürümleri buna ihtiyaç duymadığından, 4'ten büyük temel yaprakların mevcut Windows sistemlerinde görünür olduğu varsayılabilir. Temmuz 2014 itibariyleTemel geçerli izinler 14 saate kadar çıkar, ancak bazı izinlerin döndürdüğü bilgiler halka açık belgelerde açıklanmaz, yani "rezerve edilmiştir".

Daha yakın zamanda eklenen yaprakların bazılarında, CPUID çağrılmadan önce ECX kaydı aracılığıyla seçilen alt yapraklar da vardır.

EAX = 0: En Yüksek Fonksiyon Parametresi ve Üretici Kimliği

Bu, CPU'nun üretici kimlik dizesini döndürür - on iki karakter ASCII dize EBX, EDX, ECX'te (bu sırayla) saklanır. En yüksek temel arama parametresi (aramadan önce EAX'ın ayarlanabileceği en büyük değer CPUID) EAX'te iade edilir.

İşte işlemcilerin listesi ve uygulanan en yüksek işlev.

En Yüksek Fonksiyon Parametresi
İşlemcilerTemelGenişletilmiş
Önceki Intel 486CPUID Uygulanmadı
Daha sonra Intel 486 ve Pentium0x01Uygulanmadı
Pentium Pro, Pentium II ve Celeron0x02Uygulanmadı
Pentium III0x03Uygulanmadı
Pentium 40x020x8000 0004
Xeon0x020x8000 0004
Pentium M0x020x8000 0004
Hyper-Threading ile Pentium 40x050x8000 0008
Pentium D (8xx)0x050x8000 0008
Pentium D (9xx)0x060x8000 0008
Core Duo0x0A0x8000 0008
Core 2 Duo0x0A0x8000 0008
Xeon 3000, 5100, 5200, 5300, 5400 serileri0x0A0x8000 0008
Core 2 Duo 8000 serisi0x0D0x8000 0008
Xeon 5200, 5400 serisi0x0A0x8000 0008
Atom0x0A0x8000 0008
Nehalem tabanlı işlemciler0x0B0x8000 0008
IvyBridge tabanlı işlemciler0x0D0x8000 0008
Skylake tabanlı işlemciler (proc tabanı ve maks. Sıklık; Veriyolu ref. Sıklığı)0x160x8000 0008
Yonga Üzerinde Sistem Satıcı Özniteliği Numaralandırma Ana Yaprağı0x170x8000 0008

Aşağıda bilinen işlemci üreticisi kimlik dizeleri verilmiştir:

Aşağıdakiler açık kaynak tarafından kullanılan kimlik dizeleridir yumuşak CPU çekirdekleri:

  • "GenuineAO486" - ao486 CPU[5]
  • "GenuineIntel" - v586 çekirdeği[6] (bu, Intel ID dizesiyle aynıdır)

Aşağıdakiler sanal makinelerden bilinen kimlik dizeleridir:

Örneğin, EBX'te döndürülen bir GenuineIntel işlemci değerleri 0x756e6547, EDX 0x49656e69 ve ECX 0x6c65746e'dir. Aşağıdaki kod yazılmıştır GNU Assembler için x86-64 mimarisi ve satıcı kimliği dizesinin yanı sıra CPU'nun uyguladığı en yüksek çağrı parametresini görüntüler.

	.veris0:	.asciz	"CPUID:% x"s1:	.asciz	"Uygulanan en büyük temel işlev numarası:% i"s2:	.asciz	"Satıcı Kimliği:% .12s"	.Metin	.align	32	.globl	anaana:	pushq	% rbp	movq	% rsp,% rbp	subq	$16,% rsp	movl	$1,% eax	cpuid	movq	$ s0,% rdi	movl	% eax,% esi	Xorl	% eax,% eax	telefon etmek	printf	pushq	% rbx  // -fPIC	Xorl	% eax,% eax	cpuid	movl	% ebx,0(% rsp)	movl	% edx,4(% rsp)	movl	% ecx,8(% rsp)	popq	% rbx  // -fPIC	movq	$ s1,% rdi	movl	% eax,% esi	Xorl	% eax,% eax	telefon etmek	printf	movq	$ s2,% rdi	movq	% rsp,% rsi	Xorl	% eax,% eax	telefon etmek	printf	movq	% rbp,% rsp	popq	% rbp//	ret	movl	$1,% eax	int	0x80

EAX = 1: İşlemci Bilgileri ve Özellik Bitleri

Bu, CPU'nun adım atmak EAX kaydındaki model ve aile bilgileri (aynı zamanda imza bir CPU), EDX ve ECX kayıtlarındaki özellik bayrakları ve EBX yazmacındaki ek özellik bilgileri.[7]

İşlemci Sürümü Bilgileri
EAX
313029282726252423222120191817161514131211109876543210
AyrılmışGenişletilmiş Aile KimliğiGenişletilmiş Model KimliğiAyrılmışİşlemci TipiAile KimliğiModeliAdım kimliği
  • Stepping ID, düzeltilmesi nedeniyle atanan bir ürün revizyon numarasıdır. yazım hatası veya diğer değişiklikler.
  • Gerçek işlemci modeli Model, Genişletilmiş Model Kimliği ve Aile Kimliği alanlarından türetilmiştir. Aile Kimliği alanı 6 veya 15 ise, model 4 bit sola kaydırılan Genişletilmiş Model Kimliği alanının ve Model alanının toplamına eşittir. Aksi takdirde model, Model alanının değerine eşittir.
  • Gerçek işlemci ailesi, Aile Kimliği ve Genişletilmiş Aile Kimliği alanlarından türetilir. Aile Kimliği alanı 15'e eşitse, aile, Genişletilmiş Aile Kimliği ve Aile Kimliği alanlarının toplamına eşittir. Aksi takdirde, aile, Aile Kimliği alanının değerine eşittir.
  • İşlemci Tipi alanının anlamı aşağıdaki tabloda verilmiştir.
İşlemci Tipi
TürKodlama İkili
Orijinal OEM İşlemci00
Intel Overdrive İşlemci01
Çift işlemci (Intel486 işlemciler için geçerli değildir)10
Ayrılmış değer11
ek bilgi
Bit sayısıEBXGeçerli
7:0Marka Dizini
15:8CLFLUSH satır boyutu (Değer. 8 = bayt cinsinden önbellek satırı boyutu)CLFLUSH özellik bayrağı ayarlanmışsa.

CPUID.01.EDX.CLFSH [bit 19] = 1

23:16Bu fiziksel paketteki mantıksal işlemciler için maksimum adreslenebilir kimlik sayısı;

Bu değerden küçük olmayan en yakın 2'nin gücü tamsayı, fiziksel bir pakette farklı mantıksal işlemcileri adreslemek için ayrılmış benzersiz başlangıç ​​APIC kimliklerinin sayısıdır.

Eski kullanım: Fiziksel işlemci başına mantıksal işlemci sayısı; Hyper-Threading Teknolojili Pentium 4 işlemci için iki tane.[8]

Eğer Hiper iş parçacığı özellik bayrağı ayarlandı.

CPUID.01.EDX.HTT [bit 28] = 1

31:24Yerel APIC Kimliği: İlk APIC Kimliği, çalıştıran mantıksal işlemciyi tanımlamak için kullanılır.

Ayrıca cpuid 0BH yaprağı (CPUID.0Bh.EDX [x2APIC-ID]) aracılığıyla da tanımlanabilir.

Pentium 4 ve sonraki işlemciler.

İşlemci bilgisi ve özellik işaretleri üreticiye özeldir ancak genellikle Intel değerleri diğer üreticiler tarafından uyumluluk adına kullanılır.

Özellik Bilgileri
BitEDXECX
KısaÖzellikKısaÖzellik
0fpuGemide x87 FPUsse3Prescott Yeni Talimatları -SSE3 (PNI)
1vmeSanal 8086 modu uzantıları (VIF, VIP, PIV gibi)pclmulqdqPCLMULQDQ
2deEklentilerde hata ayıklama (CR4 bit 3)dtes6464 bit hata ayıklama deposu (edx bit 21)
3pseSayfa Boyutu UzantısımonitörMONITOR ve MWAIT talimatları (SSE3 )
4tscZaman Damgası Sayacıds-cplCPL onaylı hata ayıklama deposu
5msrModele özgü kayıtlarvmxSanal Makine genişletmeleri
6PaeFiziksel Adres UzantısısmxDaha Güvenli Mod Uzantıları (LaGrande )
7mceMakine Kontrolü İstisnasıAvustralya, Brezilya ve Kuzey Amerika ülkelerinin kullandığı saat uygulamasıGeliştirilmiş Hızlı adım
8cx8CMPXCHG8 (karşılaştır ve değiştir ) talimattm2Termal Monitör 2
9apicGemide Gelişmiş Programlanabilir Kesme Kontrolörüssse3Ek SSE3 Talimatlar
10(ayrılmış)cnxt-idL1 Bağlam Kimliği
11eylülSYSENTER ve SYSEXIT talimatlarısdbgSilikon Hata Ayıklama arayüzü
12mtrrBellek Tipi Aralık KayıtlarıfmaFused multiply-add (FMA3)
13pgeSayfa Global Enable bit in CR4cx16CMPXCHG16B talimatı
14mcaMakine kontrol mimarisixtprGörev öncelikli mesaj göndermeyi devre dışı bırakabilir
15cmovKoşullu hareket ve FCMOV TalimatlarpdcmPerfmon ve hata ayıklama özelliği
16patSayfa Öznitelik Tablosu(ayrılmış)
17pse-3636 bit sayfa boyutu uzantısıpcidİşlem bağlam tanımlayıcıları (CR4 bit 17)
18psnİşlemci Seri NumarasıdcaDMA yazmaları için doğrudan önbellek erişimi[9][10]
19clfshCLFLUSH talimatı (SSE2 )sse4.1SSE4.1 Talimatlar
20(ayrılmış)sse4.2SSE4.2 Talimatlar
21dsHata ayıklama deposu: yürütülen atlamaların izini kaydedinx2apicx2APIC
22acpiDahili termal kontrol MSR'leri ACPIMovbeMOVBE talimatı (büyük adam )
23mmxMMX TalimatlarpopcntPOPCNT talimat
24fxsrFXSAVE, FXRESTOR talimatları, CR4 bit 9tsc-deadlineAPIC, bir TSC son tarih değeri kullanarak tek seferlik işlemi uygular
25sseSSE talimatlar (a.k.a. Katmai Yeni Yönergeleri)AesAES komut seti
26sse2SSE2 TalimatlarxsaveXSAVE, XRESTOR, XSETBV, XGETBV
27ssCPU önbelleği, kendimeraklıosxsaveOS tarafından etkinleştirilen XSAVE
28htHiper iş parçacığıavxGelişmiş Vektör Uzantıları
29tmTermal monitör sıcaklığı otomatik olarak sınırlarf16cF16C (yarı kesinlik ) FP özelliği
30ia64IA64 x86 öykünen işlemcirdrndRDRAND (çip üzerinde rastgele sayı üreteci) özelliği
31pbeBeklemede Kesmeyi Etkinleştirme (PBE # pin) uyandırma özelliğihipervizörHiper yönetici mevcut (fiziksel CPU'larda her zaman sıfır)[11][12]

Ayrılmış alanlar, işlemci tanımlama amacıyla kullanılmadan önce maskelenmelidir.

EAX = 2: Önbellek ve TLB Tanımlayıcı bilgileri

Bu, önbelleği gösteren tanımlayıcıların bir listesini döndürür ve TLB EAX, EBX, ECX ve EDX kayıtlarında yetenekler.

EAX = 3: İşlemci Seri Numarası

Bu işlemcinin seri numarasını döndürür. İşlemci seri numarası Intel'de tanıtıldı Pentium III, ancak gizlilik endişeleri nedeniyle, bu özellik artık sonraki modellerde uygulanmamaktadır (PSN özellik biti her zaman silinir). Transmeta's Efficeon ve Crusoe işlemcileri de bu özelliği sağlar. Ancak AMD CPU'lar bu özelliği herhangi bir CPU modelinde uygulamaz.

Intel Pentium III CPU'lar için, seri numarası EDX: ECX kayıtlarında döndürülür. Transmeta Efficeon CPU'lar için EBX: EAX kayıtlarında döndürülür. Ve Transmeta Crusoe CPU'lar için, yalnızca EBX yazmacına döndürülür.

İşlemci seri numarası özelliğinin BIOS işlevini yerine getirmek için ayarlama.

EAX = 4 ve EAX = Bh: Intel iş parçacığı / çekirdek ve önbellek topolojisi

Bu iki yaprak, Intel çok çekirdekli (ve hiper iş parçacıklı) işlemcilerde işlemci topolojisi (iş parçacığı, çekirdek, paket) ve önbellek hiyerarşisi numaralandırması için kullanılır.[13] 2013 itibarıyla AMD bu yaprakları kullanmaz, ancak çekirdek numaralandırmanın alternatif yollarını kullanır.[14]

Diğer çoğu CPUID yapraklarının aksine, yaprak Bh, CPUID komutunun çalıştırdığı mantıksal işlemciye bağlı olarak EDX'te farklı değerler döndürecektir; EDX'te döndürülen değer aslında x2APIC mantıksal işlemcinin kimliği. X2APIC kimlik alanı, mantıksal işlemcilerle sürekli olarak eşlenmez; eşlemede boşluklar olabilir, yani bazı ara x2APIC kimlikleri herhangi bir mantıksal işlemciye karşılık gelmez. X2APIC kimliklerini çekirdeklerle eşlemek için ek bilgi diğer kayıtlarda sağlanır. Yaprak Bh'nin alt yapraklarına sahip olmasına rağmen (aşağıda daha ayrıntılı olarak açıklandığı gibi ECX tarafından seçilir), EDX'te döndürülen değer yalnızca talimatın üzerinde çalıştığı mantıksal işlemciden etkilenir, ancak alt sayfadan etkilenmez.

Yaprak Bh tarafından açığa çıkan işlemci (ler) topolojisi hiyerarşik bir topolojidir, ancak bu hiyerarşideki (mantıksal) düzeylerin sırasının fiziksel hiyerarşideki sıraya tam olarak karşılık gelmediğine dair garip uyarı ile birlikte (SMT / çekirdek / paket). Bununla birlikte, her mantıksal seviye, SMT, çekirdek veya "geçersiz" olabilen bir "seviye tipine" karşılık gelen bir ECX alt yaprağı (Bh yaprağının) olarak sorgulanabilir. Düzey kimliği alanı 0'da başlar ve süreklidir, yani bir düzey kimliği geçersizse, daha yüksek düzeydeki tüm kimlikler de geçersiz olur. Seviye tipi ECX'in 15:08 bitlerinde döndürülürken, sorgulanan seviyedeki mantıksal işlemcilerin sayısı EBX'te döndürülür. Son olarak, bu seviyeler ile x2APIC kimlikleri arasındaki bağlantı, bir sonraki seviyede benzersiz bir kimlik elde etmek için x2APIC kimliğinin kaydırılması gereken bit sayısı olarak EAX [4: 0] 'da döndürülür.

Örnek olarak, çift çekirdekli Westmere yapabilen işlemci Hyperthreading (böylece toplamda iki çekirdeğe ve dört iş parçacığına sahip olur), dört mantıksal işlemcisi için x2APIC kimliği 0, 1, 4 ve 5 olabilir. Leaf Bh (= EAX), alt yaprak 0 (= ECX) CPUID, örneğin ECX'te 100h döndürebilir, yani seviye 0, SMT (hyperthreading) katmanını tanımlar ve EBX'te 2'yi döndürür çünkü iki mantıksal işlemci (SMT birimleri) fiziksel çekirdek başına. Bu 0 alt sayfa için EAX'ta döndürülen değer bu durumda 1 olmalıdır, çünkü yukarıda bahsedilen x2APIC kimliklerini bir bit sağa kaydırmak benzersiz bir çekirdek numarası verir (düzey kimliği hiyerarşisinin bir sonraki düzeyinde) ve SMT kimliğini siler her çekirdeğin içinde bit. Bu bilgiyi yorumlamanın daha basit bir yolu, x2APIC kimliğinin son bitinin (bit numarası 0), örneğimizdeki her bir çekirdek içindeki SMT / hiper iş parçacığı birimini tanımlamasıdır. Alt sayfa 1'e ilerlemek (EAX = Bh ve ECX = 1 ile CPUID'ye başka bir çağrı yaparak) örneğin ECX'te 201h döndürebilir, yani bu bir çekirdek türü düzeydir ve EBX'te 4, çünkü içinde 4 mantıksal işlemci vardır paket; Döndürülen EAX 3'ten büyük herhangi bir değer olabilir, çünkü x2APIC kimliğindeki çekirdeği tanımlamak için 2 numaralı bit kullanılır. Bu örnekte x2APIC kimliğinin 1 numaralı bitinin kullanılmadığına dikkat edin. Bununla birlikte, bu seviyede geri dönen EAX, 4 olabilir (ve bir Clarkdale Core i3 5x0'da böyle olur) çünkü bu aynı zamanda x2APIC kimliğini 4 bit kaydırırken paket seviyesinde (= 0 açıkça) benzersiz bir kimlik verir. Son olarak, EAX = 4 yaprağının bize daha önce öğrenmediğimizi söyleyebileceğini merak edebilirsiniz. EAX [31:26] 'de APIC maske bitlerini döndürür ayrılmış bir paket için; bu, örneğimizde 111b olacaktır, çünkü bu paket içindeki mantıksal işlemcileri tanımlamak için 0'dan 2'ye kadar olan bitler kullanılır, ancak mantıksal işlemci tanımlama şemasının bir parçası olarak kullanılmamasına rağmen bit 1 de ayrılmıştır. Diğer bir deyişle, bu değerlerin yarısı mantıksal bir işlemciyle eşleşmese de, 0 ila 7 APIC kimlikleri paket için ayrılmıştır.

İşlemcinin önbellek hiyerarşisi, yaprak 4'ün alt yapraklarına bakılarak keşfedilir. APIC kimlikleri, bu hiyerarşide, farklı önbellek düzeylerinin SMT birimleri ve çekirdekler tarafından nasıl paylaşıldığı hakkında bilgi iletmek için de kullanılır. Örneğimize devam edersek, aynı çekirdekli SMT birimleri tarafından paylaşılan ancak Westmere'deki fiziksel çekirdekler arasında olmayan L2 önbelleği, EAX [26:14] 'nin 1 olarak ayarlanmasıyla gösterilirken, L3 önbelleğinin paylaşıldığı bilgisi paylaşılır. tüm paket, bu bitlerin (en azından) 111b'ye ayarlanmasıyla belirtilir. Önbellek türü, boyutu ve ilişkilendirilebilirlik gibi önbellek ayrıntıları yaprak 4'teki diğer kayıtlar aracılığıyla iletilir.

Intel uygulama notu 485'in eski sürümlerinin, özellikle çok çekirdekli bir işlemcideki çekirdeklerin belirlenmesi ve sayılmasıyla ilgili olarak bazı yanıltıcı bilgiler içerdiğine dikkat edin;[15] Bu bilgilerin yanlış yorumlanmasından kaynaklanan hatalar, Visual Studio'nun 2013 sürümü için bile, cpuid kullanımı için Microsoft örnek koduna dahil edilmiştir,[16] ve ayrıca CPUID için sandpile.org sayfasında,[17] ancak işlemci topolojisini tanımlamak için Intel kod örneği[13] doğru yoruma sahiptir ve güncel Intel Yazılım Geliştirici Kılavuzu daha açık bir dile sahiptir. (Açık kaynak) çapraz platform üretim kodu[18] itibaren Wildfire Oyunları ayrıca Intel belgelerinin doğru yorumlanmasını uygular.

X2APIC içermeyen (dolayısıyla EAX = Bh yaprağını uygulamayan) eski (2010 öncesi) Intel işlemcileri içeren topoloji algılama örnekleri, 2010 Intel sunumunda verilmiştir.[19] 2010 ve daha yeni Intel işlemcilerde bu eski algılama yönteminin kullanılmasının çekirdek ve mantıksal işlemci sayısını olduğundan fazla tahmin edebileceğini unutmayın çünkü eski algılama yöntemi APIC kimlik alanında boşluk olmadığını varsayar ve bu varsayım bazı yeni işlemciler tarafından ihlal edilir ( Core i3 5x0 serisi), ancak bu yeni işlemciler aynı zamanda bir x2APIC ile birlikte gelir, bu nedenle topolojileri EAX = Bh yaprak yöntemi kullanılarak doğru bir şekilde belirlenebilir.

EAX = 6: Termal ve güç yönetimi

EAX = 7, ECX = 0: Genişletilmiş Özellikler

Bu, EBX, ECX ve EDX'te genişletilmiş özellik bayraklarını döndürür.

EAX = 7 CPUID özellik biti
BitEBXECXEDX
KısaÖzellikKısaÖzellikKısaÖzellik
0fsgsbase% Fs ve% gs tabanına erişimprefetchwt1PREFETCHWT1 talimatı(ayrılmış)
1IA32_TSC_ADJUSTavx512_vbmiAVX-512 Vektör Bit Manipülasyon Talimatları(ayrılmış)
2sgxYazılım Koruma UzantılarıumipKullanıcı modu Talimat Önlemeavx512_4vnniwAVX-512 4-kayıt Sinir Ağı Talimatları
3bmi1Bit Manipülasyon Komut Seti 1pkuKullanıcı modu sayfaları için Bellek Koruma Anahtarlarıavx512_4fmapsAVX-512 4-register Multiply Accumulation Tek duyarlık
4hleTSX Donanım Kilidi ElisionOspkeOS tarafından etkinleştirilen PKUfsrmHızlı Kısa REP MOVSB
5avx2Gelişmiş Vektör Uzantıları 2bekleZamanlanmış duraklatma ve kullanıcı düzeyinde izleme / bekleme(ayrılmış)
6FDP_EXCPTN_ONLYavx512_vbmi2AVX-512 Vektör Bit Manipülasyon Talimatları 2
7smepSüpervizör Modu Yürütme Önlemecet_ssKontrol akışı uygulaması (CET) gölge yığını
8bmi2Bit Manipülasyon Komut Seti 2gfniGalois Field talimatlarıavx512_vp2intersectAVX-512 VP2INTERSECT Çift Kelime ve Dört Kelime Talimatları
9ermsGelişmiş REP MOVSB ​​/ STOSBVaesVektör AES komut seti (VEX-256 / EVEX)SRBDS_CTRLÖzel Kayıtlı Tampon Veri Örneklemesinin Azaltılması
10invpcidINVPCID talimatıvpclmulqdqCLMUL komut seti (VEX-256 / EVEX)md_clearVERW komutu CPU arabelleklerini temizler
11rtmTSX Sınırlı İşlem Belleğiavx512_vnniAVX-512 Vektör Sinir Ağı Talimatları(ayrılmış)
12pqmPlatform Hizmet Kalitesi İzlemeavx512_bitalgAVX-512 BITALG talimatları
13FPU CS ve FPU DS kullanımdan kaldırıldı(ayrılmış)tsx_force_abort
14mpxIntel MPX (Bellek Koruma Uzantıları)avx512_vpopcntdqAVX-512 Vektör Popülasyon Sayısı Çift ve Dört KelimeSERİLEŞTİRTalimat yürütmeyi seri hale getir
15pqePlatform Hizmet Kalitesi Uygulaması(ayrılmış)Hibrit
16avx512_fAVX-512 Yapı temeli5 seviyeli çağrıTSXLDTRKTSX, yük adresi takibini askıya alır
17avx512_dqAVX-512 Çift Kelime ve Dört Kelime TalimatlarımawauBNDLDX ve BNDSTX tarafından kullanılan kullanıcı alanı MPX Adres Genişlik Ayarı değeri Intel MPX 64 bit modunda talimatlar(ayrılmış)
18rdseedRDSEED talimatpconfigPlatform yapılandırması (Bellek Şifreleme Teknolojileri Talimatları)
19adxIntel ADX (Çok Hassas Eklenti Taşıma Talimatı Uzantıları)lbrMimari Son Şube Kayıtları
20smapGözetmen Modu Erişim Engellemecet_ibtKontrol akışı uygulama (CET) dolaylı şube izleme
21avx512_ifmaAVX-512 Tamsayı Fused Multiply-Add Talimatları(ayrılmış)
22pcommitPCOMMIT talimatırdpidİşlemci Kimliğini ve IA32_TSC_AUX'u okuyunamx-bf16Bfloat16 sayılarında döşeme hesabı
23ClflushoptCLFLUSHOPT talimatı(ayrılmış)(ayrılmış)
24clwbCLWB talimatı(ayrılmış)amx-tileÇini mimarisi
25intel_ptIntel İşlemci İzlemecldemoteÖnbellek satırı indirgemeamx-int88 bitlik tam sayılarda parça hesaplaması
26avx512_pfAVX-512 Önceden Getirme Talimatları(ayrılmış)IBRS_IBPB / spec_ctrlSpekülasyon Kontrolü, Dolaylı Dal Kontrolünün (IBC) parçası:
Dolaylı Şube Kısıtlı Spekülasyon (IBRS) ve
Dolaylı Dal Tahmin Engeli (IBPB)[20][21]
27avx512_erAVX-512 Üstel ve Karşılıklı TalimatlarMOVDIRIstibpTek İş Parçacıklı Dolaylı Dal Öngörücü, IBC'nin parçası[20]
28avx512_cdAVX-512 Çatışma Tespit TalimatlarıMOVDIR64BL1D_FLUSHIA32_FLUSH_CMD MSR
29shaIntel SHA uzantılarıENQCMDSıra MağazalarIA32_ARCH_CAPABILITIESSpekülatif Yan Kanal Azaltmaları[20]
30avx512_bwAVX-512 Bayt ve Kelime Talimatlarısgx_lcSGX Başlatma YapılandırmasıIA32_CORE_CAPABILITIESModele özgü çekirdek yetenekleri listeleyen bir MSR desteği
31avx512_vlAVX-512 Vektör Uzunluk UzantılarıpksGözetmen modu sayfaları için koruma anahtarlarıssbdSpekülatif Mağaza Bypass Devre Dışı Bırakma,[20] için hafifletici olarak Spekülatif Mağaza Atlaması (IA32_SPEC_CTRL)

EAX = 7, ECX = 1: Genişletilmiş Özellikler

Bu, EAX'ta genişletilmiş özellik bayraklarını döndürür.


EAX = 7 CPUID özellik biti
BitEAX
KısaÖzellik
0(ayrılmış)
1(ayrılmış)
2(ayrılmış)
3(ayrılmış)
4(ayrılmış)
5avx512_bf16AVX-512 BFLOAT16 Talimatlar
6(ayrılmış)
7(ayrılmış)
8(ayrılmış)
9(ayrılmış)
10(ayrılmış)
11(ayrılmış)
12(ayrılmış)
13(ayrılmış)
14(ayrılmış)
15(ayrılmış)
16(ayrılmış)
17(ayrılmış)
18(ayrılmış)
19(ayrılmış)
20(ayrılmış)
21(ayrılmış)
22(ayrılmış)
23(ayrılmış)
24(ayrılmış)
25(ayrılmış)
26(ayrılmış)
27(ayrılmış)
28(ayrılmış)
29(ayrılmış)
30(ayrılmış)
31(ayrılmış)

EAX = 80000000h: Uygulanan En Yüksek Genişletilmiş Fonksiyonu Alın

En yüksek arama parametresi EAX'te döndürülür.

EAX = 80000001h: Genişletilmiş İşlemci Bilgileri ve Özellik Bitleri

Bu, EDX ve ECX'te genişletilmiş özellik bayrakları döndürür.

AMD özellik işaretleri aşağıdaki gibidir:[22][23]

EAX = 80000001h CPUID özellik bitleri
BitEDXECX
KısaÖzellikKısaÖzellik
0fpuGemide x87 FPUlahf_lmUzun modda LAHF / SAHF
1vmeSanal mod uzantıları (VIF)cmp_legacyHyperthreading geçerli değil
2deEklentilerde hata ayıklama (CR4 bit 3)svmGüvenli Sanal Makine
3pseSayfa Boyutu UzantısıekstapikGenişletilmiş APIC Uzay
4tscZaman Damgası Sayacıcr8_legacyCR8 32 bit modunda
5msrModele özgü kayıtlarabmGelişmiş bit manipülasyonu (lzcnt ve popcnt )
6PaeFiziksel Adres Uzantısısse4aSSE4a
7mceMakine Kontrolü İstisnasıyanlış hizalamakYanlış hizalanmış SSE mod
8cx8CMPXCHG8 (karşılaştır ve değiştir ) talimat3dnowprefetchPREFETCH ve PREFETCHW talimatları
9apicGemide Gelişmiş Programlanabilir Kesme Kontrolörüosvwİşletim Sisteminde Görünür Geçici Çözüm
10(ayrılmış)IBS, İrritabl Barsak SendromuTalimat Tabanlı Örnekleme
11sistem çağrısıSYSCALL ve SYSRET talimatlarıxopXOP komut seti
12mtrrBellek Tipi Aralık KayıtlarıSkinitSKINIT / STGI talimatları
13pgeSayfa Küresel Etkinleştirme biti CR4wdtWatchdog zamanlayıcı
14mcaMakine kontrol mimarisi(ayrılmış)
15cmovKoşullu hareket ve FCMOV TalimatlarlwpHafif Profilleme[24]
16patSayfa Öznitelik Tablosufma44 işlenen birleşik çarpma ekleme
17pse3636 bit sayfa boyutu uzantısıtceÇeviri Önbelleği Uzantısı
18(ayrılmış)
19mpÇok işlemcili Yeteneklinodeid_msrDüğüm Kimliği MSR
20nxNX bit(ayrılmış)
21(ayrılmış)tbmSondaki Bit Manipülasyonu
22mmxextGenişletilmiş MMXtopoextTopoloji Uzantıları
23mmxMMX Talimatlarperfctr_coreÇekirdek performans sayacı uzantıları
24fxsrFXSAVE, FXRSTOR talimatları, CR4 bit 9perfctr_nbNB performans sayacı uzantıları
25fxsr_optFXSAVE / FXRSTOR optimizasyonları(ayrılmış)
26pdpe1gbGibibayt sayfalarıdbxVeri kesme noktası uzantıları
27rdtscpRDTSCP talimatıperftscPerformans TSC
28(ayrılmış)pcx_l2iL2I perf sayaç uzantıları
29lmUzun mod(ayrılmış)
303dnowextGenişletilmiş 3DNow!(ayrılmış)
313dnow3DNow!(ayrılmış)

EAX = 80000002h, 80000003h, 80000004h: İşlemci Marka Dizesi

Bunlar işlemci marka dizisini EAX, EBX, ECX ve EDX'te döndürür. CPUID 48 baytlık boş sonlandırılmış ASCII işlemci marka dizesinin tamamını elde etmek için her bir parametre ile birlikte sırayla verilmelidir.[25] Özelliğin CPU'da mevcut olup olmadığını kontrol etmek gerekir. CPUID ile EAX = 80000000h ilk olarak ve döndürülen değerin 80000004h'ye eşit veya daha büyük olup olmadığını kontrol edin.

#Dahil etmek  // GCC tarafından sağlanır#Dahil etmek <stdio.h>#Dahil etmek <stdint.h>int ana(geçersiz) {    uint32_t marka[12];    Eğer (!__get_cpuid_max(0x80000004, BOŞ)) {        fprintf(Stderr, "Özellik uygulanmadı.");        dönüş 2;    }    __get_cpuid(0x80000002, marka+0x0, marka+0x1, marka+0x2, marka+0x3);    __get_cpuid(0x80000003, marka+0x4, marka+0x5, marka+0x6, marka+0x7);    __get_cpuid(0x80000004, marka+0x8, marka+0x9, marka+0xa, marka+0xb);    printf("Marka:% s", marka);}

EAX = 80000005h: L1 Önbellek ve TLB Tanımlayıcıları

Bu işlev, işlemcinin L1 önbelleğini ve TLB özelliklerini içerir.

EAX = 80000006h: Genişletilmiş L2 Önbellek Özellikleri

Bayt cinsinden satır boyutu (Bit 07 - 00), ilişkilendirilebilirlik türü (4 bitlik bir alanla kodlanır; Bit 15 - 12) ve KiB cinsinden önbellek boyutu (Bit 31 - 16) dahil olmak üzere ECX'te L2 önbelleğinin ayrıntılarını verir .

#Dahil etmek  // GCC tarafından sağlanır#Dahil etmek <stdio.h>#Dahil etmek <stdint.h>int ana(geçersiz) {    uint32_t eax, ebx, ecx, edx;    Eğer (__get_cpuid(0x80000006, &eax, &ebx, &ecx, &edx)) {        printf("Satır boyutu:% d B, Assoc. Türü:% d; Önbellek Boyutu:% d KB.", ecx & 0xff, (ecx >> 12) & 0x07, (ecx >> 16) & 0xffff);        dönüş 0;    } Başka {        fputs(Stderr, "CPU, 0x80000006'yı desteklemiyor");        dönüş 2;    }}

EAX = 80000007h: Gelişmiş Güç Yönetimi Bilgileri

Bu işlev, gelişmiş güç yönetimi özelliği tanımlayıcıları sağlar. EDX bit 8, değişmez TSC için desteği gösterir.

EAX = 80000008h: Sanal ve Fiziksel adres Boyutları

EAX'daki en büyük sanal ve fiziksel adres boyutlarını döndürür.

  • Bit 07-00: # Fiziksel Adres Bitleri.
  • Bit 15-8: # Doğrusal Adres Bitleri.
  • Bit 31-16: Ayrılmış = 0.

Sanal CPU ile mümkün olan fiziksel / sanal adres boyutlarını raporlamak için bir sanal makine sisteminde hiper yönetici tarafından kullanılabilir.

EBX özellikler için kullanılır :

  • Bit 0: CLZERO, RAX'te adres içeren önbellek satırını temizle.
  • Bit 4: RDPRU, 3. halkadan MPERF veya APERF okuyun.
  • Bit 8: MCOMMIT, depoları belleğe kaydet. Hafıza eskrim ve ECC hatalarını almak için.
  • Bit 9: WBNOINVD, Geri Yazma ve Önbelleği Geçersiz Kılma.

ECX çekirdek sayısı sağlar.

  • Bit 07-00: # Fiziksel Çekirdekler eksi bir.
  • Bit 11-8: Ayrılmış = 0.
  • Bitler 15-12: #APIC ID Bitleri. Bu güce yükseltilen 2, sıfır olmadığı sürece fiziksel çekirdek sayısı olacaktır.
  • Bit 17-16: Performans zaman damgası sayaç boyutu.
  • Bit 31-18: Ayrılmış = 0.

EDX, 31-16'da RDPRU'ya (izin verilen maksimum kayıt tanımlayıcısı) özel bilgiler sağlar. Zen 2 itibariyle mevcut sayı MPERF ve APERF için 1'dir.

EAX = 8FFFFFFFh: AMD Paskalya Yumurtası

AMD K7 ve K8 CPU'lara özgü bu, EAX, EBX, ECX ve EDX'te "IT'S HAMMER TIME" dizesini döndürür.[26]

Yüksek seviyeli dillerden CPUID kullanımı

Satır içi montaj

Bu bilgilere diğer dillerden de erişmek kolaydır. Örneğin, aşağıdaki gcc için C kodu, cpuid tarafından döndürülen ilk beş değeri yazdırır:

#Dahil etmek <stdio.h>/ * Bu, 32 ve 64 bit sistemlerde çalışır. Bu kodu okumayla ilgili ipuçları için [[Inline assembler # In real compilers]] 'a bakın. * /int ana(){  / * İşlemci üzerine yazacağından, dört yazmaçın başlatılmasına gerek yoktur. * /  int bilgi türü, a, b, c, d;  için (bilgi türü = 0; bilgi türü < 5; bilgi türü ++)  {    __asm__("cpuid"            : "= a" (a), "= b" (b), "= c" (c), "= d" (d)   // Çıktı değişkenleri. EAX -> a ve tersi.            : "0" (bilgi türü));                         // Bilgi tipini EAX'e koyun.    printf ("InfoType% xEAX:% xEBX:% xECX:% xEDX:% x", bilgi türü, a, b, c, d);  }  dönüş 0;}

MSVC ve Borland / Embarcadero C derleyicilerinde (bcc32) aromalı satır içi derlemede, patlatma bilgileri talimatlarda örtülüdür:

#Dahil etmek <stdio.h>int ana(){  imzasız int InfoType = 0;  imzasız int a, b, c, d;  __asm {    / * Aramayı yap. * /    mov EAX, InfoType;    cpuid;    / * Sonuçları kaydedin. * /    mov a, EAX;    mov b, EBX;    mov c, ECX;    mov d, EDX;  }  printf ("InfoType% xEAX:% xEBX:% xECX:% xEDX:% x", InfoType, a, b, c, d);  dönüş 0;}

Her iki sürüm de düz montaj dilinde yazılmışsa, programcı değerleri kullanmaya devam etmek istiyorlarsa EAX, EBX, ECX ve EDX sonuçlarını başka bir yere manuel olarak kaydetmelidir.

Sarmalayıcı işlevleri

GCC ayrıca adında bir başlık sağlar <cpuid.h> CPUID'si olan sistemlerde. __cpuid satır içi montaja genişleyen bir makrodur. Tipik kullanım şöyle olacaktır:

#Dahil etmek <cpuid.h>#Dahil etmek <stdio.h>intana (geçersiz){  int a, b, c, d;  __cpuid (0 / * satıcı dizesi * /, a, b, c, d);  printf ("EAX:% xEBX:% xECX:% xEDX:% x", a, b, c, d);  dönüş 0;}

Ancak, bu CPU'da bulunmayan bir genişletilmiş özellik talep edilirse, fark etmez ve rastgele, beklenmedik sonuçlar alabilir. Daha güvenli sürüm de sağlanmıştır <cpuid.h>. Genişletilmiş özellikleri kontrol eder ve daha fazla güvenlik kontrolü yapar. Çıkış değerleri, referans benzeri makro parametreleri kullanılarak değil, daha geleneksel işaretçiler kullanılarak iletilir.

#Dahil etmek <cpuid.h>#Dahil etmek <stdio.h>intana (geçersiz){  int a, b, c, d;  Eğer (!__get_cpuid (0x81234567 / * yok, ancak var olduğunu varsayın * /, &a, &b, &c, &d))    {      fprintf (Stderr, "Uyarı: CPUID isteği 0x81234567 geçerli değil!");    }  printf("EAX:% xEBX:% xECX:% xEDX:% x", a, b, c, d);  dönüş 0;}

İçindeki ve işaretlerine dikkat edin & a, & b, & c, & d ve koşullu ifade. Eğer __get_cpuid çağrı doğru bir istek alırsa sıfır olmayan bir değer döndürür, başarısız olursa sıfır döndürür.[27]

Microsoft Visual C derleyicisinin yerleşik işlevi vardır __cpuid () bu nedenle cpuid talimatı, MSVC'nin x86-64 sürümü satır içi derlemeye hiç izin vermediğinden kullanışlı olan, satır içi montaj kullanılmadan gömülebilir. Aynı program MSVC olabilir:

#Dahil etmek <iostream>#Dahil etmek <intrin.h>int ana(){  int cpuInfo[4];  için (int a = 0; a < 5; a++)  {    __cpuid(cpuInfo, a);    std::cout << "Kod" << a << "verir" << cpuInfo[0] << ", " << cpuInfo[1] << ", " << cpuInfo[2] << ", " << cpuInfo[3] << '';  }  dönüş 0;}

Yorumlanmış veya derlenmiş birçok komut dosyası dili, bir FFI kütüphane. Böyle bir uygulama CPUID işlem kodunu içeren birleştirme dilini yürütmek için Ruby FFI modülünün kullanımını gösterir.

X86 dışında CPU'ya özgü bilgiler

X86 olmayan CPU mimarilerinin bazıları, işlemcinin yetenekleriyle ilgili belirli biçimlerde yapılandırılmış bilgi de sağlar, genellikle bir dizi özel yazmaç olarak:

  • ARM mimarileri var CPUID EL1 veya üzeri erişim gerektiren yardımcı işlemci kaydı.[28]
  • IBM System z ana bilgisayar işlemcilerinde CPU kimliğini sakla (STIDP) 1983'ten beri talimat IBM 4381[29] işlemci kimliğini sorgulamak için.[30]
  • IBM System z ana bilgisayar işlemcilerinde ayrıca Mağaza Tesisleri Listesi Genişletilmiş (STFLE) kurulu donanım özelliklerini listeleyen talimat.[30]
  • MIPS32 / 64 mimari bir zorunlu tanımlar İşlemci Tanımlama (PrId) ve bir dizi papatya zinciri Yapılandırma Kayıtları.[31]
  • PowerPC işlemci 32 bit salt okunurdur İşlemci Sürümü Kaydı (PVR) kullanılan işlemci modelinin belirlenmesi. Talimat, gözetmen erişim seviyesi gerektirir.[32]

DSP ve transputer benzeri çip aileleri, tasarımda (göreceli olarak) bu kadar çok varyasyona sahip olmalarına rağmen, talimatı dikkate değer bir şekilde almadılar. Silikon tanımlamanın alternatif yolları mevcut olabilir; örneğin, TTP'ler Texas Instruments birim tipini ve modelini belirleyen tanımlayıcılarla başlayan her bir işlevsel birim için bellek tabanlı bir kayıt seti içerir, ASIC tasarım aşamasında seçilen tasarım revizyonu ve özellikleri, üniteye özgü kontrol ve veri kayıtları ile devam eder. Bu alanlara erişim, sadece mevcut yükleme ve depolama talimatları kullanılarak gerçekleştirilir; bu nedenle, bu tür cihazlar için, cihaz tanımlama amaçları için kayıt setinin genişletilmesine gerek yoktur.[kaynak belirtilmeli ]

Ayrıca bakınız

Referanslar

  1. ^ "Intel 64 ve IA-32 Mimarileri Yazılım Geliştirici Kılavuzu" (PDF). Intel.com. Alındı 2013-04-11.
  2. ^ "Intel İşlemcilerini Algılama - Bir sistem CPU'sunun neslini bilmek". Rcollins.org. Alındı 2013-04-11.
  3. ^ "LXR linux-old / arch / i386 / kernel / head.S". Lxr.linux.no. Arşivlenen orijinal 2012-07-13 tarihinde. Alındı 2013-04-11.
  4. ^ "CPUID, EAX = 4 - Garip sonuçlar (Çözüldü)". Software.intel.com. Alındı 2014-07-10.
  5. ^ "ao486 CPUID talimatı".
  6. ^ "v586: 586 FPGA için uyumlu yazılım çekirdeği".
  7. ^ "Bölüm 3 Komut Seti Referansı, A-L" (PDF). Intel® 64 ve IA-32 Mimarileri Yazılım Geliştirici Kılavuzu. Intel Kurumu. 2018-12-20. Alındı 2018-12-20.
  8. ^ http://bochs.sourceforge.net/techspec/24161821.pdf
  9. ^ Huggahalli, Ram; Iyer, Ravi; Tetrick, Scott (2005). "Yüksek Bant Genişlikli Ağ G / Ç için Doğrudan Önbellek Erişimi". ACM SIGARCH Bilgisayar Mimarisi Haberleri. 33 (2): 50–59. doi:10.1145/1080695.1069976. CiteSeerX:10.1.1.91.957.
  10. ^ Drepper, Ulrich (2007), Her Programcının Bellek Hakkında Bilmesi Gerekenler, CiteSeerX:10.1.1.91.957
  11. ^ "Yazılımın bir VMware sanal makinesinde çalışıp çalışmadığını belirleme mekanizmaları". VMware Bilgi Tabanı. VMWare. 2015-05-01. Intel ve AMD CPU'lar, hiper yönetici mevcut biti olarak CPUID yaprak 0x1'in ECX'in 31. bitini ayırdı. Bu bit, hipervizörlerin konuk işletim sistemine varlıklarını göstermelerine olanak tanır. Hipervizörler bu biti ayarlar ve fiziksel CPU'lar (tüm mevcut ve gelecekteki CPU'lar) bu biti sıfıra ayarlar. Konuk işletim sistemleri, bir sanal makine içinde çalışıp çalışmadıklarını tespit etmek için bit 31'i test edebilir.
  12. ^ Kataria, Alok; Hecht, Dan (2008-10-01). "Hiper Yönetici CPUID Arabirimi Önerisi". LKML Lore.kernel.org'da arşivleyin. Arşivlendi 2019-03-15 tarihinde orjinalinden. CPUID yaprağı 0x1'in ECX bit 31'i. Bu bit, hipervizörlerin kullanımı için Intel ve AMD tarafından ayrılmıştır ve bir hipervizörün varlığını gösterir. Sanal CPU'lar (hipervizörler) bu biti 1'e ayarlar ve fiziksel CPU'lar (tüm mevcut ve gelecekteki cpu'lar) bu biti sıfıra ayarlar. Bu bit, sanal bir makinede çalışıp çalışmadıklarını tespit etmek için konuk yazılım tarafından incelenebilir.
  13. ^ a b Shih Kuo (27 Ocak 2012). "Intel® 64 Mimarisi İşlemci Topolojisi Numaralandırması".
  14. ^ "CPUID Kullanarak İşlemci ve Çekirdek Numaralandırma | AMD". Developer.amd.com. Arşivlenen orijinal 2014-07-14 tarihinde. Alındı 2014-07-10.
  15. ^ "Sandybridge işlemcileri yanlış çekirdek numarası mı bildiriyor?". Software.intel.com. 2012-12-29. Alındı 2014-07-10.
  16. ^ "cpuid, __cpuidex". Msdn.microsoft.com. 2014-06-20. Alındı 2014-07-10.
  17. ^ "x86 mimarisi - CPUID". sandpile.org. Alındı 2014-07-10.
  18. ^ "ps / trunk / source / lib / sysdep / arch / x86_x64 - Wildfire Oyunlarında topology.cpp". Trac.wildfiregames.com. 2011-12-27. Alındı 2014-07-10.
  19. ^ Hyper-Threading Teknolojisi ve Çok Çekirdekli İşlemci Algılama
  20. ^ a b c d "Spekülatif Yürütme Yan Kanal Azaltmaları" (PDF). Revizyon 2.0. Intel. Mayıs 2018 [Ocak 2018]. Belge Numarası: 336996-002. Alındı 2018-05-26.
  21. ^ "IBRS yama serisi [LWN.net]".
  22. ^ CPUID Spesifikasyonu (PDF), AMD, Eylül 2010, alındı 2013-04-02
  23. ^ Linux çekirdeği kaynak kodu
  24. ^ Hafif Profil Oluşturma Spesifikasyonu (PDF), AMD, Ağustos 2010, alındı 2013-04-03
  25. ^ "Intel® İşlemci Kimliği ve CPUID Talimatı" (PDF). Download.intel.com. 2012-03-06. Alındı 2013-04-11.
  26. ^ Ferrie, Peter. "Sanal Makine Emülatörlerine Yönelik Saldırılar" (PDF). symantec.com. Symantec Gelişmiş Tehdit Araştırması. Arşivlenen orijinal (PDF) 2007-02-07 tarihinde. Alındı 15 Mart 2017.
  27. ^ https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/cpuid.h
  28. ^ "ARM Bilgi Merkezi". Infocenter.arm.com. Alındı 2013-04-11.
  29. ^ "İşlemci sürüm kodları ve SRM sabitleri". Arşivlenen orijinal 2014-09-08 tarihinde. Alındı 2014-09-08.
  30. ^ a b "IBM System z10 Enterprise Class Teknik Kılavuzu" (PDF).
  31. ^ "Programcılar İçin MIPS32 Mimarisi, Cilt III: MIPS32 Ayrıcalıklı Kaynak Mimarisi" (PDF). MIPS Technologies, Inc. 2001-03-12.
  32. ^ "PowerPC İşletim Ortamı Mimarisi, kitap III" (PDF).

daha fazla okuma

Dış bağlantılar