近日,IT168记者有幸采访到NVidia(英伟达)GPU计算全球总经理Sanford H Russell先生,他为记者详细讲解了CUDA 4.0的最新特性及发展趋势。
▲图 NVidia(英伟达)GPU计算全球总经理Sanford H Russell先生
CUDA 4.0新特性
根据Sanford的介绍, CUDA 1.0主要是针对研究者和尝鲜者;CUDA 2.0的时候,增加了双精度library,主要是针对科学界和高性能计算的研究人士;CUDA 3.0的时候,增加了更多library,同时有了开发工具。到CUDA 4.0的时候,更加易用,功能特性的改进主要涉及应用程序移植的简化、多GPU编程的加速、开发工具的增加和改进三个方面,将有更广泛的开发人员加入到CUDA开发阵营。
Sanford表示,目前发布的CUDA 4.0为RC(发行候选版)版本,但主要改进已经在众多的测试中显现出来。主要包括以下几方面的特性。
(1)统一的虚拟地址空间(UVA)简化并行编程
之前的CUDA版本中,多显卡的设备存储器以及主机端的内存被看做独立的存储器块,各自拥有独立的地址空间。而在CUDA4.0中host端的内存资源和GPU上的设备存储资源被当做一块统一的存储器池,存储器地址统一编码,多GPU之间可以通过PCIe总线直接进行通信,而不再需要通过内存进行中转。同时32位系统上支持超4G寻址空间调试。这个就像一个图书馆,把一本书放进去,原来有几个房间,你需要记住具体位置,而现在变成单独一个房间,大大简化了CUDA开发者的工作。
(2)GPU Direct 2.0:面向节点内应用
第二个特性就是GPUDirect v2.0,原来有多个GPU,希望在两个GPU之间实现信息或者数据的传输,需要先把一个GPU的内容传到系统内存,再从系统内存考到另外一个GPU,之后再释放系统内存,整个过程比较复杂。
2.0的不一样之处是实现了数据在两个GPU之间直接的传输,显然可以减少代码,同时也加快了速度。GPUDirect 1.0主要用于高性能计算集群应用,方便不同节点之间的GPU相互联系,而GPUDirect 2.0则面向节点内应用,即多GPU并联系统。同一节点内的多块GPU可以不经过CPU、住内存,直接交换各自显存中的数据,可以解决非常大的集群之内的问题。
(3) Thrust C++模板高性能基元库
Thrust是一个编程环境,类似于C++里面的标准模板库,GPU里提供了这么一个Thrust。这是CUDA所支持的一种非常标准的C++的编程模式,称之为Thrust C++模板高性能基元库。它能够提供一系列开源C++并行算法和数据结构,能够让C++开发人员更轻松的使用CUDA编程。与使用标准模板库(STL)以及线程构件(TBB)时相比,Thrust中并行排序等算法的速度可提升5至100倍。通过Thrust,实现了CPU和GPU之间的合作,可以让更适合的处理器完成相应的工作,并根据处理器能力来分配任务。
小 结
凭借C语言以及Fortran语言的支持以及OpenCL和DirectXCompute等NVIDIA可提供的API,GPU计算现在已成主流。凭借用于CUDA的C语言,当今的GPU计算已经产生回报。
目前,支持CUDA的GPU销量已逾1亿,数以千计的软件开发人员正在使用免费的CUDA软件开发工具来解决各种专业以及家用应用程序中的问题,并使用免费的CUDA软件工具来为各种应用程序加速。这些应用程序从视频与音频处理和物理效果模拟到石油天然气勘探、产品设计、医学成像以及科学研究,涵盖了各个领域。
Sanford先生表示,NVIDIA并不像很多人认为的那样,只是简单地做Tesla和CUDA,这是初期的事情。现在考虑真正让用户将GPU的硬件和CUDA集成在一起,使CUDA的支持和服务让用户真正可以方便的应用到GPU,从头到尾、一步一步给用户支持,真正利用GPU的性能,而不仅仅简单的说这是一个卡。这种新的GPU计算的看法不是把CPU和GPU对立起来,应该是CPU+GPU,从而实现最佳的性能。