Tengo un problema con mi código basado en CPUID en las máquinas más nuevas basadas en i7. Está detectando que la CPU tiene un único núcleo con 8 unidades HT en lugar de 4 núcleos cada uno con 2 unidades HT.CPUID en procesadores Intel i7
Debo estar malinterpretando los resultados de la información del CPUID que regresa de la CPU, pero no puedo ver cómo.
Básicamente, repito a través de cada procesador visible para Windows, establezco la afinidad de la hebra a esa hebra y luego hago una secuencia de llamadas a la 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; }
Esta secuencia se repite para el resto de las CPU en el sistema.
¿Alguien ha enfrentado esto antes?
Hola StarPacker, aunque me temo que no podré ayudarte con este problema específico, tengo una pregunta relacionada: http://stackoverflow.com/questions/1666093/cpuid-implementations-in-c Me preguntaba si podría establecerme en la ruta correcta con algún código de ejemplo o algo ... Realmente me gustaría tener compatibilidad con X86/X64 para CPUID en mi aplicación para obtener información/funciones del procesador en informes de fallas para una aplicación que estoy desarrollando y que será utilizada por otros investigadores (ho ejecutaré mi código en máquinas a las que no podré acceder directamente). Cheers, Kris – Kris