Целочисленные значения / значения с плавающей точкой с SSE

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

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

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

Я компилирую с опцией -O3.

0

Решение

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

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

1

Другие решения

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

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

0

По вопросам рекламы [email protected]