【问题标题】:How to parallelize a loop in OpenACC with a "min" fuction inside如何在 OpenACC 中使用“min”函数并行化循环
【发布时间】:2018-09-23 04:20:41
【问题描述】:

我想将此循环与 OpenACC 中的 "min" 函数并行,但这是不可能的。编译器编译后显示如下信息:

121行属于for(k=j+1;k

PGCC-S-0155-加速器区域无效:不允许分支进出区域 (LATSONEopenacc.cpp: 121)
主要:
121、Invalid Accelerator Region:不允许分支进出区域 常量 T1 & std::min(常量 T1 &, 常量 T1 &):
1、包含“iostream”
39、包含“ostream”
38、包含“ios”
40、包含“char_traits.h”
39、包含“stl_algobase.h”
194、生成隐式acc例程seq
生成 acc 例程 seq
生成 Tesla 代码
PGCC/x86 Linux 17.10-0:编译完成但出现严重错误

//code in c++
#pragma acc parallel loop reduction(min:mini)  
for(k=j+1;k<=bi;k++){

resultt=( ((auxx[i][k]-auxx[i][j])*(auxx[i][k]-auxx[i][j]))+((auxy[i][k]-auxy[i][j])*(auxy[i][k]-auxy[i][j])));

      mini=std::min(resultt,mini);

}

为了编译,我使用的是命令:

pgc++ -acc -ta=nvidia,time -Minfo=accel LATSONEopenacc.cpp -o output

谢谢

【问题讨论】:

    标签: c++ min openacc


    【解决方案1】:

    "std::min" 包含一个异常处理程序,因此有关在并行区域之外分支的消息。要解决此问题,请添加标志“--no_exceptions”以禁用异常处理。

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2014-01-31
      • 2013-02-12
      • 2020-08-14
      • 2020-10-02
      • 2015-10-22
      • 2012-08-22
      • 1970-01-01
      相关资源
      最近更新 更多