注:GPU、DPU 两篇合集。
GPU 是如何工作的?
原创 了不起的云计算 老猫
随着 AI、HPC 的快速增长,GPU 加速计算已经成为推动科学发展的关键力量,在天文学、物理学等研究领域,GPU 加速的 AI 正在帮助科学家们解决前所未有的复杂问题。
与 CPU 相比,GPU 在设计上更擅长处理大量并行任务,这使得它们在执行计算密集型任务时表现的更出色。今天我们从 GPU 的运作机制和设计原理来聊聊为什么 GPU 在并行计算的时候更高效。
▉ 处理器的三个组成部分
我们知道,任何处理器内部都是由三部分组成,分别为 算术逻辑单元(ALU)、控制单元和缓存。 但 CPU(Central Processing Unit)和 GPU(Graphics Processing?Unit)是两种不同类型的计算机处理器。
简单来说,CPU 更善于一次处理一项任务,而且 GPU 则可以同时处理多项任务。 这是因为 CPU 是为延迟优化的,而 GPU 则是带宽优化的。就好比有些人善于按顺序一项项执行任务,有些人可同时进行多项任务。
我通过打比方来通俗的解释二者的区别。 CPU 就好比一辆摩托车赛车,而 GPU 则相当于一辆大巴车,如果二者的任务都是从 A 位置将一个人送到 B 位置,那么 CPU(摩托车)肯定会更快到达,但是如果将 100 个人从 A 位置送到 B 位置,那么 GPU(大巴车)由于一次可以运送的人更多,则运送 100 人需要的时间更短。
换句话说,CPU 单次执行任务的时间更快,但是在需要大量重复工作负载时,GPU 优势就越显著(例如矩阵运算:(A*B)*C)。 因此,虽然 CPU 单次运送的时间更快,但是在处理图像处理、动漫渲染、深度学习这些需要大量重复工作负载时,GPU 优势就越显著。
综上所述,CPU 是个集各种运算能力的大成者。
它的优点在于调度、管理、协调能力强,并且可以做复杂的逻辑运算,但由于运算单元和内核较少,只适合做相对少量的运算。GPU 无法单独工作,它相当于一大群接受 CPU 调度的流水线员工,适合做大量的简单运算。 CPU 和 GPU 在功能上各有所长,互补不足,通过相互配合使用,实现最佳的计算性能。
那么是什么导致 CPU 和 GPU 工作的方式不同呢?那还要从二者设计理念来说。
▉ FLOPS 并不是核心问题?
FLOPS 每秒浮点运算次数(FLoating point Operations Per Second,简称 FLOPS)是基于处理器在一秒内可以执行的浮点算术计算数量,经常用来来衡量计算机性能的指标。虽然大家常问一个设备的 FLOPS 是多少,但实际上这并不是一个核心问题。
我们可以换一种说话,就是虽然有一些专家或特定算法的时候会特别关注 FLOPS。但 FLOPS 其实并不是大众关心的焦点。
为什么会这样说呢?我们以上图为例,让我们看一下 CPU 的运行情况:CPU 能以大约 2000 GFLOPs FP64 的速度进行运算,但内存却只能以 200 GB/s 的速度向 CPU 提供数据,这是现代处理器的典型性能。于是当 CPU 想要每秒处理 2 万亿个双精度数值,但内存每秒只能提供 250 亿个。这个时候就会产生设备的 “计算强度” 不平衡,这个时候就需要 CPU 设备需要付出多少努力来弥补内存提供数据的速度不足。
否则,处理器就会因为闲置造成浪费,陷入所谓的 “内存带宽限制” 模式。事实上,至少有四分之三甚至更多的程序在实际运行中都会受到内存带宽的限制, 因为很少有算法能在每次数据加载时完成足够多的运算来充分利用硬件性能。这时购买更便宜的 CPU 或许更为合适。
这种高计算强度要求对于大多数算法来说都是难以达到的。实际上,只有矩阵乘法这类特殊算法能满足这一要求。接下来我们看下 GPU 是怎么来弥补这个计算强度的。
通过上面的表格,我们对比 GPU 和 CPU 几个不同进程的性能。你会发现,虽然 NVIDIA 芯片拥有更高的 FLOPS,但是他们计算强度几乎相同,这是因为 NVIDIA 配备了更高带宽的内存以保持平衡。
其实,每一代 GPU 在增加 FLOPS 方面的速度往往超过了增加内存带宽的速度。 这导致计算强度不断上升,给算法编程带来了更大的挑战。这就需要 GPU 不断努力优化算法,以确保这些强大的芯片能够保持高效运行。因为很少有算法能在每次数据加载时完成足够多的运算来充分利用硬件性能。
当然,高内存支持和代码优化并不是 GPU 性能优势的全部,我们还需要看一下延迟。我们来深入谈谈延迟这个概念。为何延迟如此关键呢?
▉ 为何延迟如此关键呢?
延迟,让我们通过一个时间线来直观理解。从最基础的运算操作来看: a x + y ax + y ax+y。首先,要加载变量 x x x。接着,加载 y y y。因为运算是 a 乘以 x 再加上 y。所以,会同时发起对 y 的加载请求。然后,会经历一段相当长的等待时间,直到 x 的数据返回。这段时间往往是空闲的,也就是我们所说的延迟,这样就导致计算非常不高效。
虽然这个时间很短,也可能被其它有用的计算工作所掩盖,不会造成明显的延迟。但处理器编译器实际上花费了大量精力来进行流水线优化,确保数据加载尽可能早地发起,以便被其它计算操作所覆盖。这种流水线处理是大多数程序性能优化的关键,因为内存访问的延迟往往比计算延迟要大得多。
那么为什么会这样呢?
这是因为在一个时钟周期内,光只能传播很短的距离。考虑到芯片的尺寸,电信号从芯片的一侧传输到另一侧可能需要一个或多个时钟周期。 因此,物理定律成为了限制性能的关键因素。尤其是当需要从内存中获取数据时,数据的往返传输可能就需要十到二十个时钟周期。
延迟就意味着花费了大量时间等待数据的到来。
在之前提到 CPU 经常处于空闲状态,因为内存延迟导致它无法保持忙碌。尽管 CPU 拥有强大的计算能力(即 FLOPS),但我希望内存能够与之匹配,确保数据能够及时到达。
以 Xeon 8280 为例,这款 CPU 拥有 131GB 的内存和 89 纳秒的延迟。当内存带宽为 131GB/s 时候,那么在一个内存延迟周期内,只能移动约 11659 字节的数据。这似乎还不错,但当我们考虑到 DAXPY 操作只加载了两个 8 字节的值(即 x 和 y),总共只有 16 字节时,效率就显得非常低下,仅为 0.14%。这显然不是一个好的结果。即使有高带宽的内存来应对计算强度,实际上几乎没有利用到它的优势。为高性能的 CPU 和内存付出了巨大的成本,但结果却并不理想。
这是因为程序受到了延迟绑定的影响,这是一种常见的内存限制形式,其发生的频率远高于我们的想象。这也解释了为什么我对 FLOPS 并不太关心,因为即使内存带宽无法充分利用,计算单元更是无法忙碌起来。
如果我将 11659 字节的数据除以 16 字节(即 DAXPY 操作加载 x 和 y 所需的总字节数),发现需要同时执行 729 个 DAXPY 迭代,才能让花在内存上的钱物有所值。因此,面对这种低内存效率,需要同时处理 729 个操作。
这个时候,就需要并发来解决这个问题了。并发,顾名思义,就是同时进行许多事情。 但请注意,这些操作不必是严格同时发生的,它们只需要能够独立进行。GPU 编译器有一种优化手段叫做循环展开,它能够识别出可以独立执行的部分,并将它们连续地发出,从而提高执行效率。
但是在实际循环进行的优化方式受限于硬件能够同时跟踪的操作数量,几乎是不可能完成的。在硬件的流水线中,它只能同时处理有限数量的事务,超出这个数量就不得不等待之前的事务完成。因此,循环展开确实有益,它可以让流水线更加饱满,但显然它也受到机器架构中其它多种因素的制约。
这个时候,就需要看硬件的所能支持的最大线程数了,这意味着多个操作是真正同时发生的。GPU 在这方面做了很好的支持。
▉ 线程在 GPU 中起到什么作用?
GPU 与 CPU 之间一个非常值得关注的差异点,GPU 的延迟和带宽要求比 CPU 高得多,这意味着它需要大约 40 倍的线程来弥补这种延迟。但实际上,GPU 拥有的线程数量比其它类型的处理器多 100 倍。因此,在实际应用中,GPU 的表现反而更好。
实际上,GPU 拥有的线程数量比实际运算需要的多出五倍半,而其它类型的 CPU,它们的线程数量可能只够覆盖 1.2 英寸范围内的操作, 这就是 GPU 设计中最为关键的一点。如果你从这次讲解中只能记住一件事,那就是:GPU 拥有大量的线程,远超过它实际需要的数量,这是因为它被设计为 “超量订阅”(oversubscription)。它旨在确保有大量线程在同时工作,这样即使某些线程在等待内存操作完成,仍然有其它线程可以继续执行。
GPU 通常被称为 “吞吐量机器”。 GPU 的设计者将所有的资源都投入到了增加线程数量而不是减少延迟上。相比之下,CPU 则更侧重于减少延迟,因此它通常被称为 “延迟机器”。
CPU 期望单个线程能够完成大部分工作。在 CPU 中切换线程(从一个线程切换到另一个线程)是一个资源消耗高的操作,它涉及到上下文切换,因此只需要足够多的线程来覆盖内存延迟即可。
所以,CPU 的设计者将所有资源都投入到了减少延迟而不是增加线程数量上。
GPU 和 CPU 在线程方面的解决方法是截然相反的,虽然它们都是用来解决相同的延迟问题,但实际上也是 GPU 和 CPU 在运行方式和工作原理上的根本差异所在。记住,GPU 设计者通过增加线程数量来对抗延迟,而不是通过减少延迟来降低延迟。
另外,需要注意的是 GPU 是被超量订阅的。这意味着,当一些线程在等待读取数据时,其它线程已经完成了读取并准备执行。 这就是 GPU 工作原理的关键所在。它可以在一个时钟周期内轻松地在不同的 warp 之间切换,因此几乎没有上下文切换的开销。它可以连续运行线程。这意味着,为了弥补延迟,GPU 需要保持的活跃线程数要远远超过系统在任何时候能够运行的线程数。这与 CPU 的工作方式截然不同,对于 CPU 来说,它永远不希望线程过多。
除了线程上的不同,内存也是 GPU 工作的极为关键的因素,这是因为所有的编程工作都是围绕内存展开的。
▉ GPU 内存需要足够大
GPU 为每个线程分配了大量的寄存器来存储实时数据,从而实现了非常低的延迟。这是因为与 CPU 相比,GPU 中每个线程都需要处理更多的数据,因此它需要能够快速访问这些数据。所以,GPU 需要一种靠近其计算核心的快速内存,并且这种内存需要足够大,以便能够存储进行有用计算所需的所有数据。
不仅如此,当你发出一个加载操作(比如将某个指针的值加载到变量 x 中)时,硬件需要一个地方来暂存这个加载结果。所以,当说从内存中加载数据时,我实际上是指将这个加载结果放入寄存器中,这样就可以对它进行计算了。而 GPU 所拥有的寄存器数量直接决定了它能够同时处理的内存操作数量。
GPU 的主内存就是高带宽的 HBM 内存。如果我把 GPU 主内存的带宽看作一个单位,无论它有多快,都只能算作一。 而 L2 缓存带宽则是它的五倍,L1 缓存,也就是我即将提到的共享内存,更是快了 13 倍。因此,随着带宽的增加,它更容易满足计算强度的需求,这无疑是一件好事。如果可能的话,大家希望能充分利用缓存来满足计算强度。
我们再来看一下每个内存层在操作时所需的计算强度。对于 HBM,我们之前看过的计算强度是 100。而 L2 缓存的计算强度则要好得多,只需要 39 次加载操作,L1 缓存更是只需要 8 次,这是一个非常可实现的数字。这就是为什么 L1 缓存、共享内存和 GPU 如此有用的原因,因为我实际上可以让数据足够接近计算核心,从而有意义地进行 8 次操作并充分利用 FLOP。所以,如果可以的话,所有数据都能从缓存中读取带来的提升是最有价值的。
但是需要注意的是,PCIe 的带宽很有限,延迟又很大。NVLink 在性能上比 PCIe 更接近主内存。 这也是为什么 NVLink 作为芯片之间和 GPU 之间的互连方式,比 PCIe 总线要好得多的原因。
▉ 通俗讲解 GPU 的工作原理
好了,看了上面复杂的内容,让我们来通过一些形象的例子来了解 GPU 的运作机制。 首先我们来谈谈吞吐量和延迟。首先我们来打个比方,例如这个人住在旧金山,但在圣克拉拉工作。
这个时候这个人上班就有两种方式选择。可以开车,只需要 45 分钟,或者可以坐火车,需要 73 分钟。
这个时候,汽车是为减少延迟而设计的,但火车是一个吞吐量机器。 想象一下,开车的优势是在于它尽量快速地完成一次旅程,但并没有真正帮助到其他人。它速度快,但效率不高,只能载少数人,并且只能从一个地方到另一个地方。另一方面,火车可以载很多人,而且它能够在很多地方停靠,所以沿途的所有人都可以借助火车来上班。可而且设置很多列火车来运输乘客。
这个时候,火车不同班次就相当于 GPU 的延迟系统,被超量订阅,性能就会大打折扣。但如果路上的车太多,交通陷入瘫痪,汽车没人能顺利到达目的地。但同样,如果火车已经满员,你只需要等待下一班。而且,与汽车不同,火车晚点通常不会太久,因为总有下一班火车可以搭乘。
所以,GPU 其实可以看作是一个吞吐量机器,它的设计初衷是能够处理比它一次运行的工作多得多的任务。这就像火车系统,如果火车没有满载,那就没有充分利用其运输能力。对于 GPU 来说也是如此,吞吐量系统通常希望有深度的等待队列。火车公司其实希望你在站台上等待,因为如果火车到站时站台上没有人,车厢没有满载,那他们就是在浪费资源。GPU 也是如此,它需要保持忙碌状态,才能充分发挥其性能。
CPU 则更偏向于一个延迟机器。 切换线程需要消耗资源,所以 CPU 希望每个线程都能尽快完成其任务。但如果任务太多,系统就会陷入停滞。因此,CPU 的目标是尽快完成每个任务,然后为下一个任务腾出空间。这就像我们希望车辆在路上畅通无阻,而不是停滞不前,因为道路上的车辆数量是有限的。简而言之,我们利用这些线程来解决延迟问题,这是一个非常有效的策略。
现在我们已经了解了延迟问题,接下来看看带宽的挑战。由于整个系统都是基于吞吐量的设计,GPU 通常会超量订阅资源。这意味着 GPU 总是有任务在执行,内存也在不断地被访问。
在这个过程中,我们必须考虑异步性。 很重要的一点是,CPU 和 GPU 是独立的处理器,这意味着它们可以同时处理不同的任务,而且应该这样做。如果 CPU 停下来等待 GPU,或者 GPU 停下来等待 CPU,那么整个系统的效率就会下降。这就像每个站点都要等待下一班火车才能继续前行,这样显然不如只有一个高效的处理器。
异步性的重要性在于它让所有的处理器都在工作,没有人停下来等待。CPU 可以向 GPU 发送工作指令,然后继续执行其它任务,而 GPU 则独立地处理这些任务。我们只需要等待最终的结果。
为了更形象地解释这个概念,我们可以想象一下道路交通。如果你想一次性移动很多东西,那么你需要更多的车道,就像右边的道路一样。这样的交通是异步的,每个车辆都可以独立地前进,不会被前面的车辆阻塞,因为车道足够多。相反,如果交通是同步的,那么只有一条车道,所有的车辆都必须等待最慢的那辆车,效率就会大打折扣。因此,异步性对于我们追求的高吞吐量至关重要。
**
然而,在现实世界中,很少有工作是完全独立的。DAXPY 就是一个很好的例子。 这些被称为逐元素(element-wise)算法,只有最简单的算法才能以这种方式工作。大多数算法至少需要一个或多个元素,比如卷积操作,它会考虑图像中的每个像素及其邻居。还有一些算法,如傅里叶变换,需要每个元素与其它每个元素进行交互。这些被称为全对全算法,它们的行为方式与逐元素算法截然不同。
▉ GPU 工作中是如何获取吞吐量的?
现在,让我们一起看下 GPU 上并行处理的工作原理,以及 GPU 是如何获得所需的吞吐量的。
我们假设训练了一个 AI 来识别互联网上的猫。现在,我们有一张猫的图片。我会在这张图片上覆盖一个网格,这个网格将图片分割成许多工作块。然后,我会独立地处理每个工作块。这些工作块是彼此独立的,它们在图片的不同部分工作,而且工作块的数量非常多。因此,GPU 会被这些工作块过度订阅。但请记住,过度订阅是我们追求高效执行和最大内存使用的一种策略。
在每个工作块中,都有许多线程共同工作。这些线程可以共享数据并完成共同的任务。所有的线程都同时并行运行,这样 GPU 就能够实现高效的并行处理。现在,已经构建了层次结构。在最高层,有总工作量,它通过网格被分解成工作块,这些工作块为 GPU 提供了所需的过度订阅。然后,在每个工作块中,有一些本地线程,它们一起协同工作。通过这种方式,能够充分利用 GPU 的并行处理能力,实现高效的吞吐量。
当我们训练了一个 AI 来处理图像。这些线程协同工作,它们在各自的分片(tile)上工作,组成一个个块。请记住,每个块都以自己的速度独立运行,最终,整个图像会被处理完成。
在 GPU 上,工作是以网格的形式运行的,这些网格进一步被分解成线程块。每个块都拥有并行运行的线程,确保它们能够同时处理任务并共享数据。然而,所有的块都是独立调度的,这种模式被称为过度订阅。
这带来了两种最佳的运算的结合。它既能保持机器的忙碌状态,又能够提供所需的吞吐量,同时还允许线程之间进行必要的交互。这就是 GPU 编程的精髓:将问题分解成多个块,在这些块中,协作的线程共同处理任务,且每个块都保持着相对的独立性。
好吧,就到这里吧,我们我们已经详细介绍了 GPU 的工作原理,延迟被超量订阅所掩盖,但其实延迟实际上是 GPU 取得成功的关键。所有这些 —— 大量的线程、超量订阅、网格和块的编程模型,以及在块中运行的线程 —— 它们都是为了对抗延迟而存在的。如今 NVIDIA GPU 已经做到了,并且取得了成功,但现在我们受到了带宽的限制,这是接下来 NVIDIA 研发的重点。
DPU 与 CPU、GPU 的区别
原创 了不起的云计算
DPU,它到底有啥用?
~
▉ 到底什么是 DPU?
DPU 的英文全称叫做 Data Processing Unit,与 CPU 只有一字之差,它们有何区别呢?
对于 CPU 我们都了解,它为数据中心提供源源不断的算力。
但是随着数据中心的发展,CPU 不仅需要提供强大计算能力,还要提供数据中心的虚拟化、网络、存储以及安全等方面的管理,这就让 数据中心的 CPU 不能物尽其用。
例如,你买了 100 核的 CPU,只能用 90 个核,
其他 10 个核去哪里了?
跑了一堆数据中心的软件,安全,存储,管理等等。
那么这些额外 10 个核的开销部分就造成了一些浪费。相当于花了 100 块钱,只有 90 块钱被用在了计算上。
为了提供数据中心的 TCO(总拥有成本),那么就需要一个专门干脏活累活的角色。
这个时候 DPU 就出现了。DPU 就是来分担 CPU 在数据中心中除了计算方面其它工作的。
如果你还不理解 DPU 的作用,那我举个例子来说明一下。
就像做快餐一样,以前需求比较少,厨师在店里将主食,菜,配料等都搭配好了,炒好了,才会给到送餐人员的去送到客户手里。
但是随着客户的需求越来越多,都由厨师在店里制作完成就会浪费很多时间,这个时候呢,厨师只负责制作将快餐的材料准备好了就行。由送餐人员在送餐的过程中把菜加热好,然后送到客户手中,就会节省厨师的很多时间。
*送餐人员承担了更多的处理工作,就相当于 DPU 的作用。*DPU 是对 CPU 工作的一个补充,从而让数据中心的工作更细分,效率更高。
▉ 聊聊 DPU 的发展史?
DPU 这个概念是在 2020 年出现的,那一年,NVIDIA 正式推出了两款 DPU 产品:BlueField-2 DPU 和 BlueField-2X DPU 。
其实在推出这两款产品之前,与 DPU 类似的功能产品就已经在数据中心中开始逐渐被使用。
我们从智能网卡说起。
当时,为了降低 CPU 在数据中心的额外消耗,来自以色列的 Mellanox 公司提出了 Smart NIC (智能网卡)的概念。
这个智能网卡除了能完成标准网卡所具有的网络传输功能之外,还提供内置的可编程、可配置的硬件加速引擎,在提升应用的性能和大幅降低 CPU 在通信中的消耗。
例如,在虚拟化的环境中,CPU 需要运行 OVS(Open Virtual Switch)相关任务,同时还要处理存储、数据包的在线加解密或离线加解密、数据包深度检查、防火墙、复杂路由等操作,这些操作导致 CPU 性能不能发挥到最佳。
智能网卡的出现,为解决额外消耗问题提供了新的思路。
我们可以通过智能网卡来将 OVS 操作从 CPU 卸载下来,并完成存储加速、数据加密、深度包检测和复杂路由等各种功能,将花费在处理这些工作负载上的大量的 CPU 周期返回给主机 CPU,同时解决了不同业务之间的冲突问题,大幅提升了各项业务的性能,也确保了服务器 CPU 能为应用提供最大的处理能力或者提供更多的虚拟机(VM)服务,创造更大的价值。
正是看到了智能网卡的巨大商业价值,2019 年 3 月,英伟达花费 69 亿美元收购了以色列芯片公司 Mellanox 。并在 2020 年推出了 DPU 产品,从此, DPU 这个概念正式进入了公众视野。
▉ DPU 还有哪些应用?
从上文中虚拟化中的应用我们可以看到,DPU 将基础设施任务从 CPU 转移至 DPU,释放 CPU 的资源,使更多的服务器 CPU 核可用于运行应用程序,完成业务计算,从而提高服务器和数据中心的效率。
那么还有哪些地方可以用到 DPU 呢?
1. 将服务从主机卸载到 DPU
目前,DPU 还可以针对云原生环境进行优化,加速的网络、存储、安全和管理等服务。
如下图所示,红帽 Red Hat 的容器化云平台即服务(PaaS)OpenShift 上,借助 DPU 优化数据中心资源利用率,将网络相关的数据处理(如 VxLan 和 IPSec 等)卸载到 DPU 加速执行,在 25Gb/s 网络条件下,OpenShift 部署 DPU 用来加速,可以只用 1/3 的 CPU 占用了来达到 25Gb/s 性能,而在 100Gb/s 网络条件下,未部署 DPU 的场景将达不到 100Gb/s 网络线速,DPU 可以带来 10 倍的性能优势。
2. 提供零信任安全保护
零信任(Zero Trust)是一种以安全性为中心的模型,其基于以下思想:企业不应对其内外的任何事物授予默认信任选项。零信任可以减少数据泄露、拒绝未授权的访问,因此在数据安全方面价值巨大。DPU 可以为企业提供零信任保护,通过将控制平面由主机下放到了 DPU,实现主机业务和控制平面的完全隔离,数据将无法进行穿透,保证安全性。
DPU 的出现相当于为每个服务器配备了一台 “计算机前的计算机” 以提供独立、安全的基础设施服务,并与服务器应用域安全隔离。 如果主机遭受入侵,安全控制代理与被入侵主机之间的 DPU 隔离层可防止攻击扩散至整个数据中心。
这样 DPU 就解决了企业不愿直接在计算平台上部署安全代理的情况。通过在完全隔离于应用程序域的 DPU 上部署安全代理,企业不仅能获得对应用程序工作负载的可见性,还能在其基础设施中执行一致的安全策略。
3. 助力实现 “算存分离”
通过在服务器系统的数据入口处引入计算资源,在 DPU 上独立实现面对应用需求的存储方案,帮助存储厂商在数据中心中低成本地灵活部署、升级高级存储协议,而完全不需要对现有软件栈进行任何更改。
存储厂商可以把自家团队为各行业应用开发的开放系统的直连式存储 (DAS)、纵向扩展(Scale-UP)、横向扩展(Scale-OUT)、超融合架构(Hyperconverged)等存储解决方案, 零开销地推广到各个应用领域的现有业务处理平台和数据中心基础架构中,而所有的安全加密、数据压缩、负载均衡等复杂又必须的功能则完全由 DPU 透明地卸载。
存储行业的革新算法和实现,可以在 DPU 架构中,独立于服务器操作系统进行部署。DPU 技术帮助存储厂商实现真正的 “算存分离”,完全发挥自家产品的技术优势,打通最高效服务应用需求的通路。
如今数据中心中的各项操作主要都在 CPU 上完成,包括计算任务和各项基础设施任务等,而面对数据处理需求的增长,CPU 的算力已经达到瓶颈,摩尔定律逐渐失效,GPU 的出现解决了 CPU 的算力问题,数据中心的瓶颈转向基础设施任务,如数据存储、数据验证、网络安全等。
DPU 的出现满足了这样的通用的基础设施任务加速的需求。由 DPU 构建强大的基础设施层,上层的 CPU 和 GPU 来完成计算任务。DPU 具有的特性为:
1)行业标准、高性能、软件可编程的多核 CPU,通常基于广泛使用的 ARM 架构,与其它 SoC 组件紧密耦合。
2)高性能网络接口,能够以线速或网络其余部分的速度解析、处理和有效地将数据传输到 GPU 和 CPU。
3)丰富的灵活可编程加速引擎,可为 AI 和机器学习、安全、电信、存储和虚拟化等执行卸载并提高应用程序性能。
▉ 谈谈 DPU 的未来趋势?
目前 DPU 以数据为中心作为计算架构,能针对数据中心的安全、网络、存储、AI、HPC 等业务进行加速。
从 DPU 概念的提出者 NVIDIA 的现有技术发展趋势来看,未来的技术发展趋势将会是高度集成化的片上数据中心的模式(Data Center Infrastructure on a chip),即一个 GPU、CPU、DPU 共存的时代。NVIDIA 布局的数据中心从核心到边缘(Edge)都采用了统一的一个计算架构 –CPU、GPU、DPU,如图所示,形成了 “3U” 一体架构。
3U 一体的统一计算单元架构将会让管理程序、调度程序都会变得非常容易。通过 CPU、GPU、DPU 之间的协调计算,可以在数据中心和边缘端都可以达到高性能与高安全性。
可以说,NVIDIA 非常看好 DPU 的发展,将 DPU 跟 CPU 和 GPU 放在一个地位来看待。
NVIDIA 创始人兼首席执行官黄仁勋表示:" 现代超大规模云正在推动数据中心的新架构。需要一种旨在处理数据中心基础设施软件的新型处理器来卸载和加速虚拟化、网络、存储、安全和其它云原生 AI 服务的巨大计算负载。DPU 的时代已经到来。"
除了 NVIDIA,目前 Intel、Marvell、NVIDIA 成为最有潜力的产业先驱。大多数 DPU 方案是从基本的网络控制器开始扩展至 SoC。 就 Intel 而言,其产品采取处理器配合 FPGA,外加加速引擎的方式;Marvell 则采取使用最新处 26 理器内核配合加速引擎的方式;NVIDIA 则采用了处理器配合 ASIC,外加加速引擎的方式。这三种方式代表着 DPU 产业的未来主流的发展方向。
目前,中国 DPU 产业处于起步阶段,从中国国内市场需求侧来看,中国拥有世界最强的互联网产业、规模最大的网民和线上生态,正是因为数据的大爆发,推动了对算力的需求,同时,中国愈加重视网络安全,DPU 在确保网络安全方向有得天独厚的优势,从数据安全到数据中心安全皆全方面覆盖,从而具备较好的发展潜力,这是 DPU 发展的前提。
DPU 将致力于解决 “网络协议处理、数据安全、算法加速” 等问题,而这些问题有着 “CPU 做不好,GPU 做不了” 的特点。数据中心与云计算领域是中国 DPU 最大的应用市场,DPU 可为终端政企用户提供较为成熟的安全的软件定义及硬件加速解决方案。
via:
-
一文读懂:GPU 是如何工作的? 了不起的云计算 2024 年 05 月 22 日 06:08 北京
https://mp.weixin.qq.com/s/9O3yE6YFuzyaqsdYg6s3kg -
一文读懂 DPU,它到底有啥用? 了不起的云计算 2023 年 05 月 22 日 08:03 北京