Здесь пример кода C, который я пытаюсь ускорить с помощью SSE, два массива имеют длину 3072 элемента с удвоением, могут опуститься до float, если мне не нужна точность удвоений.
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 для удвоения или поплавка, чтобы я мог сохранить весь расчет в регистрах SSE, чтобы он оставался быстрым, и я могу распараллелить все этапы путем частичного разворота этот цикл.
Здесь некоторые ресурсы, которые я нашел fabs() asm или, возможно, этот переворачивающий знак - SO, однако слабость второго требует условной проверки.