非法指令。 0x00007ffff3712210 in nsync::nsync_mu_init(nsync::nsync_mu_s_*) 加载时 libtensorflow_cc.so

Illegal instruction. 0x00007ffff3712210 in nsync::nsync_mu_init(nsync::nsync_mu_s_*) while loading libtensorflow_cc.so

我的应用程序的一部分使用 tensorflow 加载模型。应用程序代码使用 tensorflow2.3 使用 devtoolset-7 编译。 在尝试 运行 我的应用程序二进制文件时,它在使用堆栈跟踪

加载 libtensorflow_cc.so 时崩溃
Illegal instruction.
0x00007ffff3712210 in nsync::nsync_mu_init(nsync::nsync_mu_s_*)


12:56
Program received signal SIGILL, Illegal instruction.
0x00007ffff3712210 in nsync::nsync_mu_init(nsync::nsync_mu_s_*) ()
   from /lib64/libtensorflow_cc.so.2
Missing separate debuginfos, use: debuginfo-install controller-1.0.0-20201014_19_13_07.x86_64
(gdb) bt
#0  0x00007ffff3712210 in nsync::nsync_mu_init(nsync::nsync_mu_s_*) ()
   from /lib64/libtensorflow_cc.so.2
#1  0x00007fffea72df4e in tensorflow::monitoring::Gauge<bool, 0>::Gauge(tensorflow::monitoring::Met
ricDef<(tensorflow::monitoring::MetricKind)0, bool, 0> const&) ()
   from /lib64/libtensorflow_cc.so.2
#2  0x00007fffea72e1f4 in tensorflow::monitoring::Gauge<bool, 0>* tensorflow::monitoring::Gauge<boo
l, 0>::New<char const (&) [39], char const (&) [38]>(char const (&) [39], char const (&) [38]) ()
   from /lib64/libtensorflow_cc.so.2
#3  0x00007fffea3d0f7d in _GLOBAL__sub_I_context.cc () from /lib64/libtensorflow_cc.so.2
#4  0x00007ffff7dea9b3 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2
#5  0x00007ffff7ddc17a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
#6  0x0000000000000002 in ?? ()

来自 /proc/cpuinfo 的标志是

标志:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht 系统调用 nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc eagerfpu pni pclmulqdq ssse3 f ma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpc id_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveop t arat md_clear spec_ctrl intel_stibp arch_capabilities

谁能帮我理解这个问题?

张量流在 x86 平台上大量使用 AVX 指令。如果二进制文件是用 zmm 注册的 AVX512 编译的,则二进制文件可以 运行 在支持的硬件上。因此,根据要求通过

检查指令集的评论
  1. objdump -M intel -S /usr/lib64/libtensorflow.so.2 | grep -i zmm
  2. print $pc 在 GDB 中隔离指令。

注意:根据从 Broadwell(无 AVX512)更改为 Skylake(AVX512)的更新已解决问题。