我有一个 C/C++ 程序,其中包含来自我的 Linux 发行版的各种依赖项。
一些依赖项与 GCC 的 OpenMP 库链接
libgomp.so
。
我的程序本身的代码是用 clang 的
-fopenmp
编译的,并与 LLVM 的 OpenMP 库 libomp.so
链接。
这意味着程序的
ldd -v
将 libgomp.so
和 libomp.so
显示为将在启动时加载的依赖项。
虽然我的程序似乎启动正确,但我担心在这种情况下会发生什么,链接了 2 个 OpenMP 运行时库:
libgomp
的依赖库中的 OpenMP 并行性吗?谢谢!
(请注意,目前无法告诉 clang 仅使用 GCC 的
libgomp
;虽然有一个标志 -fopenmp=libgomp
,但它只是不执行任何操作,禁用 OpenMP,请参阅 https://bugs.freebsd.org/bugzilla /show_bug.cgi?id=227438#c2 和 https://reviews.llvm.org/D2841)).
(这个问题类似于Can/should libiomp5 and libgomp mix?这是关于混合Intel+GCC OpenMP,但这没有提到clang+GCC。)
答案是,在一个进程中拥有多个 OpenMP 运行时是不安全的。 详细信息比这里所能容纳的要长,所以我在 CpuFun 上写了一篇博客文章。请参阅“混合 OpenMP® 运行时安全吗?”