Как вычислить одно-векторное точечное произведение с использованием встроенных функций SSE в C

Я пытаюсь перемножить два вектора вместе, где каждый элемент одного вектора умножается на элемент в том же индексе другого вектора. Затем я хочу просуммировать все элементы результирующего вектора, чтобы получить одно число. Например, вычисление будет выглядеть следующим образом для векторов {1,2,3,4} и {5,6,7,8}:

1*5 + 2*6 + 3*7 + 4*8

По сути, я беру скалярное произведение двух векторов. Я знаю, что для этого есть команда SSE, но у этой команды нет внутренней функции, связанной с ней. На данный момент я не Я не хочу писать встроенную сборку в моем коде на C, поэтому я хочу использовать только встроенные функции. Это кажется обычным расчетом, поэтому я сам удивлен, что не смог найти ответ в Google.

Примечание: я оптимизирую конкретную микроархитектуру, которая поддерживает до SSE 4.2.

10
задан Peter Cordes 29 October 2019 в 23:20
поделиться