Multithreading OpenMP探查器(ompP)在使用运行时例程-omp\u set\u lock(&;lock)声明锁时失败

Multithreading OpenMP探查器(ompP)在使用运行时例程-omp\u set\u lock(&;lock)声明锁时失败,multithreading,profiling,openmp,Multithreading,Profiling,Openmp,我正在尝试测量openMP程序中的锁争用。为此,我一直在使用OpenMP Profiler(ompP)。对于使用编译器指令表示所有并行化的代码,ompP工作得非常好。但是,当代码使用运行时例程omp_set_lock()时,探查器似乎失败了 我收到的错误消息如下: *** 12 *** 12 driverForGraphClustering: ompp_regstat.c:870: void regstat_on_enter(regstat_t*, ompp_reg_type_t, unsig

我正在尝试测量openMP程序中的锁争用。为此,我一直在使用OpenMP Profiler(ompP)。对于使用编译器指令表示所有并行化的代码,ompP工作得非常好。但是,当代码使用运行时例程omp_set_lock()时,探查器似乎失败了

我收到的错误消息如下:

*** 12 
*** 12 driverForGraphClustering: ompp_regstat.c:870: void regstat_on_enter(regstat_t*, ompp_reg_type_t, unsigned int, int): Assertion `0' failed.
*** 12 Aborted (core dumped)
在使用gdb运行程序时,我发现错误是在omp_set_lock()命令之后触发的。此外,如果我设置环境变量

export OMPP_DISABLE_LOCKS=yes
那我就不会出错了

我还检查了第870行的ompp_regstat.c文件。该代码本质上是一个switch语句,如果并行化不是通过编译器指令进行的,则该语句设计为失败

这让我想问两个问题:

  • 如何检测运行时例程定义的锁的锁争用?ompP似乎无法做到这一点,或者我错过了一个明显的步骤
  • ompP生成的报告中同步开销的含义是什么?这是否包括通过pragmas隐式定义的锁的争用