研究日誌。

大規模なグラフ処理に対してメモリ階層構造を考慮した高性能なソフトウェアを開発。

CPUID : コア数の取得

2010-07-27 19:55:55 | Weblog
プロセッサのコア数を取得する。
#include <stdio.h>

void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx){
__asm__ __volatile__ ("cpuid" : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) : "a" (op) : "cc");
}

int get_cpu_cores(void) {
int cores = 1, eax, ebx, ecx, edx;
cpuid(0x00000000, &eax, &ebx, &ecx, &edx);
if ( eax >= 0x01 ) {
cpuid(0x01, &eax, &ebx, &ecx, &edx);
cores = (ebx >> 16) & 0xff;
}
return cores;
}

int main(void) {
printf("CPU cores\t: %d\n", get_cpu_cores());
return 0;
}