使用并行for循环(C++、OpenMP、Nsight Eclipse IDE)进入pragma指令



使用Nsight Eclipse Edition 10.2使用gdb 7.11.1调试纯C++代码。

该代码使用对OpenMP的pragma调用来派生for循环。以下是一个最小的工作示例,其中简单数组CCD_ 1填充有另一变量p:的值

#pragma omp parallel for schedule (static)
for(int p=pstart; p<pend; p++){
const unsigned i = id[p];
if(start <= i && i < end)
q[i - start] = p;
}

在调试模式下,我想使用step-In函数(通常F5(来跟踪数组q是如何用p填充的。然而,这会使完全跳过for循环,并在并行线程再次连接的地方恢复。

有没有办法强制将步进一个pragma指令/openMP循环?

有没有办法强制进入pragma指令/openMP循环?

这将取决于调试器,但也不完全清楚它的含义。由于许多线程执行并行循环,您是否希望它们中的每一个都停止,然后一起执行?您希望如何显示每个线程的不同状态?(每个将具有自己的pi(。如果线程控制流分叉,会发生什么?

有些调试器可以做到这一点(比如Linux上的TotalView(,但这并不是一件小事(而且TotalView需要花钱[这完全是公平合理的:-(](。

您可能需要做的是在循环中设置一个断点,然后处理被N个线程命中的情况。。。(这并不能回答你的确切问题,但确实可以让你看到循环中发生了什么,这可能是你真正需要做的!(

最新更新