gpt4 book ai didi

openmp - OpenMP 中的循环顺序 折叠性能建议

转载 作者:行者123 更新时间:2023-12-02 01:24:26 26 4
gpt4 key购买 nike

我找到了 Intel's performance suggestion on Xeon Phi关于 OpenMP 中的 Collapse 子句。

#pragma omp parallel for collapse(2) 
for (i = 0; i < imax; i++) {
for (j = 0; j < jmax; j++) a[ j + jmax*i] = 1.;
}

Modified example for better performance:

#pragma omp parallel for collapse(2) 
for (i = 0; i < imax; i++) {
for (j = 0; j < jmax; j++) a[ k++] = 1.;
}

我使用 GFortran 4.8 在常规 CPU 上使用类似代码在 Fortran 中测试了这两种情况,它们都得到了正确的结果。 对于 GFortran5.2.0 和 Intel 14.0,使用类似 Fortran 代码和更高版本代码的测试未通过

但据我了解,OpenMP 的循环体应该避免“循环序列相关”变量,对于这种情况是 k,所以为什么在后面的情况下它可以得到正确的结果甚至更好的性能?

最佳答案

这是使用 collapse 子句时两种方法的等效代码。你可以看到第二个更好。

for(int k=0; k<imax*jmax; k++) {
int i = k / jmax;
int j = k % jmax;
a[j + jmax*i]=1.;
}

for(int k=0; k<imax*jmax; k++) {
a[k]=1.;
}

关于openmp - OpenMP 中的循环顺序 折叠性能建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com