多维数组复制OpenACC

时间:2012-10-14 15:17:10

标签: cuda gpgpu openacc

我有一个2D矩阵SIZE x SIZE,我正在尝试复制到GPU。

我以这种方式分配矩阵:

#define SIZE 1024
float (*a)(SIZE) = (float(*)[SIZE]) malloc(SIZE * SIZE * sizeof(float));

我的ACC区域有这个:

void mmul_acc(restrict float a[][SIZE],
              restrict float b[][SIZE],
              restrict float c[][SIZE]) {
#pragma acc data copyin(a[0:SIZE][0:SIZE], b[0:SIZE][0:SIZE]) \
    copyout c[0:SIZE][0:SIZE])
{
  ... code here...
}

使用PGI编译器编译时,使用-Minfo = acc,编译器告诉我:

Generating copyin(a[0:1024][0:])

[0:1024] [0:]是什么意思?为什么不是[0:1024] [0:1024] ???

如果不是声明矩阵而是声明大小为SIZE * SIZE的数组,那么

#pragma acc copyin(a[0:SIZE*SIZE])

生成以下编译器消息

Generating copyin(a[0:16777216])

代码实际上以相同的方式工作,性能相同,结果相同。

显然,编译器在两种方式下都会生成相同的代码,但消息并不简单。

我在Linux64机器上使用PGI加速器12.8。我正在使用-Minfo = acc

进行编译

注意:这个问题已被编辑,现在它没有多大意义,但也许对更多人有用。

1 个答案:

答案 0 :(得分:2)

此问题已在最新的PGI编译器12.9.0中修复。编译器现在返回以下消息:

Generating copyin(a[0:1024][0:1024])