我正在尝试将 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;
}

尝试编译它会返回此错误:
error: initializing '__m128' with an expression of
      incompatible type 'int'
                __m128 log2_v = _mm_log2_ps(two_v); // log_2 := log(2)
                       ^        ~~~~~~~~~~~~~~~~~~

我该如何解决?

最佳答案

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

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

尽管您可以在使用不同编译器进行编译期间将自定义 immintrin.h 文件的包含路径指定为第一个参数,但我认为您会收到太多错误 - 仅仅因为此 header 是 Intel 特定的。

关于c++ - : x86 Intel Intrinsics usage of _mm_log2_ps() -> error: incompatible type 'int' ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20123750/

10-11 01:34