win32 / stdlib обнаруживает только половину числа логических ядер в C / C ++ под Windows

У меня есть математическая C ++ программа, скомпилированная с mingw-w64, которая определяет количество логических ядер в системе для запуска оптимального количества рабочих потоков.

Он хорошо работает на всех машинах, которые я тестировал до сих пор, но один пользователь сообщил, что запущено только 20 потоков, в то время как у него есть машина 2-Xeon с 10 ядрами с многопоточным ядром в каждом, всего 40 логических процессоров.

Диспетчер задач Windows 2012 Server сообщает: 2 сокета, 20 ядер, 40 логических процессоров (у меня есть скриншот). График загрузки нескольких процессоров имеет 40 графиков (у меня также есть скриншот)

Но я всегда обнаруживаю только 20 логических процессоров, используя один из трех следующих методов:

  • GetSystemInfo() из Win32 C API
  • std::thread::hardware_concurrency() из C ++ 11 stdlib
  • QThread::idealThreadCount() из Qt 5.4

И вообще, вполне вероятно, что два последних реализованы с использованием первого.

Как правильно определить фактическое количество логических ядер?

Спасибо!

4

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …