Я хочу вычислить среднее значение изображения (3 канала интереса + 1 альфа-канал, которые мы здесь игнорируем) для каждого канала с использованием встроенных функций SSE2. Я попробовал это:
__m128 average = _mm_setzero_ps();
#pragma omp parallel for reduction(+:average)
for(size_t k = 0; k < roi_out->height * roi_out->width * ch; k += ch)
{
float *in = ((float *)temp) + k;
average += _mm_load_ps(in);
}
Но я получаю эту ошибку с GCC: user-defined reduction not found for average
.
Возможно ли это с SSE2? Что не так?
Редактировать
Это работает:
float sum[4] = { 0.0f };
#pragma omp parallel for simd reduction(+:sum[:4])
for(size_t k = 0; k < roi_out->height * roi_out->width * ch; k += ch)
{
float *in = ((float *)temp) + k;
for (int i = 0; i < ch; ++i) sum[i] += in[i];
}
const __m128 average = _mm_load_ps(sum) / ((float)roi_out->height * roi_out->width);