◆ GPU+CPU异构运算
实际上,在GPU计算中CPU和GPU之间是相连的,而且是一个异构的计算环境。这就意味着说你的应用程序当中,顺序执行这一部分的代码是在CPU里面进行执行的,而并行的也就是计算密集这一部分是在GPU里面进行。
到底什么是顺序,什么是并行?用简单例子说,假设每人手中都有一瓶水,这里有一个桶,要把这个桶装满,顺序的话,就是一个人来了以后另外一个人再过来; 并行的话,所有人把水同时往桶里倒,这样的话,显然通过并行的方式速度会快很多。
而且这里还有另外一个区别,现在CPU里面可能是有双核或者是四核,根据它们的发展路径,下一站可能是八核。但现在GPU当中核心的数量是以百来计算的,在CPU中,我们说的是Mutli-Core,大概就是多核的意思;但是GPU里面用的是Many-Core,意思是群核。
如果大家一同到这里往水桶里面倒水的话,就是一种并行;但如果只是一声令下,所有人都到前面去到水,可能场面的秩序会很混乱,因此,在并行运算当中,需要对它进行控制,使它有秩序。就像一支部队需要一名指挥官一样来保证这个部队能够有序地服从命令。而从这个意义上来说,CUDA就像指挥官一样,通过使用CUDA,这些程序能够被有效、高效地使用。
实际上在并行运算当中,数据是被分为一块一块地同时执行。运算的结果也是同顺序计算相同的,是按照一种并行的方式进行表达的。
异构运算(heterogeneous computing)的想法是这样的,通过使用计算机上的主要处理器,如CPU以及GPU来让程序得到更高的运算性能。一般来说,CPU由于在分支处理以及随机内存读取方面有优势,在处理串联工作方面是好手。在另一方面,GPU由于其特殊的核心设计,在处理大量有浮点运算的并行运算时候有着天然的优势。完全使用计算机性能实际上就是使用CPU来做串联工作,而GPU负责并行运算,简单来讲,异构运算就是“使用合适的工具做合适的事情”。
那么什么程序是以串联工作为主而什么程序又是以并行的运算为主呢?其实只有很少很少的程序使用纯粹的串联或者并行的,大部分程序同时需要两种运算形式。编译器、文字处理软件、浏览器、e-mail客户端等都是典型的串联运算形式的程序。而视频播放,视频压制,图片处理,科学运算,物理模拟以及3D图形处理(Raytracing及光栅化)这类型的应用就是典型的并行处理程序。
