ЗГУ 18,1 против ЗГУ 18,4
Есть ли какие-либо изменения в PGi версии 18.1 до 18.4 в отношении подпрограммы #pragma seq, код, который у меня работает, отлично работает с версией 18.1, но выдает ошибку, когда я использую более новую версию. Я генерирую ядра, используя математическую библиотеку.
использование пространства имен std; #pragma acc рутина double myfunc(double x) { return(fabs(x)); }
Параллелизм по умолчанию для рутинной директивы является (или был) последовательным. то есть #pragma acc рутина эквивалентна #pragma acc рутина seq
Это прекрасно работает в версии 18.1. Но я думаю, что в новой версии могут быть какие-то изменения, поскольку, когда я компилирую версию 18.4, она выдает ошибку, сообщающую о функции математической библиотеки.
Как ни странно и вызывает ошибку
#include cmath
#include "openacc.h"
использование пространства имен std;
#pragma acc routine seq
double sine( double x )
{
return ( sin( x ) );
}
Выдает ошибку компиляции, но когда я изменяю библиотеку математики на math.h, это прекрасно, может кто-нибудь объяснить, почему не работает с pgC++?
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