/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);