別の解決策は、hwlocを使用することです。簡単な例を次に示します。
#include <hwloc.h>
#include <stdio.h>
int main(){
// Allocate, initialize, and perform topology detection
hwloc_topology_t topology;
hwloc_topology_init(&topology);
hwloc_topology_load(topology);
// Try to get the number of CPU cores from topology
int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_CORE);
if(depth == HWLOC_TYPE_DEPTH_UNKNOWN)
printf("*** The number of cores is unknown\n");
else
printf("*** %u core(s)\n", hwloc_get_nbobjs_by_depth(topology, depth));
// Destroy topology object and return
hwloc_topology_destroy(topology);
return 0;
}
これは、Red Hat4.1.2-48をGCC4.1.2で実行しているLinuxボックスと、OSX10.8.1をGCC4.2.1で実行しているAppleでテストしました。