Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > сложение байт с использованием sse


Автор: s_a_s_h_a 22.6.2011, 14:48
на вводе имеется две строки, каждая представляет из себя массив из 16-ти переменных типа BYTE. 
Например: 79040301052B0163A103400502060501 и F3A10340FFEC9754A103400502060501. Нужно с использованием sse сложить элементы из первого массива с соответствующими элементами из второго, т.е. 0x79+0xF3, 0x04+0xA1...
Посмотрел в сторону intrinsics, но там работа с 4 числами. В общем, буду признателен за кусок кода. 

Автор: xvr 22.6.2011, 15:06
Цитата(s_a_s_h_a @  22.6.2011,  14:48 Найти цитируемый пост)
Посмотрел в сторону intrinsics, но там работа с 4 числами. 

Угу, режте ваши 16 байтов на 4 куска по 4 и складывайте интринсиками

Или возьмите инструкцию PADDB (128 bit) - как раз на ваши 16 байтов

Интринсик (у Intel компилятора) - __m128i_mm_add_eip8(__m128i a, __m128i b);


Автор: s_a_s_h_a 22.6.2011, 15:43
xvr, за _mm_add_epi8 спасибо!
а вот про резать 16 байт на 4 куска и складывать я не понял.

Автор: xvr 22.6.2011, 16:20
Цитата(s_a_s_h_a @  22.6.2011,  15:43 Найти цитируемый пост)
а вот про резать 16 байт на 4 куска и складывать я не понял. 

4 раза по 32х битному слову
Код

char arg1[16];
char arg2[16];
char result[16];

for(int i=0;i<16;i+=4)
 *(int*)(result+i)=_mm_add32( *(int*)(arg1+i), *(int*)(arg2+i) );

Считаем, что ваша SSE команда _mm_add32 (или как она там называется), а массивы выровнены на 4 байта. int считаем 32 бита

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)