3

Мой компьютер имеет четырехъядерный процессор i7. Я изучаю распараллеливание научных симуляций. Как влияние гиперпотока влияет на параллельные действия? Я знаю, что никогда не должен использовать более 4 рабочих процессов, чтобы получить характеристики спуска. Но следует ли отключать гиперпотоки? Это влияет на параллельные выступления?Должен ли я отключить HyperThreading для параллельного моделирования?

ответ

5

По моему опыту работы с электронным моделированием и инверсионными кодами, да, вы должны отключить гиперпоточность. Но это не тот вопрос, на который хорошо отвечают анекдоты других людей (даже мои, увлекательные и истинные, как они есть).

Вы студент, это определенно тема, которая стоит вашего времени, потраченного на ваши собственные выводы. Есть так много факторов, что мой опыт работы с моими кодами на моих платформах почти бесполезен для вас.

1

HyperTreading - это реализация Intel для одновременной многопоточной (SMT). В общем, SMT почти всегда выгоден (поэтому он обычно включен), если ваше приложение не привязано к процессору. Если вы точно знаете, что ваше приложение связано с CPU, отключите SMT. В противном случае (ваше приложение привязано к IO или не может полностью насытить ядра), оставьте его включенным.

2

Под Linux, если у вас есть 4 занятых потока на i7, они будут размещать каждый на другом ядре. Если другая половина ядра простаивает, производительность должна быть одинаковой. Если вы запускаете другую программу, обсуждается вопрос о том, лучше ли использовать гиперпотоки для запуска дополнительных программ или переключения контекста. (Я подозреваю, что меньше переключение контекста лучше)

Распространенная ошибка предполагает, что если вы используете 8 потоков вместо 4, это будет вдвое быстрее. Он может быть только немного быстрее (в этом случае он все равно может быть стоит) или немного медленнее (в этом случае ограничьте свою программу на 4 потока). Я нашел примеры того, где использование двойного числа потоков было немного быстрее. ИМХО, все это проверяет его, чтобы найти оптимальное количество и использовать его.

Единственный раз, когда я вижу, что вам нужно отключить HT, - это когда вы не контролируете поведение вашего приложения и используете 4 потока быстрее.

1

Вы состояние:

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

Это не всегда так! Вот пример того, что я нашел на i7-3820 с поддержкой HT. Весь мой код, который я запускал, был C++. Учтите, что у меня есть 8 отдельных программ (хотя и одинаковых), которые мне нужно запустить. Я пробовал два следующих способа запуска этих кодов:

  1. Выполняйте только 4 отдельных потока одновременно. Когда эти 4 завершены, запустите следующие 4 потока (4 x 2 = 8 всего).
  2. Выполняйте все 8 как отдельные потоки одновременно (8 x 1 = 8 всего).

Как вы можете видеть, эти два сценария достигают того же. Тем не менее, то, что я обнаружил, что время прогона:

  1. 1 час для каждый набор из 4 нитей; в общей сложности 2 часа для завершения всех 8.
  2. 1.5 часов для набора из 8 потоков.

Что вы найдете, так это то, что один поток быстрее завершится для случая № 1, но общий # 2 дает лучшую производительность, так как ВСЕ ваша работа завершается за меньшее время. Я обнаружил, что типичный прирост производительности составляет ~ 25% при включенном режиме HT.

Как видно, существуют сценарии при работе 8 потоков быстрее, чем 4.

Смежные вопросы