在c中获取nr处理单元(#cpu,cores)的便携方式?

时间:2009-07-16 08:18:12

标签: c posix pthreads portability

有没有办法在系统中获得cpus或内核等处理单元?我打算用pthreads编写一个应用程序,所以如果有一个posix调用会很棒。我知道从/ proc / cpuinfo读取,但这不是那么便携。还有另一种更便携的方式吗?

4 个答案:

答案 0 :(得分:4)

POSIX(线程)委员会考虑支持这样的操作,但后来拒绝了。人们已经收集了有关如何在各种系统上执行此操作的信息。

答案 1 :(得分:1)

我所知道的没有POSIX方式。您需要退回并执行每个平台检查,或找到已经为您进行检查的库。

答案 2 :(得分:0)

据我所知。例如,在Windows下,你可以从GetSystemInfo获得它。您可以使用CPUID汇编程序调用在x86 CPU上获取此信息,但这在非x86平台上没有用。

答案 3 :(得分:0)

如果您谈论的是Intel CPU,则可以使用:

int ncores=0,nthreads=0;
asm volatile("cpuid": "=a" (ncores), "=b" (nthreads) : "a" (0xb), "c" (0x1) : );