2013-03-12 24 views
5

Im Intel Intrinsics Guide befinden sich 'Latency and Throughput Information' (Latenz- und Durchsatzinformationen) am unteren Rand mehrerer Intrinsics, die die Leistung für mehrere CPUIDs auflisten.Ermitteln Sie CPUID wie im Intel Intrinsics Guide aufgeführt

Zum Beispiel sieht die Tabelle in dem Intrinsics Guide als für den Eigen _mm_hadd_pd folgt:

CPUID(s)    Parameters Latency Throughput 
0F_03         13   4 
06_2A     xmm1, xmm2   5   2 
06_25/2C/1A/1E/1F/2E xmm1, xmm2   5   2 
06_17/1D    xmm1, xmm2   6   1 
06_0F     xmm1, xmm2   5   2 

Jetzt: Wie kann ich feststellen, welche ID meine CPU?

Ich benutze Kubuntu 12.04 und versuchte mit sudo dmidecode -t 4 und auch mit dem kleinen Programm cpuid aus den Ubuntu-Paketen, aber ihre Ausgabe ist nicht wirklich nützlich.

Ich kann keine der im Intrinsics Guide aufgelisteten Strings irgendwo in der Ausgabe der obigen Befehle finden.

Antwort

1

können Sie diese Informationen mit CPUID-Befehl erhalten, wo

Die erweiterte Familie, die Bitpositionen 20 bis 27 in Verbindung mit der Familie Code, 8 bis 11 in Bitpositionen spezifiziert, um anzuzeigen, ob der Prozessor zu der Intel386, Intel486, Pentium, Pentium Pro oder Pentium 4-Familie von Prozessoren gehört. P6 Familie Prozessoren umfassen alle Prozessoren auf der Grundlage der Pentium Pro Prozessorarchitektur und haben eine erweiterte Familie gleich 00h und einen Familiencode gleich 06h. Pentium 4 Familienprozessoren umfassen alle Prozessoren, die auf der Intel NetBurst® Mikroarchitektur basieren, und haben eine erweiterte Familie von 00h und einen Familiencode gleich 0Fh.

Das erweiterte Modell in Bit angegeben positi ons 16 bis 19, in Verbindung mit der Modellnummer in den Bits 4 angegeben, obwohl 7 sind das Modell des Prozessors innerhalb des Prozessors der Familie zu identifizieren.

siehe Seite 22 in Intel Processor Identification and the CPUID Instruction für weitere Details.

Tatsächliche CPUID ist dann "family_model". Der folgende Code sollte die Arbeit machen:

#include "stdio.h" 

int main() { 

    int ebx = 0, ecx = 0, edx = 0, eax = 1; 
    __asm__ ("cpuid": "=b" (ebx), "=c" (ecx), "=d" (edx), "=a" (eax):"a" (eax)); 

    int model = (eax & 0x0FF) >> 4; 
    int extended_model = (eax & 0xF0000) >> 12; 
    int family_code = (eax & 0xF00) >> 8; 
    int extended_family_code = (eax & 0xFF00000) >> 16; 

    printf ("%x %x %x %x \n", eax, ebx, ecx, edx); 
    printf ("CPUID: %02x %x\n", extended_family_code | family_code, extended_model | model); 
    return 0; 
} 

Für meinen Computer erhalte ich:

CPUID: 06_25

hoffe, es hilft.

+0

Ja, das ist es. Jetzt habe ich 06_2A für Sandy Bridge :) –

+0

Eine gute Antwort, aber es gibt sicherlich einen einfacheren Weg als den Quellcode zu kompilieren? Irgendein Programm da draußen vielleicht? – crockeea