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

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

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


person jakogut    schedule 15.05.2010    source источник
comment
У вас есть несколько хороших ответов ниже, но я думаю, что лучший ответ можно было бы получить, написав тестовый код и получив реальные реальные числа.   -  person JUST MY correct OPINION    schedule 15.05.2010


Ответы (2)


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

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

person SoapBox    schedule 15.05.2010

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

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

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

person jalf    schedule 15.05.2010
comment
Извините? SSE использует свои собственные 128-битные регистры, тогда как MMX (ab) использует регистры с плавающей запятой. (Цитата: en.wikipedia.org/wiki/Streaming_SIMD_Extensions) - person jakogut; 15.05.2010