2

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

有没有办法得到它?

4

2 回答 2

5

我在 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);
}
于 2013-12-15T13:56:39.127 回答
0

猜猜没有这样的内在命名_mm256_loadu_m128i。我能找到的_mm256_load只有_mm256_load_pd, _mm256_load_ps, _mm256_load_si256,_mm256_loadu_pd和. 这些都带有 AVX 并且 gcc 标头是._mm256_loadu_ps_mm256_loadu_si256immintrin.h

于 2013-12-17T13:08:36.170 回答