首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是不是用错了_mm_srl_epi32?

我是不是用错了_mm_srl_epi32?
EN

Stack Overflow用户
提问于 2013-02-06 22:27:29
回答 1查看 376关注 0票数 1

在这个小代码示例中:

代码语言:javascript
复制
__m128i twos = _mm_set_epi32(2,3,1,2);
__m128i foo = _mm_set_epi32(128,128,128,128);
__m128i shifted = _mm_srl_epi32(foo,twos);

"shifted“充满了零,而我希望它包含四个32位整数,分别为32、16、64和32。我是不是使用了错误的内在机制?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-06 23:16:56

是的,您没有正确使用它。_mm_srl_epi32()的第二个参数指定了要将第一个参数移位的位数,但它并不是您所期望的矢量化参数,它允许您将每个32位整数移位不同的位数。相反,128位参数被截断为64位,结果计数用于确定要移位的位数;对第一个参数中的所有4个整数使用相同的移位量。在您的例子中,较低的64位是0x0000000100000010,它的计算结果是一个非常大的正数。这会导致foo的所有元素都被刷新为零,因为所有的位都被移出。

要找到每条指令的所有小细节,一个很好的地方是英特尔的AVX Programmer's Reference。尽管标题可能有些用词不当,但本文档包含英特尔C++编译器(通常也可在gcc及其它版本中使用)中提供的所有SSE/SSE2/.../AVX/AVX2指令及其内部功能的说明。在文档中搜索_mm_srl_epi32可以清楚地解释该指令到底做了什么。

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

https://stackoverflow.com/questions/14731442

复制
相关文章

相似问题

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