openacc - псевдоним для массива приводит к ошибке "Не удается определить границы для массива"
У меня есть массив размера N на моем хосте. Я перенесу его на свое устройство, а затем попытаюсь присвоить ему псевдоним и использовать его. Но я получаю ошибку компиляции"Не удается определить границы для массива".
Пример:
#include <openacc.h>
#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main() {
double *ar = (double*) malloc(sizeof(double) * N);
int i;
for(i=0;i<N;i++)
ar[i] = (i+1) * 1.0;
#pragma acc data copy(ar[0:N])
#pragma acc parallel
{
ar[90] = 29;
double *br = ar;
br[6] = 91;
}
ar[129] = 0.154;
for(i=0;i<N;i++)
if(ar[i] != (i+1) * 1.0)
printf("ERROR: %d - %.3f\n", i, ar[i]);
free(ar);
return 0;
}
Приведенный выше код приведет к следующей ошибке:
PGC-S-0155-Cannot determine bounds for array br (array.c: 15)
Даже если я попытаюсь быть более конкретным и попробую это double *br = &ar[0];
происходит то же самое.
Я использую 64-разрядную версию PGI 16.5 с CUDA 7.5 на устройстве cc20.
Поскольку я использую правильный массив, псевдонимы не должны быть проблемой, верно? Это ошибка?
1 ответ
Это ограниченная проблема, когда компилятор не сохраняет, что "br" является локальным для параллельной области. Поскольку я работаю в PGI, я добавил отчет о проблеме (TPR#22760) и отправил его нашим инженерам по компиляции для дальнейшей оценки.