我正在使用VS2012 C ++ Windows 7,我需要获取有关CPU多线程的信息,以计算可用逻辑处理器的数量。
我正在使用此代码(来自This SO Post)
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
uint32_t registers[4];
__asm__ __volatile__ ("cpuid " :
"=a" (registers[0]),
"=b" (registers[1]),
"=c" (registers[2]),
"=d" (registers[3])
: "a" (1), "c" (0));
unsigned CPUFeatureSet = registers[3];
bool hyperthreading = CPUFeatureSet & (1 << 28);
如果出现以下错误,则此程序集无法编译:
error C2065: '__asm__' : undeclared identifier
我已尝试更改为__asm __volatile
并将所有内容放在一行中:
__asm __volatile ("cpuid " : "=a" (registers[0]), "=b" (registers[1]), "=c" (registers[2]), "=d" (registers[3]) : "a" (1), "c" (0));
这也不起作用,导致:
error C2400: inline assembler syntax error in 'opcode'; found '('
帮助解决这个问题。
答案 0 :(得分:5)
如果你坚持使用cpuid,你应该使用#include <intrin.h>
void foo()
{
uint32_t registers[4];
__cpuid(registers, 1);
unsigned CPUFeatureSet = registers[3];
// ...
}
内在函数。 this甚至带有示例代码。像这样:
=LOOKUP(DATE(2016,5,$P6), Table1[Date], Table1[Paper Name])
答案 1 :(得分:2)
您可以使用提供的API查询当前计算机的体系结构,包括处理器和核心数以及NUMA体系结构。