资讯动态

GPU并行编程必知:架构与芯片型号对照指南

发布时间:2026/10/14 1:20:20 来源:尧图企业网站定制
做 GPU 并行编程的人多少都会碰上这么一幕本地开发机上跑得好好的核函数部署到另一台机器要么报“不支持的算力”要么某个 API 根本不存在要么编译出来的二进制被驱动直接拒绝。绝大多数时候问题出在你对那块 GPU 的“硬件身份”没概念——它是哪一代架构对应哪个芯片型号决定了你能用哪些软件特性。这一章专门把这件事掰开讲清楚主流架构和芯片型号到底怎么对应硬件演进和软件生态又是怎么绑定的。看完你会明白为什么同样叫 CUDA 程序换一张卡就要重新考虑编译参数和特性选型。1. 为什么并行编程者必须先看懂“架构-芯片型号”映射表1.1 架构是软件模型的物理底座先想一个问题CUDA 或者 HIP 的编程模型里你写的是threadIdx、blockIdx、shared memory这些抽象概念。但代码真正跑起来时这些抽象概念要被“翻译”成具体硬件上的线程调度、寄存器读写、缓存访问。每一次架构升级硬件的底层组织结构都会发生质变。比如编译器要生成什么指令、SM 里有多少个 warp 调度器、shared memory 怎么分配、有没有 Tensor Core、访存单元怎么排队这些全部由架构决定。芯片型号则是架构的物理化身同一个架构可以衍生出几十款芯片它们的 SM 数量和内存带宽各不相同但基础的指令集和特性矩阵保持一致。你可以把架构理解成“户型设计图”芯片型号就是“某栋楼某个房号”。设计图决定了墙能不能拆、房间怎么布置房号只决定面积大小和朝向。学习并行编程时熟悉架构比死记型号重要得多但你如果连型号都认不出来就不知道手里这块卡属于哪种户型。1.2 一张低配版映射总表先给你一张全局视角的表后面再展开讲厂商架构计算能力/代际标识代表芯片型号NVIDIAFermiCC 2.xGTX 480、Tesla C2050NVIDIAKeplerCC 3.xGTX 680、Tesla K20/K40NVIDIAMaxwellCC 5.xGTX 750 Ti、GTX Titan X、Tesla M40NVIDIAPascalCC 6.xGTX 1080 Ti、Tesla P100NVIDIAVoltaCC 7.0Titan V、Tesla V100NVIDIATuringCC 7.5RTX 2080 Ti、RTX 2060、Tesla T4NVIDIAAmpereCC 8.0 / 8.6A100、RTX 3090、RTX 3060NVIDIAAdaCC 8.9RTX 4090、RTX 4060NVIDIAHopperCC 9.0H100、H200NVIDIABlackwellCC 10.x / 12.xB200、RTX 5090AMDGCNgfx600-gfx906HD 7970、RX 580、Radeon VIIAMDRDNAgfx1010-gfx1100RX 5700 XT、RX 6900 XT、RX 7900 XTXAMDCDNAgfx908/gfx90a/gfx942MI100、MI250、MI300IntelXe-LP / Xe-HPG / Xe-HPC-Iris Xe、Arc A770、Ponte Vecchio先建立这个印象就够了。接下来详述各厂商的型号脉络并解释为什么每一代会有那些软件层面的变化。1.3 型号后缀的那些规律NVIDIA 的消费级型号看起来一团乱麻其实有规则GTX/RTX 一代数位 市场定位数位。RTX 20 全系是 TuringRTX 30 全系是 AmpereRTX 40 全系是 Ada——只要你记住每个代际对应的架构消费级基本上不会认错。真正容易翻车的是专业卡和数据中心卡它们不按这个规则走比如 Tesla P40 是 Pascal、Tesla T4 是 Turing、A100 是 Ampere光看名字完全判断不出来。AMD 那边Radeon RX 5000、RX 6000、RX 7000 分别对应 RDNA 1、2、3Instinct MI100、MI200、MI300 对应 CDNA 1、2、3。Intel 的 Arc A 系列目前主要是 Xe-HPG 架构。2. NVIDIA 架构与芯片型号的完整脉络2.1 从 Fermi 到 KeplerGPGPU 的“古典时代”2010 年前后的Fermi架构是 NVIDIA 第一次认真把“通用计算”作为 GPU 的一等公民来做。它对应的芯片代号以 GF 开头比如 GF100。落到成品上是 GeForce GTX 480、GTX 580专业线 Tesla C2050/C2070计算能力是 2.0/2.1。Fermi 引入了后来沿用很久的 SM 单元设计的雏形也第一次让 ECC 显存和 64 位原子操作这个级别的特性走进 GPU 计算领域。2012 年Kepler接棒芯片代号变成 GK 开头。GK104 对应 GTX 680GK110 对应 GTX Titan、Tesla K20/K40计算能力分为 3.0、3.5、3.7 几档。Kepler 对并行编程的意义在于一是加入了dynamic parallelism也就是核函数内部可以再次启动核函数把原来需要 CPU 参与反复调用的循环下沉到 GPU 里二是有Hyper-Q多个 CPU 线程可以同时向一个 GPU 提交任务多卡多线程协作的效率提升非常明显。那个年代的程序员习惯说“sm_30”“sm_35”编译目标就是这么来的。2.2 Maxwell 和 Pascal产品矩阵开始膨胀Maxwell的芯片代号变成 GM。GM107 走低功耗路线对应大家很熟悉的 GTX 750 Ti计算能力 5.0GM200 走高性能路线对应 GTX Titan X 和 Tesla M40计算能力 5.2。Maxwell 在游戏卡上功耗控制做得特别好很多机房当年拿 Maxwell 卡做无风扇计算节点就图它的发热低。但要说计算特性它其实是 Fermi-Kepler 体系里的“优化型”迭代指令集没有爆发式增长共享内存和 L2 带宽倒是明显变好了。Pascal这一代型号数量突然爆炸。芯片代号 GP 开头GP100 对应 Tesla P100计算能力 6.0GP102 对应 GTX 1080 Ti 和 Titan XpGP104 对应 GTX 1080GP106 对应 GTX 1060特斯拉家族还有 Tesla P40、P4这些计算能力都是 6.1。Pascal 把统一内存Unified Memory的硬件支持做完整了页错误和按需迁移第一次成为可用的家常便饭NVLink 也从 P100 开始出现在数据中心产品上。这一代开始你随便打开一台云主机看到“Tesla P100”或“GTX 1080 Ti”心里就该知道它是 CC 6.x 的芯片。2.3 Volta 与 TuringTensor Core 和 RT Core 的关键转折Volta是 NVIDIA 第一次正式把 AI 计算当作核心卖点的架构。GV100 是它的旗舰芯片产物是 Tesla V100 和 Titan V计算能力 7.0。Volta 引入的东西在今天看来几乎是“现代 GPU 计算”的基座独立的线程调度能力Volta 之后的核函数可以做到更细粒度的线程级调度syncwarp等操作的语义也变了。Tensor Core专门为矩阵乘法设计的张量核心深度学习训练和推理从此有了板上加速器。NVLink 2.0多卡互联带宽大幅提升。紧接着Turing出现芯片代号 TU 开头。TU102 对应 RTX 2080 TiTU104 对应 RTX 2080TU106 对应 RTX 2070/2060TU116 对应 GTX 1660 Ti 等计算能力统一是 7.5。Turing 在通用计算上被很多人忽略但它是第一代同时拥有 RT Core光线追踪核心和 Tensor Core 的架构也让 Tensor Core 第一次进入消费级市场。这里需要注意的是Volta 和 Turing 虽然都叫“7.x 计算能力”但硬件完全不同为sm_70编译的 cubin 不能直接给sm_75用需要做 PTX 兼容或针对性重编译。2.4 Ampere 的双轨制GA100 与 GA10x到了Ampere事情变得更有趣同一代架构芯片却分成了两个关系不近的分支。GA100 芯片计算能力 8.0造出来的是 Tesla A100、A30 这种纯数据中心计算卡Tensor Core 的规模和 MIG多实例 GPU功能是重点。GA10x 系列芯片对应 GeForce RTX 3090、3080、3070、3060 以及 RTX A6000 这类专业卡计算能力是 8.6。这两个分支虽然都叫 Ampere但 SM 内部设计有不少差异。你看不出来的话最直观的后果就是你编译 RTX 3090 的程序时用-archsm_86生成的 cubin 拿到 A100 上根本不认反过来A100 上编的sm_80cubin 也不能直接塞给 RTX 3090。所以光说“我这代码是给 Ampere 写的”是不够精确的你得说清具体是哪个 CC 档位。2.5 Ada、Hopper 与 Blackwell三条线并行Ampere 之后的格局是“数据中心一条线消费级一条线”甚至“专业一条线、AI 一条线”AdaAD102 对应 RTX 4090AD103 对应 RTX 4080AD104 对应 RTX 4070AD107 对应 RTX 4060计算能力统一是 8.9。Ada 没有做数据中心旗舰主要还是游戏和专业渲染。HopperGH100 对应 H100、H200计算能力 9.0。Hopper 加入了 TMA张量内存加速器、Transformer Engine 等面向大模型训练的特性和消费级的 Ada 几乎是两个世界。Blackwell数据中心 B100/B200、GB200 的算力档位在 10.x消费级 RTX 50 系列则被标为另一档位。这一代进一步强化了“同代名字不同体系”的现象。作为开发者你应该养成的习惯是明确一块卡是“哪一代架构、哪个计算能力、哪个产品分支”而不是只记“4090 比 3090 快”这种性能结论。3. 不只 NVIDIAAMD 与 Intel 的架构型号地图3.1 GCN 五代的漫长统治AMD 的GCNGraphics Core Next架构从 2011 年一直用到 2018 年跨越了五代。GCN 的设计哲学和 NVIDIA 有明显差异它把很多硬件调度职责交给了软件早期在通用计算上踩着 64 线程的 wavefront 结构前进。对应到芯片型号HD 7970 是 GCN 1.0R9 290X 是 GCN 2.0R9 Fury 是 GCN 3.0RX 470/480/580 常见的是 GCN 4.0PolarisVega 56/64 和 Radeon VII 则是 GCN 5.0。在 ROCm 的生态里这些卡通过gfx编号来区分比如 Radeon VII 对应的 GPU ID 叫 gfx906。Radeon RX 580 这种卡到现在还有不少人在做并行入门测试就是因为它便宜、能用但你的 HIP 代码如果要兼容它必须注意它属于 GCN 老体系很多现代特性不支持。3.2 RDNA 与 CDNA 分家AMD 从 2019 年开始把架构拆成两条线RDNA面向游戏和图形RX 5000 系列Navi 10代号 gfx1010、RX 6000 系列Navi 21代号 gfx1030、RX 7000 系列Navi 31代号 gfx1100。RDNA 里面 wave32 成为一等公民很多计算优化的习惯和 GCN 完全不同。CDNA面向计算和数据中心Instinct MI100gfx908、MI250/MI250Xgfx90a、MI300 系列gfx942。CDNA 加强了矩阵运算单元、显存带宽和 Infinity Fabric 互联专门跟 NVIDIA 的数据中心产品对标。在 ROCm/HIP 的编译命令里你会看到--offload-archgfx906、--offload-archgfx90a这样的参数。这本质上就是 AMD 版的“架构版本号”和 CUDA 里的-archsm_80是同一个思维。所以你不是只学一个厂商的编译规则而是要学会“用架构编号锁定硬件特性”这个通用方法。3.3 Intel 的 Xe 家族Intel 在并行编程里一直是个特殊存在。它的Xe 架构分四个形态Xe-LP低功耗核显对应 Iris Xe、UHD 系列核显在笔记本和迷你主机上很常见。Xe-HPG高性能图形对应 Arc A 系列独显比如 Arc A380、A750、A770。这个系列在 2024 年底之后推出了新一代 Arc B 系列产品架构代号和软件支持矩阵都在持续更新。Xe-HPC高性能计算代号 Ponte Vecchio面向数据中心 HPC 场景。Xe-HP中间型号主要给云游戏和多用户场景实际产品比较少。Intel 走的是oneAPI SYCL这条路。用 SYCL 写代码的好处是跨厂商、跨设备但落到硬件上你仍然要关心架构代号——比如给 Arc A770 编译时用的是arc-hpg这个 target。如果你是从 CUDA 迁移过来最需要改的不是语法而是思维没有人再给你一个统一的计算能力数值你要按 target 名称去查它支持什么特性。4. 从一块芯片型号反查架构与算力实操方法4.1 手边有一张卡最小成本确认身份如果你能直接操作机器NVIDIA 卡最简单的是用nvidia-sminvidia-smi能看到显卡型号、驱动版本、显存大小。但这些还不够你要找的是计算能力Compute Capability最好用 CUDA 自带的工具./deviceQuery这是 CUDA Samples 里的经典程序输出会直接告诉你CUDA Capability Major/Minor version是多少。比如 GTX 1080 Ti 会显示 6.1A100 会显示 8.0RTX 4090 会显示 8.9。这是最权威的一次确认比任何网上参数表格都准。AMD 卡对应的是rocminfo输出里有“Agent”名称和Compute Unit数量HIP 里也可以调用hipGetDeviceProperties读取gcnArch字段对应的是 gfx 编号。Intel 卡则要看intel_gpu_top或者 oneAPI 的sycl-ls它会列出设备的类型和驱动接口。4.2 只有型号名没有实物查官方矩阵很多场景是服务器采购单上写着一串型号你根本摸不到卡。这时候直接去查各家官方支持的 GPU 列表。NVIDIA 有“CUDA-Enabled GPUs”和“Compute Capability”页面它按代际、计算能力、发布日期把几百款型号列成一张表你查到自己的型号就能定位到架构和 CC。AMD 有“ROCm compatibility”页面Intel 有“oneAPI GPU support”页面。查表时要留个心眼有时同一型号会有不同显存版本计算能力不会变但支持的特性列表可能因为显存大小而受限。4.3 用命名规律快速推断但别拍脑袋你可以用命名规律做“快速筛查”但最终一定要落到官方表。NVIDIA 消费级RTX 20 TuringRTX 30 AmpereRTX 40 AdaRTX 50 Blackwell按 CC 分为不同档位。GTX 16 系列虽然叫 GTX但 GTX 1650/1660 是 Turing不是 Pascal。NVIDIA 数据中心级Tesla P100/P40/P4 是 PascalTesla T4 是 TuringA100/A30 是 AmpereH100/H200 是 HopperB200 是 Blackwell。这个系列光看数字很容易高估或低估。AMDRX 5000 系列对应 RDNA1RX 6000 对应 RDNA2RX 7000 对应 RDNA3Instinct MI100/MI200/MI300 对应 CDNA1/2/3。IntelArc A 系列对应 Xe-HPG 时代核显看“Gen”数字比如某些型号是 Gen12(Xe-LP)某些更新型号是下一代的架构。容易出现误判的典型例子GTX 1660 Ti 是 Turing 架构却叫“GTX”不叫“RTX”如果只看名字你会以为它是老架构。Titan V 外观和游戏卡很像但它是 Volta 架构的计算卡。所以命名规律只是起点确认身份永远以官方文档或deviceQuery为准。4.4 一个完整的反查流程案例假设你负责一个深度学习项目供应商给了一台服务器上面写着“NVIDIA Tesla 计算卡32GB”。你先在机器上跑nvidia-smi看到产品名是 Tesla V100-SXM2-32GB然后跑deviceQuery得到 CC 7.0。这时候你就能立刻判断它支持 Tensor CoreVolta 引入。它是数据中心产品有 NVLink 接口。CUDA 版本不要太老至少得支持 sm_70 编译目标。它不支持 MIG那是 Ampere 才有的。同样地如果供应商给你的型号是“NVIDIA A10”nvidia-smi显示 A10你deviceQuery会得到 CC 8.6那你就知道它是 Ampere 消费分支的芯片虽然披着数据中心的外壳但它的架构基因更接近 RTX 30 系列而不是 A100。5. 架构芯片型号在工程里到底影响什么5.1 编译目标决定一切同样一份 CUDA 代码编译时用的-arch参数不同生成的结果可能完全不能互跑nvcc -archsm_86 -o test test.cu # 给 RTX 30/RTX A6000 用 nvcc -archsm_80 -o test test.cu # 给 A100 用在代码里经常还有编译期宏#if __CUDA_ARCH__ 800 // 只有 Ampere 及以后才会编译这一段 #endif这里有两个概念容易混淆compute_XX表示生成 PTX 中间代码的目标算力sm_XX表示生成 SASS硬件机器码的目标算力。如果你只指定-codesm_86生成的 cubin 只能在 CC 8.6 的 GPU 上加载如果你想保留跨架构的前向兼容通常会把 PTX 一起编进去让新驱动在硬件不支持该 cubin 时做 JIT 编译。但注意 PTX 目标版本也不能无限往前兼容一个旧卡加载不了太新的 PTX ISA。这个约束在团队协作时经常被忽视你在 4090 上编译完直接部署到 3070 的机器很可能跑不起来。5.2 软件 API 和硬件的绑定关系很多 CUDA/HIP 的特性不是“软件版本到了就有”而是“硬件架构必须达到某个阈值”。给你一份常见的对照特性最早提供的架构统一内存按需迁移PascalCC 6.xTensor CoreVoltaCC 7.0RT Core 光线追踪TuringCC 7.5MIG 多实例 GPUAmpere 数据中心分支CC 8.0异步内存管理与流序内存分配Ampere 后期/Ada 起逐步成熟TMA / 张量内存加速器HopperCC 9.0所以当你的代码用了.cudaMallocAsync()这类异步内存池接口却部署在 Pascal 芯片上运行时行为就会退化甚至直接报错。与其等到测试环境炸了再查不如在一开始就把硬件的计算能力写进项目的说明文档里。5.3 同一架构不同芯片的性能资源差异架构相同不代表性能相同。以 Ada 为例RTX 4090 用的是 AD102 大芯片有 128 个 SMRTX 4060 用的是 AD107 小芯片只有 24 个 SM。两者共享同一个特性集但你的核函数真正能并行跑多少线程、能占多少共享内存是被 SM 数量限制死的。拿 4090 调出来的优秀性能曲线换到 4060 上可能连显存带宽都不够——后者的显存位宽只有 128 bit。优化并行程序时一定要把“这块卡有几个 SM、每 SM 的 shared memory 上限、显存带宽”查清楚而不是只看着架构名判断。AMD 同样如此Radeon RX 6900 XT 和 RX 6700 XT 都是 RDNA2但 Navi 21 和 Navi 22 的 CU 数量、Infinity Cache 大小完全不同。Intel Arc A770 和 A380 都是 Xe-HPG但 A380 的 EU 数量和显存位宽小得多。这张表你只要建过一次就能形成“先定架构、再看规模、最后才谈优化”的正确步骤。6. 自己在实操中踩过的坑和给后来者的建议6.1 型号与架构的几类“经典误判”第一类误判把 GTX 16 系列当 Pascal。GTX 1660 Ti 实际上是 Turing 架构只是没有 RT Core。你在它上面做 CUDA 开发时sm_75编译目标要能用但光追相关的 API 就不要想了。第二类误判把 Tesla 全系当新架构。Tesla 这个品牌从 Fermi 时代一直用到现在P100 是 PascalP40 是 PascalT4 是 TuringV100 是 Volta。只说“服务器有 Tesla 卡”等于什么都没说必须看具体型号。第三类误判把同一代架构的两个分支混为一谈。Ampere 的 A100CC 8.0和 RTX 3090CC 8.6不是一个编译目标Blackwell 的数据中心卡和 RTX 50 系列也不是同一个档位。写代码时要精确到计算能力而不是“Ampere 系”这种模糊描述。第四类误判跨厂商直接套概念。NVIDIA 说“SM 数量”AMD 说“CU 数量”Intel 说“EU/Xe-Core”它们的硬件组织原理完全不同性能对比不能只看数字大小。我刚从 CUDA 转到 HIP 时一度以为 gfx906 就是“类似 CC 9.0”其实它是 GCN 5.0和 CUDA 的 9.0 毫无关系。6.2 学习路线建议学并行编程不必把几十款芯片全部背下来但你要建立一套“四层知识”的思维产品系列RTX 30、RX 6000、Arc A7 系列这种粒度。架构名Ampere、RDNA2、Xe-HPG。算力/硬件 IDCC 8.0/8.6gfx1030这是编译目标。特性集合有没有 Tensor Core、有没有 MIG、支持哪代 PCIe/NVLink。遇到一块新卡先花 5 分钟查这四层信息再动手写代码。我在实际项目中养成的习惯是仓库里放一个简单的设备信息脚本每次换机器先跑一遍把架构、计算能力、SM 数量、显存带宽记下来再决定编译参数和优化策略。这一章讲的是“架构对应芯片型号”的底层地图但它的真正价值不是让你背型号而是让你在下一次编译报错、特性不可用、性能骤降时能第一时间意识到哦这是硬件身份的问题。只要把硬件和软件这条对应线握在手里后面再难的并行优化都有地方落脚。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑