SIMD: накопление соседних парC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 SIMD: накопление соседних пар

Сообщение Anonymous »

Я учусь использовать встроенные функции SIMD и автовекторизацию. К счастью, у меня есть полезный проект, над которым я работаю, и он кажется чрезвычайно подходящим для SIMD, но все еще сложен для такого новичка, как я.

Я пишу фильтр для изображений, который вычисляет среднее значение 2x2 пикселей. Я выполняю часть вычислений, накапливая сумму двух пикселей в один пиксель.

Код: Выделить всё

template 
inline void accumulate_2x2_x_pass(
T* channel, U* accum,
const size_t sx, const size_t sy,
const size_t osx, const size_t osy,
const size_t yoff, const size_t oyoff
) {

const bool odd_x = (sx & 0x01);

size_t i_idx, o_idx;

// Should be vectorizable somehow...
for (size_t x = 0, ox = 0; x < sx - (size_t)odd_x; x += 2, ox++) {
i_idx = x + yoff;
o_idx = ox + oyoff;
accum[o_idx] += channel[i_idx];
accum[o_idx] += channel[i_idx + 1];
}

if (odd_x) {
// 

Подробнее здесь: [url]https://stackoverflow.com/questions/55057933/simd-accumulate-adjacent-pairs[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»