版本5.0中的OpenMP规范定义了OMPT接口,以允许外部工具查询OpenMP运行时。
我想尝试一下,但我真的很困惑主流编译器是如何支持这一点的。
-
GCC-11声称对openmp 5.0支持有扩展支持,但关于OMPT,我找不到相应的
ompt.h
头文件(在我的情况下,Ubuntu包libgcc-11-dev
提供了omp.h
(。 -
clang-12确实提供了
ompt.h
(包libomp-12-dev
(,但是示例程序的编译失败,第一个错误是unknown type name 'ompt_invoker_t'
,实际上在ompt.h
中找不到这个结构。
我不清楚目前的支持状态。我找不到GCC的确切状态,而clang提供了这些信息https://clang.llvm.org/docs/OpenMPSupport.html我无法从中找出背后的原因,大部分都是完成的。
有人能帮我找到最新的信息或任何提示吗?
上面链接的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编译器来说,它可以将代码与-lop链接起来,还可以从LLVM中的OMPT支持中获益。请使用ldd检查libomp是否链接到应用程序中,并且没有链接到libgomp。
"大部分完成";意味着除了用于设备构造和设备例程的OMPT之外的所有内容都被认为是实现的。如果您在实现中发现一些问题,请针对LLVM/OpenMP/运行时提交一个错误。