◆ GPU是并行计算的高手
仅仅几年的时间,可编程图像处理器单元已经发展成为绝对的计算主力,由于具有由高内存带宽驱动的多个核心,今天的GPU为图像和非图像处理提供了难以置信的资源。

|
|
发展背后的主要原因是GPU是特定于计算密集的、高并行的计算,而这正是图像渲染所需要的,因此GPU设计了更多的晶体管专用于数据处理,而非数据高速缓存和流控制。

|
|
GPU的处理核心SP基于传统的处理器核心设计,能够进行整数,浮点计算,逻辑运算等操作,从硬体设计上看就是一种完全为多线程设计的处理核心,拥有复数的管线平台设计,完全胜任每线程处理单指令的工作。
GPU内的线程分成多种,包括像素、几何以及运算三种不同的类型,在三维图像处理模式下,大量的线程同时处理一个shader program以达到最大化的效率,所以像GTX 200 GPU的核心内很大一部分面积都作为计算之用,和CPU上大部分面积都被缓存所占据有所不同,大约估计在CPU上有20%的晶体管是用作运算之用的,而(GTX 200)GPU上有80%的晶体管用作运算。GPU处理的首要目标是运算以及数据吞吐量,而CPU内部晶体管的首要目的是降低处理的延时以及保持管线繁忙,这也决定了GPU在密集型计算比起CPU来更有优势。

具体来说,GPU专用于解决数据并行计算(同一程序在许多数据元素上并行执行)、具有高运算密度(算术运算与内存操作的比例)的问题。因为同一程序为每个数据元素执行,所以对高级流控制具有较低的要求;又因为在许多数据元素上执行并具有高运算密度,所以内存访问延迟可以使用计算而非大的数据高速缓存来隐藏。
数据并行处理将数据元素映射到并行处理线程。处理大型数据集合(比如数组)的许多应用程序可以使用数据并行编程模型来加速计算。在3D渲染中,大型像素和顶点集合映射到并行线程。同样的,图像和媒体处理应用程序,比如渲染图像的后期处理、视频编码和解码、图像扩展、立体视觉、模式识别,可以将图像块和像素映射到并行处理线程。事实上,图像渲染和处理以外的许多算法也是可由数据并行处理来加速,范围涉及一般的信号处理或物理模拟,直至财务计算或计算生物学。
但是,直到现在,获得GPU中的所有计算能力并将其有效用于非图像应用程序中仍然是一个难题,正如前面所说的困难,迫切需要一种新颖的硬件和编程模型,让GPU的计算能力得以完全发挥,并将GPU暴露为一种真正通用的数据并行计算设备。
GPU计算,并不是说不再需要CPU了。
