当clang构建的程序同时链接libomp和libgomp时会发生什么?

mo49yndu  于 12个月前  发布在  Go
关注(0)|答案(1)|浏览(163)

我有一个C/C++程序,它具有来自我的Linux发行版的各种依赖项。
一些依赖项与GCC的OpenMP库libgomp.so链接。
我的程序本身的代码是用clang的-fopenmp编译的,并与LLVM的OpenMP库libomp.so链接。
这意味着程序的ldd -vlibgomp.solibomp.so显示为将在启动时加载的依赖项。
虽然我的程序似乎可以正确启动,但我担心在这种情况下会发生什么,其中链接了2个OpenMP运行时库:

  • 是否会导致不正确的结果?
  • 它是否会在使用libgomp的依赖库中禁用OpenMP并行性?
  • 还有别的事吗

谢谢你,谢谢
(Note目前不可能告诉clang只使用GCC的libgomp;虽然有一个标志-fopenmp=libgomp,但它只是什么也不做,禁用了OpenMP,请参阅https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=227438#c2和https://reviews.llvm.org/D2841))。
(This这个问题类似于Can/should libiomp5 and libgomp mix?,它是关于混合Intel+GCC OpenMP的,但它没有说明clang+GCC。)

llmtgqce

llmtgqce1#

答案是,在一个进程中有多个OpenMP运行时是**不安全的。**详细信息比这里要长,所以我在CpuFun上写了一篇博客文章。请参阅“Is Mixing OpenMP® Runtimes Safe?

相关问题