高性能GPU被禁,普通GPU不能用吗?CPU和GPU差在哪里?

1个回答

写回答

Grayson_shi

2026-02-26 08:45

+ 关注

美国
美国

去年,美国针对高性能计算芯片对华出口实施限制,以英伟达A100芯片为限。此后,国内无法购买A100和H100 GPU,相关产业受到影响。这一措施引发广泛关注与讨论。NVIDIA迅速针对中国大陆市场推出专属的A800和H800芯片,主要限制了NVLink传输速率。A800与A100在单机测试中性能差异不大,成功规避了美国的限制政策,满足本地市场需求的同时确保了技术合规性。上月,美国拜登政府出台新限制措施,新增性能密度阈值,弥补了先前的缺口。同时表明,未来可能至少每年更新一次,从政策层面基本堵住了漏洞。现在A800和H800都难以购买,替代品性能仍有差距,美国确实阻碍了我国AI技术的迭代发展。但GPU国产化进程正在推进,未来可期。高性能GPU被禁,普通GPU就完全不能用了吗?CPU和GPU之间到底有什么区别?在探讨这些问题前,先看看当前哪些场景应用了GPU,未来哪些场景能用GPU,以及为何多数程序员都应了解GPU。GPU应用起源与游戏密切相关,早期GPU发展很大程度上依赖游戏产业推动,像PS5和Xbox等游戏机均内置了GPU芯片。游戏爱好者大多明白,选购游戏设备时,GPU性能是关键,毕竟CPU决定下限,GPU决定上限是不变的真理。GPU大致决定了游戏的分辨率和特效高度,对用户的游戏体验起着关键作用。几年前流行的加密货币和挖矿热度很高。比特币加密货币的兴起,带动了矿卡GPU的需求,也让NVIDIA股价成倍增长。挖矿速度取决于矿机算力大小,算力越高,挖矿效率越快。当时流行一句话:上班赚的不如矿机电费。自动驾驶场景同样重要,它需要在处理实时数据后,于毫秒级时间内规划行车路径和车速,确保行驶安全。这要求处理器具备较高的计算速度以满足精准响应的需求。GPU采用流式并行计算,能独立处理每行数据,擅长大规模并发计算,契合自动驾驶需求。再者是深度学习领域,自Transformer问世以来,AI大模型参数量从亿级跃升至万亿级,训练时长也从小时延伸到天级,这对算力提出了更高要求,而高性能GPU集群恰好能够满足这一需求。除了这些,手机、平板、音箱、手环、监控移动设备也都已嵌入并广泛应用了GPU。未来GPU不会仅限于现有领域,在云计算、大数据分析、机器人、虚拟现实及医疗方面,已有不少demo正在进行探索与应用。过去十多年,GPU在热点领域不断拓展,多数程序员仍在CPU和顺序编程环境中成长。今后十来年,程序员得像熟悉CPU那样,掌握GPU运行原理和并发编程方式。未来将是GPU与CPU全面协同工作的时代。先引用一个经典的比喻来形容。GPU好比一群小学生,CPU如同大学教授。论能力,CPU远超GPU;但进行大量浮点运算时,GPU速度更快。CPU像是全能选手,GPU则是专精选手。通常GPU无法独立运作,其任务需由CPU发起。其次,从设计目标的角度来看。CPU 本为顺序执行指令设计,为提升性能,经过多年发展,引入了多种功能,如指令流水线、乱序与推测执行,以及多级缓存等技术。CPU的关键在于降低指令执行延迟,从而尽快完成指令序列的执行。GPU旨在实现大规模并行与高吞吐,不过其指令延迟相对较高。这一设计思路受到其在游戏、图形处理、数值计算及如今深度学习中应用的影响。这些应用均需高速完成大量线性代数与数值运算,因此人们高度关注提升设备吞吐量,以满足性能需求。这里有一个具体的例子。CPU指令延迟低,执行两个数字相加时,速度通常比GPU更快。他们可以连续进行多项类似计算,速度远超GPU。在进行数百万乃至数十亿次计算时,GPU凭借其强大的并行处理能力,能够比CPU更快地完成任务。若用具体数值衡量。NVIDIA A100 在 32 位浮点精度下,可提供每秒 19.5 万亿次的运算吞吐量。英特尔24核处理器在32位精度下的吞吐量达0.66 TFLOPS。此外,GPU与CPU的吞吐性能差距正逐年拉大。我们来比较一下CPU和GPU的架构特点。

左图为CPU架构,右图为GPU架构。CPU 用大量芯片面积实现减少指令延迟的功能,比如加大缓存、减少算术逻辑单元并增加控制单元。GPU 以大量算术逻辑单元提升计算能力和吞吐量,仅用极少芯片面积做缓存与控制单元,因此延迟较高。若想充分发挥GPU性能或实现加速,就必须深入理解其架构,尤其是针对不断更新的GPU产品,需进行软硬件协同开发。这不像许多基于CPU的软件开发,即便我不熟悉各类CPU特性,也能高效运行。GPU硬件真的很复杂吗?其实不然。建议所有工程师都应深入了解其架构原理,从而更好地进行适配与应用。GPU追求高吞吐量,何种架构能够达成这一目标?这是大家共同关注的问题。所示,GPU 由多个流式多处理器(SM)构成。

SM是什么?简单说,就是对GPU核心分组管理,一组GPU核心(线程组)就叫SM。例如,NVIDIA H100 GPU 包含 132 个流式多处理器,每个拥有 64 个核心,总计 8448 个核心。每个分组的SM都会分配到一定存储器,中的Memory,一般叫共享存储器或暂存器,供所有内核共享。此外,SM上的控制单元资源也会由所有内核共同使用。此外,每个SM都配备基于硬件的线程调度器用于执行线程。此外,每个 SM 还包含多个功能单元或专用加速单元,比如张量核心和光线追踪单元,用以满足 GPU 处理不同类型工作负载的特定计算需求。此外,每个流式多处理器(SM)进一步划分为多个处理块(Block)。每个Block内含一个独立的Warp调度器、一个派发单元(Dispatch Unit)、一定容量的寄存器文件(Register File)、一个独立的L0指令缓存、多个整数运算单元(INT32)、多个单精度浮点运算单元(FP32)以及多个张量核心(TENSOR CORES)。这些组件协同工作,提升了计算效率与性能表现。这就像SM是一个班级,而Block只是其中的一个小组。图形处理器存储结构GPU包含多层不同类型存储器,按访问速度从高到低排序如下:寄存器存储速度最快,其次是共享存储、常量存储、类常量存储、本地存储和全局存储,访问延迟依次增加,存储层次结构影响性能表现。

英伟达
英伟达

上图虚线内为一个SM的存储结构,每个SM均包含寄存器、共享内存、常量内存及L1缓存。除了SM,还有L2缓存和全局存储,它们由所有SM共享使用。需要明确的是,日常提到的NVIDIA H100配备80GB显存,即为全局存储(Global Memory),这是一种具备高容量与高带宽特性的DRAM技术,在性能表现上极为突出。全局内存离SM较远,延迟较高。但片上多层存储与大量计算单元可有效隐藏该延迟。第三部分:GPU通信架构通常一台服务器不会超过16张显卡,最常见的配置是单机8卡的GPU服务器

单机内有多种通信和拓扑关系,如CPU与CPU、CPU与GPU、GPU与GPU之间的连接。所示,CPU0和CPU1通过QPI相连。QPI(快速通道互联)是用于高性能处理器间通信的接口技术,它提供高速、点对点的数据传输路径,能够实现处理器之间的低延迟与高带宽通信,有效提升数据交换效率。CPU和GPU借助PCIe Switch进行互联,所示。每个CPU与四个GPU之间均通过PCIe Switch通信,其工作原理类似于交换机。每个PCIe Switch可配备多个PCIe插槽,以实现设备间的高效连接与数据传输。GPU 0至3两两间既可通过NVLink通信,也能经 PCIe Switch连接,GPU 4到7同样如此。NVLink专为GPU间通信设计,提供高效数据传输通道。图中显示,GPU 0 与 GPU 4 无直连通道,需通过其他方式实现间接通信。除了上述内容,NVIDIA 还提供了多 GPU 通信库 NCCL(NVIDIA Collective Communications Library)。该库实现了 AllReduce、Reduce、Broadcast、ReduceScatter 和 AlLGather 等常用的通信原语,并针对 PCIe 和 NVLink 进行了专门优化。这些优化使得通信库具备更高的带宽和更快的传输速度,从而显著提升了多 GPU 环境下的性能表现,为深度学习训练等高性能计算任务提供了强有力的支持。多机GPU之间如何进行通信?多台设备通常经由交换机连接,CPU间通信需通过网络交换完成,基于socket原理实现。此过程涉及用户态与内核态的多次数据拷贝,以确保多机之间信息传递的正常进行。

NVIDIA开发了一套IB网络技术,该技术支持远程直接内存访问(RDMA),可实现高效的数据传输。通过内存直接传输数据至另一台计算机,无需操作系统与CPU介入。IB单网口速度从10Gb/s(SDR)到56Gbps(FDR)可选,高效完成数据交换。其不足之处在于,IB需要专用网卡支持,同时需配备价格昂贵的交换机设备。在以太网环境中实现支持RDMA的标准,可选用RoCE(RDMA over Converged Ethernet)技术。该技术无需依赖复杂低效的TCP传输,能够达成多机通信中的零拷贝,从而显著减少通信延迟,提升效率。NVIDIA用十年构建了CUDA编程生态,历经投资人诸多不解,如今已成为其核心竞争力。在 CUDA 中,以类似 C 函数的形式定义 GPU 计算函数,称为内核。以向量加法为例,讲解CUDA编程范式如何执行?此例中,内核接收两个数组向量为输入,按元素相加后,将结果写入另一个数组向量。原来在CPU上的实现方式,通常需要通过for循环遍历数组,逐一将数据相加后存储到结果数组中。在GPU中,简单做法是为数组每个加法分配一个线程,线程总数等于数组长度,从而并行计算,一次完成所有运算。这要求GPU具备调度管理能力,并合理分配线程。在NVIDIA GPU中,为管理所有线程,首先将线程划分为多个网格(Grid),每个网格再细分为多个线程块(Block),而每个线程块由一个或多个线程构成,从而实现高效组织与管理。申请线程数时,按网格和线程块分配,若可用线程不足,则需让每个线程处理更多数据。在实现时,GPU编程包含两部分:运行在CPU上的主机代码,以及执行于GPU上的设备代码。

上图展示了CPU执行的代码,包含读取CPU数组数据、申请GPU数组空间、拷贝CPU数组到GPU,以及配置线程网格启动GPU内核等功能。申请线程总数时,填入,其中n为数组长度(总线程数),256表示每个block的线程数。

这段代码在GPU上运行,下面的代码用于获取每个线程的ID。当线程ID小于数组长度n时,执行对应位置的加法操作,从而将O(n)计算优化为O(1)复杂度。接下来,我们对GPU的编程模式进行总结:有消息称,NVIDIA中国市场开发了新款芯片系列,包括HGX H20、L20 PCle和L2 PCle。不过,这些芯片在算力方面进行了更多限制,已难以满足国内大模型长期训练的需求。英伟达首席科学家Bill Dally指出,训练需求每半年到一年就会翻倍,随着时间发展,这一差距将快速扩大。百度已下令将文心一言AI系统所用芯片更换为华为昇腾910B系列。该芯片算力达256TFLOPS,与英伟达A100相当,但在生态支持上仍不及CUDA完善。这一调整或将推动国内AI产业的自主化进程。GPU现已广泛使用,其架构和执行模型虽与CPU差异显著,但不影响其普及。深入研究英伟达GPU原理与CUDA生态,汲取其精华,应用于实践,进而深化对GPU硬件架构的理解。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号