CUDA详解

article/2025/9/4 21:52:44

CUDA(Compute Unified Device Architecture,统一计算设备架构),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。

应用范围

CPU与GPU并用的“协同处理”

计算行业正在从只使用CPU的“中央处理”向CPU与GPU并用的“协同处理”发展。为打造这一全新的计算典范,NVIDIA™(英伟达™)发明了CUDA(Compute Unified Device Architecture,统一计算设备架构)这一编程模型,是想在应用程序中充分利用CPU和GPU各自的优点。该架构已应用于GeForce™(精视™)、ION™(翼扬™)、Quadro以及Tesla GPU(图形处理器)上,对应用程序开发人员来说,这是一个巨大的市场。

GPU架构

在消费级市场上,几乎每一款重要的消费级视频应用程序都已经使用CUDA加速或很快将会利用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、G92、G94、G96、GT200、GF100、GF104、GF106、GF110、GF114、GF116、GK110、GK104、GK106、GK107、GM107、GM200、GM204、GM206、GP102、GP104、GP106、GP107、TU102、TU104、TU106、TU116、TU117平台(即GeForce 8~GeForce RTX2080Ti/GTX1660Ti)的NVidia显卡才能使用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开发环境包括:

nvcc C语言编译器

适用于GPU(图形处理器)的CUDA FFT和BLAS库。

分析器

适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)

CUDA运行时(CUDA runtime)驱动程序(在标准的NVIDIA GPU驱动中也提供)。

CUDA编程手册

CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。这些范例包括:

· 并行双调排序

· 矩阵乘法

· 矩阵转置

· 利用计时器进行性能评价

· 并行大数组的前缀和(扫描)

· 图像卷积

· 使用Haar小波的一维DWT

· OpenGL和Direct3D图形互操作示例

· CUDA BLAS和FFT库的使用示例

· CPU-GPU C—和C++—代码集成

· 二项式期权定价模型

· Black-Scholes期权定价模型

· Monte-Carlo期权定价模型

· 并行Mersenne Twister(随机数生成)

· 并行直方图

· 图像去噪

· Sobel边缘检测滤波器

· MathWorks MATLAB®

新的基于1.1版CUDA的SDK范例也已经发布了。

技术功能

· 在GPU(图形处理器)上提供标准C编程语言

· 为在支持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 层面,因而提高性能。

所支持的OS(operating system)

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技术愈发成熟。

背景

计算正在从CPU"中央处理"向CPU与GPU"协同处理"的方向发展。为了实现这一新型计算模式,英伟达发明了英伟达™ CUDA™ 并行计算架构。该架构正运用于英伟达™ (NVIDIA)Tesla™、英伟达™ Quadro(NVIDIA Quadro)以及英伟达™ 精视™(NVIDIA GeForce)GPU上。对应用程序开发商来说,英伟达™ CUDA™ 架构拥有庞大的用户群。

在科学研究领域,英伟达™ CUDA™ 受到狂热追捧。例如,英伟达™ CUDA™ 能够加快AMBER这款分子动力学模拟程序的速度。全球有6万余名学术界和制药公司的科研人员使用该程序来加速新药开发。在金融市场,Numerix和CompatibL已宣布在一款对手风险应用程序中支持英伟达™ CUDA™ ,而且因此实现了18倍速度提升。

在GPU计算领域中,英伟达™ Tesla™ GPU的大幅增长说明了英伟达™ CUDA™ 正被人们广泛采用。全球《财富》五百强企业已经安装了700多个GPU集群,从能源领域中的斯伦贝谢和雪佛龙到银行业中的法国巴黎银行,这些企业的范围十分广泛。

转自:CUDA_百度百科


http://chatgpt.dhexx.cn/article/S8qjtDMU.shtml

相关文章

CUDA入门

1. 引言 CUDA为a platform and programming model for CUDA-enabled GPUs。该平台通过GPU来进行计算。CUDA为GPU编程和管理 提供C/C语言扩展和API。 CUDA编程中,会同时使用CPU和GPU进行计算: CPU system:称为host。GPU system:…

cuda和cudatoolkit

Pytorch 使用不同版本的 cuda 由于课题的原因,笔者主要通过 Pytorch 框架进行深度学习相关的学习和实验。在运行和学习网络上的 Pytorch 应用代码的过程中,不少项目会标注作者在运行和实验时所使用的 Pytorch 和 cuda 版本信息。由于 Pytorch 和 cuda 版…

最新CUDA环境配置(Win10 + CUDA 11.6 + VS2019)

最新CUDA环境配置(Win10 CUDA 11.6 VS2019) 本篇博客根据NVIDIA 官方文档所述, 并根据自己实践得出. 供各位需要的朋友参考. 1.前言 本篇文章的软件环境为: Windows 10CUDA 11.6VS2019 CUDA是目前做人工智能, 深度学习等方向的必备工具库. 由CUDA衍生出的加速工具很多, …

一文搞懂CUDA

什么是cuda 统一计算设备架构(Compute Unified Device Architecture, CUDA),是由NVIDIA推出的通用并行计算架构。解决的是用更加廉价的设备资源,实现更高效的并行计算。 CUDA是NVIDIA公司所开发的GPU编程模型,它提供…

GPU,CUDA,cuDNN的理解

我们知道做深度学习离不开GPU,不过一直以来对GPU和CPU的差别,CUDA以及cuDNN都不是很了解,所以找了些资料整理下,希望不仅可以帮助自己理解,也能够帮助到其他人理解。 先来讲讲CPU和GPU的关系和差别吧。截图来自资料1(CUDA的官方文档): 从上图可以看出GPU(图像处理器,…

CUDA编程之快速入门

CUDA(Compute Unified Device Architecture)的中文全称为计算统一设备架构。做图像视觉领域的同学多多少少都会接触到CUDA,毕竟要做性能速度优化,CUDA是个很重要的工具,CUDA是做视觉的同学难以绕过的一个坑,必须踩一踩才踏实。CUDA编程真的是入门容易精通难,具有计算机体…

CUDA学习

想想学习CUDA的时间也应该有十来天了,也该是做一个小总结了,说说我理解的CUDA,它到底是什么东西? 其实说到CUDA,还真的没几个人知道,说实话,我也听说不久,主要因为它2007年才刚发布&…

CUDA简介

CUDA简介 CUDA是什么 CUDA,Compute Unified Device Architecture的简称,是由NVIDIA公司创立的基于他们公司生产的图形处理器GPUs(Graphics Processing Units,可以通俗的理解为显卡)的一个并行计算平台和编程模型。 通过CUDA&#…

CUDA是什么-CUDA简介

在大家开始深度学习时,几乎所有的入门教程都会提到CUDA这个词。那么什么是CUDA?她和我们进行深度学习的环境部署等有什么关系?通过查阅资料,我整理了这份简洁版CUDA入门文档,希望能帮助大家用最快的时间尽可能清晰的了…

java队列和栈 共同_java 栈和队列的模拟--java

栈的定义:栈是一种特殊的表这种表只在表头进行插入和删除操作。因此,表头对于栈来说具有特殊的意义,称为栈顶。相应地,表尾称为栈底。不含任何元素的栈称为空栈。 栈的逻辑结构:假设一个栈S中的元素为an,an-1,..,a1&am…

栈和队列学习总结

一、栈 1、特点及应用 先进后出。(如果会和队列先进先出记混的话,就记场景吧:弹栈弹栈,就是把最上面的最新进来的弹出去;而队列就像我们火车站排队检票出站一样,谁排在前面谁就先出去。) 应用的话,其实我们经常接触呀。比如Undo操作(就是撤销操作)就是使用的栈的思想…

栈和队列的共同点和不同点

堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点:堆:顺序随意 栈:后进先出(Last-In/First-Out) 堆 堆:什么是堆?又该怎么理解呢? ①堆通常是一…

栈和队列实现和实例分析

目录 前言栈队列实例分析结语 前言 本篇文章主要讲述数据结构中栈和队列的实现,以及相关实例分析。 栈 注意本文所讲述的栈是数据结构的一种,并不是内存划区中的栈区,但是这两者有相似之处,即:存储数据时满足数据先…

栈和队列的共同处和不同处

共同处 栈和队列的共同处是:它们都是由几个数据特性相同的元素组成的有限序列,也就是所谓的线性表。 不同处 队列 队列(queue)是限定仅在表的一端插入元素、在另一端删除元素的线性表。 在队列中,允许插入的一端被…

索引的优缺点以及索引的设计原则

索引概述 索引(index) 是帮助 MySQL 高效获取数据的数据结构(有序)。 在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据&#xff0…

SQL数据库之索引优缺点

SQL数据库之索引使用原则及利弊 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。 优点 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 可以大大加快数据的检索速度,这也是创建…

Oracle索引的建立及优缺点

在看公司建表语句时发现了这样一段代码 本着学习的态度面向百度::::: 原来这是Oracle的索引 Oracle的索引说明 1)索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。在…

MySQL索引的优缺点

MySQL 中的索引简介 1、索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能。 第一、通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二、可以大大加快数据的检索速度,这也是创建索引的最…

MySQL索引的使用知识有哪些?

面试造火箭,工作拧螺丝,虽然工作时我们都在使用基本的 sql,但是不好意思,面试 90% 都在问原理,例如索引,锁,日志,引擎啊等等。 在关系数据库中,索引是一种单独的、物理的…

索引的数据结构与优缺点

1、索引的数据结构 什么是索引? 索引就是mysql为了提高查询数据的一种数据结构。在数据之外,数据库系统还维护着满足特定查找算法 的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找 算法…