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

问题描述 投票:0回答:1

我有一个 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#c2https://reviews.llvm.org/D2841)).

(这个问题类似于Can/should libiomp5 and libgomp mix?这是关于混合Intel+GCC OpenMP,但这没有提到clang+GCC。)

c++ c clang openmp
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.