CUDA Handbook 关于CUDA的硬件架构和软件架构的详细解读

CUDA 复杂问题 + 细节问题 解答 见 CUDA复杂问题 + 细节问题 解答

基础:之前学习过一定的CUDA并行编程,比如《CUDA by Example》

Chapter 1

上个世纪,Intel和AMD曾经引入了多媒体处理指令集(MMX),并与微软合作实现3D光栅器,来遏制光栅器的运行从CPU到其他硬件转移的趋势,但是失败了。它速度也就赶得上第一代电脑的2D/3D加速卡S3 Virge GX的速度的一半。之后,图形底层开始直接和CPU供应商合作,把CPU核心引入到图形管线中,得到了很多好处,但并不能阻止程序开始从CPU向GPU扩展(因为此时GPU有了新的顶点生成技术,被集成到了图形管线里)。

1997-1998年,GPU的晶体管数量已经开始逐渐超过CPU,这两种处理器的差别也越来越明显:

  • CPU芯片区的大部分区域都应用于cache,intel很容易引入新的指令集扩展而不会造成很多芯片区面积的消耗,因为CPU主要都是cache
  • GPU芯片区的大部分区域都应用于logic,它们的小型缓存更多地是为了带宽聚合而不是为了减少延迟

之后,摩尔定律也逐步受限,而后,同步多线程(SMT)可能是CPU性能扩展的更好的方式,即在一个芯片里安置多个CPU核心。以前的时候,程序性能提高只需要等着硬件性能提高(时钟频率提高)即可,但是现在,能够适应多线程协作的程序会从多核心CPU中受益。

虽然没有考虑到并行性的CPU应用程序需要进行大量的重构(如果它们可以被完全并行化的话),但是图形应用程序已经是以一种利用独立像素之间固有的并行性的方式来制定的。GPU抛弃了一些CPU设计时的策略,比如时钟频率,预测执行,多分支预测,前向存储等(maximizing clock frequency, speculative execution, branch prediction, store forwarding)。为了防止这种功能越来越强大的处理器的能力被I/O的能力限制,GPU设计者集成了内存控制器,并与DRAM制造商合作,使带宽远远超过cpu的可用带宽(加快了数据通信的速度,例如从内存中传输数据到运算单元的速度)。

但是之后,很多人都使用图形接口来应用GPU做通用计算,直到CUDA的出现。

GPU计算比较快的原因:

  • 有时候是因为有比较多的处理核心
  • 有时候是因为有更高的内存带宽
  • 有时候是因为程序可以应用GPU内的专门的硬件机制,例如纹理或者SFU单元。

并不是所有并行程序都可以用CUDA来实现,但是CUDA作为并行计算工具,已经越来越流行了。

我们的方法

在并行编程中有很多地方都是需要考虑的,例如是选择使用CUDA runtime还是driver API。在考虑kernal架构的设计时,会变得更加难以驾驭。

本书会从多个不同的角度来阐述一个问题,比如纹理硬件能做什么,以及怎么写纹理硬件程序,是分在不同的章节的。

优化指导很像建议,通常没有足够的背景来进行有意义的应用,而且它们常常看起来自相矛盾。

关于网格和块大小、如何和何时使用共享内存、每个线程要计算多少个结果以及占用率对性能的影响等方面的建议应该通过实施不同的方法和测量每种方法的性能来进行经验验证。

本书的代码

开发人员希望CUDA代码具有说明性,但不是玩具;有用,但不需要深入到一个遥远的主题;高性能,但不妨碍实现者从初始端口到最终版本的路径。为此,本书介绍了三种类型的代码示例,旨在解决这些问题:微基准、微演示和优化过程。

  • 微脚本旨在说明一个非常具体的CUDA问题的性能影响,例如未经压缩的内存事务如何降低设备内存带宽WDDM驱动程序执行kernel thunk所需的时间。它们被设计成独立编译,对于许多已经实现了自己的微基准的CUDA程序员来说,它们看起来很熟悉。在某种意义上,我写了一组微基准,以避免其他人也这样做。
  • 微演示是一种小型应用程序,旨在阐明硬件或软件如何运行的特定问题。与微基准一样,它们也很小,而且是独立的,但它们没有突出性能问题,而是突出了功能性问题。例如,关于纹理的一章包括微型演示,演示如何从1D设备内存创建纹理,如何执行float-int转换,不同的纹理寻址模式如何工作,以及纹理执行的线性插值如何受9位权重的影响。与微脚本一样,这些微演示也是因为有些开发人员可能希望来编写它们,或者至少让它们可用。

  • 许多关于CUDA的论文把他们的研究结果作为既成事实,也许在决定论文中提出的最终方法之前,对不同方法之间的权衡进行了一些侧面评论。作者通常有篇幅限制和截止日期,不利于对他们的工作进行更完整的处理。对于CUDA支持的数据并行编程的一些精选主题,本书包含了以Mark Harris的“优化CUDA中的并行缩减”演示精神的优化旅程,该演示将带读者通过七个日益复杂的提高性能的实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Dezeming

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

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

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

打赏作者

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

抵扣说明:

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

余额充值