首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么英特尔的一些本质是直接的,而另一些则是非const?

为什么英特尔的一些本质是直接的,而另一些则是非const?
EN

Stack Overflow用户
提问于 2016-07-14 04:57:06
回答 1查看 696关注 0票数 3

英特尔的内在指南似乎正在与眼前的价值观做出神秘的区分。他们给一些人贴上“康斯特”的标签,有些人不叫“康斯特”。在实践中,这两种类型,无论是编译时间常数还是编译器都会抱怨。我只是想知道为什么会有区别?我漏掉了什么?

这里有一个英特尔所说的例子:

代码语言:javascript
复制
_mm_blend_epi16 (__m128i a, __m128i b, const int imm8)
_mm_srli_si128 (__m128i a, int imm8)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 05:15:50

假设你认为const是一种改进,那么英特尔的旧东西写得不如他们的新东西好。

注意,blend_epi16是SSE4.1,而srli_si128是SSE2。他们可能决定在为the 4.1添加本质元素时,加强论点需要是编译时常数的观点。

256位版本的AVX2内部使用const:__m256i _mm256_srli_si256 ( __m256i a, const int imm)。这基本上证实了他们只是还没有想到const,因为他们开始使用const进行相同的指令。

还要注意的是,他们对_mm_srli_si128名称对说明非常不满,因此他们为它引入了一个新的名称:在新代码中,_mm_bsrli_si128应该是首选的,以使它更清楚地表明它是字节移位,而不是128位宽的位移位。这与_mm_srli_epi64有很大的不同。不幸的是,指令参考手册没有提到bsrli名称。

AVX512加载/存储本质将使用void*而不是__m128i*,这是另一个很好的改变。

所以英特尔的做法基本上是不同的,因为旧的方式是次优的,而不是因为他们必须这样做。

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

https://stackoverflow.com/questions/38365778

复制
相关文章

相似问题

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