CUDA是英伟达公司设计研发一种并行计算平台和编程模型,包含了CUDA指令集架构以及GPU内部的并行计算引擎。开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。
概述
CUDA 是
NVIDIA 发明的一种
并行计算平台和编程模型。它通过利用
图形处理器 (GPU) 的处理能力,可大幅提升计算性能。
基于 CUDA 的
GPU 销量已达数以百万计,软件开发商、科学家以及研究人员正在各个领域中运用 CUDA,其中包括图像与
视频处理、
计算生物学和化学、流体力学模拟、
CT 图像再现、地震分析以及
光线追踪等等。
应用范围
计算行业正在从只使用
CPU 的“中央处理”向 CPU 与 GPU 并用的“
协同处理”发展。为打造这一全新的计算典范,
NVIDIA™(英伟达™)发明了 CUDA(Compute Unified Device Architecture,统一计算设备架构)这一编程模型,是想在
应用程序中充分利用CPU和GPU各自的优点。该架构已应用于 GeForce™(精视™)、ION™(翼扬™)、
Quadro以及Tesla GPU(
图形处理器)上,对应用程序开发人员来说,这是一个巨大的市场。
在
消费级市场上,几乎每一款重要的消费级视频应用程序都已经使用 CUDA/ZLUDA 加速或很快将会利用 CUDA 来加速,其中不乏 Elemental Technologies 公司、MotionDSP 公司以及 LoiLo 公司的产品。
在科研界,CUDA 一直受到热捧。例如,CUDA 现已能够对AMBER进行加速。AMBER 是一款
分子动力学模拟程序,全世界在学术界与制药企业中有超过60,000名研究人员使用该程序来加速新药的探索工作。
在
金融市场,Numerix 以及 CompatibL 针对一款全新的对手风险应用程序发布了 CUDA 支持并取得了18倍速度提升。Numerix 为近400家金融机构所广泛使用。
CUDA 的广泛应用造就了 GPU 计算专用 Tesla GPU 的崛起。全球财富五百强企业已经安装了700多个 GPU 集群,这些企业涉及各个领域,例如能源领域的
斯伦贝谢与
雪佛龙以及
银行业的
法国巴黎银行。
随着
微软 Windows 7 与
苹果 Snow Leopard 操作系统的问世,GPU 计算必将成为主流。在这些全新的操作系统中,GPU 将不仅仅是
图形处理器,它还将成为所有应用程序均可使用的通用
并行处理器。
发展历程
随着显卡的发展,GPU越来越强大,而且GPU为
显示图像做了优化。在计算上已经超越了通用的CPU。如此强大的芯片如果只是作为显卡就太浪费了,因此NVIDIA推出CUDA,让显卡可以用于图像计算以外的目的。
G80核心之后的的显卡都能使用CUDA,
工具集的核心是一个C语言
编译器。G80中拥有128个单独的
ALU,因此非常适合
并行计算,而且
数值计算的速度远远优于CPU。
CUDA的SDK中的
编译器和
开发平台支持Windows、
Linux系统,可以与Visual Studio2005,2008,2010集成在一起。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPU解决方案,提供了硬件的
直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算
体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的
计算能力。CUDA采用C语言作为
编程语言提供大量的
高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动(表2)。
开发库是基于CUDA技术所提供的应用开发库。CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散
快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。这两个数学运算库所解决的是典型的大规模的
并行计算问题,也是在密集数据计算中非常常见的计算类型。开发人员在开发库的基础上可以快速、方便的建立起自己的计算应用。此外,开发人员也可以在CUDA的技术基础上实现出更多的开发库。
运行期环境提供了应用开发接口和运行期组件,包括基本
数据类型的定义和各类计算、
类型转换、内存管理、设备访问和
执行调度等函数。基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在
GPGPU开发中所需要的功能和能够使用到的资源接口,开发人员可以通过运行期环境的
编程接口实现各种类型的计算。
由于存在着多种GPU版本的NVidia显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。CUDA提供运行期环境也是通过这一层来实现各种功能的。基于CUDA开发的应用必须有
NVIDIA CUDA-enable的硬件支持,NVIDIA公司GPU运算
事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。由于CUDA的体系结构中有
硬件抽象层的存在,因此今后也有可能发展成为一个通用的
GPGPU标准接口,兼容不同厂商的GPU产品。
工具包
是一种针对支持CUDA功能的GPU(
图形处理器)的C语言
开发环境。CUDA开发环境包括:
·适用于GPU(
图形处理器)的CUDA FFT和BLAS库。
·适用于GPU(图形处理器)的
gdb调试器(在2008年3月推出alpha版)
·CUDA
运行时(CUDA runtime)
驱动程序(在标准的NVIDIA GPU驱动中也提供)。
CUDA编程手册
CUDA开发者
软件开发包(SDK)提供了一些范例(附有
源代码),以帮助使用者开始CUDA编程。这些范例包括:
· 并行大数组的前缀和(扫描)
· 图像卷积
· CUDA BLAS和FFT库的使用示例
· CPU-GPU C—和C++—代码集成
· 二项式期权定价模型
· Monte-Carlo期权定价模型
· 并行Mersenne Twister(
随机数生成)
新的基于1.1版CUDA的SDK范例也已经发布了。
技术功能
· 为在支持CUDA的NVIDIA GPU(图形处理器)上进行
并行计算而提供了统一的软硬件解决方案
· CUDA兼容的GPU(图形处理器)包括很多:从
低功耗的笔记本上用的GPU到高性能的,多GPU的系统。
· 支持CUDA的GPU(图形处理器)支持并行
数据缓存和线程执行管理器
· 标准FFT(
快速傅立叶变换)和BLAS(基本
线性代数子程序)数值
程序库· 针对计算的专用CUDA驱动
· 经过优化的,从
中央处理器(CPU)到支持CUDA的GPU(
图形处理器)的直接上传、下载通道
· CUDA驱动可与OpenGL和
DirectX图形驱动程序实相互操作
· 支持
Linux 32位/64位以及
Windows XP 32位/64位 操作系统
· 为了研究以及开发语言的目的,CUDA提供对驱动程序的直接访问,以及汇编语言级的访问。
发展现况
支持CUDA的GPU销量已逾1亿,数以千计的
软件开发人员正在使用免费的CUDA
软件开发工具来解决各种专业以及家用
应用程序中的问题。这些应用程序从视频与音频处理和物理效果模拟到
石油天然气勘探、
产品设计、医学成像以及
科学研究,涵盖了各个领域。
CUDA 的核心有三个重要抽象概念:
线程组层次结构、共享存储器、屏蔽同步(barriersynchronization),可轻松将其作为C语言的最小扩展级公开给程序员。
CUDA 软件堆栈由几层组成,一个硬件
驱动程序,一个
应用程序编程接口(API)和它的Runtime,还有二个高级的通用数学库,CUFFT 和CUBLAS。硬件被设计成支持轻量级的驱动和Runtime 层面,因而提高性能。
CUDA支持linux和
Windows操作系统。进行CUDA开发需要依次安装驱动、
toolkit、SDK三个软件。在安装目录/C/src目录下有很多的
例程可以进行学习。
NVIDIA进军
高性能计算领域,推出了Tesla&CUDA高性能计算系列解决方案,CUDA技术,一种基于NVIDIA
图形处理器(GPU)上全新的
并行计算体系架构,让科学家、工程师和其他专业技术人员能够解决以前无法解决的问题,作为一个专用高性能GPU计算解决方案,NVIDIA把
超级计算能够带给任何工作站或服务器,以及标准、基于
CPU的
服务器集群。
CUDA是用于GPU计算的
开发环境,它是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。在CUDA的架构中,这些计算不再像过去所谓的
GPGPU架构那样必须将计算映射到图形API(
OpenGL和
Direct 3D)中,因此对于开发者来说,CUDA的开发门槛大大降低了。CUDA的GPU
编程语言基于标准的C语言,因此任何有C语言基础的用户都很容易地开发CUDA的应用程序。
由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模
并行计算的领域。CUDA除了可以用C语言开发,也已经提供
FORTRAN的应用接口,未来可以预计CUDA会支持C++、
Java、
Python等各类语言。可广泛的应用在图形动画、
科学计算、地质、生物、
物理模拟等领域。
2008年NVIDIA推出CUDA SDK2.0版本,大幅提升了CUDA的使用范围。使得CUDA技术愈发成熟。
2023年1月4日,英伟达发布RTX4090和RTX4080两款全新旗舰级
笔记本电脑 GPU。
背景介绍
协同处理并行计算架构。该架构正运用于英伟达™ (NVIDIA)Tesla™、英伟达™
Quadro(
NVIDIA Quadro)以及英伟达™ 精视™(NVIDIA GeForce)GPU上。对应用程序开发商来说,英伟达™ CUDA™ 架构拥有庞大的
用户群。
在科学研究领域,英伟达™ CUDA™ 受到狂热追捧。例如,英伟达™ CUDA™ 能够加快AMBER这款
分子动力学模拟程序的速度。全球有6万余名学术界和制药公司的
科研人员使用该程序来加速新药开发。在
金融市场,Numerix和CompatibL已宣布在一款对手风险应用程序中支持英伟达™ CUDA™ ,而且因此实现了18倍速度提升。
在GPU计算领域中,英伟达™ Tesla™ GPU的大幅增长说明了英伟达™ CUDA™ 正被人们广泛采用。全球《
财富》五百强企业已经安装了700多个
GPU集群,从能源领域中的斯伦贝谢和
雪佛龙到
银行业中的
法国巴黎银行,这些企业的范围十分广泛。