程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句??

开发过程中遇到OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句?的问题如何解决?下面主要结合日常开发的经验,给出你关于OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句?的解决方法建议,希望对你解决OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句?有所启发或帮助;

虑以下 OpenMP 代码:

@H_674_4@#pragma omp target teams diStribute parallel for collapse(4) map(tofrom: a) private(i,j,k,l) for (i = 0; i < SIZE_N; i++) { for (j = 0; j < SIZE_M; j++) { for (k = i; k < SIZE_N; k++) { for (l = 0; l < SIZE_M; L++) { a[i][j][k][l] += i+2*j+3*k+4*l; } } } }

此代码是否符合 OpenMP Spec 5.1?我在规范中找不到任何不允许使用此类代码的措辞,但我不确定我是否遗漏了什么。

谢谢!

解决方法

这是否符合 OpenMP Spec 5.1?

根据 Support for non-rectangular collapsed loops 是的,它是合规的。

OpenMP 5.0 之前,所有 OpenMP 循环结构(工作共享循环、 simd、diStribute、taskloop 以及基于组合或复合结构的 在那些)必须是矩形的。这意味着所有的 所有的下界、上界和增量表达式 循环嵌套中的关联循环必须是不变的 反对最外层循环。 OpenMP 5.0 仍然需要所有 增量表达式是循环不变的,但 允许某些情况 其中内循环的下界和上界表达式可以是 基于单个外循环迭代器。

我在规范中找不到任何 不允许使用这种代码的措辞,但我不确定我遗漏了什么。

在 OpenMP 5.0 specification page 625,Version 4.5 to 5.0 Differences 中,您可以阅读以下内容:

不完美嵌套循环的关联循环的崩溃 是为工作共享循环定义的(参见第 101 页上的第 2.9.2 节), simd(请参阅第 110 页上的第 2.9.3.1 节)、任务循环(请参阅第 2.10.2 节 第 140 页)和分发(参见第 123 页第 2.9.4.2 节) 构造。

大佬总结

以上是大佬教程为你收集整理的OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句?全部内容,希望文章能够帮你解决OpenMP 5.1 规范是否允许具有非矩形循环的折叠子句?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。