我有一个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
进行编译注意:这个问题已被编辑,现在它没有多大意义,但也许对更多人有用。
答案 0 :(得分:2)
此问题已在最新的PGI编译器12.9.0中修复。编译器现在返回以下消息:
Generating copyin(a[0:1024][0:1024])