主流编译器支持 OMPT 吗?

use*_*605 5 openmp clang libgomp gcc11

OpenMP 规范从 5.0 版开始定义了OMPT接口,以允许外部工具查询 openmp 运行时。

我想尝试一下,但我真的很困惑主流编译器实际上如何支持这一点。

  • GCC-11 声称扩展了对 openmp 5.0 的支持,但关于 OMPT,我找不到相应的ompt.h头文件(在我的例子中,Ubuntu 包libgcc-11-dev提供了omp.h)。

  • clang-12 确实提供了ompt.h(package ),但是示例程序libomp-12-dev的编译失败,第一个错误是,并且实际上在.unknown type name 'ompt_invoker_t'ompt.h

我不清楚目前的支持状况。我找不到 GCC 的准确状态,而 clang 提供了此信息https://clang.llvm.org/docs/OpenMPSupport.html,从中我无法弄清楚大部分完成的背后是什么。

谁能帮我找到最新信息或任何有关此的提示?

Joa*_*him 2

上面链接的 OMPT 示例指的是 OMPT 的早期阶段 (~OpenMP TR6)。在 OpenMP 5.0 最终版本之前,界面中的一些细节发生了变化。我目前有一名学生正在研究 OMPT 示例的更新。

作为参考 OMPT 工具,我始终建议查看:

https://github.com/llvm/llvm-project/blob/main/openmp/runtime/test/ompt/callback.h

该工具将始终与 OMPT 的 LLVM 实现同步,因为该工具用于 CI 测试。OMPT 头文件已重命名为 omp-tools.h(请参阅 OpenMP 规范)。只是为了方便而保留文件。我想我们应该在此文件中添加弃用警告,而不是将副本保留在 LLVM 中。

关于编译器支持:LLVM 和 Intel 共享他们的 OMPT 支持。所有其他基于 LLVM 的编译器也可能共享 OMPT 支持。

对于 GNU 编译器,可以使用 -lomp 链接代码,并且还可以从 LLVM 中的 OMPT 支持中受益。使用 ldd 检查 libomp 和 libgomp 是否链接到应用程序。

“大部分完成”意味着除了设备构造和设备例程的 OMPT 之外的所有内容都被视为已实现。如果您在实现中发现一些问题,请针对 LLVM/OpenMP/runtime 提交错误。

  • https://git.rwth-aachen.de/OpenMPTools/OMPT-Examples 上的示例和幻灯片现已更新,至少 1-4 个应该可以与最新的 LLVM 版本配合使用。 (2认同)