2015-04-21 2 views
0

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

Должен ли я использовать MMX или SSE4 для целых чисел, или я могу просто использовать SSE со всеми этими значениями (даже если есть целое число?), Вставляя целые числа в регистры __m128?

Действительно, я часто использую целые числа в __m128-регистрах, и я не знаю, теряю ли я время (неявные значения литья) или если это то же самое.

Я скомпонован с опцией -O3.

+1

Покажите нам, что вы хотите сделать с некоторым кодом. Покажите скалярный код того, что вы хотите сделать, как предложил Пол Р. –

ответ

1

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

Начните с реализации всего чистого и надежного в скалярном коде, а затем сравните его. Возможно, что скалярная реализация будет достаточно быстрой, и вам не нужно будет ничего делать. Кроме того, gcc и другие компиляторы (например, clang, ICC, даже Visual Studio) получают достаточную пользу при автоматической векторизации, поэтому вы можете получить код в формате без SIMD «бесплатно», который соответствует вашим потребностям в производительности. Однако, если вам по-прежнему нужна более высокая производительность, вы можете начать преобразовывать свой скалярный код в SSE. Сохраняйте оригинальную скалярную реализацию для целей проверки и тестирования, но очень легко ввести ошибки при оптимизации кода, и полезно знать, насколько быстрее ваш оптимизированный код, чем базовый код (вы, вероятно, ищете где-то между 2x и 4x быстрее для SSE по сравнению с скалярным кодом).

0

Хотя предыдущий ответ является разумным, существует одна существенная разница - организация данных. Для прямого использования SSE данные лучше организованы как Structure-of-Arrays (SoA). Как правило, скалярный код может иметь данные, сделанные вокруг макета Array-of-Structures (AoS). Если это так, то преобразование скаляра в векторизованную форме будет трудно

больше читать https://software.intel.com/en-us/articles/creating-a-particle-system-with-streaming-simd-extensions

+1

Я думаю, что трудно сказать, что должен делать OP, пока он не покажет нам какой-то код. –

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