Вопрос
Регистры SSE совместны или дублированы между логическими процессорами (гиперкопотения)? Могу ли я ожидать такого же ускорения от параллелизации для тяжелой программы SSE, что и для нормальной программы (Intel требует 30% для процессоров с гиперкотимом)?
Решение
Мне неясно из документации Intel, если процессоры гиперподборов поделились файлом регистра между потоками или имеют два разных (я бы предположил, что они на самом деле различны, так как в противном случае время переключения контекста между потоками HT было бы довольно высоким, но это исключительно. догадка).
Что касается ускорения - это будет зависеть от вашего микса инструкций и планирования. Помните, что ЦП HT не имеет дополнительных ресурсов выполнения (ALU, единицы загрузки/хранилища и т. Д.), Повышение производительности связано с улучшением использования этих ресурсов, поскольку типичный код, особенно на современном процессоре, тратит разумную сумму Время заблокировано в ожидании загрузки памяти и хранилища, которые будут завершены до выполнения. HT позволяет чередовать эти нагрузки и хранилища, чтобы один из одного потока на чтение на чтение можно было включить и начать использовать ресурсы выполнения, которые ранее сидели.
Я предполагаю, что какое повышение производительности вы увидите с помощью многопоточной программы SSE, будет зависеть от отношения памяти OPS к арифметическим OPS. Если, например, ваша программа SSE загружает 4 регистра SSE из памяти, выполняет 10 000 операций SSE на них, а затем записывает 4 регистра обратно, вы вряд ли увидите большую часть преимущества от HT, способного перекрывать доступ к памяти, потому что 99% ваших программ времени выполнения будут потрачены в Simd Alus, а не на доступ к памяти.
С другой стороны, если ваша программа очень тяжелая, то многопоточная программа может значительно повысить производительность на многоядерных процессорах и может дать вам намного лучше, чем улучшение 30%, поскольку в этом случае ваш код может получить доступ к полным ресурсам выполнения несколько ядер одновременно.
Другие советы
Они логически дублированы - каждый поток получает свое собственное состояние. Физически они могут быть переданы - зависит от вашей реализации гиперподбота.