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

    文章

    5348

    浏览量

    106855
  • gpu
    gpu
    +关注

    关注

    28

    文章

    4980

    浏览量

    132120
  • 人工智能
    +关注

    关注

    1810

    文章

    49221

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    FacenetPytorch人脸识别方案--基于米尔全志T527开发板

    算法实现人脸识别深度神经网络1.简介 Facenet-PyTorch 是一个基于 PyTorch 框架实现的人脸识别库。它提供了 FaceNet 模型的 PyTorch 实现,可以用于训练自己的人
    发表于 11-28 15:57

    NVIDIA与谷歌量子AI部门达成合作

    NVIDIA CUDA-Q 平台使谷歌量子 AI 研究人员能够为其量子计算机创建大规模的数字模型,以解决设计中面临的各种挑战
    的头像 发表于 11-20 09:39 ?797次阅读

    【「算力芯片 | 高性能 CPU/GPU/NPU 微架构分析」阅读体验】--了解算力芯片GPU

    从而充分利用 GPU的强大计算能力。在CUDA编程模型中,GPU的计算资源被组织为线期线程块和线程网格3级。线程是基本的执行单元,线程块是包含多个线程的组,线程网格包含多个线程块的组。线程块和线程网格
    发表于 11-03 12:55

    有没有大佬知道NI vision 有没有办法通过gpu和cuda来加速图像处理

    有没有大佬知道NI vision 有没有办法通过gpu和cuda来加速图像处理
    发表于 10-20 09:14

    【「大模型时代的基础架构」阅读体验】+ 第一、二章学习感受

    今天阅读了《大模型时代的基础架构》前两章,还是比较轻松舒适的;再就是本书知识和我的工作领域没有任何关联,一切都是新鲜的,似乎每读一页都会有所收获,这种快乐的学习过程感觉也挺不错的。 第一章开始介绍了
    发表于 10-10 10:36

    接口芯片的编程模型方法是什么

    接口芯片的编程模型方法是一个复杂的话题,涉及到硬件设计、软件编程、通信协议等多个方面。 1. 接口芯片概述
    的头像 发表于 09-30 11:30 ?741次阅读

    怎么在TMDSEVM6678: 6678自带的FFT接口CUDA提供CUFFT函数库选择?

    请教一下gpgpu上包括4个Riscv cpu和一个DPU, 没有6678,要替换原来信号处理用的6678,该怎么在6678自带的FFT接口CUDA提供CUFFT函数库选择?
    发表于 09-27 07:20