CUDA软硬件环境简介
CUDA是用于GPU计算的开发环境,它是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。在CUDA的架构中,这些计算不再像过去所谓的GPGPU架构那样必须将计算映射到图形API(OpenGL和Direct 3D)中,因此对于开发者来说,CUDA的开发门槛大大降低了。CUDA的GPU编程语言基于标准的C语言,因此任何有C语言基础的用户都很容易地开发CUDA的应用程序。
CUDA支持的GPU
CUDA支持的GPU (CUDA-enabled GPU)包含GeForce、Quadro和Tesla三个系列。CUDA-enabled GPU的产品线涵盖了从笔记本电脑到高性能多GPU的系统中。CUDA-enabled GPU支持并行数据高速缓冲(Parallel Data Cache)和线程执行管理器(Parallel Data Cache),每个不同的GPU具备8-128个Stream Processor,具备强大的并行数据计算能力。迄今为止CUDA-enabled GPU详细的列表如下:
GeForce是NVIDIA公司面向消费市场的GPU产品;
Quadro是面向专业图形市场的GPU产品;
而Tesla则是专门面向GPU计算的产品,它不具备图形输出的功能,因此不能作为图形卡来使用。
这三个产品面向不同的应用领域,因此建议在开发和部署CUDA应用的时候需要考虑到产品的应用决定采用不同的GPU。NVIDIA的CUDA-enabled GPU具有一个完整的产品线,各种用户都可以从中选择到合适自己的产品。对于有高密度计算能力需求的用户来说,Quadro和Tesla则是必须的选择。诸如Quadro Plex 1000 Model S4和Tesla S870在一个1U高度的标准服务器机架机箱内装备了四个GPU,每个GPU具备128个stream processor以及1.5GB的存储器,每个1U装置总共具备512个stream processor和6GB存储器,非常适合于有高密度、大规模数据计算需求的用户。CUDA-enabled GPU的家族还在不断地扩大之中,随着NVIDIA新一代GPU的发布,更多的产品也将加入到这个行列中来。
CUDA软件环境
CUDA的架构
如图所示,在CUDA的软件层面,NVIDIA C编译器是其中的核心。CUDA程序是GPU和CPU的混合代码,它首先由NVIDIA C编译器进行编译。经过编译后,GPU和CPU的代码将被分离,GPU代码被编译成GPU计算的机器码,而CPU的C代码输出由标准的C编译器进行编译。因此一个完整的CUDA软件开发环境还需要有一个面向CPU的C编译器。CUDA可以支持多种运行在Windows XP和Linux操作系统下的C开发系统诸如Microsoft Visual C++等。右图是NVIDIA C编译器结构。
其中,EDG将CPU和GPU的代码分离;Open64生成GPU PTX (Parallel Thread eXecution)汇编码。CUDA运行需要CUDA runtime driver的支持,而Profiler则可以提供GPU和CPU kernel调用和内存拷贝的时序分析,从而对性能进行评估并且发现潜在的性能上的问题。
除了编译器外,NVIDIA提供了一些非常实用的函数库。目前有两个数字计算库包含在已经发布的软件包里面,分别是CUDA FFT和CUDA BLAS子程序库。CUDA FFT是快速傅立叶变换(Fast Fourier Transform, FFT)的子程序库,快速傅立叶变换是信号处理之类应用的基本算法。BLAS是基本线性代数的子程序库,提供了高效率的线性代数计算子程序。CUDA FFT和BLAS都是针对GPU高度优化的高性能数学函数库,在CUDA程序中可以方便调用,节省大量的代码编写时间。
CUDA所有软件包都可以从NVIDIA公司的网站上免费下载。NVIDIA建立了一个专门针对CUDA的名为CUDA Zone社区,网址是 http://www.nvidia.com/object/cuda_home.html。它包含各种程序、文档的下载,并且有几个针对开发者的论坛,里面有专人为各位开发者进行服务,解答各种疑问。今后中文化的CUDA Zone也将开通,可以提供中文的CUDA资料下载服务并且直接使用中文对开发者进行服务。 #p#page_title#e#
要使用CUDA进行GPU计算的开发工作,需要下载相应的软件和编程指南。所有CUDA相关的软件都包含在两个软件包中,分别是:
● CUDA Toolkit
CUDA Toolkit是CUDA的核心软件包,它包含有:编译器 (NVCC C编译器)、CUDA FFT和BLAS库、Profiler(分析器)、Debugger、CUDA runtime driver以及编程的手册等。目前CUDA的版本是1.1,支持Linux和Windows XP。在C语言开发工具方面,支持Microsoft Visual C++ 7.1和8.0。未来的CUDA版本将会支持Vista、新一代的C语言开发工具以及支持双精度。
● CUDA SDK
CUDA SDK提供了许多的CUDA实例,这些实例包含有源代码,因此开发者可以从这些事例中获得CUDA编程的经验,而且这些实例的代码也可以直接用于程序的开发中。SDK里面的实例涵盖了CUDA应用的许多方面,在源代码中有详细的注释,对于开发者来说是很有用的参考资料。