首页 > 代码库 > CUDA C 编程指导(一):CUDA介绍

CUDA C 编程指导(一):CUDA介绍

虽然高清实时的3D图像/视频要求日益不能满足市场需求,但是可编程的图像处理单元(GPU)已经演变成具有巨大计算能力和超高存储带宽的高度并行、多线程的多核处理器,如下图,

技术分享

技术分享

CPU和GPU之间的浮点性能差异的原因是:GPU专门为密集型计算、高度并行计算设计(例如,图像渲染),因此此类设计需要更多的晶体三极管来进行数据处理而不是数据缓存和流程控制,其区别如下图所示,

技术分享

更具体地说,GPU更适合处理数据并行计算,很多数据并行执行,计算强度高,即对内存操作的算术操作比率高。因为相同的程序用来执行每个数据元素,因此对复杂的流控制有较低的要求;因为它是编译在许多数据元素上的,拥有高的算术强度,因此内存访问延迟可以被并行计算掩盖而不需要大数据的缓存。

并行数据处理映射数据元素对应于并行处理线程。许多处理大数据的应用程序都可以使用并行编程模型来进行加速。在3D渲染中,大量的像素和顶点都可以映射为并行线程。相似地,图像和多媒体应用,例如渲染图像的后处理、视频编解码、图像缩放、立体视觉和模式识别,都可以把图像块和像素映射为并行线程。事实上,除了图像渲染和处理之外的很多算法也都可以被并行数据处理加速,从通用的信号处理或物体仿真到计算金融学到计算生物学都可以。

早在06年11月,英伟达就介绍了CUDA,它的并行计算平台及其编程模型使其比一般CPU更有效地解决许多复杂的计算问题,这也就是我们常说的英伟达的GPU。

CUDA及其软件环境使得开发者可以使用C作为高级编程语言,如下图所示,其他语言,应用程序接口或者基于指令类的方法都可以支持,如FORTRAN,DirectCompute,OpenACC。

技术分享

多核CPU和多核GPU意味着现在的主流芯片都支持并行系统。另外,它们的并行规模也遵循摩尔定律。目前的挑战在于如何采用增加的多核开发并行机制的应用软件,例如3D图像应用如何把并行机制很好地应用在不同核数量的多核GPU上。

CUDA并行编程模型就是设计用来克服这种挑战的,并且适合编程人员,因为它采用的是大家熟悉的编程语言,例如C。

CUDA的核心和三个抽象概念:线程组的分层结构、共享内存、屏障同步,对于程序员而言只是简单的扩展了编程语言集。

这些抽象提供了细粒度的数据并行机制和线程并行机制,嵌入在粗粒度的数据并行机制和任务并行机制中。它们指导着程序员把问题粗分为可以被线程块独立解决的子问题,每个细块子问题再次被线程块内的所有线程合作解决。

这种分解保留了语言表达能力,允许线程来合作解决每个子问题的同时自动支持可伸缩性。的确,每一个线程块都可以以任何顺序被一个GPU中的多个可用处理器同时或者顺序调度,所以一个编译成功的CUDA程序可以允许在任意数量的多处理器上,如下图所示,只有运行系统时系统才需要知道实际的多处理器核数。

技术分享

此可伸缩的编程模型允许GPU结构可以通过简单扩展多处理器核数和内存分区的数量来跨越一个广阔的市场:从高性能的GeForce GPUs、专业版的Quadro和Tesla计算机产品到各种各样的价位低廉的GeForce GPUs。

GPU是建立在一系列的多处理器(SMs)流矩阵上的。一个多线程项目可以分割成多个线程块,它们彼此独立执行,因此一个多处理器的GPU可以以较少的时间自动编译项目,而较少的多处理器GPU会消耗更多的时间。


CUDA  C编程指导博客目录:

1、CUDA介绍
2、CUDA编程模型框架
3、CUDA编程接口
4、CUDA硬件实现
5、CUDA性能指南
6、CUDA实例分析



CUDA C 编程指导(一):CUDA介绍