什么是GPU计算?
GPU计算或GPGPU就是利用图形处理器(GPU)来进行通用科学与工程计算。
GPU计算的模式就是,在异构协同处理计算模型中将CPU与GPU结合起来加以利用。 应用程序的串行部分在CPU上运行,而计算任务繁重的部分则由GPU来加速。 从用户的角度来看,应用程序只是运行得更快了。因为应用程序利用了GPU的高性能来提升性能。

在过去几年里,GPU的浮点性能已经上升到Teraflop级的水平。 在2006-2007年间,英伟达™(NVIDIA®)推出其叫做“CUDA”的全新大规模并行架构,从而实现了GPGPU的革命并加速了整个计算世界行业。 英伟达™CUDA(NVIDIA® CUDA)架构由数以百计的处理器核心组成,这些核心能够协同工作,共同完成对应用程序中数据集的处理。
过去几年里GPGPU的成功使CUDA并行编程模型相关的编程工作变得十分轻松。 在这种编程模型中,应用程序开发者可修改他们的应用程序以找出计算量繁重的程序内核,将其映射到GPU上,让GPU来处理它们。 应用程序的剩余部分仍然交由CPU处理。 想要将某些功能映射到GPU上,需要开发者重新编写该功能,在编程中采用并行机制,加入“C”语言关键字以便与GPU之间交换数据。 开发者的任务是同时启动数以万计的线程。 GPU硬件可以管理线程和进行线程调度。
英伟达™ Tesla(NVIDIA® Tesla)20系列GPU基于“Fermi”架构,这是最新的英伟达™ CUDA(NVIDIA® CUDA)架构。 Fermi专为科学应用程序而进行了优化、具备诸多重要特性,其中包括:支持500 gigaflop以上的IEEE标准双精度浮点硬件、一级和二级高速缓存、ECC存储器错误保护、本地用户管理的数据高速缓存(其形式为分布于整个GPU中的共享存储器)以及合并存储器访问等等。
"GPU(图形处理器)已经发展到了颇为成熟的阶段,可轻松执行实际应用程序并且其运行速度已远远超过了使用多核系统时的速度。 未来计算架构将是并行核心GPU与多核CPU串联运行的混合型系统。"
Jack Dongarra 教授
田纳西大学创新计算实验室主任
GPU(图形处理器)计算的发展历史
图形芯片最初用作固定功能图形管线。随着时间的推移,这些图形芯片的可编程性日益增加,在此基础之上 NVIDIA?(英伟达?)推出了第一款 GPU(图形处理器)。1999-2000 年间,计算机科学家,与诸如医疗成像和电磁等领域的研究人员,开始使用 GPU(图形处理器)来运行通用计算应用程序。他们发现 GPU(图形处理器)具备的卓越浮点性能可为众多科学应用程序带来显著的性能提升。这一发现掀起了被称作 GPGPU(GPU(图形处理器)通用计算)的浪潮。
此处需要解决的问题为 GPGPU 要求使用图形编程语言来对 GPU(图形处理器)进行编程,如 OpenGL 和 Cg 等。开发人员需要使其科学应用程序看起来像图形应用程序,并将其关联到需要绘制三角形和多边形的问题。这一方法限制了 GPU(图形处理器)的卓越性能在科学领域的充分发挥。
NVIDIA®(英伟达™)认识到了让更多科学群体使用这一卓越性能的强大优势,决定投资来修改 GPU(图形处理器),使其能够完全可编程以支持科学应用程序,同时还添加了对于诸如 C、C++ 和 Fortran等高级语言的支持。此举最终推动诞生了面向 GPU(图形处理器)的 CUDA 架构。
CUDA 并行架构与编程模型
CUDA 并行硬件架构伴随有 CUDA 并行编程模型。该模型提供了一个抽象集合,能够支持实现精细和粗放级别的数据与任务并行处理。编程人员可以选择使用高级语言(如 C、C++ 和 Fortran)或驱动程序 API(如 OpenCL™ 和 DirectX-11 Compute)来实现并行处理。

目前,英伟达™(NVIDIA®)支持利用多种语言和API对GPU进行编程,其中包括C、C++、Fortran语言、OpenCL以及DirectCompute。 如上图所示,开发者可以获得一系列