我正在努力学习CUDA。我在基于GPU的this文章的帮助下开始尝试矩阵乘法。 我的主要问题是我无法理解如何访问内核中的2D数组,因为访问2D数组与传统方法(matrix [i] [j])略有不同。 这是我陷入困境的部分:
for (int i = 0; i < N; i++) {
tmpSum += A[ROW * N + i] * B[i * N + COL];
}
C[ROW * N + COL] = tmpSum;
我能理解ROW和COLUMN是如何衍生出来的。
int ROW = blockIdx.y*blockDim.y+threadIdx.y;
int COL = blockIdx.x*blockDim.x+threadIdx.x;
对示例的任何解释都非常感谢。谢谢!
答案 0 :(得分:1)
矩阵连续存储,即连续存储在连续位置的每一行。你在这里看到的是平面贴图,即将两个元素索引转换为与第一个元素的偏移量。