Что такое кроссплатформенный фрагмент кода для получения полного количества ядер в C++?

Возможный дубликат:
Программно определять количество физических процессоров / ядер или, если гиперпоточность активна в Windows, Mac и Linux

Интересно, есть ли какой-нибудь кроссплатформенный (стандартный или повышенный или даже с) способ получить общее количество ядер кроссплатформенным способом? (для Linux Mac Os X и Windows)

2 ответа

Решение

Ооо, вам, вероятно, придется приступить к сборке...

http://code.google.com/p/geekinfo/source/browse/trunk/

Или иди:

boost::thread::hardware_concurrency(); // returns number of cores/HT/procs

Вы могли бы использовать OpenMP omp_get_max_threads () функция. Для g++ включите OpenMP с помощью директивы -fopenmp. Для MS Visual Studio включите его в свойствах проекта - свойства конфигурации - C/C++ - язык. Быть в курсе, что omp_get_max_threads () может вернуть меньше, чем фактическое количество аппаратных ядер / потоков, если omp_set_num_threads () был использован для ограничения количества потоков, которые разрешено использовать в параллельной области OpenMP (не проблема при запуске программы). Вы также должны знать, что для процессоров с гиперпоточностью omp_get_max_threads () не возвращает количество аппаратных ядер ЦП, но из аппаратных потоков, которые поддерживает ЦП (а дополнительные потоки, предоставляемые гиперпоточностью, не совсем сокращают его).

Другие вопросы по тегам