使用 OMPT 跟踪基于任务的应用程序

问题描述 投票:0回答:1

我正在尝试使用 OMPT 来跟踪基于任务的应用程序。

这些是我用来编译 LLVM OpenMP 运行时的编译选项:

cmake ../openmp -G "Unix Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release  -DOPENMP_ENABLE_LIBOMPTARGET=OFF -DLIBOMP_OMPT_OPTIONAL=ON

我正在使用 Clang 13 和官方 github 存储库中的最新 LLVM OpenMP 运行时。

我的应用程序由多个使用

#pragma omp task depend (inout:some_vector[0:some_limit])

的嵌套任务组成

我注册了几个 OMPT 回调,包括

ompt_callback_task_create
ompt_callback_dependences
ompt_callback_task_schedule
,它们运行正常,并给了我想要的反馈。

但是,某些回调未运行:

ompt_callback_task_dependence
(虽然任务之间存在依赖关系...)和
ompt_callback_work
,即使它们注册到
ompt_set_callback
返回与
ompt_set_always
对应的代码5。

我应该怎么做才能让这些回调起作用?我在这里错过了什么吗?我也尝试使用不同的运行时/编译器,但没有任何结果。

任何帮助将不胜感激。

task openmp trace
1个回答
1
投票

如果前驱在后继创建之前完成,则可能不会引发

ompt_callback_task_dependence
事件。
看一下下面具有 >1 个线程的最小示例。

生产者线程创建“A”并休眠 1 秒。
同时,另一个线程消耗“A”并完成它。 然后,1秒。随后,生产者线程醒来并创建“B”。
既然‘A’完成了,就没有必要依赖它来制作‘B’了。

# pragma omp task depend(out: x) // A
{}

sleep(1);

# pragma omp task depend(in: x) // B
{}
© www.soinside.com 2019 - 2024. All rights reserved.