Как получить абсолютное значение 2 двойных или 4 плавающих с помощью набора инструкций SSE? (Вплоть до SSE4)

Вот пример кода C, который я пытаюсь ускорить с помощью SSE, два массива имеют длину 3072 элемента с двойными числами, могут опуститься до плавающего положения, если мне не нужна точность удвоений.

double sum = 0.0;

for(k = 0; k < 3072; k++) {
    sum += fabs(sima[k] - simb[k]);
}

double fp = (1.0 - (sum / (255.0 * 1024.0 * 3.0)));

В любом случае, моя текущая проблема заключается в том, как выполнить шаг fabs в регистре SSE для чисел типа double или float, чтобы я мог хранить все вычисления в регистрах SSE, чтобы они оставались быстрыми, и я мог распараллеливать все шаги, частично развернув этот цикл.

Вот некоторые ресурсы, которые я ' мы нашли fabs () asm или, возможно, этот , меняющий знак - SO , однако слабость второго требует условной проверки.

16
задан Community 23 May 2017 в 12:32
поделиться