_mm256_loadu2_m128i内在g ++下不可用?

时间:2013-12-15 06:26:03

标签: g++ intrinsics avx2

我正在尝试使用AVX2内在_mm256_loadu2_m128i,但似乎g ++ 4.8.2没有它。

有没有办法得到它?

2 个答案:

答案 0 :(得分:3)

我在GCC和Clang遇到同样的问题。但是它在ICC编译。您可以在http://gcc.godbolt.org/

使用GCC,Clang和ICC对此进行测试

注意,这是AVX内在而非AVX2。大多数256位整数加载和存储内在函数只需要AVX。 AVX2提供了一些收集和掩码加载,但其他一切只需要AVX。

由于Haswell可以一次加载两个128位值,因此您可以使用_mm256_loadu2_m128i获得与_mm256_inserti128_si256相同的效果。像这样的东西

#include <immintrin.h>

int main() {
    int low[4];
    int high[4];
    _mm256_inserti128_si256(_mm256_castsi128_si256(
        _mm_loadu_si128((__m128i*)low)),
        _mm_loadu_si128((__m128i*)high),1);
}

答案 1 :(得分:0)

猜猜没有这样的内在命名_mm256_loadu_m128i。我在_mm256_load找到的只有_mm256_load_pd_mm256_load_ps_mm256_load_si256_mm256_loadu_pd_mm256_loadu_ps_mm256_loadu_si256。 这些都带有AVX,gcc标题为immintrin.h