Что такое кроссплатформенный фрагмент кода для получения полного количества ядер в 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 ()
не возвращает количество аппаратных ядер ЦП, но из аппаратных потоков, которые поддерживает ЦП (а дополнительные потоки, предоставляемые гиперпоточностью, не совсем сокращают его).