Должен ли я отключить HyperThreading для запуска параллельного моделирования? - PullRequest
4 голосов
/ 09 марта 2012

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

Ответы [ 4 ]

7 голосов
/ 09 марта 2012

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

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

3 голосов
/ 12 марта 2012

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

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

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

2 голосов
/ 09 мая 2013

Вы заявляете:

Я знаю, что никогда не должен использовать более 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.

1 голос
/ 11 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...