第1章 为什么要学习GPU编程
事实表明,除了用于对视频游戏进行图形渲染,图形处理单元(GPU)还能为普通消费者提供一种进行大规模并行计算的捷径。现在,人们只要从当地的商店购买一块价值2000美元的现代GPU,并将其插入家中的PC,就能轻松获得强大的算力——在5年或10年前,只有顶级的企业和大学的超级计算实验室才有这种算力。近年来,GPU的这种开放的可及性已经在很多方面显现出来。实际上,我们只要留意一下新闻就可以发现——加密货币矿工使用GPU挖掘比特币等数字货币,遗传学家和生物学家使用GPU进行DNA分析和研究,物理学家和数学家使用GPU进行大规模的模拟,人工智能研究人员通过编写GPU代码来撰写剧本及创作音乐,谷歌和脸书等大型互联网公司使用带有GPU的服务器群来完成大规模的机器学习任务……类似的例子简直不胜枚举。
本书的编写初衷,就是帮助你快速掌握GPU编程。这样,无论最终目标是什么,你都可以尽快用上GPU的强大算力。
注意,本书旨在为你介绍GPU编程的核心要领,而不是赘述复杂的技术细节及GPU的工作原理。第12章会列举更多的资源,以帮助你了解细分,进而为学到的GPU新知识找到用武之地。在本书中,我们将使用CUDA。CUDA是NVIDIA公司的通用GPU(General-Purpose GPU,GPGPU)编程框架,早在2007年就有了第一个版本。CUDA是NVIDIA GPU的专有系统,是一个成熟、稳定的平台,使用起来比较方便,并提供了一套无与伦比的第一方数学加速和人工智能相关的代码库。在安装和集成方面,CUDA也是最便捷的。
目前CUDA编程领域出现了许多现成的标准化Python库,如PyCUDA和Scikit-CUDA,让从事GPU编程的程序员更容易上手。基于上述原因,我们在本书中选用了CUDA。
CUDA的发音通常是coo-duh,而非C-U-D-A!CUDA最初代表的是Compute Unified Device Architecture(计算统一设备架构),但英伟达公司已经放弃了这个首字母缩写词的初始含义,转而将CUDA作为全大写的专有名称来使用。
现在,我们先介绍阿姆达尔定律,由此开始GPU编程之旅。
阿姆达尔定律是一种简单而有效的方法,用于估计通过将程序或算法转移到GPU上可能获得的速度提升,进而帮助我们判断是否有必要通过重写代码利用GPU提升程序的性能。在此之后,我们将简要学习如何使用cProfile模块分析Python代码的运行情况,以找到代码的瓶颈。
在本章中,我们将介绍下列主题:
● 阿姆达尔定律;
● 将阿姆达尔定律应用到代码中;
● 使用cProfile模块对Python代码进行简单的性能分析。