最新のi7ベースのマシンでCPUIDベースのコードに問題があります。 CPUが、2つのHTユニットをそれぞれ有する4つのコアの代わりに、8つのHTユニットを有する単一のコアを有するものとして検出している。Intel i7プロセッサのCPUID
CPUから戻ってきたCPUID情報を誤って解釈する必要がありますが、どのように表示されるのでしょうか。
基本的には、Windowsに見える各プロセッサを反復し、そのスレッドにスレッドアフィニティを設定してから、一連の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; }
このシーケンスは、システム内の残りのCPUで繰り返されます。
誰もこれに直面していますか?
Hey StarPacker、私はこの特定の問題についてお手伝いできませんが、私には関連する質問があります: http://stackoverflow.com/questions/1666093/cpuid-implementations-in-c 私はいくつかの例のコードなどで正しいパスに私を置くことができるかどうか疑問に思っていました...私は実際にアプリケーションのCPUIDをX86/X64でサポートしています。 app私は開発中であり、仲間の研究者によって使用されます(私が直接アクセスすることができないマシンで私のコードを実行します)。乾杯、Kris – Kris