4

5.0 版的 OpenMP 规范定义了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从中我无法弄清楚大部分完成的背后是什么。

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

4

1 回答 1

1

上面链接的 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 提交错误。

于 2021-06-11T11:58:08.480 回答