6

Я использую код OpenMP на процессоре HyperThreaded.Как гиперпотоки влияют на распараллеливание?

Если все остальное было равным, , как изменилось бы производительность на не-HyperThreaded CPU?

Я замечаю использование 100% процессора, независимо от того, сколько потоков я запускаю, но изменение количества потоков повышает производительность. Как это может быть?

Является ли история одинаковой для многопоточных процессоров без INTEL?

ответ

3

Улучшение производительности (если есть) из гиперпотока трудно предсказать.

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

В другом направлении, если код тщательно написан для покрытия латентности путем тщательного использования кеша, предварительной выборки и т. Д., Он может получить мало или ничего от гиперпотока. Особенно с более старыми операционными системами, которые не пытаются учитывать гиперпотоки в своем потоковом планировании, дополнительные потоки могут фактически приводить к дополнительным контекстным переключателям, что замедляет общее выполнение.

Предполагая, что вы начинаете с полностью однопоточного кода и добавляете некоторые директивы OpenMP, мой собственный опыт заключается в том, что Hyperthreading обычно хорош для улучшения производительности чем-то на заказ или 10%. Если код делает практически любую попытку префектуры или что-то подобное, большинство (если не все) этого преимущества испаряются почти сразу.

+0

Я только что узнал, что вы можете отключить гиперпотоки в BIOS. Это то, как вы определяете улучшение? – roro

+0

@roro: Я проверил тесты как путем отключения гиперпотока в BIOS, так и путем ручного ограничения количества потоков на количество физических ядер, которые, как я знал, были доступны и вручную настраивали сходство потоков. –

+0

Я согласен, что улучшение производительности HT трудно предсказать. Однако все ресурсы выполнения не используются до остановки. Вместо этого ресурсы выполнения (порты, кеш, ...) распределяются между гиперпотоками. Таким образом, добавление μop для HT 1 может выполняться на порту Haswell 0, а lea μop для HT 2 выполняется на порту 5 в том же такте. Цитата из Intel: «С точки зрения микроархитектуры это означает, что инструкции обоих логических процессоров будут сохраняться и выполняться одновременно на ресурсах совместного использования». http://www.cs.virginia.edu/~mc2zk/cs451/vol6iss1_art01.pdf – Olsonist

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