Tôi đang gặp sự cố với mã dựa trên CPUID của tôi trên các máy dựa trên i7 mới hơn. Nó phát hiện CPU là có một lõi đơn với 8 HT đơn vị thay vì 4 lõi mỗi với 2 HT đơn vị.CPUID trên bộ vi xử lý Intel i7
Tôi phải hiểu sai kết quả của thông tin CPUID sắp trở lại từ CPU, nhưng tôi không thể thấy cách thực hiện.
Về cơ bản, tôi lặp qua từng bộ xử lý hiển thị với Windows, đặt ái lực luồng cho chuỗi đó và sau đó tạo chuỗi các cuộc gọi 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; }
Chuỗi này lặp lại cho phần còn lại của CPU trong hệ thống.
Có ai phải đối mặt với điều này trước đây không?
Hey StarPacker, mặc dù tôi sợ rằng tôi sẽ không thể giúp bạn về vấn đề cụ thể này Tôi có một câu hỏi liên quan: http://stackoverflow.com/questions/1666093/cpuid-implementations-in-c Tôi đã tự hỏi nếu bạn có thể đặt tôi trên con đường chính xác với một số mã ví dụ hay cái gì đó ... Tôi thực sự muốn có hỗ trợ X86/X64 cho CPUID trong ứng dụng của tôi để lấy lại thông tin bộ xử lý/tính năng trong báo cáo sự cố cho ứng dụng tôi đang phát triển và sẽ được các nhà nghiên cứu đồng nghiệp sử dụng (ho sẽ chạy mã của tôi trên máy tôi sẽ không thể truy cập trực tiếp). Chúc mừng, Kris – Kris