转载:【AI系统】CUDA 编程模式

news/2024/12/11 18:01:05/文章来源:https://www.cnblogs.com/ewr67/p/18600337

前面的文章对 AI 芯片 SIMD 和 SIMT 计算本质进行了分析,结合英伟达 CUDA 实现对 SIMD 和 SIMT 进行了对比,本文将以英伟达 GPU 为例,讲解 GPU 的编程模型。

GPU 编程模型 CUDA

英伟达公司于 2007 年发布了 CUDA,支持编程人员利用更为通用的方式对 GPU 进行编程,更好地发挥底层硬件强大的计算能力,以英伟达 GPU 为例对 GPU 的编程模型进行讲解。

SIMD vs SIMT 执行模式

SIMD 是单顺序的指令流执行,每条指令多个数据输入并同时执行,大多数 AI 芯片采用的硬件架构体系,向量加法的 SIMD 执行指令如下:

[VLD, VLD, VADD, VST], VLEN

SIMT 是标量指令的多个指令流,可以动态地把线程按 wrap 分组执行,向量加法的 SIMT 执行指令如下:

[LD, LD, ADD, ST], NumThreads

英伟达 GPU 采用了 SIMT 的指令执行模式,给相关产品带来以下优势:

  • 相比较 SIMD 无需开发者费时费力地把数据凑成合适的矢量长度,然后再传入硬件中;

  • 从硬件设计上解决大部分 SIMD Data Path 的流水编排问题,对编译器和程序开发者在流水编排时更加友好;

  • 线程可以独立执行,使得每个线程相对灵活,允许每个线程有不同的分支,这也是 SIMT 的核心;

  • 一组执行相同指令的线程由硬件动态组织成线程组 warp,加快了 SIMD 的计算并行度。

假设一个 Warp 包含 32 个线程,如果需要进行 32000 次迭代,每个迭代执行一个线程,因此需要 1000 个 warp。第一个迭代 Warp0 执行第 0~32 个线程,第二个迭代 Warp1 执行第 33~64 个线程,第二十一个迭代 Warp20 执行第 20x33+1 ~ 20x33+32 个线程,可以看出 SIMT 是标量指令的多个指令流,可以动态地把线程按 Wrap 分组执行,使并行度增加。

第一个迭代 Warp0 执行第 0~32 个线程:

第二个迭代 Warp1 执行第 33~64 个线程:

以此类推,第二十一个迭代 Warp20 执行第 20x33+1 ~ 20x33+32 个线程:

由于程序并行执行最大的瓶颈是访存和控制流,因此 SIMD 架构中单线程 CPU 通过大量控制逻辑进行超前执行、缓存、预取等机制来强行缓解计算瓶颈。

Warps 和 Warp-Level FGMT 关系

SIMT 架构 GPU 通过细粒度的多线程(Fine-Grained Multi-Threading,FGMT)调度,将处理器的执行流水线细分为更小的单元,使得不同线程的指令可以交错执行,从而减少指令执行的等待时间和资源浪费,以此来实现访存和计算并行。

Warp 是在不同地址数据下,执行相同指令的线程集合,所有线程执行相同的代码,可以看出 Thread Warp 中有很多个 Thread,多个 Warp 组成 SIMD Pipeline 执行对应的操作。

SIMT 架构通过细粒度多线程(FGMT)隐藏延迟,SIMD Pipeline 中每个线程一次执行一条指令,Warp 支持乱序执行以隐藏访存延迟,并不是通过顺序的方式调度执行,此外线程寄存器值都保留在 RF(Register File)中,并且 FGMT 允许长延迟。英伟达通过添加 Warp Schedluer 硬件调度,使 Warp 先访存完毕之后交给 SIMD Pipeline 去执行尽可能多的指令,隐藏其它 Warp 的访存时间。

SIMT 相比 SIMD 在可编程性上最根本性的优势在于硬件层面解决了大部分流水编排的问题,Warp 指令级并行中每个 warp 有 32 个线程和 8 条执行通道,每个时钟周期执行一次 Warp,一次 Warp 完成 24 次操作。

在 GPU 宏观架构层面,GDDR 里面的数据通过内存控制器(Memory Controller)传输到片内总线(Interconnection Network),然后分发到具体的核心(Cuda Core/Tensor Core),在每个执行核心中会有 SIMD 执行单元,从而实现并行计算。

AMD 编程模型

AMD 的显卡也是有大量的计算单元和计算核心,为什么没有 SIMT 的编程模式?

2016 年 AMD 推出开放计算平台(Radeon Open Computing platform,ROCm),对全新 Radeon GPU 硬件的软件支持,全新数学库和基础雄厚的现代编程语言,旨在加速高性能,高能效异构计算系统开发。在相当大的程度上兼容 CUDA,目标是建立替代 CUDA 生态。

在 2020 年 CDNA 架构面世前,AMD 数据中心 GPU 一直使用的是 GCN 系列架构,搭载 GCN 系列架构的产品在 2012 年就已推出,虽然在游戏机等场景获得较高市场份额,但在数据中心市场并未取得显著成果,这与其性能表现有关。目前 AMD 将其 GPU 架构开发分为单独的 CDNA 和 RDNA 线路,分别专门用于计算和图形。

2023 年 AMD 发布 MI300X,将计算拆分到加速器复合芯片 (XCD) 上,每个 XCD 包含一组核心和一个共享缓存。具体来说,每个 XCD 物理上都有 40 个 CDNA 3 计算单元,其中 38 个在 MI300X 上的每个 XCD 上启用。XCD 上也有一个 4 MB 二级缓存,为芯片的所有 CU 提供服务。MI300X 有 8 个 XCD,总共有 304 个计算单元。以 CDNA 3 架构的 MI300X 可以将所有这些 CU 公开为单个 GPU。

每个 CU 有 4 个 SIMD 计算单元,每个周期 CU 调度程序会从 4 个 SIMD 中选择一个进行执行,并检查线程是否准备好执行。AMD MI300 支持 ROCm 6,支持 TF32 和 FP8 数据类型,Transformer Engine 和结构化稀疏性,AI/ML 框架等。

英伟达的 H100 由 132 个流式多处理器 (SM)组成,作为一个大型统一的 GPU 呈现给程序员。计算通过 CUDA 程序分发到具体的核心(Cuda Core/Tensor Core),每个执行核心有 SIMD 执行单元,从而实现并行计算。

转载自:| https://www.cnblogs.com/ZOMI/articles/18558636 | header |
| ---------------------------------------------- | ------ |
| | |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/850964.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转载:【AI系统】AI 芯片的思考

为了满足数据中心算力需求,谷歌在 2014 年开始研发基于特定领域架构(Domain-specific Architecture,DSA)的 TPU(Tensor Processing Unit),专门为深度学习任务设计的定制硬件加速器,加速谷歌的机器学习工作负载,特别是训练和推理大模型。 David Patterson(大卫帕特森)…

NRF52810超低功耗SOC蓝牙芯片支持ANT和2.4 GHz私有协议NRF52832低成本方案64Marm

nRF52810 系统级芯片(SoC) 是 nRF52 系列的基准成员,是NRF52832的低成本方案。它满足了将高级低功耗蓝牙 功能和协议并发性引入应用的挑战,其价位使得向应用添加低功耗蓝牙连接极具吸引力。它是不太复杂的应用的理想选择,也是大型应用中的低功耗蓝牙 连接处理器的理想选择…

转载:【AI系统】谷歌 TPU 历史发展

在本文中,我们将深入探讨谷歌的 Tensor Processing Unit(TPU)的发展历程及其在深度学习和 AI 领域的应用。TPU 是谷歌为加速机器学习任务而设计的专用集成电路(ASIC),自首次推出以来,TPU 经历了多次迭代升级,包括 TPU v1、v2、v3 和 v4,以及 Edge TPU 和谷歌 Tensor 等…

转载:【AI系统】谷歌 TPUv3 POD 形态

TPU v3 vs. TPU v2TPU v3 实际上就是 TPU v2 的增强版。TPU v3 相比 TPU v2 有约 1.35 倍的时钟频率、ICI 贷款和内存带宽,两杯 MXU 数量,峰值性能提高 2.7 倍。在同样使用除了显眼的蓝色外,相比于 TPU v2,TPU v3 在只增大 10%体积的情况下增加了 MXU 的数量,从 2 个翻倍到…

转载:【AI系统】谷歌 TPUv2 训练芯片

在 2017 年,谷歌更新了他们的 TPU 序列。谷歌将这一代 TPU 称之为 “用于训练神经网络的特定领域超级计算机”,那么显而易见,相比于专注于推理场景的 TPU v1,TPU v2 将自己的设计倾向放到了训练相关的场景。如果回顾历史,在 2017 年前后,深度学习跨时代的工作如雨后春笋般…

四大主流消息队列 场景化选型指导:kafka、rocketmq、rabbitmq、pulsar

消息队列是用于在分布式系统中存储和转发消息的异步通信协议,对于实现系统间解耦合至关重要。通过消息队列选型,开发者能够针对不同业务场景挑选最适合的消息队列,以满足特定需求。例如,在选择消息队列时,需考量其性能要求如吞吐量、延迟等指标,以及是否支持顺序消息或事…

转载:【AI系统】GPU 基础

GPU 是 Graphics Processing Unit(图形处理器)的简称,它是计算机系统中负责处理图形和图像相关任务的核心组件。GPU 的发展历史可以追溯到对计算机图形处理需求的不断增长,以及对图像渲染速度和质量的不断追求。从最初的简单图形处理功能到如今的高性能计算和深度学习加速器…

转载:【AI系统】超异构计算

在本文中我们要从更远的视角来看看计算机架构发展的黄金 10 年,主要将围绕异构计算和超异构来展开。在开始具体内容前,我们非常推荐您观看以下两个视频:计算机架构的新黄金时代:A New Golden Age for Computer Architecture编译器的黄金时代:The Golden Age of Compiler D…

高效实现金蝶分布式调入单与旺店通采购订单数据集成

金蝶分布式调入单与旺店通采购订单的高效数据集成方案 在企业信息化系统中,数据的无缝对接和高效流转是提升业务效率的关键。本文将分享一个实际案例:如何通过轻易云数据集成平台,将金蝶云星空中的分布式调入单数据集成到旺店通企业奇门的采购订单中。背景概述 在本次集成方…

导航栏-0xShe网络安全导航

0xShe网络安全导航 安全平台,这个模块有一些安全社区 挖src的这里放了很多的src平台 这里也有一些好用的工具 本文来自博客园,作者:CLLWA,转载请注明原文链接:https://www.cnblogs.com/cll-wlaq/p/18600260本文仅做交流学习,不可用于一切非法行为,否则后果自负!

转载:【AI系统】核心计算之矩阵乘

AI 模型中往往包含大量的矩阵乘运算,该算子的计算过程表现为较高的内存搬移和计算密度需求,所以矩阵乘的效率是 AI 芯片设计时性能评估的主要参考依据。本文我们一起来看一下矩阵乘运算在 AI 芯片的具体过程,了解它的执行性能是如何被优化实现的。 从卷积到矩阵乘 AI 模型中…

数据的分布和映射

数据的分布和映射是数据分析中的两个重要概念。它们帮助我们理解数据的特征,并为后续的数据处理和分析提供基础。 数据的分布 定义:数据的分布描述了数据集中每个值出现的频率或概率。它提供了数据集的形状、中心趋势和离散程度的信息。 目的:通过分析数据的分布,我们可以了…