C: x86 Intel Intrinsics 使用 _mm_log2_ps() -> 错误:不兼容类型“int”?

tmu*_*sch 5 c++ sse compiler-errors intrinsics sse2

我正在尝试将 log2 应用于 __m128 变量。像这样:

#include <immintrin.h>
int main (void) {
    __m128 two_v = {2.0, 2.0, 2.0, 2.0};
    __m128 log2_v = _mm_log2_ps(two_v); // log_2 := log(2)

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

尝试编译它会返回此错误:

error: initializing '__m128' with an expression of
      incompatible type 'int'
                __m128 log2_v = _mm_log2_ps(two_v); // log_2 := log(2)
                       ^        ~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

kik*_*yte 2

您查看的 immintrin.h 和用于编译的 immintrin.h 是不同的。您可能正在研究特定于 Intel 的标头(例如 /opt/intel/include/immintrin.h),而您的编译器使用默认的 immintrin.h

正如正确所说,extern __m128 _mm_log2_ps(__m128 v1)SVML 例程,所以我看到的第一个解决方案是使用Intel Compiler。对于非商业开发,它对 Linux 是免费的。

虽然您可以在使用不同编译器进行编译期间将自定义 immintrin.h 文件的包含路径指定为第一个参数,但我认为您会遇到太多错误 - 只是因为这个标头是英特尔特定的。