0

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

使用命名空间标准;#pragma acc 例程 double myfunc(double x) { return(fabs(x)); }

例程指令的默认并行度是(或曾经是)顺序的。即#pragma accroutine 等价于#pragma accroutine seq

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

奇怪的是也会导致错误

#include cmath

#include "openacc.h"

使用命名空间标准;

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

给出编译错误,但是当我将数学库更改为 math.h 时,它非常好,谁能解释为什么不使用 pgc++ ?

4

1 回答 1

1

你得到的实际错误是什么?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
于 2018-10-29T16:30:44.790 回答