4
В OS X, есть ли способ узнать, какой процессор работает на потоке? Эквивалентная функция для Linux: sched_getcpusched_getcpu() эквивалент для OS X?
В OS X, есть ли способ узнать, какой процессор работает на потоке? Эквивалентная функция для Linux: sched_getcpusched_getcpu() эквивалент для OS X?
GetCurrentProcessorNumber пример показывает код, который реализует эту функцию, используя инструкцию CPUID. Я пробовал сам и могу подтвердить это работает на Mac OS X.
Вот моя версия, которую я использовал на Mac OS X
#include <cpuid.h>
#define CPUID(INFO, LEAF, SUBLEAF) __cpuid_count(LEAF, SUBLEAF, INFO[0], INFO[1], INFO[2], INFO[3])
#define GETCPU(CPU) { \
uint32_t CPUInfo[4]; \
CPUID(CPUInfo, 1, 0); \
/* CPUInfo[1] is EBX, bits 24-31 are APIC ID */ \
if ((CPUInfo[3] & (1 << 9)) == 0) { \
CPU = -1; /* no APIC on chip */ \
} \
else { \
CPU = (unsigned)CPUInfo[1] >> 24; \
} \
if (CPU < 0) CPU = 0; \
}
Кто заботится и почему? Кроме того, к моменту получения такой информации такая информация устарела. –
@MartinJames: на самом деле мне нужно это знать, поскольку я пытаюсь отладить проблему производительности с миграцией потоков между ядрами. Я хочу зарегистрировать близость процессора (ядра), когда поток работает, чтобы увидеть, как часто поток переносится. К сожалению, в BSD или OS X нет стандартного способа сделать это. –
@Will: вы когда-нибудь находили решение для этого? –