首先要说明的一点是,CUDA尤其擅长的是某一方面,而并不是面面俱到。CUDA的开发是基于NVIDIA GPU平台的,因此发挥GPU的并行优势才是最主要的目的。理论上讲,CUDA对于非图形的计算并没有什么限制,不过它还是相对比较适合高度并行的计算,毕竟这是它的长处。这里所谓的高度并行的数量级为上千个,相对于CPU来讲,双核的CPU也许几个线程就能充满它整个的计算单元,然而CUDA-enabled GPU却能够容纳上千个线程(也就是GPU中数百个SP单元的功力),所以常遇到的高性能计算领域的问题就特别适用于CUDA,而之前通常采用计算机集群的方式来进行计算。
而目前GPU已经发展到十分强大的地步,从GeForce6开始,就能够支持比较复杂的控制指令,比如条件转移、分支、循环和子程序调用等。而到了新一代的显卡,GPU的程序控制能力又增强了很多,支持的程序长度也得到了更大的扩展,也就是说利用GPU还是可以写一些比较复杂的程序。
当然CUDA也有其弱势的地方,其还是主要去做那些能够分成很多个独立线程的数值计算。比如说矩阵的乘法计算,矩阵相对应的元素的计算是没有什么联系的,可以很多个线程同时送入很多个处理器进行并行处理,这就非常适合于用CUDA来解决。当然并不是所有的事情CUDA都能够很好地解决,比如像操作系统这样复杂的指令和纷繁的分支循环而又用很少的线程来处理,这显然就不是CUDA的强项了。高度并行的计算是CUDA的技术特性之一。
『GPU的架构非常合适进行大规模的并行计算』
CUDA已经应用在很多领域,包括在通用计算中的一些GPU加速,游戏中的物理模拟等等,而在科学计算中,CUDA可发挥的功效就更大了。比如有限元的计算、神经元的研究计算、地质分析等等科学研究的领域;当然目前GPU计算的应用还是处于一个早期的阶段,大部分CUDA应用都是专业人员和相关的程序员在开发,随着CUDA的广泛推行,以后会有实际的基于CUDA的程序,更多的程序员能够加入进来,并且开发一些可以给大家日常应用带来好处的程序,只要有支持CUDA的GPU就能够利用到GPU计算的好处。
最后来说明一下某些读者对于CUDA的误解,可能有人认为“有了GPU之后CPU就不需要了”,这也是不对的。显然,GPU和CPU还是做不同的工作的,GPU的计算主要集中在高效率低成本的高性能并行计算,所以事实上在一个系统里面,一个高效的GPU配合一个高效的CPU,整体的效率还是会有明显提升的。