gpt4 book ai didi

c++11 - 使用 AVX 内在函数进行转换

转载 作者:行者123 更新时间:2023-12-01 08:35:01 36 4
gpt4 key购买 nike

有两种使用 AVX2 进行转换的方法:

__m256i b = ...set register...
auto c = (__m256d)b; // version 1
auto d = _mm256_castsi256_pd(b); // version 2

我认为这两者都应该给出相同的结果。 official manual英特尔表示,版本 2 的运行时延迟为零。我可以使用版本 1 以及零延迟假设吗?此外,我是否可以假设从任何到任何具有版本 1 的寄存器类型的转换都是零延迟。

最佳答案

至少在 gcc 中,“版本 1”正是“版本 2”的实现方式:

extern __inline __m256d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm256_castsi256_pd (__m256i __A)
{
return (__m256d) __A;
}

https://github.com/gcc-mirror/gcc/blob/gcc-8_1_0-release/gcc/config/i386/avxintrin.h#L1440

Clang 本质上是一样的:
https://github.com/llvm-mirror/clang/blob/release_60/lib/Headers/avxintrin.h#L4449

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

尽管如此,为了便携性和可读性,我建议使用 _mm256_castsi256_pd ,或者如果写的太多,请将其封装到您自己的(内联)函数中。如果您需要重构它们,在源代码中很难找到 C 风格的强制转换。

关于c++11 - 使用 AVX 内在函数进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50109218/

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