首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SSE2内部函数存储或提取标量整数结果的更好方法

使用SSE2内部函数存储或提取标量整数结果的更好方法
EN

Stack Overflow用户
提问于 2021-01-14 01:22:43
回答 1查看 56关注 0票数 1

我想知道在使用SSE2时,加载和存储的效率是如何变化的。

在本例中,我希望将pclmulqdq指令(进位较少的乘法,对于多项式算术很有用)与普通的C函数进行比较,因此我需要与标准函数相同的“调用约定”。

A和b是16个有效位,结果将具有32个有效位

代码语言:javascript
复制
#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];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-14 01:39:11

使用_mm_cvtsi128_si32可以轻松地从向量的最低部分提取32位整数

代码语言:javascript
复制
return _mm_cvtsi128_si32(r);

将32位整数加载到向量的最低部分可以通过“相反”操作_mm_cvtsi32_si128来完成

代码语言:javascript
复制
__m128i xa = _mm_cvtsi32_si128(a);

使用_mm_loadu_si128( (__m128i*) a)不能将整数a加载到向量中,这会将a转换为指针并取消对其的引用(读取128位向量),但a只是一个整数值,并不指向任何有用的地方,除非可能是偶然的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65706785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档