Ich habe ein Problem mit meinem CPUID-basierten Code auf neueren i7-basierten Rechnern. Es erkennt die CPU als einen einzelnen Kern mit 8 HT-Einheiten anstelle von 4 Kernen mit jeweils 2 HT-Einheiten.CPUID auf Intel i7 Prozessoren
Ich muss die Ergebnisse der CPUID-Informationen, die von der CPU kommen, falsch interpretieren, aber ich kann nicht sehen, wie.
Grundsätzlich durchlaufen ich jeden für Windows sichtbaren Prozessor, legen Threadaffinität für diesen Thread fest und führen dann eine Reihe von CPUID-Aufrufen durch.
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; }
Diese Sequenz wird für den Rest der CPUs im System wiederholt.
Hat jemand das schon mal gesehen?
Hallo StarPacker, obwohl ich leider nicht in der Lage sein werde, Ihnen mit diesem speziellen Problem zu helfen Ich habe eine verwandte Frage: http://stackoverflow.com/questions/1666093/cpuid-implementations-in-c Ich frage mich, ob Sie mich auf den richtigen Pfad mit etwas Beispielcode oder etwas festlegen könnten ... Ich würde wirklich gerne X86/X64 Unterstützung für CPUID in meiner App haben, um Prozessorinformationen/Funktionen in Absturzberichte für eine zurück zu bekommen App, die ich entwickle und die von Forscherkollegen benutzt wird (ho wird meinen Code auf Maschinen laufen lassen, auf die ich nicht direkt zugreifen kann). Prost, Kris – Kris