0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CUDA简介:CUDA编程模型和接口

星星科技指导员 来源:NVIDIA 作者:Ken He 2022-04-19 15:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本项目为CUDA官方手册的中文翻译版,有个人翻译并添加自己的理解。主要介绍CUDA编程模型和接口

1.1 我们为什么要使用GPU

GPU(Graphics Processing Unit)在相同的价格和功率范围内,比CPU提供更高的指令吞吐量和内存带宽。许多应用程序利用这些更高的能力,在GPU上比在CPU上运行得更快(参见GPU应用程序)。其他计算设备,如FPGA,也非常节能,但提供的编程灵活性要比GPU少得多。

GPU和CPU在功能上的差异是因为它们的设计目标不同。虽然 CPU 旨在以尽可能快的速度执行一系列称为线程的操作,并且可以并行执行数十个这样的线程。但GPU却能并行执行成千上万个(摊销较慢的单线程性能以实现更大的吞吐量)。

GPU 专门用于高度并行计算,因此设计时更多的晶体管用于数据处理,而不是数据缓存和流量控制。

下图显示了 CPU 与 GPU 的芯片资源分布示例。

pYYBAGJeZ2KATOe0AABsHBaw-Os076.png

将更多晶体管用于数据处理,例如浮点计算,有利于高度并行计算。GPU可以通过计算隐藏内存访问延迟,而不是依靠大数据缓存和复杂的流控制来避免长时间的内存访问延迟,这两者在晶体管方面都是昂贵的。

1.2 CUDA®:通用并行计算平台和编程模型

2006 年 11 月,NVIDIA® 推出了 CUDA®,这是一种通用并行计算平台和编程模型,它利用 NVIDIA GPU 中的并行计算引擎以比 CPU 更有效的方式解决许多复杂的计算问题。

CUDA 附带一个软件环境,允许开发人员使用 C++ 作为高级编程语言。 如下图所示,支持其他语言、应用程序编程接口或基于指令的方法,例如 FORTRAN、DirectCompute、OpenACC。

poYBAGJeZ1yAKiiLAAH1q_EpXUQ299.png

1.3 可扩展的编程模型

多核 CPU 和众核 GPU 的出现意味着主流处理器芯片现在是并行系统。挑战在于开发能够透明地扩展可并行的应用软件,来利用不断增加的处理器内核数量。就像 3D 图形应用程序透明地将其并行性扩展到具有广泛不同内核数量的多核 GPU 一样。

CUDA 并行编程模型旨在克服这一挑战,同时为熟悉 C 等标准编程语言的程序员保持较低的学习曲线。

其核心是三个关键抽象——线程组的层次结构、共享内存和屏障同步——它们只是作为最小的语言扩展集向程序员公开。

这些抽象提供了细粒度的数据并行和线程并行,嵌套在粗粒度的数据并行和任务并行中。它们指导程序员将问题划分为可以由线程块并行独立解决的粗略子问题,并将每个子问题划分为可以由块内所有线程并行协作解决的更精细的部分。

这种分解通过允许线程在解决每个子问题时进行协作来保留语言表达能力,同时实现自动可扩展性。实际上,每个线程块都可以在 GPU 内的任何可用multiprocessor上以乱序、并发或顺序调度,以便编译的 CUDA 程序可以在任意数量的多处理器上执行,如下图所示,并且只有运行时系统需要知道物理multiprocessor个数。

这种可扩展的编程模型允许 GPU 架构通过简单地扩展multiprocessor和内存分区的数量来跨越广泛的市场范围:高性能发烧友 GeForce GPU ,专业的 Quadro 和 Tesla 计算产品 (有关所有支持 CUDA 的 GPU 的列表,请参阅支持 CUDA 的 GPU)。

pYYBAGJeZ1WAWhqdAAAqnDtQ7Es238.png

注意:GPU 是围绕一系列流式多处理器 (SM: Streaming Multiprocessors) 构建的(有关详细信息,请参阅硬件实现)。 多线程程序被划分为彼此独立执行的线程块,因此具有更多multiprocessor的 GPU 将比具有更少多处理器的 GPU 在更短的时间内完成程序执行。

关于作者

Ken He 是 NVIDIA 企业级开发者社区经理 & 高级讲师,拥有多年的 GPU 和人工智能开发经验。自 2017 年加入 NVIDIA 开发者社区以来,完成过上百场培训,帮助上万个开发者了解人工智能和 GPU 编程开发。在计算机视觉,高性能计算领域完成过多个独立项目。并且,在机器人无人机领域,有过丰富的研发经验。对于图像识别,目标的检测与跟踪完成过多种解决方案。曾经参与 GPU 版气象模式GRAPES,是其主要研发者。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5496

    浏览量

    109090
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5099

    浏览量

    134456
  • 人工智能
    +关注

    关注

    1813

    文章

    49734

    浏览量

    261511
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RV生态又一里程碑:英伟达官宣CUDA将兼容RISC-V架构!

    电子发烧友网报道(文/梁浩斌)英伟达生态护城河CUDA,从最初支持x86、Power CPU架构,到2019年宣布支持Arm CPU,不断拓展在数据中心的应用生态。 在2019年至今的六年
    的头像 发表于 07-19 00:04 6149次阅读
    RV生态又一里程碑:英伟达官宣<b class='flag-5'>CUDA</b>将兼容RISC-V架构!

    首款全国产训推一体AI芯片发布,兼容CUDA生态

    CUDA生态体系。该芯片支持从单机多卡到千卡级集群的灵活扩展,能效比达3.41 TFLOPS/W——在同等功
    的头像 发表于 11-30 07:20 8772次阅读
    首款全国产训推一体AI芯片发布,兼容<b class='flag-5'>CUDA</b>生态

    aicube的n卡gpu索引该如何添加?

    请问有人知道aicube怎样才能读取n卡的gpu索引呢,我已经安装了cuda和cudnn,在全局的py里添加了torch,能够调用gpu,当还是只能看到默认的gpu0,显示不了gpu1,gpu0是集显,训练速度太感人了 你只有一块英伟达的卡,aicube不支持AMD的显卡,所以搜索到的只有一张卡
    发表于 07-25 08:18

    英伟达:CUDA 已经开始移植到 RISC-V 架构上

    ,着重介绍了将 CUDA 移植到 RISC-V 架构的相关工作和计划,展现了对 RISC-V 架构的高度重视与积极布局。   Frans Sijstermanns 首先回顾了英伟达与 RISC-V 之间
    发表于 07-17 16:30 3836次阅读

    进迭时空同构融合RISC-V AI CPU的Triton算子编译器实践

    Triton是由OpenAI开发的一个开源编程语言和编译器,旨在简化高性能GPU内核的编写。它提供了类似Python的语法,并通过高级抽象降低了GPU编程的复杂性,同时保持了高性能。目前
    的头像 发表于 07-15 09:04 1324次阅读
    进迭时空同构融合RISC-V AI CPU的Triton算子编译器实践

    FA模型和Stage模型API切换概述

    API切换概述 FA模型和Stage模型由于线程模型和进程模型的差异,部分接口仅在FA模型下才
    发表于 06-06 06:29

    FA模型访问Stage模型DataShareExtensionAbility说明

    DataAbilityHelper提供对外接口,服务端是由DataAbility提供数据库的读写服务。 Stage模型中,客户端是由DataShareHelper提供对外接口,服务端是由
    发表于 06-04 07:53

    如何基于Kahn处理网络定义AI引擎图形编程模型

    本白皮书探讨了如何基于 Kahn 处理网络( KPN )定义 AI 引擎图形编程模型。KPN 模型有助于实现数据流并行化,进而提高系统的整体性能。
    的头像 发表于 04-17 11:31 681次阅读
    如何基于Kahn处理网络定义AI引擎图形<b class='flag-5'>编程</b><b class='flag-5'>模型</b>

    使用NVIDIA CUDA-X库加速科学和工程发展

    NVIDIA GTC 全球 AI 大会上宣布,开发者现在可以通过 CUDA-X 与新一代超级芯片架构的协同,实现 CPU 和 GPU 资源间深度自动化整合与调度,相较于传统加速计算架构,该技术可使计算工程工具运行速度提升至原来的 11 倍,计算规模增加至 5 倍。
    的头像 发表于 03-25 15:11 1205次阅读

    开发者日记 | 模型转换看得见:RDK X5新一代模型转换可视化工具链

    熊旗24年智能车竞赛地平线赛道国奖获得者创客孵化营成员嵌入式AI大胆玩家目标是减少开发者烦恼Part.1开发者日记Showtime:RDK模型一站式开发工具功能展示Part.2开发者日记故事的开始
    的头像 发表于 03-04 17:28 1345次阅读
    开发者日记 | <b class='flag-5'>模型</b>转换看得见:RDK X5新一代<b class='flag-5'>模型</b>转换可视化工具链

    借助PerfXCloud和dify开发代码转换器

    随着深度学习与高性能计算的迅速发展,GPU计算的广泛应用已成为推动技术革新的一股重要力量。对于GPU编程语言的选择,CUDA和HIP是目前最为流行的两种选择。CUDA是由NVIDIA推出的编程
    的头像 发表于 02-25 09:36 1366次阅读
    借助PerfXCloud和dify开发代码转换器

    NVIDIA Jetson Orin Nano开发者套件的新功能

    生成式 AI 领域正在迅速发展,每天都有新的大语言模型(LLM)、视觉语言模型(VLM)和视觉语言动作模型(VLA)出现。为了在这一充满变革的时代保持领先,开发者需要一个足够强大的平台将云端的最新
    的头像 发表于 12-23 12:54 1967次阅读
    NVIDIA Jetson Orin Nano开发者套件的新功能

    【「大模型启示录」阅读体验】对大模型更深入的认知

    的平衡,解释得清清楚楚,让我这个非专业人士也能明白大模型在实际应用中面临的挑战和限制,也对这些模型的复杂性和挑战有了更深的理解。 而且,书中还提到了OpenAI的成功案例和CUDA技术壁垒的形成,这些
    发表于 12-20 15:46

    BQ78412应用程序编程接口

    电子发烧友网站提供《BQ78412应用程序编程接口.pdf》资料免费下载
    发表于 12-18 14:46 0次下载
    BQ78412应用程序<b class='flag-5'>编程</b><b class='flag-5'>接口</b>

    使用英特尔AI PC为YOLO模型训练加速

    在以往的实践中,当我们针对 ultralytics 的 YOLO 模型开展训练工作时,可供选择的计算设备通常局限于 CPU、mps 以及 cuda 这几种。然而,自 PyTorch2.5 版本发布
    的头像 发表于 12-09 16:14 2104次阅读
    使用英特尔AI PC为YOLO<b class='flag-5'>模型</b>训练加速