Я начинаю учиться переходить некоторый код, который я работаю в целочисленной математике, чтобы использовать более быструю операцию с плавающей запятой в графическом процессоре. Я не могу понять, почему я не могу заставить работать _mm_xor_pd (). Только для целей тестирования я ввел одно и то же значение в оба вектора следующим образом:
__m128d shift04 = _mm_set1_pd(16);
__m128d v1 = _mm_set1_pd(0x33F4A032);
__m128d k0 = _mm_set1_pd(0x6A6BA9EF);
__m128d j = _mm_add_pd(_mm_mul_pd(v1,shift04),k0); // j = (v1 << 4) + k0
__m128d k = _mm_add_pd(v1,sum); // k = v1 + sum
__m128d l = _mm_xor_pd(j,k); // l = j ^ k
Я понимаю, что приведенный выше код ужасен, но это только для базового c тестирования, поэтому, пожалуйста, будьте терпеливы со мной. Значение l[0]
и l[1]
равно 0
?
j[0]
правильно равно 0xa9b5ad0f
k[0]
правильно равно 0xd22c19eb
l[0]
должно равняться 0x7b99b4e4
, но приведенный выше код дает 0x0000000
.
В настоящее время я предполагаю, что это потому, что вы не можете нормально XOR с плавающей запятой, но функция ясно подсказывает, что она делает. Я не прав?
Ubuntu 19.1, G ++ версии 9.2.1, Radeon VII и Intel I7 2600k.