GPU架构与通信互联技术介绍

文章目录

  • GPU架构介绍
    • SM 和 Warp Scheduler
  • GPU通信互联技术介绍
    • 1、GPUDirect
      • GPUDirect Shared Access
      • GPUDirect P2P
      • GPUDirect for Video
      • GPUDirect for RDMA
        • RDMA
        • GPUDirect RDMA
      • GPUDirect Storage
    • 2、NVLink & NVSwitch
      • NVLink
      • NVSwitch
    • 3、应用场景总结

GPU架构介绍

SM 和 Warp Scheduler

GPU利用率是用来表示对GPU资源的占用情况,用GPU的专业术语来说就是表示其分配给 SM 的 warp 数量与其可支持的最大数量的比率。

那么什么是SM ?

如下图所示,我们可以看到在整个GPU架构中存在着大量的流式多处理器(Streaming Multiprocessor,SM),它占据着GPU的大部分空间。

在这里插入图片描述

从硬件上看:

  • SP(Streaming Processor):流处理器, 是GPU最基本的处理单元,在fermi架构开始被叫做CUDA core。
  • SM(Streaming MultiProcessor): 一个SM由多个CUDA core组成,每个SM根据GPU架构不同有不同数量的CUDA core,Pascal架构中一个SM有128个CUDA core。
  • 从上面SM的展开图可以看出,每个SM都有自己的寄存器文件(shared memory)、共享内存(Register File)和缓存等资源,并且拥有很多Core资源,可以同时执行多个线程,可以说SM是GPU中的可独立计算单元。

虽然说SM中配有register file和shared memory等存储资源,但他们属于稀缺资源。这些有限的资源就使每个SM中active warps有非常严格的限制,也就限制了并行能力。在这种情况下,由哪些线程资源来占有这些稀缺资源执行任务,就离不开Warp Scheduler调度器。

那么什么是Warp Scheduler呢?

从软件上看:

  • thread: 一个CUDA的并行程序会被以许多个thread来执行。
  • block: 数个thread会被群组成一个block,同一个block中的thread可以同步,也可以通过shared memory进行通信。
  • grid: 多个block则会再构成grid。

warp(线程束)是最基本的执行单元,一般一个warp包含32个并行thread,这些thread只能执行相同的指令。

例如,假如一个SM最大只能存储1024个线程的信息,但一个SM可以拥有超过1024个线程。

那么这时在SM内存的warp线程的调度单元就是Warp Scheduler。

一个SM的CUDA core会分成几个warp(即CUDA core在SM中分组),由warp scheduler负责调度。尽管warp中的线程从同一程序地址,但可能具有不同的行为,比如分支结构。

一个SM同时并发的warp是有限的,因为资源限制,SM要为每个线程块分配共享内存,而也要为每个线程束中的线程分配独立的寄存器,所以SM的配置会影响其所支持的线程块和warp并发数量。

GPU通信互联技术介绍

我们都知道,在GPU未出现前,CPU一直是计算机中的绝对核心,甚至连存储、内存、网络等子系统的能力都是CPU说了算。
但人算不如天算,没想到大数据分析、AI、视觉渲染、基因分析以及EDR仿真等需求的突然爆发,给了NVIDIA的GPU带了巨大增长空间。GPU的快速增长超出了所有人的预料,它几乎彻底颠覆了CPU在计算机系统中的地位,而传统的根据CPU为核心设计的互联通信方式在GPU高速增长的情况下开始慢慢成为了阻碍,原有的通信技术已经成为效率阻碍。

比如,传统方式如果想把数据从存储系统转运到GPU显存中,由于历史原因此过程受CPU管理。随着计算负载从较慢的CPU转移到较快的GPU后,I/O逐渐成为系统的性能瓶颈。面对这种情况,那么GPU就要在原有的计算机里"开路"了。

1、GPUDirect

GPUDirect是NVIDIA开发的一项技术,可实现GPU与其他设备(例如网络接口卡 (NIC) 和存储设备)之间的直接通信和数据传输,而不涉及CPU。

使用GPUDirect,网络适配器和存储驱动器可以直接读写GPU内存,减少不必要的内存消耗,减少CPU开销并降低延迟,从而显著提高性能。

使用 GPU Direct 技术,多个 GPU、网络和存储设备可以直接读写主机和设备内存,减少不必要的内存拷贝和 CPU 开销,降低网络延迟,进而获得性能的提升。

GPUDirect 技术发展阶段:

时间技术介绍
2010GPUDirect Shared Access通过共享的固定主机内存(不推荐使用)提供了与第三方PCI Express设备驱动程序加速通信的支持
2011GPUDirect Peer to Peer允许GPU使用高速DMA传输直接在两个GPU的内存之间加载和存储数据
2011GPUDirect for Video为基于帧的设备(例如,图像采集卡,视频切换器,HD-SDI捕获和CameraLink设备)提供了优化的管道,可有效地将视频帧传入和传出NVIDIA GPU内存
2013GPUDirect RDMA(远程直接内存访问)使网络设备可以完全绕过CPU主机内存直接访问GPU内存
2019GPUDirect Storage支持在GPU内存和NVMe或NVMe-oF等存储设备之间传输数据的直接路径

GPUDirect Shared Access

GPUDirect SharedMemory 支持 GPU 与第三方 PCIe 设备通过共享的 host memory 实现共享内存。下图对未使用 GPUDirect 和使用 GPUDirect 后的 GPU 之间通信的数据拷贝进行了对比。

在这里插入图片描述
可以看出支持 GPUDirect SharedMemory 后,GPU 之间的通信仅需要两次拷贝:

  • 先从 GPU 缓存拷贝到系统内存
  • 对端 GPU 缓存从系统内存拷贝数据

相较于未使用 GPUDirect 减少了一次数据拷贝,降低了数据交换的延迟。

GPUDirect P2P

GPUDirect P2P支持GPU之间通过memory fabric(PCIe或NVLink)直接进行数据拷贝。CUDA driver原生支持P2P技术,开发者可使用最新的CUDA Toolkit和driver来实现GPU间直接通信(一般用于机内通信)。

在这里插入图片描述

GPUDirect for Video

GPUDirect for Video提供一个服务于frame-based的通过优化的流水线功能。设备包括:frame grabbers、video switchers、HD-SDI capture、CameraLink device,它可以把视频帧高效地向GPU显内中写入/读出。

在这里插入图片描述
过去处理视频的第三方硬件与GPU交互时,会引入不必要的延迟,如图左边所示。有了GPUDirect for Video技术,I/O设备和GPU可达到很好的同步(两个设备driver间拷贝数据),同时能减少CPU的负载。GPUDirect for Video由第三方公司的SDK提供,开发者对视频流进/出GPU(通过OpenGL, DirectX or CUDA在子帧的传输过程 )有充分的控制能力

GPUDirect for RDMA

RDMA

随着大数据分析、科技计算、AI 计算等应用对算力需求巨大,单机形态已经不能满足用户需求,多机多卡的计算是一个常态,多机间的通信是影响分布式训练的一个重要指标。

RDMA(Remote Direct Memory Access)是一种绕过远程主机而访问其内存中数据的技术,解决网络传输中数据处理延迟而产生的一种远端内存直接访问技术。

在这里插入图片描述
使用RDMA的优势如下:

  • 零拷贝(Zero-copy):应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。

  • 内核旁路(Kernel bypass) :应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。

  • 不需要CPU干预(No CPU involvement) : 应用程序可以访问远程主机内存而不消耗远程主机中的任何CPU。远程主机内存能够被读取而不需要远程主机上的进程(或CPU)参与。远程主机的CPU的缓存(cache)不会被访问的内存内容所填充。

简单来说,RDMA更像一个去掉中间商的技术,让数据能够快速获取。不再在操作系统、CPU等环节浪费时间。

在这里插入图片描述
RDMA 技术的软件栈 (来源)

目前 RDMA 有三种不同的技术实现方式:

  • InfiniBand(IB):专为 RDMA 设计的网络,从硬件层面保证可靠传输,同时由于这是一种新的网络技术,需要支持该技术的 NIC 和交换机。

  • RoCE(RDMA over Converged Ethernet):RoCE 是一种允许通过以太网进行 RDMA 的网络协议。RoCE 有 2 个版本:RoCE v1 和 RoCE v2。RoCE v1 是一种链路层协议,允许在同一个广播域下的任意两台主机直接访问;RoCE v2 基于 UDP 层协议,实现了路由功能,RoCE v2 针对 RoCE v1 进行了一些改进,如引入 IP 解决扩展性问题,可以跨二层组网等。

  • iWARP(internet Wide Area RDMA Protocol:允许在 TCP 上执行 RDMA 的网络协议。在大型组网的情况下,iWARP 的大量 TCP 连接会占用大量的额外内存资源,对系统规格要求较高。

GPUDirect RDMA

GPUDirect RDMA 结合了GPU加速计算和 RDMA(Remote Direct Memory Access)技术,实现了在GPU和RDMA网络设备之间直接进行数据传输和通信的能力。它允许GPU直接访问RDMA网络设备中的数据,无需通过主机内存或CPU的中介。
在这里插入图片描述GPUDirect RDMA(来源)

GPUDirect RDMA通过绕过主机内存和CPU,直接在GPU和RDMA网络设备之间进行数据传输,显著降低传输延迟,加快数据交换速度,并可以减轻 CPU负载,释放CPU的计算能力。另外,GPUDirect RDMA 技术允许GPU 直接访问RDMA网络设备中的数据,避免了数据在主机内存中的复制,提高了数据传输的带宽利用率

GPUDirect Storage

对AI和HPC应用而言,随着数据规模的不断扩大,数据加载时间对系统性能影响越发显著。随着GPU计算速度的快速提升,系统I/O(数据从存储读取到GPU显存)已经成为系统瓶颈。
在这里插入图片描述
GPUDirect Storage提供本地存储(NVMe)/远程存储(NVMe over Fabric)与GPU显存的直接通路,它可以减少不必要的系统内存拷贝(通过bounce buffer)。它可应用网卡NIC和存储系统附近的DMA引擎,直接向GPU显存写入/读取数据。

  • NVMe(Non-Volatile Memory Express):本地SSD的高速协议,Express 强调其基于 PCIe(PCI Express),通过PCIe总线直接通信,本地访问延迟极低。
  • Fabrics:指网络架构(如TCP/IP、RDMA、光纤通道等),用于连接存储设备与主机。
  • NVMe-oF(NVMe over Fabrics):通过网络实现远程NVMe存储访问。

2、NVLink & NVSwitch

NVLink

GPUDirect P2P 技术中,多个 GPU 通过 PCIe 直接与 CPU 相连,而 PCIe 3.0*16 的双向带宽不足 32GB/s,当训练数据不断增长时,PCIe 的带宽满足不了需求,会逐渐成为系统瓶颈。为提升多 GPU 之间的通信性能,充分发挥 GPU 的计算性能,NVIDIA 于 2016 年发布了全新架构的 NVLink。

NVLink 1.0 与 P100 GPU 一同发布,一块 P100 上,可集成 4 条 NVLink 连接线,每条 NVLink 具备双路共 40GB/s 的带宽,整个芯片的带宽达到了 160GB/s,相当于 PCIe 3.0*16 的 5 倍。

NVLink 2.0 版本与 Tesla V100 GPU 一同发布,NVLink 2.0 每个方向的信号发送速率从 20GB/s 增加到 25GB/s,每条 NVLink 双信道最大达到 50GB/s。单个 V100 GPU 支持 6 条 NVLink 连接线,总带宽最大可达 300GB/s,是 PCIe 3.0 带宽的将近 10 倍。

在这里插入图片描述
上图是使用 NVLink 连接 8 个 Tesla V100 的混合立体网络拓扑。图中也以看出每个 V100 GPU 有 6 个 NVLink 通道,8 块 GPU 间无法做到全连接,2 个 GPU 间最多只能有 2 个 NVLink 通道 100GB/s 的双向带宽。有趣的是 GPU 0 和 3,GPU 0 和 4 之间有 2 条 NVLink 相连,GPU0 和 GPU1 之间有一条 NVLink 连接线,GPU 0 和 6 之间没有 NVLink 连接线,也就是说 GPU0 与 GPU6 之间的通信仍然需要通过 PCIe。

NVSwitch

前面也看到,NVLink2.0 技术使得单服务器中 8 个 GPU 无法达到全连接,为解决该问题,NVIDIA 在 2018 年发布了 NVSwitch,实现了 NVLink 的全连接。NVIDIA NVSwitch 是首款节点交换架构,可支持单个服务器节点中 16 个全互联的 GPU,并可使全部 8 个 GPU 对分别达到 300GB/s 的速度同时进行通信。

下图为 16 个 GPU 通过 NVSwitch 全连接拓扑图。

在这里插入图片描述

3、应用场景总结

在大规模计算中,单机多卡场景下使用GPUDiect、NVLink技术,分布式场景下使用 GPUDirect RDMA技术,可以大大缩短通信时间,提升整体性能。

参考:
https://developer.nvidia.com/gpudirect
https://blog.csdn.net/danteLiujie/article/details/102901255
https://blog.csdn.net/danteLiujie/article/details/102901255

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

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

相关文章

强化学习与神经网络结合(以 DQN 展开)

目录 基于 PyTorch 实现简单 DQN double DQN dueling DQN Noisy DQN:通过噪声层实现探索,替代 ε- 贪心策略 Rainbow_DQN如何计算连续型的Actions 强化学习中,智能体(Agent)通过与环境交互学习最优策略。当状态空间或动…

day 16

创建链接文件 软链接:又叫符号链接,类似win的快捷方式,是一种用来建立文件的特殊文件,这个文件里的数据都是建立链接的文件,但是它和建立链接的文件不是一个东西,如果建立链接的文件移动或删除&#xff0c…

fork系统调用

基本概念: 在操作系统里,进程是正在运行的程序的实例。fork() 函数的作用是复制当前进程,生成一个新的进程,这个新进程被称作子进程,而原本的进程则是父进程。这两个进程(父进程和子进程)会从 …

【leetcode刷题记录】(java)数组 链表 哈希表

文章目录 四、题目之:代码随想录(1) 代码随想录:数组[704. 二分查找](https://leetcode.cn/problems/binary-search/)[27. 移除元素](https://leetcode.cn/problems/remove-element/)暴力解:双指针: [977. 有序数组的平方](https://leetcode.…

在线运行vscode

安装 https://github.com/coder/code-server?utm_sourcesyndication&pubDate20250317 运行前预览脚本 curl -fsSL https://code-server.dev/install.sh | sh -s -- --dry-run运行脚本 curl -fsSL https://code-server.dev/install.sh | sh其他 可以通过后台服务运行&am…

【Tauri2】002——Cargo.toml和入口文件

目录 前言 正文 toml文件的基础 注释——# Comment 键值对——Key/Value 表——[table] 内联表——Inline Table 数组——Array package和crate Cargo.toml文件 Cargo.toml——dependencies Cargo.toml——lib crate-type main.rs 前言 【Tauri2】001——安装及…

Netty源码—7.ByteBuf原理三

大纲 9.Netty的内存规格 10.缓存数据结构 11.命中缓存的分配流程 12.Netty里有关内存分配的重要概念 13.Page级别的内存分配 14.SubPage级别的内存分配 15.ByteBuf的回收 9.Netty的内存规格 (1)4种内存规格 (2)内存申请单位 (1)4种内存规格 一.tiny:表示从…

W、M、C练题笔记(持续更新中)

web here are the flag 点击,页面跳转404.php,用bp抓包访问/flag.php页面,得到flag用base64解码 TryToFindFlag 打开后查看源代码 发现是robots协议,访问robots.txt 访问flllaaa......,得到空白页面,查看…

【高项】信息系统项目管理师(十二)项目干系人管理【3分】

项目干系人管理包括识别能够影响项目或会受项目影响的人员、团队或组织,分析干系人对项目的期望和影响,制定管理策略有效调动干系人参与项目决策和执行。项目干系人管理过程能够支持项目团队的工作。一、管理基础 1、管理的重要性 项目经理和团队管理干系人的能力决定着项目…

Keil(ARMCC)编译改为Cmake(GNU)编译

1. 环境介绍: 某款ARM-M4芯片(应该芯片通用)cmkeGNUNinja(CLion) 2. 必备: 芯片启动文件 startup_xxxx.s链接文件 xxxx_flash.ldCMakeLists.txt 3. 具体修改步骤 第一步:观察启动文件…

SpringCould微服务架构之Docker(4)

Docker ce是社区版。 安装docker之前,先安装yum-util 。 安装docker之前,一定要先关闭防火墙。

LangChain开发(四)服务监控(LangSmith、verbose、debug)

文章目录 LangChain服务监控LangSmith Tracing(跟踪)Verbose(1详细日志打印)Debug(调试日志打印)源码地址参考资料 LangChain服务监控 与构建任何类型的软件一样,使用LLM构建时,总会…

从车间到数字生态:MES如何引领制造业智能化革命‌

在全球制造业加速迈向工业4.0的浪潮中,传统生产模式正经历颠覆性变革。制造执行系统(MES)作为连接物理车间与数字世界的核心纽带,正从“生产辅助工具”升级为“智能决策大脑”,推动制造业向数据驱动、柔性化与可持续化…

人工智能之数学基础:瑞利商的推广形式——广义瑞利商

本文重点 在数学和工程领域,瑞利商(Rayleigh quotient)的推广形式——广义瑞利商(Generalized Rayleigh quotient)扮演着重要的角色。它们不仅为线性代数中的特征值问题提供了新的视角,还在信号处理、机器学习、计算机视觉等领域有广泛的应用。 广义瑞利商的定义 广义…

【QT】QT中的中文显示乱码解决

QT中的中文显示乱码解决 1.编辑栏左键——>选择编码 2.选择UTF-8—>按编码重新载入 3.工具栏左键—>选择选项 4.同样选择UTF-8—>确定即可

优选算法系列(4.前缀和 _下) k

目录 五:和为 k 的子数组(medium) 题目链接:560. 和为 K 的子数组 - 力扣(LeetCode) 解法: 代码: 六:和可被 K 整除的子数组(medium) 题目链…

批量处理word里面表格的空白行

1,随便打开一个word文档。 2,按下Alt F11 VBA编辑器,在左侧的「工程资源管理器」窗口中找到Normal 项目,右键选择插入->模块。 弹出一下弹窗 3,输入一下代码 代码: Sub RemoveEmptyTableRows()Dim tbl As TableDim row As R…

《Linux运维实战:Ubuntu 22.04使用pam_faillock实现登录失败处理策略》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:Linux运维实战总结 一、背景信息 在ubuntu 22.04中,pam_tally2模块已被弃用,取而代之的是pam_faillock模块。因此&#xf…

如何通过数据可视化提升管理效率

通过数据可视化提升管理效率的核心方法包括清晰展示关键指标、及时发现和解决问题、支持决策优化。其中,清晰展示关键指标尤为重要。通过数据可视化工具直观地呈现关键绩效指标(KPI),管理者能快速、准确地理解业务现状&#xff0c…

Qt的文件操作

Qt的文件操作 由于 Qt 的发展比较早,在 C 尚未提供标准的文件流操作时,Qt 就研发出了自己的文件操作并沿用至今。Qt 提供了丰富的文件操作类,包括 QFile 文件操作和读写类以外,还有 QSaveFile(安全文件保存类&#xf…