关于cuda矩阵乘法的一点小小理解

首先要搞清楚的cuda的三级线程(thread)的划分然后搞清楚

cuda的硬件层级划分只是逻辑上的划分和FPGA的硬件划分是完全不同的

举个例子,下面的汉是实现了图片卷积核的图像的一维化数据存储,核中每个单元参数是k float类型

如下:1*1*2*2的维度卷积核

kk
kk

// GPU内核函数,将数组所有元素设置为常数k                          //将卷积和设置为  常数k
__global__ void dev_const(float *px, float k) {
  int tid = threadIdx.x + blockIdx.x * blockDim.x;
  px[tid] = k;
}

在上面的代码中是在Host(cpu端)进行的矩阵数据内存数据与线程索引(ThreadIDx)的一一对应

dev_const<<<filt_w * filt_h, filt_k * filt_c>>>(filt_data, 1.f); 

执行后得到卷积核如下

11
11

 但是在运行的情况下却没有按照上面1*1*2*2的维度去划分grid 和block的参数

这是为什么呢?在内存允许的情况下

<<<  >>>  中所定义的划分方案只是影响该函数的并行程度

真正的对应内存上的数据执行什么操作是和线程一一对应的,和<<<  >>>  里的划分参数无关

通过选择合理的<<<  >>>  参数可以得到不同的运算性能。。。。

上面如此划分一方面是为了提高并行度,另一方面是提高可读性

大部分的卷积核h*w远大于n*c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值