使用动态计划计算 openmp for 循环中的迭代次数

标签 c parallel-processing openmp

我正在使用具有动态负载平衡的 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/

相关文章:

c# - 为什么C#中线程数大于1

c++ - 不能对 long double 数据类型进行 openMP 矢量化操作吗?

parallel-processing - 混合使用单线程和多线程配方运行 make

c - 字符串中单词的频率

c - 对于文件中每个可能的两个唯一单词对,打印出该对出现的次数

c - 如何求 1,2,..... 直到 n(输入编号)的阶乘总和

c++ - 为什么使用 openMP 的 VC++ 矩阵时间 vector 比异步更快?

c - Windows 中的 C 头文件在哪里?

java - 使用 gradle 并行运行 JUnit4 测试

c++ - 如何解决多线程代码中for循环的依赖关系?