Алгоритм ксора используя SIMD2 инструкции
у меня возникли довольно серьезные трудности с реализацией ксора двух int чисел между собой используя SIMD2 ( aka SSE ) инструкции. Не могли бы вы показать мне код реализации такого?
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Вот совсем простой пример. Он странный, но для понимания, наверно хватит
#include <iostream>
#include <emmintrin.h>
#include <iomanip>
//для удобства вывода
std::ostream& operator<<(std::ostream& os, const __m128i& x)
{
for (int i = 0; i < 2; i++) {
os << std::hex << std::setw(16) << std::setfill('0') << x[i];
}
return os;
}
int main()
{
// загрузим два значения
__m128i a = _mm_setr_epi32(0x01234567,0x01234567,0x01234567,0x01234567);
__m128i b = _mm_setr_epi32(0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF);
// выведем их на консоль
std::cout << a << '\n' << b << '\n';
// собственно самая центральная операция
__m128i c = _mm_xor_pd(a,b);
// выведем результат
std::cout << c;
}
Вывод
01234567012345670123456701234567
ffffffffffffffffffffffffffffffff
fedcba98fedcba98fedcba98fedcba98