Gpu PGI 18.1与PGI 18.4

Gpu PGI 18.1与PGI 18.4,gpu,pgi,pgi-accelerator,Gpu,Pgi,Pgi Accelerator,PGi版本18.1到18.4是否有关于 #pragma routine seq,我的代码在版本18.1中运行良好,但在使用较新版本时出现错误。我使用数学库生成内核 使用名称空间std; #布拉格行政协调程序 双myfunc(双x) { 返回(晶圆厂(x)); } 例程指令的默认并行性是(或曾经是)顺序的。 i、 e.#pragma acc例程等同于#pragma acc例程seq 这在版本18.1中运行良好。 但我认为新版本中可能会有一些变化,因为当我使用18.4版本编译时,它给出了一个错误,抱

PGi版本18.1到18.4是否有关于 #pragma routine seq,我的代码在版本18.1中运行良好,但在使用较新版本时出现错误。我使用数学库生成内核

使用名称空间std; #布拉格行政协调程序 双myfunc(双x) { 返回(晶圆厂(x)); }

例程指令的默认并行性是(或曾经是)顺序的。 i、 e.#pragma acc例程等同于#pragma acc例程seq

这在版本18.1中运行良好。 但我认为新版本中可能会有一些变化,因为当我使用18.4版本编译时,它给出了一个错误,抱怨数学库函数

奇怪的是,这也会导致错误

#包括cmath

#包括“openacc.h”

使用名称空间std

#pragma acc routine seq
double sine( double x )
{
    return ( sin( x ) );
} 

给出了编译错误,但当我将数学库更改为math.h时,这很好,有人能解释为什么不使用pgc++吗?

您得到的实际错误是什么?我在PGI 18.1和18.4中得到了相同的错误:

% pgc++ -c test1.cpp -ta=tesla -Minfo=accel -w -V18.1
PGCC-S-1000-Call in OpenACC region to procedure 'sin' which has no acc routine information (test1.cpp: 10)
PGCC-S-0155-Compiler failed to translate accelerator region (see -Minfo messages)  (test1.cpp: 10)
sine(double):
     10, Generating acc routine seq
         Generating Tesla code
         11, Accelerator restriction: call to 'sin' with no acc routine information
这里的解决方案是包含PGI头文件“accelmath.h”,以获取C99数学本质的设备版本

% diff test1.cpp test2.cpp
4a5
> #include "accelmath.h"
% pgc++ -c test2.cpp -ta=tesla -Minfo=accel -w -V18.1
sine(double):
     12, Generating acc routine seq
         Generating Tesla code
% pgc++ -c test2.cpp -ta=tesla -Minfo=accel -w -V18.4
sine(double):
     12, Generating acc routine seq
         Generating Tesla code

嗨,Mat,谢谢你提供的信息,我会做出改变,但是,如果你改变它,这是因为范围不同吗?是的,这是因为C99数学内部函数只有设备例程。Mat,我有一个相当大的代码,我不能在这里分享,我在启用-O3优化时会遇到问题,使用-O1编译时不会出错,我可以将此代码发送给您吗?它有一个cmake并设置为可以轻松地重新生成错误。感谢请向PGI客户支持发送一份通知(trs@pgroup.com)或者在提交问题报告时,我有点忙着为SC19做准备,但如果我没有时间看,我可以请这里的其他人帮忙。