1

我有一个 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:])

a[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 进行编译

注意:这个问题已经过编辑,现在它并没有多大意义,但它可能对更多人有用。

4

1 回答 1

2

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

Generating copyin(a[0:1024][0:1024])
于 2012-10-18T08:19:06.683 回答