gpt4 book ai didi

openmp - libiomp5 和 libgomp 可以/应该混合吗?

转载 作者:行者123 更新时间:2023-12-02 16:08:40 24 4
gpt4 key购买 nike

我们正在编译一个使用 OpenMP 的应用程序。我们使用的是 gcc 4.4,带有 -fopenmp。该应用程序还使用 IPP,其中包括自己的 OpenMP 版本 (libiomp5)。 (注意:我们通过调用 ippSetNumThread(1) 来禁用 IPP 的内部线程。根据 Intel 的文档,这应该避免与其他线程库发生冲突。但是,与 IPP 的链接仍然链接在 libiomp5.so 中。)

由于 libiomp5.so 已经链接,我们没有与 libgomp.so(gcc 版本的 OpenMP)链接。很长一段时间以来,这种方法一直有效,但在看似无关紧要的更改之后,我们开始在我们支持的四个平台之一上看到与 OpenMP 相关的非常奇怪的崩溃(其他三个平台仍然工作正常)。

如果我链接 libgomp.so 和 libiomp5.so,就可以消除崩溃。

我对此有几个问题:

  1. 与这两个库的链接安全吗?看起来它们都定义了相同的符号。
  2. 有没有办法知道 OpenMP libiomp5.so 支持哪个版本?对于 gcc 4.4,libgomp.so 应该位于 OpenMP v3.0。我在 Intel 的文档中找不到有关 libiomp5.so 的 OpenMP 版本的任何信息。

最佳答案

由于几天没有人回答,我将仅报告我独立发现的内容:

与这两个库的链接安全吗?不。这是我发现的关于该主题的最有用的页面: http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011/compiler_c/optaps/common/optaps_par_openmp_multiple_compilers.htm

英特尔建议,如果您要将 IPP 的内部 OpenMP 线程与您自己的 OpenMP 线程混合,请链接到 libiomp5,而不是编译器的 OpenMP 库。当前版本的 libiomp5 提供了与 gcc 的 OpenMP 的“源兼容性和对象级互操作性”,但前提是您使用 gcc“4.42”(原文如此;我假设它们是指 4.4.2)或更高版本。

有办法知道 OpenMP libiomp5.so 支持哪个版本吗?是的。设置环境变量 KMP_VERSION=1,然后运行您的应用程序。您将得到 libiomp5 打印到控制台的一些调试输出。如果您使用的是 IPP v7 或更高版本,一行将类似于

Intel(R) OMP API version: 3.0 (200805)

如果您使用的是 IPP 6,它不会告诉您 API 版本,但会告诉您它的构建时间以及使用哪个版本的英特尔编译器。然后您可以检查编译器支持的 OpenMP 版本。 (11.0 是第一个支持 OpenMP v3.0 的英特尔编译器版本。)

关于openmp - libiomp5 和 libgomp 可以/应该混合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com