gpt4 book ai didi

c++ - 为什么某些英特尔的内在函数采用 const immediates,而另一些则采用非常量?

转载 作者:太空狗 更新时间:2023-10-29 20:36:28 25 4
gpt4 key购买 nike

Intel's intrinsic guide似乎在与直接值进行神秘的区分。他们将一些标记为常量,而另一些则不是常量。实际上,这两种类型都需要是编译时常量,否则编译器会报错。我只是想知道为什么要区分?我缺少什么?

这是英特尔所说的示例:

_mm_blend_epi16 (__m128i a, __m128i b, const int imm8)
_mm_srli_si128 (__m128i a, int imm8)

最佳答案

假设您认为 const 是一种改进,只是 Intel 的旧东西不如他们的新东西写得好。

请注意,blend_epi16 是 SSE4.1,而 srli_si128 是 SSE2。可能他们决定在为 SSE4.1 添加内在函数时强调参数需要是编译时常量这一点。

256 位版本的 AVX2 内在函数使用常量:__m256i _mm256_srli_si256 (__m256i a, const int imm)。这基本上证实了他们只是还没有想到 const,因为他们开始对同一指令使用 const

另请注意,他们对 psrldq instruction_mm_srli_si128 名称非常不满意他们为其引入了一个新名称:_mm_bsrli_si128 在新代码中应该是首选,以使其更清楚这是一个字节移位,而不是 128 位宽的移位。它与 _mm_srli_epi64 有很大不同。不幸的是,指令引用手册没有提到 bsrli 名称。


AVX512 加载/存储内在函数将使用 void* 而不是 __m128i*,这是另一个不错的变化。

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

关于c++ - 为什么某些英特尔的内在函数采用 const immediates,而另一些则采用非常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38365778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com