本系列为《解读CUDA C Programming Guide》. https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#axzz4FIp5fBgM
本书旨在介绍进行CUDA并行优化的C编程指导。共5章,内容分别是:
- Introduction
- Programming Model
- Programming Interface
- Hardware Implementation
- Performance Guidelines
本文简单解读第一章:Introduction.
本章主要内容包括:
- From graphic processing to general purpose parallel computing
- CUDA: A general-purpose parallel computing platform and programming model
- A scalable programming model
- Document structure
From graphic processing to general purpose parallel computing
面对实时高清的3D图像的日渐增长的市场需求,可编程的图像处理单元或者说GPU进化成了高并发,多线程,多核计算器——具有强大的计算能力和非常高的内存带宽。如下图1图2所示:
CPU和CPU之间的浮点功能差异背后的原因 :GPU是专用于计算密集型,高度并行计算。确切地说是图形渲染的内容。因此设计GPU的时候让它拥有更多晶体管,让其致力于数据处理,而不是数据缓存和流量控制,如图3所示。
更具体地说,GPU特别适合解决可以表示为数据并行计算的问题:在许多数据元素上并行执行同一程序-具有很高的算术强度-算术运算的比率进行内存操作。
由于对每个数据元素执行相同的程序,对复杂的流量控制的要求较低。又因为它是在许多数据元素并具有很高的算术强度,所以存储器访问延迟可以隐藏在计算中,而不是大数据缓存中。
数据并行处理将数据元素映射到并行处理线程。许多处理大型数据集的应用程序可以使用数据并行编程模型来加快计算速度。在3D渲染中,大量像素和顶点被映射到并行线程。同样,图像和媒体处理应用程序(例如渲染图像的后处理,视频编码和解码,图像缩放,立体视觉和模式识别)可以将图像块和像素映射到并行处理
线程。实际上,图像渲染和处理领域之外的许多算法从通用信号处理或物理模拟到计算金融或计算生物学,通过数据并行处理可以加快速度。
CUDA®: A General-Purpose Parallel Computing Platform and Programming Model
NVIDIA在2006年11月推出了通用并行计算平台和编程模型CUDA®。该平台和编程模型利用NVIDIA GPU中的并行计算引擎以比CPU上更有效的方式解决许多复杂的计算问题。CUDA带有允许开发人员将C用作高级编程语言的软件环境。如图4所示,其他语言的应用程序支持编程接口或基于指令的方法,例如FORTRAN,DirectCompute,OpenACC。
A Scalable Programming Model
多核CPU和多核GPU的出现意味着主流处理器芯片现在是并行系统。挑战在于开发可透明地扩展其并行性以利用不断增加的处理器内核的应用程序软件,就像3D图形应用程序可透明地将其并行性扩展到具有大量内核数量的许多核GPU一样。
CUDA并行编程模型旨在克服这一挑战,同时为熟悉标准编程语言(例如C)的程序员保持较低的学习曲线。
它的核心是三个关键抽象-线程组,共享内存和屏障同步。这个层次结构只是作为最少的语言扩展集向程序员公开。
这些抽象提供了细粒度的数据并行性和线程并行性,嵌套在粗粒度的数据并行性和任务并行性中。它们指导程序员将问题划分为可以由线程块并行独立解决的粗略子问题,并将每个子问题分解为可以由模块内的所有线程并行并行解决的细小问题。
这种分解通过允许线程在解决每个子问题时进行协作来保留语言的表达能力,并同时实现自动可伸缩性。实际上,可以在任何可用的多处理器上调度每个线程块在GPU中以任何顺序(并发或顺序)进行操作,这样编译的CUDA程序就可以在任意数量的多处理器上执行,如图5所示,只有运行时系统才需要知道物理多处理器计数。
Document Structure
- Introduction: CUDA的通用介绍
- Programming Model:概述CUDA编程模型
- Programming Interface:描述编程接口
- Hardware Implementation:描述硬件应用
- Performance Guidelines:高性能编程指导