矩阵相乘

linux91 2017-07-26 02:53:43
http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
在NVIDIA官方文档中矩阵相乘的例子,在未优化前,




// Matrix multiplication kernel called by MatMul()
__global__ void MatMulKernel(Matrix A, Matrix B, Matrix C) {
// Each thread computes one element of C
// by accumulating results into Cvalue
float Cvalue = 0;
int row = blockIdx.y * blockDim.y + threadIdx.y;
int col = blockIdx.x * blockDim.x + threadIdx.x;
for (int e = 0; e < A.width; ++e)
Cvalue += A.elements[row * A.width + e] * B.elements[e * B.width + col];
C.elements[row * C.width + col] = Cvalue;
}


矩阵按行存储,在每次计算时,每个线程读“A的一行,B的一列”,A的一行可以顺序读,B的一列不是顺序读的,gpu在执行的时候,应该是按一个线程束为单位去读? 那读取矩阵B的时候,如何读? 为什么说 A is therefore read B.width times from global memory and B is read A.height times. A读了B.width次?
...全文
1369 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧