我想知道在使用SSE2时,加载和存储的效率是如何变化的。
在本例中,我希望将pclmulqdq指令(进位较少的乘法,对于多项式算术很有用)与普通的C函数进行比较,因此我需要与标准函数相同的“调用约定”。
A和b是16个有效位,结果将具有32个有效位
#include <wmmintrin.h>
int GFpoly_mul_i(int a, int b) {
__m128i xa = _mm_loadu_si128( (__m128i*) a);
__m128i xb = _mm_loadu_si128((__m128i*) b);
__m128i r = _mm_clmulepi64_si128(xa, xb, 0);
_MM_ALIGN16 int result[4];
__m128i* ptr_result = (__m128i*)result;
_mm_store_si128(ptr_result, r);
return result[0];
}发布于 2021-01-14 01:39:11
使用_mm_cvtsi128_si32可以轻松地从向量的最低部分提取32位整数
return _mm_cvtsi128_si32(r);将32位整数加载到向量的最低部分可以通过“相反”操作_mm_cvtsi32_si128来完成
__m128i xa = _mm_cvtsi32_si128(a);使用_mm_loadu_si128( (__m128i*) a)不能将整数a加载到向量中,这会将a转换为指针并取消对其的引用(读取128位向量),但a只是一个整数值,并不指向任何有用的地方,除非可能是偶然的。
https://stackoverflow.com/questions/65706785
复制相似问题