我正在使用具有动态负载平衡的 openmp 运行 for 循环。我想打印每个线程在程序结束时处理了多少任务/迭代。 循环看起来像这样:
chunk=1;
#pragma omp parallel for schedule(dynamic,chunk) private(i)
for(i=0;i<n;i++){
//loop code
}
最佳答案
再简单不过了。只需将组合的 parallel for
指令拆分为两个独立的结构,这样您就可以在循环前后添加额外的代码:
#pragma omp parallel
{
int iters = 0;
#pragma omp for schedule(dynamic,chunk)
for (int i = 0; i < n; i++) {
...
iters++;
}
#pragma omp critical
printf("Thread %d did %d iterations\n", omp_get_thread_num(), iters);
}
关于使用动态计划计算 openmp for 循环中的迭代次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41598151/