找回密码
 立即注册
查看: 225|回复: 0

推荐一本来自微软机器学习大咖的GPU编程入门指南

[复制链接]
发表于 2022-7-1 15:23 | 显示全部楼层 |阅读模式
事实表明,除了用于对视频游戏进行图形渲染, 图形处理单元(GPU)还能为普通消 费者提供一种进行大规模并行计算的捷径。现在,人们只要从当地的商店购买一块价值 2000 美元的现代 GPU,并将其插入家中的 PC,就能轻松获得强大的算力—在 5 年或 10 年前,只有顶级的企业和大学的超级计算实验室才有这种算力。近年来,GPU 的这种开放 的可及性已经在很多方面显现出来。实际上,我们只要留意一下新闻就可以发现—加密货币矿工使用 GPU 挖掘比特币等数字货币,遗传学家和生物学家使用 GPU 进行 DNA 分 析和研究,物理学家和数学家使用 GPU 进行大规模的模拟,人工智能研究人员通过编写 GPU 代码来撰写剧本及创作音乐,谷歌和脸书等大型互联网公司使用带有 GPU 的服务器 群来完成大规模的机器学习任务……类似的例子简直不胜枚举。
《GPU编程实战:基于Python和CUDA》的编写初衷,就是帮助你快速掌握 GPU 编程。这样,无论最终目标是什么, 你都可以尽快用上 GPU 的强大算力。
GPU编程实战 基于Python和CUDA



注意,《GPU编程实战:基于Python和CUDA》旨在为你介绍 GPU 编程的核心要领, 而不是赘述复杂的技术细节及 GPU 的工作原理。第 12 章会列举更多的资源,以帮助你了解细分,进而为学到的 GPU 新知 识找到用武之地。在本书中,我们将使用 CUDA 。CUDA 是 NVIDIA 公司的通用 GPU (General-Purpose GPU,GPGPU)编程框架,早在 2007 年就有了第一个版本。CUDA 是 NVIDIA GPU 的专有系统,是一个成熟、稳定的平台,使用起来比较方便,并提供了一 套无与伦比的第一方数学加速和人工智能相关的代码库。在安装和集成方面,CUDA 也 是最便捷的。
目前 CUDA 编程领域出现了许多现成的标准化 Python 库,如 PyCUDA 和 Scikit-CUDA, 让从事 GPU 编程的程序员更容易上手。基于上述原因,我们在本书中选用了 CUDA 。
虽然这里的 GPU 指的是图形编程单元,但是本书不是用来介绍图形编程的,而是介绍如何对通用 GPU 编 程, 即 GPGPU 编程(General-Purpose GPU Programming)。在过去的十年中,人们发现 GPU 不仅可以用于渲染图形,同时也非常适合用于计算,尤其是吞吐量巨大的并行计算。 为此,英伟达公司发布了 CUDA 工具包, 以期让所有了解 C 编程的人能轻松步入 GPGPU 编程的世界。
读者对象

本书仿佛是专门为 2014 年的我而写的。那时,笔者正在攻读博士学位,出于研究需 要,尝试开发一个基于 GPU 的模拟环境。在此期间,笔者疯狂阅读有关 GPU 编程的各 种图书和手册,想尽快在这个领域找到一点感觉。不幸的是,大多数文献会不厌其烦地 展示数不尽的硬件原理图和术语—随便翻开一页, 几乎都是这些内容,真正实用的编程知识却廖廖无几。
本书适合那些想要实际进行 GPU 编程、不想被技术细节和硬件原理图绕晕的读者阅 读。为此,我们将使用 C/C++(CUDA C)语言对 GPU 进行编程,并通过 PyCUDA 模块将 其内联到 Python 代码中。我们只需编写底层 GPU 代码,而其他烦琐的工作(例如编译、 链接以及在 GPU 运行代码等)可以由PyCUDA 代劳。
本书内容

第 1 章“为什么要学习 GPU 编程”,介绍学习这个领域知识的动机、如何应用阿姆 达尔定律,以及评估从串行编程切换到 GPU 编程后所能带来的性能提升。
第 2 章“搭建 GPU 编程环境”,解释如何在 Windows 和 Linux 系统下为 CUDA 编程 搭建合适的 Python 与 C++开发环境。
第 3 章“PyCUDA 入门”,展示利用 Python 语言进行 GPU 编程时所需的基本技能。 本章着重介绍如何使用 PyCUDA 的 gpuarray 类与 GPU 进行数据传输,以及如何使用 PyCUDA 的 ElementwiseKernel 函数来编译简单的 CUDA 内核函数。
第 4 章“内核函数、线程、线程块与网格”,介绍编写高效 CUDA 内核函数所需的 基础知识。这些内核函数是在 GPU 上运行的并行函数。本章除了介绍如何编写 CUDA 设 备函数(由 CUDA 内核直接调用的“串行”函数),还将介绍 CUDA 的抽象线程块/网格 结构及其在启动内核函数方面所发挥的作用。
第 5 章“流、事件、上下文与并发性”,讲解 CUDA 流的概念。利用 CUDA 流, 我 们可以在 GPU 上同时启动多个内核函数并实现同步。本章介绍如何使用 CUDA 事件来 计算内核函数的运行时间,以及如何创建和使用 CUDA 上下文。
第 6 章“CUDA 代码的调试与性能分析”,填补纯 CUDA C 编程方面的一些空白, 并展示如何使用 Nsight IDE 进行开发和调试,以及如何使用英伟达(后简称 NVIDA )公 司的性能分析工具。
第 7 章“通过 Scikit-CUDA 模块使用 CUDA 库”,介绍几种可以通过 Python Scikit-CUDA 模块使用的标准 CUDA 库,例如 cuBLAS 、cuFFT 和 cuSolver 库。
第 8 章“CUDA 设备函数库与 Thrust 库”,演示如何在代码中使用 cuRAND 和 CUDA Math API 库,以及如何使用 CUDA Thrust C++容器。
第 9 章“实现深度神经网络”,介绍如何应用前面几章中介绍的知识,从零开始构建一个完整的深度神经网络。
第 10 章“应用编译好的 GPU 代码”,展示如何使用 PyCUDA 和 Ctypes,实现Python 代码与预编译的 GPU 代码之间的交互。
第 11 章“CUDA 性能优化”,讲解非常底层的各种性能优化技巧, 特别是与 CUDA 相关的技巧, 例如向量化内存访问、原子操作、线程束洗牌和使用内联 PTX 汇编代码。
第 12 章“未来展望”,给出一些教育规划和职业规划方面的内容。当然,这些都是 以扎实掌握 GPU 编程基础知识为前提的。
最后的“习题提示”针对各章的习题给出了解题思路。
阅读本书的前提

这的确是一本实战性较强的技术书。你应先掌握一定的编程知识,才能更好地阅读 本书。准确来说,你应该做到:

  • 在 Python 语言方面具有中级编程经验;
  • 熟悉标准的 Python 科学计算包,例如 NumPy 、SciPy 和Matplotlib
  • 在某种基于 C 的编程语言(C 、C++ 、Java 、Rust 、Go 等) 方面具有中级编程 能力;
  • 了解 C 语言动态内存分配的相关概念(尤其要了解 C 语言中 malloc 和 free 函数的用法)。
  • GPU 编程主要适用于与科学或数学高度相关的领域, 因此本书的很多(即使不是大 多数)示例会用到一些数学运算。因此,你应具备大学一年级或二年级的数学知识或了 解这部分内容,如下所示:
  • 三角学(三角函数,如 sin 、cos 、tan……);
  • 微积分(积分、导数和梯度);
  • 统计学(均匀分布和正态分布);
  • 线性代数(向量、矩阵、向量空间和维数)。
如果你没学过上述内容,或者学完已经有一段时间了,也不用担心, 因为本书穿插 着介绍了一些关键的编程和数学概念。
此外,在本书中, 我们只使用 CUDA—它是 NVIDIA 硬件专有的编程语言。也就 是说,在开始之前,你需要准备好以下一些特定的硬件:

  • 具有 64 位 x86 架构的 Intel/AMD 处理器的 PC;
  • 内存容量不低于 4GB ;
  • 入门级 NVIDIA GTX 1050 GPU(Pascal 架构)或更高级别的 GPU 。
书中的大多数(并非全部) 的示例代码可以在各种配置水平较低的 GPU 上运行起 来,但需要说明的是,我们只在使用 GTX 1050 的 Windows 10 操作系统和使用 GeForce GTX 1070 (简称 GTX 1070 )的 Linux 操作系统上进行了测试。关于软硬件的设置和配 置的具体说明参见第 2 章。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-26 01:22 , Processed in 0.097724 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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