首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenACC reduction子句with max()

OpenACC reduction子句with max()
EN

Stack Overflow用户
提问于 2020-12-02 06:04:21
回答 1查看 103关注 0票数 1

我正在学习OpenACC,偶然发现了NVidia提供的雅可比迭代的下面的代码。据我所知,reduction(max:err)为每个循环迭代创建一个私有err变量,并从所有循环迭代中返回最大值。

我的问题是,为什么要使用err = max(err, abs(Anew[j][i] - A[j][i]);,特别是max()函数,而reduction似乎自己就能做到这一点?

代码语言:javascript
复制
while ( err > tol && iter < iter_max ) 
{ 
err=0.0;
#pragma acc kernels reduction(max:err) 
for( int j = 1; j < n-1; j++) 
{ 
    for(int i = 1; i < m-1; i++) 
    { 
        Anew[j][i] = 0.25 * (A[j][i+1] + A[j][i-1] + A[j-1][i] + A[j+1][i]); 
        err = max(err, abs(Anew[j][i] - A[j][i]); 
    } 
} 
        
#pragma acc kernels
for( int j = 1; j < n-1; j++)
{ 
    for( int i = 1; i < m-1; i++ ) 
    { 
        A[j][i] = Anew[j][i]; 
    } 
} 
iter++; 

}

EN

回答 1

Stack Overflow用户

发布于 2020-12-03 01:34:57

"max“函数从单次迭代的参数中获取最大值。最大值减少会在所有迭代中找到最大值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65099225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档