Sto riscontrando un problema con il mio codice basato su CPUID sui nuovi computer basati su i7. Sta rilevando che la CPU ha un singolo core con 8 unità HT anziché 4 core ciascuna con 2 unità HT.CPUID su processori Intel i7
Devo interpretare erroneamente i risultati delle informazioni CPUID che tornano dalla CPU, ma non riesco a vedere come.
In pratica, eseguo l'iterazione di ciascun processore visibile a Windows, imposta l'affinità del thread su quel thread e quindi eseguo una sequenza di chiamate CPUID.
args = new CPUID_Args();
args.eax = 1;
executeHandler(ref args);
if (0 != (args.edx & (0x1 << 28)))
{
//If the 28th bit in EDX is flagged, this processor supports multiple logical processors per physical package
// in this case bits 23:16 of EBX should give the count.
//** EBX here is 0x2100800
logicalProcessorCount = (args.ebx & 0x00FF0000) >> 16;
//** this tells me there are 16 logical processors (wrong)
}
else
{ logicalProcessorCount = 1; }
apic = unchecked((byte)((0xFF000000 & args.ebx) >> 24));
if (maximumSupportedCPUID >= 4)
{
args = new CPUID_Args();
args.eax = 4;
executeHandler(ref args);
//EAX now contains 0x1C004121
coreCount = 1 + ((args.eax & 0xFC000000) >> 26);
//This calculates coreCount as 8
}
else
{ coreCount = 1; }
Questa sequenza si ripete per il resto delle CPU nel sistema.
Qualcuno ha affrontato questo prima?
Hey StarPacker, anche se ho paura di non essere in grado di aiutarti con questo specifico problema, ho una domanda correlata: http://stackoverflow.com/questions/1666093/cpuid-implementations-in-c Mi chiedevo se potessi impostarmi sul percorso corretto con un codice di esempio o qualcosa del genere ... Mi piacerebbe davvero avere il supporto X86/X64 per CPUID nella mia app per recuperare informazioni/caratteristiche del processore nei rapporti di arresto anomalo per un app che sto sviluppando e che verrà utilizzata da altri ricercatori (ho eseguito il mio codice su macchine a cui non potrò accedere direttamente). Saluti, Kris – Kris