Cuda 使用OpenACC共享内存

Cuda 使用OpenACC共享内存,cuda,openacc,Cuda,Openacc,我正在尝试使用共享内存来缓存OpenACC中的内容 基本上我正在研究的是矩阵乘法,我得到的是: typedef float ff; // Multiplies two square row-major matrices a and b, puts the result in c. void mmul(const restrict ff* a, const restrict ff* b, restrict ff* c, con

我正在尝试使用共享内存来缓存OpenACC中的内容

基本上我正在研究的是矩阵乘法,我得到的是:

typedef float ff; 

// Multiplies two square row-major matrices a and b, puts the result in c. 
void mmul(const restrict ff* a, 
          const restrict ff* b, 
          restrict ff* c, 
          const int n) { 
#pragma acc data copyin(a[0:n*n], b[0:n*n]) copy(c[0:n*n]) 
{ 

#pragma acc region 
{ 

#pragma acc loop independent vector(16) 
  for (int i = 0; i < n; ++i) { 
#pragma acc loop independent vector(16) 
    for (int j = 0; j < n; ++j) { 
      ff sum = 0; 
      for (int k = 0; k < n; ++k) { 
        sum += a[i + n * k] * b[k + n * j]; 
      } 
      c[i + n * j] = sum; 
    } 
  } 

} 
}
}
指令,并且我可以使用vectorgang选项指定块大小,但是我在理解如何将其映射到CUDA体系结构时遇到了一些困难


有没有一种方法可以实现与OpenACC类似的功能?关于缓存指令的使用或如何将共享内存的某些功能从CUDA映射到OpenACC,是否有好的教程/资源?

如果您使用的是PGI Accelerator编译器,您可以转储生成的PTX文件,并查看执行过程中的情况:

pgcc -acc -fast -Minfo -ta=nvidia,cc13,keepptx matrixMult.c -o matrixMult
生成的PTX将存储在当前目录中


编辑:您可能更喜欢查看高级代码(CUDA用于C或Fortran)。因此,使用以下
-ta=nvidia、cc13、keepptx、keepgpu

PGI加速器编译器可能已经在使用共享内存。您是否使用-Minfo开关检查了输出?这可能很有趣。是的,但是Minfo开关只告诉我我的实现使用了多少共享内存。虽然这很有用,但我更感兴趣的是知道是否有一种方法可以显式地操纵这样的内存。能够看到生成的高级cuda非常有用。@leo你找到问题的答案了吗?您能够在OpenACC中显式定义共享内存吗?
pgcc -acc -fast -Minfo -ta=nvidia,cc13,keepptx matrixMult.c -o matrixMult