高性能运算技术-CUDA

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高性能运算技术——CUDA
[摘要]在游戏和3D等的推动作用下,GPU得到快速的发展,目前其运算速度已经大大超过CPU,为了充分利用有限的资源,有必要将其用于除了图像处理之外的领域。

但是传统的GPGUP模式使用受到图形API的限制,而且开发困难,难以得到发展。

CUDA的出现解决了以上问题,给GPGPU的发展带来新的希望,是计算机技术领域中的一大突破。

什么是CUDA
在介绍CUDA之前,不得不先介绍一个硬件——GPU(Graphic Processing Unit 图形处理单元)。

顾名思义,这是专业处理图形信息的核心处理器,是现代显卡的核心部件。

早期的计算机图形处理相对简单,图形、视频等需要大量运算的功能都是交由CPU(Central Processing Unit中央处理器)独立完成。

但是随着人们对图形视觉要求的不断提高,尤其是大量3D图形,高清影视,3D游戏的出现,人们发现庞大的图形数据计算量已经超出CPU承载能力。

为了满足海量数据的图形计算需求,人们将图形计算功能脱离出来,为其设计一块专门的芯片,这就是GPU。

1999年NVIDIA公司首先提出GPU的概念,起初的设计的宗旨只是实现图形加速。

但是在其出现之后,在游戏产业的推动下,GPU得到飞跃的发展,基本上平均每
6个月就有性能翻倍的产品面世,短短几年间,GPU的运算能力就已远远超越了CPU。

人们开始觉得如此强大的计算能力如果只能应用在图形方面,对计算资源来说是一个极大的浪费。

为了能够在图形计算之外的更多领域发挥GPU强大的计算功能,人们开始研究如何能够利用GPU完成图形数据之外的数据运算,从而提出了GPUG(General-purpose computing on graphics processing units 通用计算图形处理单元)的概念。

但是传统的通用计算图形处理单元(GPGPU)存在很大的不便。

原因在于:首先,传统GUGPU是通过图形API间接使用GPU的计算能力,导致应用程序的
运行依赖于庞大的图形库,同时要求变成人员必须掌握图形库相关的技术;其次,GPU的运算功能受限于图形API,导致GPU在使用上存在许多局限。

2007年6月20日,著名GPU厂商NVIDIA推出了统一计算设备架构——CUDA。

这是一个完整的GPGPU解决方案,它不用再像传统那样必须将计算映射到图形API中,而是供了硬件的直接访问接口,增强了GPU处理不同类型数据的能力;另外一方面,CUDA的GPU编程语言基于标准的c语言,因此任何有C语言基础的用户都很容易地开发CUDA的应用程序,CUDA的开发门槛大大降低了。

CUDA的构成
目前CUDA包含三个部分:开发库、运行时环境和驱动。

开发库是基于CUDA技术所提供的应用开发库。

目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。

这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。

运行时环境提供了应用开发接口和运行时组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。

运行时组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在GPGPU开发中所需要的功能和能够使用到的资源接口。

驱动是可支持CUDA(CUDA-enable)的GPU的设备抽象层,提供硬件设备的抽象访问接口。

CUDA提供运行时环境也是通过这一层来实现各种功能的。

CUDA运行方式
在CUDA的架构下,一个程序分为两个部份:host端和device端。

Host端是指在CPU上执行的部份,而device端则是在GPU上执行的部份。

通常host端程序会将数据准备好后,复制到显卡的内存中,再由GPU执行device端程序,完成后再由host端程序将结果从显卡的内存中取回。

在CUDA架构下,GPU执行时的最小单位是线程。

数个线程可以组成一个块。

一个块中的线程能存取同一块共享的内存,而且可以快速进行同步的动作。

每一
个块所能包含的线程数目是有限的。

不同块中的线程无法存取同一个共享的内存,因此无法直接互通或进行同步。

由于GPU大量并行计算的特性,它处理一些问题的方式和CPU是不同:CPU 通常使用cache来减少存取主内存的次数,以提高执行效率,而GPU则多半没有cache(或很小),而利用并行化执行的方式来提高效率(当第一个线程需要等待内存读取结果时,则开始执行第二个)。

因此,最适合利用CUDA处理的问题,是可以大量并行化的问题,这才能有效
利用GPU上的大量执行单元。

CUDA的优点
CUDA的优势在于可简易的应用GPU的运算能力进行高强度运算,CUDA的运算性能和GPU的性能有很大关系。

GPU具有高速的浮点运算能力,一般在10 Gflops以上(每秒可进行10亿次浮点运算),而GeForce6系列的浮点运算能力已经在40 Gflops左右,GeForce7950GX2更是达到了384 Gflops;在向量计算方面能够获得比CPU高出十倍的计算效率。

GPU并行计算的能力更是强大,它内部具有大量的快速存储系统,NVIDIA的8800有128个处理器,此外,GPU的硬件设计能够管理数千个并行线程,这数千个线程全部由GPU创建和管理而不需要开发人员进行任何编程与管理。

GPU /CPU计算能力比较
GPU/CPU存储器带宽比较
GPU特殊的硬件架构突出了对CPU的优势:拥有高带宽的独立显存;浮点
运算性能高;几何处理能力强;适合处理并行计算任务;适合进行重复计算;适合图像或视频处理任务;能够大幅度降低系统成本。

CUD应用前景
由于CUDA的特点是处理密集型数据和并行数据计算, 因此非常适合需要大规模并行计算的领域。

目前CUDA技术主要运用在游戏、图形动画、科学计算、地质、生物、物理模拟等领域。

将来,CUDA凭借大的并行计算能力,以及越来越方便的开发环境,将来有可能运用于搜索引擎中的排序、文本分类等相关算法的应用,数据库、数据挖掘,电信、金融、证券数据分析,数理统计分析,生物医药工程,导航识别,军事模拟,无线射频模拟,图像语音识别等需要大规模数据密集型计算的领域。

同时对于个人计算机来说,可以进一步协调CPU进行工作,分担CPU的几双负担,实现硬件加速功能能,使普通用户在使用计算机室能够够得到更优异的使用体验,充分利用有限的硬件资源。

“快”是奥林匹克精神之一,也是计算机发展的必然方向。

参考文献:
《CUDA—走向GPGPU新时代》《程序员》2008年03期《CUDA并行计算的应用研究》董荦、葛万成、陈康力同济大学电子与信息工程学院《GPU与CPU的比较分析》钟联波华中科技大学计算机学院
《深入浅出谈CUDA》百度文库
《新一代高能运算技术——CUDA简介》郭境峰,蔡伟涛汕头超声仪器研究所有限公司《CUDA基本介绍》张舒课件
《CUDA:主导GPU计算的革命》超能网测评报告。

相关文档
最新文档