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) и отправил его нашим инженерам по компиляции для дальнейшей оценки.

Другие вопросы по тегам