问题描述
我的应用程序的一部分使用tensorflow加载模型。使用devtoolset-7使用tensorflow2.3编译应用程序代码。 尝试运行我的应用程序二进制文件时,使用堆栈跟踪加载libtensorflow_cc.so时会崩溃
template<class T,class... Args> struct child: parent_one<Args...> {};
template<class T,class A,class B> struct child<T,A,B>: parent_two<A,B> {};
template<class A,class B> struct child<one_t,B>: parent_one<A,B> {};
/ proc / cpuinfo中的标志是
flags:fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm const_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 塔拉特md_clear spec_ctrl intel_stibp arch_capabilities
有人可以帮助我了解其中的问题吗?
解决方法
tensor Flow在x86平台上大量使用AVX指令。如果二进制文件是使用zmm
寄存器的AVX512编译的,则二进制文件可以在支持的硬件上运行。因此,根据要求通过注释检查指令集的注释,
-
objdump -M intel -S /usr/lib64/libtensorflow.so.2 | grep -i zmm
和 -
print $pc
在GDB中隔离指令。
注意:根据从Broadwell(无AVX512)到Skylake(AVX512)的更新,此问题已解决。