AVX2内部函数返回__m256,但是GCC给出了错误,分配给类型为__m256的变量

时间:2019-03-13 16:45:47

标签: gcc x86 simd intrinsics avx2

我正在对某些AVX和AVX2指令进行性能测试。尝试编译使用_mm256_cexp_ps内部函数的代码时,我遇到了一个奇怪的问题。这是我收到的错误。

vectorize.c:34:14: warning: implicit declaration of function '_mm256_cexp_ps' is invalid in C99 [-Wimplicit-function-declaration]
            arr01[i] = _mm256_cexp_ps(arr01[i]);
vectorize.c:34:12: error: assigning to '__m256' (vector of 8 'float' values) from incompatible type 'int'
            arr01[i] = _mm256_cexp_ps(arr01[i]);
                     ^ ~~~~~~~~~~~~~~~~~~~~~~~~

此函数/本征函数绝对应返回__m256类型的值。参见this documentation page 我正在使用GCC,当我运行gcc --version

时会给出以下响应
Configured with: --prefix=/Library/Developer/CommandLineTools/usr -- 
with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 10.0.0 (clang-1000.10.44.4)
Target: x86_64-apple-darwin17.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

导致此错误的代码如下:

__m256 * arr01 = (__m256 *)malloc(TOTAL * 8 * sizeof(float));
// Some irrelevant code left out.
for (int i = 0; i < TOTAL; ++i) {
    arr01[i] = _mm256_cexp_ps(arr01[i]);
}

我包括了x86intrin.h。我已经编译并成功运行了使用avx2指令的代码。问题似乎特别是与这种内在因素有关。我正在使用以下命令行来编译此代码。

gcc -mavx2 vectorize.c

据我所知,应该没有类型不兼容。我绝对不是C语言方面的专家。我可能在这里错过了一些东西。

很久以前,我在Visual Studio上遇到了一个与之相关的问题,事实证明Visual Studio实际上正在将我编写的汇编指令转换为其他指令。我倾向于相信GCC不会释放具有错误的内部定义的头文件。

0 个答案:

没有答案