CUDA:一种在GPU上进行计算的新架构

时间:2008-12-17   来源:   网友评论:0   人气: 230 作者:

前面我们提到过CUDA,那CUDA到底是何方神圣呢?

  它是我们迫切需要的新颖的硬件和编程模型,能让GPU的计算能力得以完全发挥,并将GPU暴露为一种真正通用的数据并行计算设备。

  CUDA表示Compute Unified Device Architecture(统一计算设备架构),是NVIDIA为自家的GPU编写了一套编译器及相关的库文件。作为一种新型的硬件和软件架构,用于将GPU上作为数据并行计算设备在GPU上进行计算的发放和管理,而无需将其映射到图像API。
A1.jpg 

CUDA提供了硬件的直接访问接口,不必依赖图形API

  CUDA可用于GeForce 8系列、Tesla解决方案和一些Quadro解决方案,操作系统的多任务机制负责管理多个并发运行的CUDA和图像应用程序对GPU的访问。

  CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。CUDA是业界的首款并行运算语言,而且其非常普及化,目前有高达8千万的PC用户可以支持该语言。

  CUDA的特色如下,引自NVIDIA的官方说明:

  1、为并行计算设计的统一硬件软件架构。有可能在G80系列上得到发挥。
  2、在GPU内部实现数据缓存和多线程管理。这个强,思路有些类似于XB360 PS3上的CPU编程。
  3、在GPU上可以使用标准C语言进行编写。
  4、标准离散FFT库和BLAS基本线性代数计算库。
  5、一套CUDA计算驱动。
  6、提供从CPU到GPU的加速数据上传性能。瓶颈就在于此。
  7、CUDA驱动可以和OpenGL DirectX驱动交互操作。这强,估计也可以直接操作渲染管线。
  8、与SLI配合实现多硬件核心并行计算。
  9、同时支持Linux和Windows。

◆ CUDA:主导GPU计算的革命

GPU超强的计算能力让它在通用计算领域大有可为,而CUDA则让它变成可能,简单易用的开发环境让CUDA主导起GPU计算的革命。

  正如NVIDIA首席科学家David Kirk所说:“我认为CUDA已经取得了空前成功,它的接受程度令人吃惊。这也表明了人们希望对整台电脑进行编程的浓厚兴趣。过去人们往往是编写一个C程序来控制CPU,再编写一个图形程序来控制GPU。你一定想通过编写一个程序来控制CPU和GPU。因此我坚信,将来CUDA将变得无处不在。如果要对CPU和GPU进行编程并管理系统中的所有资源,那就没有理由不用CUDA。”

  GPU正逐渐将并行计算推向主流,并行计算与异构处理器系统的“联姻”将是大势所趋。而主导这场变革的就是CUDA。随着越来越多的开发者加入到CUDA怀抱,支持CUDA的软件必将渗透到我们生活的方方面面,亿万次的计算能力是我们充满期待最好的诠释。

CUDA的本质

  CUDA的本质是,NVIDIA为自家的GPU编写了一套编译器NVCC极其相关的库文件。CUDA的应用程序扩展名可以选择是.cu,而不是.cpp等。

NVCC是一个预处理器和编译器的混合体。当遇到CUDA代码的时候,自动编译为GPU执行的代码,也就是生成调用CUDA Driver的代码。如果碰到Host C++代码,则调用平台自己的C++编译器进行编译,比如Visual Studio C++自己的Microsoft C++ Compiler。然后调用Linker把编译好的模块组合在一起,和CUDA库与标准CC++库链接成为最终的CUDA Application。由此可见,NVCC模仿了类似于GCC一样的通用编译器的工作原理(GCC编译CC++代码本质上就是调用cc和g++)。
A4.jpg
 CUDA在执行的时候是让host里面的一个一个的kernel按照线程网格(Grid)的概念在显卡硬件(GPU)上执行。每一个线程网格又可以包含多个线程块(block),每一个线程块中又可以包含多个线程(thread)。

  以军队来打比方,每一个线程,就相当于每一个士兵,当要执行某一个大的军事任务的时候,大将军(Host)发布命令,把这次行动分解成一个一个的子任务(kernel_1,kernel_2……kernel_M),每个子任务由不同的统领(Grid)负责,各统领又把任务分成一部分一部分,划分给手下的小头目(Block),这些任务就由小头目下的士兵(Thread)去执行完成。


 

文章评论