SSE и гиперпоточность - PullRequest
6 голосов
/ 09 октября 2009

Являются ли регистры SSE общими или дублирующимися между логическими процессорами (гиперпоточность)? Можно ли ожидать такого же ускорения при распараллеливании для тяжелой программы SSE, как и для обычной программы (Intel требует 30% для процессоров с гиперпоточностью)?

Ответы [ 2 ]

5 голосов
/ 10 октября 2009

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

Что касается ускорения - оно будет зависеть от вашего набора команд и расписания. Помните, что ЦП HT не имеет каких-либо дополнительных ресурсов выполнения (ALU, модулей загрузки / хранения и т. Д.), Повышение производительности происходит за счет лучшего использования этих ресурсов, поскольку типичный код, особенно на современном процессоре, тратит разумную сумму времени заблокировано в ожидании загрузки памяти и сохранения до завершения выполнения. HT позволяет чередовать эти загрузки и хранилища, так что один поток останавливается при чтении, другой может быть включен и начать использовать ресурсы выполнения, которые ранее находились в режиме ожидания.

Я думаю, какое увеличение производительности вы увидите при многопоточности программы SSE, зависит от соотношения операций памяти и операций арифметики. Например, если ваша программа SSE загружает 4 регистра SSE из памяти, выполняет над ними 10000 операций SSE, а затем записывает 4 регистра, вы вряд ли увидите большое преимущество от возможности HT перекрывать доступ к памяти, поскольку 99% времени выполнения ваших программ будет потрачено на SIMD ALU, а не на доступ к памяти.

С другой стороны, если ваша программа очень требовательна к вычислительным ресурсам, то многопоточность вашей программы может значительно повысить производительность на многоядерных процессорах и может дать вам гораздо лучшее улучшение, чем 30%, так как в этом случае ваш код может получить полный доступ ресурсы исполнения нескольких ядер одновременно.

4 голосов
/ 09 октября 2009

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

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