несколько процессоров, несколько ядер и количество потоков

#multithreading #visual-c #cpu-cores

#многопоточность #visual-c #процессорные ядра

Вопрос:

Конфигурация системы: 64-разрядная версия Win 7, Visual Studio 2010 Premium, Dell t7500 с 2 чипами xeon 5690, 48 гигабайтами оперативной памяти. Каждый xeon имеет 6 ядер, таким образом, имеется 12 физических ядер. При гиперпоточности должно быть 24 логических ядра.

В моем приложении на C:

 Session.coresAvailable  =    omp_get_num_procs ( );
Session.threadsAvailable    =    omp_get_max_threads ( ) ;
  

Система возвращается и сообщает мне, что имеется 12 ядер и 12 потоков. Разве это не должно быть 24 потока?

Комментарии:

1. Вы включили гиперпоточность? Обычно это опция bios.

2. ОК. Спасибо… это ответило на мой вопрос. Это не было установлено в bios. Интересно, потому что это было отправлено таким образом. Включение этого почти удваивает скорость моего приложения. (Как мне указать, что вы ответили на мой вопрос?)

3. Я преобразовал свой комментарий в ответ. Так что вы можете принять это. 🙂

Ответ №1:

Преобразование комментария в ответ:

Вам нужно включить гиперпоточность в BIOS, чтобы видеть все 24 потока.

Ответ №2:

Гиперпоточность чертовски полезна для многозадачности, не столько для однородных параллельных алгоритмов, где все потоки выполняют одни и те же инструкции и нуждаются в одинаковых внутренних подразделениях. Таким образом, omp может просто игнорировать виртуальные потоки.