Преимущество одновременного использования нескольких наборов инструкций SIMD - PullRequest
4 голосов
/ 15 мая 2010

Я пишу очень параллельное приложение, которое является многопоточным. У меня уже написан класс ускоренного потока SSE. Если бы я написал класс ускоренного потока MMX, то запустил бы оба одновременно (один поток SSE и один поток MMX на ядро), заметно ли повысилась бы производительность?

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

Ответы [ 2 ]

8 голосов
/ 15 мая 2010

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

Итак, ответ таков: нет, вы не увидите улучшения производительности по сравнению с запуском двух потоков SSE.

0 голосов
/ 15 мая 2010

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

Лучший вопрос - как SSE реализован на вашем целевом процессоре. У него есть блок SSE на ядро? (возможно) Если это так, то вы могли бы также запустить инструкции SSE в каждом потоке.

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

...