Сокращение суммы байтов без знака без переполнения с использованием SSE2 на Intel

Я пытаюсь найти сокращение суммы 32 элементов (каждый 1 байт данных) на процессоре Intel i3. Я сделал следующее:

s=0; 
for (i=0; i<32; i++)
{
    s = s + a[i];
}  

Однако это занимает больше времени, так как мое приложение работает в режиме реального времени и требует гораздо меньше времени. Обратите внимание, что окончательная сумма может быть больше 255.

Можно ли реализовать это с помощью низкоуровневых инструкций SIMD SSE2? К сожалению, я никогда не использовал SSE. Я пытался найти для этой цели функцию sse2, но она также недоступна. Гарантировано ли (sse) сокращение времени вычислений для задач такого небольшого размера?

Есть предложения??

Примечание. Я реализовал аналогичные алгоритмы с использованием OpenCL и CUDA, и они отлично работали, но только при больших размерах задачи. Для задач небольшого размера стоимость накладных расходов была больше. Не уверен, как это работает на SSE

13
задан Peter Cordes 11 June 2016 в 01:06
поделиться