我正在尝试学习 CUDA。我开始在 this 的帮助下尝试矩阵乘法基于GPU的文章。 我的主要问题是我不太了解如何在内核中访问二维数组,因为访问二维数组与传统方法 (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;
非常感谢任何带有示例的解释。谢谢!
最佳答案
矩阵是连续存储的,即每一行都在连续的位置。您在这里看到的称为平面寻址,即将两个元素索引转换为距第一个元素的偏移量。
关于c++ - 了解 CUDA 中的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46865875/