技术开发 频道

CUDA 2.1 简介

  【IT168 文档CUDA简介

  1.1 从图形处理到通用并行处理

  如图1-1所示,受到来自实时、高分辨率3D图形的市场的永不满足需求的推动,可编程的图像处理单元(Graphic Processor Unit, GPU)演化为具备强大计算能力以及高内存带宽的高度的并行性,多线程性,多核处理器 。

图 1-1 CPU 和 GPU 的每秒浮点运算次数和存储器带宽

  CPU 和 GPU 之间浮点功能之所以存在这样的差异,原因就在于 GPU 专为计算密集型、高度并行化的计算而设计,上图显示的正是这种情况,因而,GPU 的设计能使更多晶体管用于数据处理,而非数据缓存和流控制,如图 1-2 所示。

图 1-2 GPU 中的更多晶体管用于数据处理

  更具体地说,GPU 专用于解决可表示为数据并行计算的问题——在许多数据元素上并行执行的程序,具有极高的计算密度(数学运算与存储器运算的比率)。由于所有数据元素都执行相同的程序,因此对精密流控制的要求不高;由于在许多数据元素上运行,且具有较高的计算密度,因而可通过计算隐藏存储器访问延迟,而不必使用较大的数据缓存。

  数据并行处理会将数据元素映射到并行处理线程。许多处理大型数据集的应用程序都可使用数据并行编程模型来加速计算。在 3D 渲染中,大量的像素和顶点集将映射到并行线程。类似地,图像和媒体护理应用程序(如渲染图像的后期处理、视频编码和解码、图像缩放、立体视觉和模式识别等)可将图像块和像素映射到并行处理线程。实际上,在图像渲染和处理领域之外的许多算法也都是通过数据并行处理加速的——从普通信号处理或物理仿真一直到数理金融或数理生物学。

  1.2 CUDATM:通用并行计算架构

  在2006年11月份, NVIDIA 引入了CUDA™概念, 一个通用并行计算架构—含有新的并行编程模型和指令架构– 其使得将NVIDIA GPU中的并行计算引擎的能力得以提升从而利用该架构能比在传统CPU上更加高效的解决许多复杂计算问题。

  CUDA 的软件环境使得开发者能够使用C作为高级语言来进行CUDA编程。如图1-3所示,其他的语言或者应用程序接口(API)在未来也会被支持,诸如 FORTRAN, C++, OpenCL, 以及 Direct3D 11 Compute。

图 1-3 CUDA 被设计为能够支持不同类型的语言以及编程接口

  1.3 CUDA可伸缩的编程模型

  多核 CPU 和多核 GPU 的出现意味着并行系统已成为主流处理器芯片。此外,根据摩尔定律,其并行性将不断扩展。这带来了严峻的挑战,我们需要开发出可透明地扩展并行性的应用软件,以便利用日益增加的处理器内核数量,这种情况正如 3D 图形应用程序透明地扩展其并行性以支持配备各种数量的内核的多核 GPU。

  CUDA 是一种并行编程模型和软件环境,用于应对这种挑战,同时保证熟悉 C 语言等标准编程语言的程序员能够迅速掌握 CUDA。

  CUDA 的核心有三个重要抽象概念:线程组层次结构、共享存储器、屏蔽同步(barrier synchronization),可轻松将其作为 C 语言的最小扩展级公开给程序员。

  这些抽象提供了细粒度的数据并行化和线程并行化,嵌套于粗粒度的数据并行化和任务并行化之中。它们将指导程序员将问题分解为更小的片段,以便通过协作的方法并行解决。这样的分解保留了语言表达,允许线程在解决各子问题时协作,同时支持透明的可伸缩性,使您可以安排在任何可用处理器内核上处理各子问题:因而,编译后的 CUDA 程序可以在任何数量的处理器内核上执行,只有运行时系统需要了解物理处理器数量。

  可伸缩的编程模型允许CUDA架构能够在处理器的数目以及内存分配上具备很大的市场跨度:从高端狂热玩家的 GeForce GTX 280 GPU 以及专业的Quadro 和 Tesla 计算产品到主流的价格便宜的GeForce GPU。

0
相关文章