У меня есть математическая C ++ программа, скомпилированная с mingw-w64, которая определяет количество логических ядер в системе для запуска оптимального количества рабочих потоков.
Он хорошо работает на всех машинах, которые я тестировал до сих пор, но один пользователь сообщил, что запущено только 20 потоков, в то время как у него есть машина 2-Xeon с 10 ядрами с многопоточным ядром в каждом, всего 40 логических процессоров.
Диспетчер задач Windows 2012 Server сообщает: 2 сокета, 20 ядер, 40 логических процессоров (у меня есть скриншот). График загрузки нескольких процессоров имеет 40 графиков (у меня также есть скриншот)
Но я всегда обнаруживаю только 20 логических процессоров, используя один из трех следующих методов:
GetSystemInfo()
из Win32 C APIstd::thread::hardware_concurrency()
из C ++ 11 stdlibQThread::idealThreadCount()
из Qt 5.4И вообще, вполне вероятно, что два последних реализованы с использованием первого.
Как правильно определить фактическое количество логических ядер?
Спасибо!
Задача ещё не решена.
Других решений пока нет …