【发布时间】:2010-12-28 19:35:36
【问题描述】:
我们正在编译一个使用 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 中链接,我可以让崩溃消失。
我对此有几个问题:
- 与这两个库链接是否安全?似乎它们都定义了相同的符号。
- 有没有办法知道 OpenMP libiomp5.so 支持哪个版本?对于 gcc 4.4,libgomp.so 应该是 OpenMP v3.0。我在英特尔的文档中找不到任何有关 OpenMP 版本 libiomp5.so 的信息。
【问题讨论】: