研究日誌。

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

Processor ID と APIC ID

2010-11-19 23:50:30 | Weblog

/proc/cpuinfo に書かれた Processor ID は、OS が識別するための通し番号なので、再起動の度に変わる可能性がある。それに対して、eax=1 で cpuid を実行した際の ebx[24:31] の値である APIC ID は固定の ID となるため、識別子として非常に優秀である。

しかしながら、 sched_setaffinity() sched_getaffinity() で使用される CPU_SET() の第1引数の値は、Processor ID で指定しなければならないので、非常にややこしくしてしまっている。 まずは APIC ID と Processor ID の対応付けをすることがまずは先決であろう。

#include <sched.h>
int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);
int sched_getaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);
void CPU_CLR(int cpu, cpu_set_t *set);
int CPU_ISSET(int cpu, cpu_set_t *set);
void CPU_SET(int cpu, cpu_set_t *set);
void CPU_ZERO(cpu_set_t *set);