在运行时检测i3 / i5 / i7 Intel Core系列

时间:2011-01-06 21:03:01

标签: c++ c visual-c++ cpu intel

我正在尝试检测当前进程是否在i3 / i5或i7家族的英特尔酷睿上运行,如果可能,请GetSystemInfo / GetNativeSystemInfoSYSTEM_INFO。我确实找到了一些使用CPUID& amp;的所有可能CPU检测的详尽代码。 VendorID,但是现在我想远离它,看起来GetSytemInfo可以使用正确的信息。

我只是运行这个:

SYSTEM_INFO si;
GetSystemInfo(&si);

看起来wProcessorRevisionwProcessorLevel应该能够提供该信息。在i5上,我必须在这里测试一下:

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

我试着到处寻找,没有针对最新英特尔核心系列的规格。我能找到的一切都太老了......不知道吗?

3 个答案:

答案 0 :(得分:1)

您感兴趣的规范称为“英特尔规格更新”文档;您需要谷歌搜索特定于您感兴趣的处理器系列的文档。

答案 1 :(得分:1)

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

答案 2 :(得分: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赛扬,或英特尔使用的其他任何品牌名称(但有如果你真的意味着“i3 / i5或i7”,或者确定英特尔未来发布的CPU是否是i3 / i5 / i7(没有办法预测哪个系列/型号/步进值英特尔)可能会在未来使用)。另外,不要忘记某些CPU允许修改CPUID返回的信息,因此没有严格保证返回“vendorID = Intel,family = 6,model = 30”的CPU不是完全不同的(并且因此没有严格保证“wProcessorRevision”和“wProcessorRevision”信息是正确的;如果这是一个问题,你需要比CPUID的供应商/系列/型号更深入。