CUDA学习——Chapter 2(4)内存空间布局对核函数性能的影响(2)

本文探讨了在CUDA编程中,使用一维网格和一维块对矩阵求和相比于二维网格块的性能优势。通过实例展示了这种一维结构如何利用GPU和CPU混合计算,实现更快的运行速度。尽管核函数运行时间缩短,但CUDA内存复制是主要耗时部分,提示在小规模并行计算中,GPU性能可能不优于CPU。
摘要由CSDN通过智能技术生成

第二章

3.使用一维网格和一维块对矩阵求和

前面我们使用了二维网格和二维块对矩阵求和,这种分割是非常直观的。那么现在我们就要使用抽象一点的概念,以稍复杂的编程来获得可能能取得的更高的性能。这就需要我们对映射有比较好的深入了解。

首先,我们再复习一下一维网格和一维块的结构:
一维网格和一维块
其中,nx是x方向上最大的线程数,ny是一个线程需要处理的数据元素个数(因为这个块是一维的,照理来说是不应该有ny的)。所以这里只有ix是对线程的真正索引,iy是线程内部数据的索引(这个时候要把线程看成一个大的单位,里面是由ny个子线程组成的,每个子线程依次处理一个数据。但一定要记住,这个子线程实际上并不存在,是并行里面的串行)。
那么每个数据的idx就依然满足idx=iy*nx+ix;其中iy是从0迭代到ny的。

所以我们写出核函数:

__global__ void sumMatrixOnGPU1D(float *MatA,float *MatB,float *MatC,int nx,int ny)
{
    unsigned int ix=threadIdx.x+blockIdx.x*blockDim.x;//获得x方向上的网格坐标
    if(ix<nx)//防止越界
    {
        //从这里开始,就已经是线程里面的串行了
        for(int iy=0;iy<ny;i++)
        {
            int idx
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值