首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVX本质铸造

AVX本质铸造
EN

Stack Overflow用户
提问于 2018-04-30 22:49:45
回答 1查看 494关注 0票数 4

有两种使用AVX2进行铸造的方法,或者:

代码语言:javascript
复制
__m256i b = ...set register...
auto c = (__m256d)b; // version 1
auto d = _mm256_castsi256_pd(b); // version 2

我认为这两种方法都会产生相同的结果。英特尔的官方手册说,版本2的运行时延迟是零的。我可以在零延迟假设的情况下使用版本1吗?此外,我是否可以假设从任何类型转换到任何版本1的寄存器类型都是零延迟。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-10 11:28:07

至少在gcc案中,“版本1”是如何实现“版本2”的:

代码语言:javascript
复制
extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_castsi256_pd (__m256i __A)
{
  return (__m256d) __A;
}

释放/gcc/config/i 386/avxinin.h#L 1440

Clang本质上是相同的:60/lib/Header/avxinin.h#L 4449

我没有寻找其他编译器,但我也不认为会有任何魔法发生。

不过,为了可移植性和可读性,我建议使用_mm256_castsi256_pd,或者如果编写得太多,请将其封装到您自己的(内联)函数中。C风格的强制转换在源代码中相对较难找到,如果您需要重构它们的话。

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

https://stackoverflow.com/questions/50109218

复制
相关文章

相似问题

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