为什么我使用 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' 迭代范围:
- 线程 0: 0 ~ n/4 - 1
- 线程 1: n/4 ~ n/2 - 1
- 线程 2: n/2 ~ 3n/4 -1
- 线程 3: 3n/4 ~ n
也就是说,线程 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)
我正在做一项大学作业,将 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' 迭代范围:
- 线程 0: 0 ~ n/4 - 1
- 线程 1: n/4 ~ n/2 - 1
- 线程 2: n/2 ~ 3n/4 -1
- 线程 3: 3n/4 ~ n
也就是说,线程 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)