第3章 CUDA编程基础
3.1 CUDA并行新思维
CUDA并行编程新思维的出现,不仅成功地利用了新一代GPU的硬件架构优势,同时克服了GPGPU(general purpose computing GPU)编程的缺点,为程序员定义了一个最小的C语言扩展包,这使得熟悉标准编程语言(如 C、FORTRAN 等语言)的程序员可以轻松掌握CUDA编程方法。
名为CUDA C的C语言拓展包包含3个主要的抽象概念:
(1) 线程组的层次结构;
(2) 共享存储器;
(3) 栅栏同步。
这些抽象概念提供了在粗粒度数据并行和任务并行中进行细粒度数据并行计算,提高了线程的并行度。
每一个粗粒度并行问题可以被划分为能够被多个块内线程独立并行处理的粗粒度子问题,而这每一个粗粒度子问题又可以被分割为同步并行协作处理的线程任务。每一个块都可以被调度到任意一个处理器核心,以任意的顺序并行或串行执行,这使得已编译好的CUDA程序能够在任意核心的GPU上执行,如下图所示,这些特性实现了CUDA并行编程模型的自动可扩展性。
3.2 CUDA的安装与配置
本节主要介绍CUDA在Windows中的配置。
3.2.1 系统需求
(1) 兼容CUDA的GPU硬件。
(2) GPU设备的驱动程序。
(3) Windows 7及以上。
(4) Microsoft Visual Studio 2013及以上。
(5) CUDA软件,即我们常说的CUDA Toolkit。
下面两个表格展示了当前支持CUDA 9.0的操作系统及编译器。
Operating System | Native x86_64 | Cross (x86_32 on x86_64) |
---|---|---|
Windows 10 | YES | YES |
Windows 8.1 | YES | YES |
Windows 7 | YES | YES |
Windows Server 2016 | YES | NO |
Windows Server 2012 R2 | YES | NO |
Compiler | IDE | Native x86_64 | Cross (x86_32 on x86_64) |
---|---|---|---|
Visual C++ 15.0 | Visual Studio 2017 | YES | NO |
Visual C++ 14.0 | Visual Studio 2015 | YES | NO |
Visual C++ 14.0 | Visual Studio Community 2015 | YES | NO |
Visual C++ 12.0 | Visual Studio 2013 | YES | YES |
Visual C++ 11.0 | Visual Studio 2012 | YES | YES |
Visual C++ 10.0 DEPRECATED | Visual Studio 2010 | YES | YES |
3.2.2 验证GPU是否支持CUDA
可以通过Windows的设备管理器查看显示适配器一项,你可以找到你的显卡的产商和型号。然后对照附录1查看你的GPU是否支持CUDA。
如何查看设备管理器?
(1) 打开命令提示符
(2) 运行下面的命令行:control /name Microsoft.DeviceManager
3.2.3 下载并安装CUDA软件
CUDA软件可以在此页面(http://developer.nvidia.com/cuda-downloads)找到最新版本,然后根据平台类型下载。如果想安装历史版本,可以在此页面查找(https://developer.nvidia.com/cuda-toolkit-archive)。CUDA软件有两种安装格式:
Network安装