其他分享
首页 > 其他分享> > c – m256_f32的GCC等效值

c – m256_f32的GCC等效值

作者:互联网

我有这样的AVX C代码,在Visual Studio 2010下编译得很好:

#include <immintrin.h>
#include <iostream>

int main() {
    float data[] = {0, 1, 2, 3, 4, 5, 6, 7};
    __m256 ymm0 = _mm256_loadu_ps(data);
    // ..
    float r0 = ymm0.m256_f32[0];
    float r4 = ymm0.m256_f32[4];
    std::cout << r0 << " " << r4 << std::endl;
}

但是,GCC会出现以下错误:

foo.cpp:8:18: error: request for member ‘m256_f32’ in ‘ymm0’, which is of non-class type ‘__m256 {aka __vector(8) float}’
foo.cpp:9:18: error: request for member ‘m256_f32’ in ‘ymm0’, which is of non-class type ‘__m256 {aka __vector(8) float}’

我做了一些研究,似乎ymm0.m256_f32是Microsoft特定的指令,用于从长AVX寄存器中提取单个浮点数.但是我可以用gcc / linux做同样的事情呢?

解决方法:

GCC可以用C语言索引向量,但不能用C语言索引.您可以考虑将代码的一小部分重写为C.

另一种选择是明确使用shuffle,extract和conversion内在函数 – _mm256_shuffle_pd,_mm256_extractf128_pd,_mm_cvtsd_f64.

标签:c,gcc,avx
来源: https://codeday.me/bug/20190901/1783841.html