找回密码
 立即注册
查看: 337|回复: 6

CUDA 编程 (目录)

[复制链接]
发表于 2022-1-10 16:48 | 显示全部楼层 |阅读模式
本文已授权极市平台和深蓝学院,未经允许不得二次转载,如有需要请私信作者。
0 Motivation

从多核中央处理器到图形处理器

30多年前,要想提升客户计算设备的性能,主要手段之一就是提高处理器的时钟频率。早期个人计算机的时钟频率在 1MHz,而30年后的大多数桌面处理器的时钟频率都在 1GHz 到 4GHz 之间。尽管提高 CPU 时钟频率并不是提升计算性能的唯一方法,但却是一种相对稳定的提升方法。
近年来,由于摩尔定律的放缓,集成电路元器件开始出现各种严重限制,这就迫使计算机制造商们开始寻求其他的替代方法来提高计算性能。也就是说,人们已经无法在现有的架构上通过提高处理器时钟频率来提升性能。单纯地通过提高处理器时钟频率使得功耗与发热急剧升高,晶体管大小接近极限。
所以人们开始考虑:为什么不在个人计算机上放置多个处理器,而不是仅仅提升单个处理器的性能呢?这样,再不需要提高处理器运行频率的情况下,个人计算机的性能也能够获得持续的提升。
在2005年,当面对竞争日趋激烈的市场以及越来越少的可行方式时,业界一些领先的 CPU 制造商们开始提供带有2个计算核的处理器。在接下来的几年中,他们推出了3核,4核,6核以及8核的中央处理器。一些业界领先的 CPU 制造商们已经宣布在未来将计划推出12核和16核的 CPU,这进一步证明了并行计算已经给人们带来了不可忽视的好处。
在20世纪80年代到90年代,图形界面操作系统 (例如 Microsoft 公司的 Windows) 的普及推动了新型处理器的出现。在20世纪90年代早期,用户开始购买配置 2D 加速卡的个人计算机。1992年,Slilicon Graphics 发布了 OpenGL 库,它是一个对该公司硬件进行编程的接口。SG 公司试图将 OpenGL 作为一种标准化的,与平台无关的 3D 应用程序编写方法。NVIDIA 公司的 GeForce 256 显卡的发布进一步提升了消费者图形硬件的性能。GeForce 256 显卡第一次实现了在图形处理器上直接运行变形与光效等计算,因此在某些应用程序上能实现更强的视觉效果。
早期的 GPU 计算

GPU 中的可编程流水线吸引了许多研究人员来探索如何在除了 OpenGL 或者 DirecX 渲染之外的领域使用图形硬件。早期的 GPU 计算使用起来非常复杂,由于标准的图形接口,例如 OpenGL 和 DirecX。在2000年早期,GPU 的主要目标是通过可编程计算单元为屏幕上的每个像素计算出一个颜色值,这些计算单元也称之为像素着色器 (Pixel Shader)。输入屏幕的位置信息以及其他一些信息,输出最终的颜色值。研究人员后来注意到,这些 "颜色" 其实可以是任意数据,可以并不表示颜色值,而只表示 GPU 对输入数据进行计算的结果。事实上,GPU 可以执行除了渲染之外的任务,只要它们看起来像一个标准的渲染任务。
由于 GPU 通常有着很高的计算吞吐量,因此有着非常光明的应用前景。然而,这种编程模型对于开发人员来讲有着非常大的局限性。首先,有着非常严格的格式限制,因为程序只能以颜色值和纹理单元等形式输入数据。此外,程序员在将计算结果写入内存的方式以及位置上同样存在者严格的限制。除了这些限制因素之外,如果程序员希望通过 GPU 来执行通用计算,那么他们还需要学习 OpenGL 和 DirecX,因为这些接口仍然是与 GPU 进行交互的唯一方式。这不仅意味着要将数据保存在图形文理中并调用 OpenGL 或者 DirectX 函数来执行计算,而且还意味着使用特殊的图形编程语言来编写这些计算,这些语言称之为着色语言 (Shading Language)。因此,研究人员在开始使用 GPU 的强大计算功能之前,首先需要考虑严格的资源限制和编程限制,然后还要学习计算机图形学和着色语言,很难被人接受。
CUDA

在之前的图形处理架构中,计算资源划分为顶点着色器和像素着色器。而 CUDA 架构则不同,它包含一个统一的着色器流水线。新的图形处理器能适用于通用计算,而不是仅限于图形计算。
为了尽可能吸引更多的开发人员,NVIDIA 采用了工业标准的 C 语言,并且增加了一小部分关键字来支持 CUDA 架构的特殊功能。NVIDIA 还提供了专门的硬件驱动程序来发挥 CUDA 架构的大规模计算性能。现在,用户不再需要了解 OpenGL 或者 DirectX 图形编程结构,也不需要将通用计算问题伪装成图形计算问题。
CUDA 是一种并行计算平台和编程模型,随着深度学习的兴起,CUDA 被广大 AI 从业者熟知。究其原因,主要在于深度学习算法商业化落地时都需要进行加速,尤其是在安防,无人驾驶环境感知对算法速度要求较高的场景中。因此 CUDA 编程已成为当下 AI 工程师们的重要技能,比如有 cuDNN 及 TensorRT 已被广泛应用于科研以及工程领域。相比之前在游戏、视觉效果中的应用,GPU 正在成为数据中心、超算中心的标配,并广泛应用于深度学习、大数据、石油化工、传媒娱乐、科学研究等行业。相比 CPU,GPU 有上千个 cores,在并行计算方面有巨大优势,与深度学习的计算需求一致。例如卷积,卷积可以并行计算 kernel 的中心点不同位置的情况。CUDA 的优势在于给程序员提供了一个类似 C 语言的编程环境,它以 C 语言为基础,表达 NVIDIA 的 GPU 模型。我们可以通过 CUDA,使用 C 语言方便地写出在 NVIDIA 芯片上执行的程序,而不需要去学习特定的显示芯片的指令或是特殊的结构。
但是,尽管 NVIDIA 推出了 CUDA,cuDNN 以及 TensorRT 的官方文档,但对于入门者并不友好,学习效率比较低。因此这个系列的 Blogs 就是为了弥补教程和实际应用之间的空白,帮助初学者理解 CUDA 编程并最终熟练使用 CUDA 编程。你不需要具备 OpenGL 或者 DirectX 的知识,也不需要有计算及图形学的背景。唯一前提条件就是具备一定的 C/C++ 编程经验。
CUDA 的应用


  • 应用1:医学图像
在乳腺癌的识别问题中,超声波成像技术比X射线成像技术更为安全,因此医生通常将其与乳房X射线照片结合起来使用,以辅助乳腺癌的治疗与诊断。TechniScan 医疗系统采用了一种三维的超声波成像方法,但是这种方法由于一个非常简单的问题而无法投入实际使用:计算量的限制。简单来讲,在将收集到的超声波数据转换为3D图像时需要执行非常耗时的计算,因此使得该项技术无法直接投入使用。NVIDIA 的第一款基于 CUDA 架构的 GPU 以及 CUDA C编程语言为 TechniScan 医疗系统提供了实现的平台。通过2个 NVIDIA Tesla C1060 处理器来处理在15分钟扫描出来的35GB数据。这样一来,医生在短短20分钟内就能够看到患者乳房的高清三维成像。

  • 应用2:计算流体动力学
旋翼桨叶的高效设计是多年来的一个难题。研究人员很难通过简单的计算公式对这些设备周围的空气和流体的复杂运动进行建模,而精确的模拟又需要非常大的计算量而无法实现。NVIDIA CUDA 架构将计算流体动力学带到了前所未有的高度。他们最初的研究结果表明,即使是在个人的工作站的 GPU 也能够实现显著的性能提升。近乎于交互式的模拟实验为之前停滞不前的研究领域带来了新的创新机遇。

  • 应用3:环境科学
清洁剂的关键成分是表面活性剂。表面活性剂分子决定了清洁剂的清洁能力,但它们通常也是清洁产品中可能对环境造成最大破坏的部分。这些分子会吸附在脏物上,然后与水混合,这些表面活性剂就和脏东西一起被清洗掉。在传统方式中,测量某种新型表面活性剂的清洁能力需要进行大量的实验,包括将各种材料需要清晰的杂质混合在一起。显然,这个实验过程非常缓慢。美国天普大学与业界领先企业宝洁一起合作,对表面活性剂与脏污,谁以及其他材料进行分子模拟,这种测试在过去是无法进行的。天普大学的研究者们使用一款基于 GPU 加速的 HOOMD 模拟软件,将计算任务分解到2个 NVIDIA Tesla 100 GPU 上。通过增加解决方案中 Tesla GPU 的数量HOOMD 实现的表面活性剂交互模拟性能是之前平台的16倍。

本系列内容参考了深蓝学院课程的讲解,课程链接如下:
1 CUDA 编程讲解

目录

(每篇文章对应一个Section,目录持续更新。)


  • Section 1:CUDA 编程(一):CUDA C 编程及 GPU 基本知识
1 CPU 和 GPU 的基础知识
2 CUDA 编程的重要概念
3 并行计算向量相加
4 实践
4.1 向量相加 CUDA 代码
4.2 实践向量相加
5 参考
link:
科技猛兽:CUDA 编程(一):CUDA C 编程及 GPU 基本知识


  • Section 2:CUDA 编程(二):CUDA C 编程:矩阵乘法
1 为什么矩阵乘法适合 GPU 实现
2 矩阵乘法的 GPU 基础实现
3 矩阵乘法的 GPU 进阶实现
4 实践
4.1 L2 Matrix Multiple
4.2 实践矩阵乘法
link:
To be continued.

@科技猛兽
学术合作 or 沟通交流欢迎私信联系~
cite as:
@Article{wang2021visiontransformer,
  author  = {Jiahao Wang},
  title   = {CUDA 编程 (目录)},
  journal = {https://zhuanlan.zhihu.com/},
  year    = {2021},
  url= {https://zhuanlan.zhihu.com/p/442508630/},
}
发表于 2022-1-10 16:51 | 显示全部楼层
[飙泪笑]
发表于 2022-1-10 16:56 | 显示全部楼层
这是要开始整cuda高性能计算了吗[飙泪笑]
发表于 2022-1-10 17:00 | 显示全部楼层
最近正在学习,太好了!
发表于 2022-1-10 17:01 | 显示全部楼层
又开新坑,太强了大佬[捂脸]
发表于 2022-1-10 17:05 | 显示全部楼层
哈哈~
发表于 2022-1-10 17:11 | 显示全部楼层
学习一个~
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-15 06:54 , Processed in 0.142800 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表