2011-01-06 80 views
1

检测I3/I5/I7英特尔酷睿家族我想,如果当前进程对家庭的酷睿i3/i5或i7处理器的英特尔酷睿运行时,如果可能的GetSystemInfo/GetNativeSystemInfoSYSTEM_INFO检测。我确实使用了CPUID & VendorID找到了所有可能的CPU检测的详尽代码,但是现在我想远离它,而且看起来好像GetSytemInfo可以提供正确的信息。在运行时

我只是运行以下命令:

SYSTEM_INFO si; 
GetSystemInfo(&si); 

它看起来像wProcessorRevisionwProcessorLevel应该能够给出的信息。在i5我要在这里测试我得到:

wProcessorArchitecture = 0 (correct) 
wProcessorLevel = 6 
wProcessorRevision = 7685 

我想看看无处不在,没有任何规格为最新的英特尔酷睿家族。我能找到的所有东西都太旧了......任何想法?

+6

“我确实使用CPUID&VendorID找到了所有可能的CPU检测的详尽代码,但现在我想远离它”< - 为什么? – 2011-01-06 21:04:48

+0

,因为GetSystemInfo似乎可以做到几乎没有实现 - 因为msdn会保持其文档是最新的。 – Alex 2011-01-06 22:13:46

回答

1

您感兴趣的规格称为“英特尔规格更新”文档;您需要针对您感兴趣的处理器系列的特定文档使用Google。

1

它可从英特尔获得。 Start here,选择一个模型,点击“下载数据表”,然后点击“规格更新”来查找cpuid。

1

我建议你告诉我们你为什么想知道CPU是Intel i3/i5/i7还是不知道的原因;所以我们可以告诉你,你错了,你应该使用由CPUID或其他东西返回的功能标志。基本上没有足够的信息提供给你你需要的答案(只有足够的信息才能给你所要求的答案)。 :-)

SYSTEM_INFO结构的“wProcessorLevel”和“wProcessorRevision”字段实际上是无用的,因为您不知道CPU制造商是谁。您可以使用CPUID中的VendorID(试图)确定制造商,但如果您这样做,则可以同时获得家族/型号/步进信息。

“wProcessorLevel”看起来像是直接从“CPUID.family”中获取的。对于“wProcessorLevel = 6”,它可以是从Pentium II到最新的Nehalem的任何Intel CPU,不包括基于Netburst的CPU(例如Pentium 4)。它也可能是AMD K7,Cyrix M2,VIA C3或其他。

“wProcessorRevision”字段看起来像是从“(CPUID.model < < 8)+ CPUID.stepping”派生的。步进部分应该被忽略。 “CPUID.model”部分(与CPUID /系列部分结合)不足以确定它是最近的Intel Nehalem还是来自不同制造商的旧CPU(恰好使用相同的“CPUID.family”和“ CPUID.model“)忽略”wProcessorLevel“,只依赖于”CPUID.model“部分只会让事情变得更糟

当然,即使有来自CPUID的完整识别信息,也很难区分在i3/i5/i7和基于Nehalem的基于Xeon或Nehalem的Celeron之间,或者英特尔感觉使用的任何其他品牌名称(但如果实际上确实意味着“i3/i5或i7”),或者确定CPU未来英特尔的发布不是i3/i5/i7(没有办法预测英特尔未来可能使用哪些家族/型号/步进值)。另外,不要忘记一些CPU允许CPUID返回的信息被修改,所以没有严格保证返回“vendorID = Intel,family = 6,model = 30”的CPU不是完全不同的因此没有严格保证“wProcessorRevision”和“wProcessorRevision”的信息是正确的);如果这是一个问题,你需要比CPUID的供应商/家族/模型更深入。