2015-11-16 4 views
4

В OS X, есть ли способ узнать, какой процессор работает на потоке? Эквивалентная функция для Linux: sched_getcpusched_getcpu() эквивалент для OS X?

+0

Кто заботится и почему? Кроме того, к моменту получения такой информации такая информация устарела. –

+0

@MartinJames: на самом деле мне нужно это знать, поскольку я пытаюсь отладить проблему производительности с миграцией потоков между ядрами. Я хочу зарегистрировать близость процессора (ядра), когда поток работает, чтобы увидеть, как часто поток переносится. К сожалению, в BSD или OS X нет стандартного способа сделать это. –

+0

@Will: вы когда-нибудь находили решение для этого? –

ответ

3

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;       \ 
     } 
Смежные вопросы