小编Mik*_*ike的帖子

CUDA:平铺矩阵 - 矩阵乘法,共享内存和矩阵大小,是块大小的非倍数

我正在努力熟悉CUDA编程,并且有一段非常有趣的时间.我目前正在研究这个处理矩阵乘法的pdf,有和没有共享内存.这两个版本的完整代码都可以在这里找到.该代码几乎与CUDA矩阵乘法样本中的代码完全相同.虽然非共享内存版本具有以任何矩阵大小运行的能力,但无论块大小如何,共享内存版本必须与块大小的倍数(我设置为4,默认最初为16)的矩阵一起使用.

在pdf结尾处提出的问题之一是更改它,以便共享内存版本也可以使用块大小的非倍数.我认为这将是一个简单的索引检查,就像在非共享版本中一样:

int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
if(row > A.height || col > B.width) return;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.这是完整的代码,减去主要的方法(有点乱,对不起),我已经有所修改了:

void MatMul(const Matrix A, const Matrix B, Matrix C) { 
  // Load A and B to device memory 
  Matrix d_A; 
  d_A.width = d_A.stride = A.width; 
  d_A.height = A.height; 
  size_t size = A.width * A.height * sizeof(float); 
  cudaError_t err = cudaMalloc(&d_A.elements, size); 
  printf("CUDA malloc A: %s\n",cudaGetErrorString(err)); 
  err = cudaMemcpy(d_A.elements, A.elements, …
Run Code Online (Sandbox Code Playgroud)

c cuda matrix

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

cuda ×1

matrix ×1