为什么我使用 eztrace 拍摄的运行时图像不显示线程空闲?

Why do my runtime images taken with eztrace not show the idleness of threads?

我正在做一项大学作业,将 C 代码与 OpenMP 并行化,然后使用 eztrace 获取运行时图像,在 vite 上转换和显示。

但它没有显示线程的空闲时间。
由于使用了静态子句

,我的代码显然有空闲
int prime_v2(int n)
{
  int i;
  int j;
  int prime;
  int total = 0;

  #pragma omp parallel for schedule(static) private(j,prime) shared(total)
  for (i = 2; i <= n; i++)
  {
    prime = 1;
    for (j = 2; j < i; j++)
    {
      if (i % j == 0)
      {
        prime = 0;
        break;
      }
    }
    #pragma omp atomic
    total = total + prime;
  }
  return total;
}

可以看出,随着i的增加,内循环迭代的总数增加,需要更多的时间。

通过静态划分(例如 4 个线程),每个线程获得 'organized' 迭代范围:

也就是说,线程 3 捕获了需要更多时间的迭代。但是这种闲散并没有表现在邀请中。为什么?

以下是我如何执行、转换和展示邀请的:

eztrace -t omp ./programa
eztrace_convert -t PAJE /tmp/rafael_eztrace_log_rank_1
vite eztrace_output.trace

您需要使用 eztrace_cc 编译您的应用程序:而不是使用

编译它
$ gcc -o programa programa.c -fopenmp

使用

$ eztrace_cc gcc -o programa programa.c -fopenmp

一个简单的方法是修改您的 makefile 并设置

CC=eztrace_cc gcc

大家可以看看EZTrace网页上的OpenMP教程: http://eztrace.gforge.inria.fr/tutorials/tutorial_openmp/

我的问题是 debian 存储库的 eztrace 版本

我下载了一个旧版本并且运行良好。 (一些带有二进制 eztrace.old)