近些年来,虽然CPU方面的发展脚步并没有停歇,不过面对日益庞大的并行计算项目还是显得有些力不从心。即使是能够通过大批量多CPU并联从而实现高速计算,但是这样以来整体造价成本也就非常高昂。而NVIDIA在近两年来逐渐成长起来的CUDA则很好的解决了这一问题。
◆协助CPU,实现更快速的并行计算:
众所周之,CPU与GPU之间虽然各司其职,但是内部关系却非常紧密,在一个完整的PC平台当中二者缺一不可。CPU就好像一个全能型选手,虽然各个领域都能够应对,但是没有一个非常专长的项目;而GPU则不同,虽然在技术方面不如CPU那样全能,但是在单一领域当中却是技术出众。两者在整个PC系统当中,各有所长、取长补短。不过在原有的PC系统中,GPU往往仅仅担当了3D图形处理的任务,而其出色的并行处理能力在非3D图形处理情况下则完全浪费掉了。
究其原因在于,CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计,就是要兼顾程序执行和数据运算的并行性、通用性以及它们的平衡性;而GPU的设计初衷则完全不同,GPU为了能够达到同类型数据的更快速的密集运算,因此往往被设计有更多的重复计算单元。这就决定了CPU和GPU的运算方式以及运算能力的差别,CPU更加适合复杂的数据运算,而GPU则更加适合大量简单的并行运算。
而GPU今年来的发展也如同CPU甚至超越了CPU的发展速度,它们的并行运算能力也得到了飞跃式的发展。正是出于这样的原因,GPGPU这个概念才得以诞生。GPGPU并非是抛开CPU独立的部分,而是一个辅助CPU进行并行计算的模块。
那么,如何使得CPU与GPU之间很好的进行程序之间的衔接呢?以GPGPU的概念来看,显卡仍然需要以传统的DirectX和OpenGL这样的API来实现,对于编程人员来说,这样的方法非常繁琐,而CUDA正是以GPGPU这个概念衍生而来的新的应用程序接口,不过CUDA则提供了一个更加简便的方案——C语言。
◆新标准的定制者——NVIDIA
CUDA的诞生,可以说是NVIDIA为GPGPU或者说显卡参与并行运算行业定制的一个新标准。同时,目前CUDA也成为了同行业当中的一个领袖。CUDA能够更好的让GPU资源得到利用,而CUDA这个新的类似于API的接口正是NVIDIA为其量身定制的新标准。
对于软件开发者来说,他们可以通过CUDA这个接口使用C语言便可轻松实现对GPU资源的调用。这个新的标准将会在未来更多的被软件开发人员所利用,从而为用户带来越来越多的基于CUDA技术而开发的应用程序软件。这些软件将会覆盖到多媒体、航空航天、建筑、医学、科学计算等等众多的应用领域。今天,我们就从GPGPU开始谈起,看看CUDA是如何实现大规模的并行计算的。