CPU指令集avx程序无法运行,运行崩溃
清泛原创
原因就是CPU不支持相应的指令集导致的。
Linux上使用 lscpu 命令查看CPU指令集,看是否支持。
比如 _mm256_cmpeq_epi64 这个函数需要avx2指令集,但是CPU不支持,就导致程序崩溃起不来。
Intel指令集官网查找:https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html
因此,在写程序时需要区分开使用avx等指令优化还是普通版本的函数,不过这里不能使用宏,因为cpu指令即使不支持的情况下,__AVX__, __AVX2__, __AVX512F__ 等编译宏往往也被定义了,因此不能使用宏控制。应使用cpuid来判断是否支持,然后程序启动后动态指定函数指针到不同的函数实现。
Linux上使用 lscpu 命令查看CPU指令集,看是否支持。
比如 _mm256_cmpeq_epi64 这个函数需要avx2指令集,但是CPU不支持,就导致程序崩溃起不来。
Intel指令集官网查找:https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html
因此,在写程序时需要区分开使用avx等指令优化还是普通版本的函数,不过这里不能使用宏,因为cpu指令即使不支持的情况下,__AVX__, __AVX2__, __AVX512F__ 等编译宏往往也被定义了,因此不能使用宏控制。应使用cpuid来判断是否支持,然后程序启动后动态指定函数指针到不同的函数实现。
上一篇:Intel SMID指令集编译错误: inlining failed in call to always_inline 'xxx': target specific option mismatch xxx
下一篇:C++ Lock-free Hazard Pointer(冒险指针)