logo

在一台机器编译,在另一台运行启动报错Illegal instruction gdb调试发现问题是以下的指令 cpp代码:mask |= (1 << *it); 看下汇编代码里有shlx %eax 最终发现是bmi2指令集问题,CPU E5-2699 v3支持,CPU E7-4809 v2不支持。

解决办法: 1.在相同的cpu下编译运行 2.如果需要的话,添加编译参数-march=cpu-type 或者禁用一些扩展指令集, CXXFLAGS 加上-mno-bmi -mno-bmi2 等

相关参考:

model name : Intel® Xeon® CPU E5-2699 v3 @ 2.30GHz flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid

model name : Intel® Xeon® CPU E7-4809 v2 @ 1.90GHz flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm xsaveopt fsgsbase smep erms

model name : Intel® Xeon® CPU E5-2690 0 @ 2.90GHz flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 x2apic popcnt aes xsave avx lahf_lm arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid

E5-2699 v3(Haswell)比E7-4809 v2 (IvyBridge)多以下指令集 fma movbe tsc_adjust bmi1 avx2 bmi2 invpcid

ivybridge Intel Ivy Bridge CPU with 64-bit extensions, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AES, PCLMUL, FSGSBASE, RDRND and F16C instruction set support. haswell Intel Haswell CPU with 64-bit extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 and F16C instruction set support. 参考: https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/x86-Options.html#x86-Options

1 回复
jintaiyu520
#1 jintaiyu520 • 2015-08-12 18:21

ccj 你好,这种问题有碰到过吗? http://duoyun.org/topic/55caba31c3f8a8336f3bf71b

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。