openacc - 数组的别名导致 "Cannot determine bounds for array" 错误
openacc - alias for an array results in "Cannot determine bounds for array" error
我的主机上有一个大小为 N 的数组。我会将它传输到我的设备,然后尝试为其分配一个别名并使用它。但是,我收到 "Cannot determine bounds for array" 编译错误 。
示例:
#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];
,同样的事情也会发生。
我在 cc20 设备上使用 PGI 16.5 64 位版本和 CUDA 7.5。
因为我使用的是有效数组,别名应该不是问题,对吧?这是一个错误吗?
这是一个范围界定问题,编译器没有保留 "br" 是并行区域的本地信息。由于我为 PGI 工作,我添加了一个问题报告 (TPR#22760) 并将其发送给我们的编译器工程师进行进一步评估。
我的主机上有一个大小为 N 的数组。我会将它传输到我的设备,然后尝试为其分配一个别名并使用它。但是,我收到 "Cannot determine bounds for array" 编译错误 。
示例:
#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];
,同样的事情也会发生。
我在 cc20 设备上使用 PGI 16.5 64 位版本和 CUDA 7.5。
因为我使用的是有效数组,别名应该不是问题,对吧?这是一个错误吗?
这是一个范围界定问题,编译器没有保留 "br" 是并行区域的本地信息。由于我为 PGI 工作,我添加了一个问题报告 (TPR#22760) 并将其发送给我们的编译器工程师进行进一步评估。