首页
学习
活动
专区
圈层
工具
发布

SSE指令
EN

Stack Overflow用户
提问于 2018-12-06 17:07:58
回答 1查看 186关注 0票数 0

我有个关于SSE教学的问题。

我希望这是提出这样一个问题的正确地方,如果没有,请告诉我,我将删除这个问题。

我的目标是使用SSE指令并行执行3个字符的计算。

我有一个typedef结构,它具有它被打包的属性。

代码语言:javascript
复制
typedef struct
{
        unsigned char x;
        unsigned char y;
        unsigned char z;
} __attribute__((packed)) Number;

对于每一个字符,我必须经过一定的计算。

例如:

代码语言:javascript
复制
((Number[0].x * 20)  / 256);

我必须对每一个字符做一个小的计算,然后把它们加在一起。

由于我必须在汇编中编写代码,我已经做了一些研究,并无意中发现了这个指令:

代码语言:javascript
复制
__m128i _mm_add_epi8 (__m128i a, __m128i b)

就我而言,这应该将两个值(每个值的大小为8个字节)加在一起,并保存结果。

至少我是这么理解的:从这个链接

但是,由于我们只将两个值相加在一起,这就违背了同时执行多个指令的整个目的。

任何帮助都是非常有意义的。亲切的问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-06 18:09:10

如果您能够提供更多关于实际如何使用它的信息,也许可以更好地优化它,但基于您所写的内容,我想您可能需要类似于_mm_srli_epi32(_mm_mullo_epi32(_mm_set_epi32(n.x, n.y, n.z, 0), _mm_set1_epi32(20)), 8)的东西。它需要SSE4.1,但是如果您想要对SSE 2有效的东西,请参阅4个32位整数的SSE乘法来替换_mm_mullo_epi32

您没有指定要对结果做什么,但是可以使用类似于((int*) &r_sse)[i]的方法来访问结果,其中i为z为1,y为2,x为1。

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

https://stackoverflow.com/questions/53656447

复制
相关文章

相似问题

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