sách gpt4 ai đã đi

openmp - openmp 中的 Dependent 子句不尊重声明的依赖

In lại 作者:行者123 更新时间:2023-12-04 21:36:39 28 4
mua khóa gpt4 Nike

我正在尝试使用 openmp 任务来安排基本 jacobi2d 计算的平铺执行。在 jacobi2d 中,依赖于 A(i,j) 从

A(i, j)
A(i-1, j)
A(i+1, j)
A(i, j-1)
A(i, j+1)。

根据我对depend 子句的理解,我正确地声明了依赖关系,但是在执行代码时没有尊重它们。我复制了下面的简化代码。最初我的猜测是某些图块的越界范围可能导致了这个问题,所以我更正了这个问题,但问题仍然存在。(我没有复制更长的代码和更正的图块范围,因为那部分只是一堆 ifs +最大限度)

int n=8,tsteps=2,b=4; //n - size of matrix, tsteps - time iterations, b - tile size or block size

#pragma omp parallel
{
#pragma omp master
for (t=0; t
{
for (i=0; i
for (j=0; j
{
#pragma omp task firstprivate(t,i,j) depend(in:A[i-1:b+2][j-1:b+2]) depend(out:B[i:b][j:b])
{
#pragma omp critical
printf("t-%d i-%d j-%d --A",t,i,j); //Prints out time loop, i,j
}
}
for (i=0; i
for (j=0; j
{
#pragma omp task firstprivate(t,i,j) depend(in:B[i-1:b+2][j-1:b+2]) depend(out:A[i:b][j:b])
{
#pragma omp critical
printf("t-%d i-%d j-%d --B",t,i,j); //Prints out time loop, i,j
}
}
}
}
}

因此,声明从 i-1 和 j-1 开始并且范围为 (b+2) 的依赖关系的想法是相邻的图块也会影响您当前的图块计算。与第二组循环类似,其中 A 中的值仅应在相邻图块使用这些值后才被覆盖。

代码使用支持 openmp 4.0 的 gcc 5.3 编译。

ps:上面声明数组范围的方式表示创建依赖图时要考虑的起始位置和索引数量。

编辑(基于祖兰的评论) - 将内部代码更改为简单的打印语句,因为这足以检查任务执行的顺序。理想情况下,对于上述值(因为只有 4 个图块),所有图块都应该完成第一个 printf ,然后只执行第二个。但是如果你执行代码,它会混淆顺序。

1 Câu trả lời

所以我终于弄清楚了这个问题,尽管 OpenMP 规范说依赖子句应该用一个起点和范围来实现,但它尚未在 gcc 中实现。所以目前它只比较依赖子句的起点 (depend(in:A[i-1:b+2][j-1:b+2])) A[i-1][j-1] in这个案例。

最初我比较不同相对平铺位置的元素。例如,将 (0,0) 元素与 tile 的最后一个元素进行比较,这与依赖性没有冲突,因此各种任务的执行顺序是随机的。

当前的 gcc 实现根本不关心子句中提供的范围。

关于openmp - openmp 中的 Dependent 子句不尊重声明的依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36322638/

28 4 0
Bài viết được đề xuất: memory - EC2 CloudWatch 内存指标与 Top 显示的不匹配
Bài viết được đề xuất: css - 如何找到有关 CSS 浏览器不兼容的信息?
Bài viết được đề xuất: c# - 如何使用身份在 MVC 5 中自定义用户表?
Bài viết được đề xuất: ide - 有 PyCharm 主题吗?
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com