我有一个C/C++程序,它具有来自我的Linux发行版的各种依赖项。
一些依赖项与GCC的OpenMP库libgomp.so
链接。
我的程序本身的代码是用clang的-fopenmp
编译的,并与LLVM的OpenMP库libomp.so
链接。
这意味着程序的ldd -v
将libgomp.so
和libomp.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。)
1条答案
按热度按时间llmtgqce1#
答案是,在一个进程中有多个OpenMP运行时是**不安全的。**详细信息比这里要长,所以我在CpuFun上写了一篇博客文章。请参阅“Is Mixing OpenMP® Runtimes Safe?“