Вот пример кода 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 , однако слабость второго требует условной проверки.