CUDA编程05 - GPU内存架构和数据局部性

一:概述

        到目前为止,我们已经学会了如何编写 CUDA 核函数,以及如何设置和分配大量线程来执行核函数。我们还了解了当前 GPU 硬件的计算架构,以及线程在硬件上调度执行过程。在本章中,我们将重点关注 GPU 的片上(on-chip)内存架构,并研究如何组织和存放数据,以便这些数据能够被大量线程高效的访问。

        到目前为止,我们所学习的 CUDA 核函数可能只达到底层硬件性能的一小部分。之所以性能不佳,是因为通常使用片外(off-chip)内存,即全局内存。全局内存往往具有较长的访问延迟(数百个时钟周期)和有限的访问带宽。尽管理论上当有许多线程执行时可以容许有较长的内存访问延迟。 但很容易出现这样的情况:当大量线程同时去访问全局内存时,由于全局内存带宽有限,容易产生交通阻塞,导致除极少数线程外,其他所有线程都无法及时访问内存。 这样,流式多处理器(SM)中的部分计算核(cores)就会空闲。为了避免这种情况,GPU 提供了大量的片上(on-chip)内存资源,用于数据的访问,从而消除了访问全局内存的交通阻塞情况。在本章中,我们将研究如何使用不同的内存类型来提高 CUDA 核函数的执行性能。

二:内存访问效率的重要性

       回顾一下前一章矩阵乘法的例子(CUDA编程04 - GPU计算架构和线程调度), 我们可以在矩阵乘法的核函数中找出矩阵乘法执行最多的那部分代码,通过计算这部分代码的预期性能来说明内存访问对效率的影响。 下图中复制了这部分代码。就执行时间而言,核函数中最重要的部分是在 for 循环中执行 M 行与 N 列点积的代码。

未完待续。。。

        

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不溜秋的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值