◆ 让NVIDIA野心勃勃的CUDA
可以应用GPU Computing的环境,异构计算具有强大威力 |
·GPU+CPU异构运算概述
异构运算(heterogeneous computing)的想法是这样的,通过使用计算机上的主要处理器,如CPU以及GPU来让程序得到更高的运算性能。一般来说,CPU由于在分支处理以及随机内存读取方面有优势,在处理串联工作方面是好手。在另一方面,GPU由于其特殊的核心设计,在处理大量有浮点运算的并行运算时候有着天然的优势。完全使用计算机性能实际上就是使用CPU来做串联工作,而GPU负责并行运算,简单来讲,异构运算就是“使用合适的工具做合适的事情”。
那么什么程序是以串联工作为主而什么程序又是以并行的运算为主呢?其实只有很少很少的程序使用纯粹的串联或者并行的,大部分程序同时需要两种运算形式。编译器、文字处理软件、浏览器、e-mail客户端等都是典型的串联运算形式的程序。而视频播放,视频压制,图片处理,科学运算,物理模拟以及3D图形处理(Raytracing及光栅化)这类型的应用就是典型的并行处理程序。
CUDA是业界的首款并行运算语言,而且其非常普及化,目前有高达7千万的PC用户可以支持该语言,以下三大特点让GTX 280能够完全胜任并行运算:
·GPU运算架构:GTX280的核心是为并行运算所设计的,包含了各种有利于并行运算的特性,如共享缓存设计,Atomic操作以及双精度浮点计算的支持。
·大量核心设计:具有240个运行在1.3GHz的微型核心,GTX280可以说是PC上进行浮点运算的利器。
·大型带宽设计:由于数据的吞吐量大,图形运算程序的效率被CPU上的带宽瓶颈给卡住了,由于GTX280上有8个处于核心内部的显存控制器,GTX 280的显存带宽能够达到142GB/s,大量提高了基于显卡的高清视频压缩、物理模拟以及图像处理程序的效率。
·CUDA是什么?
CUDA提供了硬件的直接访问接口,不必依赖图形API |
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
GPGPU使用图形的API如DirectX或者OpenGL来进行运算,这将需要编程人员拥有大量的图形API以及硬件相关技术。而且,编程架构也收到了随机读取写入以及线程配合的限制。编写并行运算的程序很复杂,因为它涉及到使用大量CPU作为同一个簇共同工作的问题。有的桌面程序由于比较难把单一线程的工作量分配给不同线程工作,需要减慢速度才能和多核CPU配合上,这是由于CPU本来就是一个串行的处理器,大量的CPU需要一个非常复杂的软件与其相配合工作。
CUDA去除了这种需要手动管理平行处理的障碍,使用CUDA为基础编写的程序实际上仍然为一个串行的程序。
·核心架构:GPU VS CPU
- 设计目的:CPU核心设计是越快越好地处理处理线性指令。而GPU的核心设计为越快越好地同时处理多个流指令。
- 晶体管:CPU内使用的晶体管大部分被用来作成指令缓存,等待分配中心,硬件分支预测甚至是大型的核心内缓存。这些特性让其在处理单线程任务时获得高速的性能。GPU内大量的晶体管都被用作处理器阵列,多重线程处理部分,共享型缓存以及数个显存管理器。这些特性并不能加速某个特定线程的处理速度,而是为了千百个线程同时运作,优化线程间通讯,以及保持高速显存带宽而设计的。
- 缓存:CPU使用缓存来减少与内存之间的延时问题。GPU使用缓存(或者软件控制的共享缓存)来加大带宽
- 延时管理:CPU使用大缓存和分支预测部分来处理CPU和其他部分之间的延时。这使用了大量的核心空间,同样也导致了能源消耗量大的问题。GPU利用同时处理大量线程的优势来解决延时问题。如果某个线程正在等待从显存返回的信息,GPU能够将其立刻转向处理其他信息,中间不消耗任何时间差。
- 多线程处理:CPU的每一个核心支持单线程或者双线程。而支持CUDA的GPU内每一个SM(Streaming multiprocessor)都支持多达1024个线程。所以在切换线程的时候GPU是无需浪费额外的运算时间。
- SIMD VS SIMT:CPU使用SIMD(single instruction, multiple data)单元来进行向量处理。而GPU使用SIMT(single instruction multiple thread)来进行可拓展的线程处理,SIMT并不需要编程者来把信息转换成向量处理所需的形式而且它也允许线程的任意分支。
- 显存控制器:Intel CPU 目前并没有将内存控制器整合到核心内,而支持CUDA的GPU整合了8个核心内的显存控制器,如此一来和CPU相比GPU就拥有了多达10倍的内存/显存带宽。
GTX 280和Penryn的核心对比图 |
NVIDIA正是想凭借GTX 200强大的计算能力以及CUDA这个架构,将计算机转变成一个以GPU为计算中心的平台。