Портативный способ получения nr единиц обработки (# процессор, ядра) в c? - PullRequest
1 голос
/ 16 июля 2009

Есть ли способ получить число процессорных единиц, таких как процессор или ядра в системе? Я собираюсь написать приложение с помощью pthreads, поэтому, если есть вызов posix, это было бы здорово. Я знаю о чтении из / proc / cpuinfo, но это не так переносимо. Есть ли еще более портативный способ?

Ответы [ 4 ]

4 голосов
/ 16 июля 2009

Комитет POSIX (ветки) рассмотрел вопрос о поддержке такой операции, но затем отказался. Люди собрали информацию о том, как это сделать в различных системах.

1 голос
/ 16 июля 2009

Я не знаю POSIX. Вам нужно отступить и выполнить проверки для каждой платформы или найти библиотеку, которая уже выполняет проверки для вас.

0 голосов
/ 23 марта 2019

Если вы говорите о процессорах Intel, вы можете использовать:

int ncores=0,nthreads=0;
asm volatile("cpuid": "=a" (ncores), "=b" (nthreads) : "a" (0xb), "c" (0x1) : );
0 голосов
/ 16 июля 2009

Не в моих силах. Под окнами, например, вы получите это из GetSystemInfo. Вы, вероятно, можете получить эту информацию о процессорах x86 с помощью вызова ассемблера CPUID, но это не нужно на платформах, отличных от x86.

...