c – OpenMP:nowait和reduce条款是相同的pragma

c – OpenMP:nowait和reduce条款是相同的pragma,第1张

概述我正在学习OpenMP,并且遇到了以下示例: #pragma omp parallel shared(n,a,b,c,d,sum) private(i){ #pragma omp for nowait for (i=0; i<n; i++) a[i] += b[i]; #pragma omp for nowait for (i=0; i<n; i 我正在学习OpenMP,并且遇到了以下示例:
#pragma omp parallel shared(n,a,b,c,d,sum) private(i){    #pragma omp for Nowait    for (i=0; i<n; i++)        a[i] += b[i];    #pragma omp for Nowait    for (i=0; i<n; i++)        c[i] += d[i];    #pragma omp barrIEr    #pragma omp for Nowait reduction(+:sum)    for (i=0; i<n; i++)        sum += a[i] + c[i];} /*-- End of parallel region --*/

在最后一个循环中,有一个现在和一个减少条款.它是否正确?缩减条款是否不需要同步化?

解决方法 第二个和最后一个循环中的现在有点多余. OpenMP规范现在在区域结束之前提到,所以也许这可以留在.

但是,在第二个循环之前的现在以及它之后的明显障碍是多余的.

特别是没有必要减少.

此外,共享和私有子句在C中是不必要的:shared是多余的,private不应该被使用.如果你需要一个线程私有变量,只需在并行区域内声明它.特别是在C中,你应该在循环中声明循环变量,而不是之前.

#pragma omp parallel{    #pragma omp for Nowait    for (int i = 0; i < n; ++i)        a[i] += b[i];    #pragma omp for    for (int i = 0; i < n; ++i)        c[i] += d[i];    #pragma omp for Nowait reduction(+:sum)    for (int i = 0; i < n; ++i)        sum += a[i] + c[i];} // End of parallel region
总结

以上是内存溢出为你收集整理的c – OpenMP:nowait和reduce条款是相同的pragma全部内容,希望文章能够帮你解决c – OpenMP:nowait和reduce条款是相同的pragma所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1251676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存