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