☰
GPU并行编程必知:架构与芯片型号对照指南
2026/10/14 1:20:19 网站建设 项目流程

做 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 C2050
NVIDIAKeplerCC 3.xGTX 680、Tesla K20/K40
NVIDIAMaxwellCC 5.xGTX 750 Ti、GTX Titan X、Tesla M40
NVIDIAPascalCC 6.xGTX 1080 Ti、Tesla P100
NVIDIAVoltaCC 7.0Titan V、Tesla V100
NVIDIATuringCC 7.5RTX 2080 Ti、RTX 2060、Tesla T4
NVIDIAAmpereCC 8.0 / 8.6A100、RTX 3090、RTX 3060
NVIDIAAdaCC 8.9RTX 4090、RTX 4060
NVIDIAHopperCC 9.0H100、H200
NVIDIABlackwellCC 10.x / 12.xB200、RTX 5090
AMDGCNgfx600-gfx906HD 7970、RX 580、Radeon VII
AMDRDNAgfx1010-gfx1100RX 5700 XT、RX 6900 XT、RX 7900 XTX
AMDCDNAgfx908/gfx90a/gfx942MI100、MI250、MI300
IntelXe-LP / Xe-HPG / Xe-HPC-Iris Xe、Arc A770、Ponte Vecchio

先建立这个印象就够了。接下来详述各厂商的型号脉络,并解释为什么每一代会有那些软件层面的变化。

1.3 型号后缀的那些规律

NVIDIA 的消费级型号看起来一团乱麻,其实有规则:GTX/RTX + 一代数位 + 市场定位数位。RTX 20 全系是 Turing,RTX 30 全系是 Ampere,RTX 40 全系是 Ada——只要你记住每个代际对应的架构,消费级基本上不会认错。真正容易翻车的是专业卡和数据中心卡,它们不按这个规则走,比如 Tesla P40 是 Pascal、Tesla T4 是 Turing、A100 是 Ampere,光看名字完全判断不出来。AMD 那边,Radeon RX 5000、RX 6000、RX 7000 分别对应 RDNA 1、2、3;Instinct MI100、MI200、MI300 对应 CDNA 1、2、3。Intel 的 Arc A 系列目前主要是 Xe-HPG 架构。

2. NVIDIA 架构与芯片型号的完整脉络

2.1 从 Fermi 到 Kepler:GPGPU 的“古典时代”

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 680,GK110 对应 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.0;GM200 走高性能路线,对应 GTX Titan X 和 Tesla M40,计算能力 5.2。Maxwell 在游戏卡上功耗控制做得特别好,很多机房当年拿 Maxwell 卡做无风扇计算节点,就图它的发热低。但要说计算特性,它其实是 Fermi-Kepler 体系里的“优化型”迭代,指令集没有爆发式增长,共享内存和 L2 带宽倒是明显变好了。

Pascal这一代,型号数量突然爆炸。芯片代号 GP 开头,GP100 对应 Tesla P100,计算能力 6.0;GP102 对应 GTX 1080 Ti 和 Titan Xp;GP104 对应 GTX 1080;GP106 对应 GTX 1060;特斯拉家族还有 Tesla P40、P4,这些计算能力都是 6.1。Pascal 把统一内存(Unified Memory)的硬件支持做完整了,页错误和按需迁移第一次成为可用的家常便饭;NVLink 也从 P100 开始出现在数据中心产品上。这一代开始,你随便打开一台云主机,看到“Tesla P100”或“GTX 1080 Ti”,心里就该知道它是 CC 6.x 的芯片。

2.3 Volta 与 Turing:Tensor 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 Ti,TU104 对应 RTX 2080,TU106 对应 RTX 2070/2060,TU116 对应 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 的程序时用-arch=sm_86,生成的 cubin 拿到 A100 上根本不认;反过来,A100 上编的sm_80cubin 也不能直接塞给 RTX 3090。所以,光说“我这代码是给 Ampere 写的”是不够精确的,你得说清具体是哪个 CC 档位。

2.5 Ada、Hopper 与 Blackwell:三条线并行

Ampere 之后的格局是“数据中心一条线,消费级一条线”,甚至“专业一条线、AI 一条线”:

  • Ada:AD102 对应 RTX 4090,AD103 对应 RTX 4080,AD104 对应 RTX 4070,AD107 对应 RTX 4060,计算能力统一是 8.9。Ada 没有做数据中心旗舰,主要还是游戏和专业渲染。
  • Hopper:GH100 对应 H100、H200,计算能力 9.0。Hopper 加入了 TMA(张量内存加速器)、Transformer Engine 等面向大模型训练的特性,和消费级的 Ada 几乎是两个世界。
  • Blackwell:数据中心 B100/B200、GB200 的算力档位在 10.x;消费级 RTX 50 系列则被标为另一档位。这一代进一步强化了“同代名字,不同体系”的现象。

作为开发者,你应该养成的习惯是:明确一块卡是“哪一代架构、哪个计算能力、哪个产品分支”,而不是只记“4090 比 3090 快”这种性能结论。

3. 不只 NVIDIA:AMD 与 Intel 的架构型号地图

3.1 GCN 五代的漫长统治

AMD 的GCN(Graphics Core Next)架构从 2011 年一直用到 2018 年,跨越了五代。GCN 的设计哲学和 NVIDIA 有明显差异:它把很多硬件调度职责交给了软件,早期在通用计算上踩着 64 线程的 wavefront 结构前进。

对应到芯片型号:HD 7970 是 GCN 1.0;R9 290X 是 GCN 2.0;R9 Fury 是 GCN 3.0;RX 470/480/580 常见的是 GCN 4.0(Polaris);Vega 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 MI100(gfx908)、MI250/MI250X(gfx90a)、MI300 系列(gfx942)。CDNA 加强了矩阵运算单元、显存带宽和 Infinity Fabric 互联,专门跟 NVIDIA 的数据中心产品对标。

在 ROCm/HIP 的编译命令里,你会看到--offload-arch=gfx906、--offload-arch=gfx90a这样的参数。这本质上就是 AMD 版的“架构版本号”,和 CUDA 里的-arch=sm_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-smi:

nvidia-smi

能看到显卡型号、驱动版本、显存大小。但这些还不够,你要找的是计算能力(Compute Capability),最好用 CUDA 自带的工具:

./deviceQuery

这是 CUDA Samples 里的经典程序,输出会直接告诉你CUDA Capability Major/Minor version是多少。比如 GTX 1080 Ti 会显示 6.1,A100 会显示 8.0,RTX 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 = Turing,RTX 30 = Ampere,RTX 40 = Ada,RTX 50 = Blackwell(按 CC 分为不同档位)。GTX 16 系列虽然叫 GTX,但 GTX 1650/1660 是 Turing,不是 Pascal。
  • NVIDIA 数据中心级:Tesla P100/P40/P4 是 Pascal,Tesla T4 是 Turing,A100/A30 是 Ampere,H100/H200 是 Hopper,B200 是 Blackwell。这个系列光看数字很容易高估或低估。
  • AMD:RX 5000 系列对应 RDNA1,RX 6000 对应 RDNA2,RX 7000 对应 RDNA3;Instinct MI100/MI200/MI300 对应 CDNA1/2/3。
  • Intel:Arc 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。这时候你就能立刻判断:

  1. 它支持 Tensor Core(Volta 引入)。
  2. 它是数据中心产品,有 NVLink 接口。
  3. CUDA 版本不要太老,至少得支持 sm_70 编译目标。
  4. 它不支持 MIG(那是 Ampere 才有的)。

同样地,如果供应商给你的型号是“NVIDIA A10”,nvidia-smi显示 A10,你deviceQuery会得到 CC 8.6,那你就知道它是 Ampere 消费分支的芯片,虽然披着数据中心的外壳,但它的架构基因更接近 RTX 30 系列,而不是 A100。

5. 架构芯片型号在工程里到底影响什么

5.1 编译目标决定一切

同样一份 CUDA 代码,编译时用的-arch参数不同,生成的结果可能完全不能互跑:

nvcc -arch=sm_86 -o test test.cu # 给 RTX 30/RTX A6000 用 nvcc -arch=sm_80 -o test test.cu # 给 A100 用

在代码里经常还有编译期宏:

#if __CUDA_ARCH__ >= 800 // 只有 Ampere 及以后才会编译这一段 #endif

这里有两个概念容易混淆:compute_XX表示生成 PTX 中间代码的目标算力,sm_XX表示生成 SASS(硬件机器码)的目标算力。如果你只指定-code=sm_86,生成的 cubin 只能在 CC 8.6 的 GPU 上加载;如果你想保留跨架构的前向兼容,通常会把 PTX 一起编进去,让新驱动在硬件不支持该 cubin 时做 JIT 编译。但注意 PTX 目标版本也不能无限往前兼容,一个旧卡加载不了太新的 PTX ISA。这个约束在团队协作时经常被忽视:你在 4090 上编译完直接部署到 3070 的机器,很可能跑不起来。

5.2 软件 API 和硬件的绑定关系

很多 CUDA/HIP 的特性不是“软件版本到了就有”,而是“硬件架构必须达到某个阈值”。给你一份常见的对照:

特性最早提供的架构
统一内存按需迁移Pascal(CC 6.x)
Tensor CoreVolta(CC 7.0)
RT Core 光线追踪Turing(CC 7.5)
MIG 多实例 GPUAmpere 数据中心分支(CC 8.0)
异步内存管理与流序内存分配Ampere 后期/Ada 起逐步成熟
TMA / 张量内存加速器Hopper(CC 9.0)

所以当你的代码用了.cudaMallocAsync()这类异步内存池接口,却部署在 Pascal 芯片上,运行时行为就会退化甚至直接报错。与其等到测试环境炸了再查,不如在一开始就把硬件的计算能力写进项目的说明文档里。

5.3 同一架构,不同芯片的性能资源差异

架构相同不代表性能相同。以 Ada 为例,RTX 4090 用的是 AD102 大芯片,有 128 个 SM;RTX 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 是 Pascal,P40 是 Pascal,T4 是 Turing,V100 是 Volta。只说“服务器有 Tesla 卡”等于什么都没说,必须看具体型号。

第三类误判:把同一代架构的两个分支混为一谈。Ampere 的 A100(CC 8.0)和 RTX 3090(CC 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 学习路线建议

学并行编程不必把几十款芯片全部背下来,但你要建立一套“四层知识”的思维:

  1. 产品系列:RTX 30、RX 6000、Arc A7 系列这种粒度。
  2. 架构名:Ampere、RDNA2、Xe-HPG。
  3. 算力/硬件 ID:CC 8.0/8.6,gfx1030,这是编译目标。
  4. 特性集合:有没有 Tensor Core、有没有 MIG、支持哪代 PCIe/NVLink。

遇到一块新卡,先花 5 分钟查这四层信息,再动手写代码。我在实际项目中养成的习惯是:仓库里放一个简单的设备信息脚本,每次换机器先跑一遍,把架构、计算能力、SM 数量、显存带宽记下来,再决定编译参数和优化策略。

这一章讲的是“架构对应芯片型号”的底层地图,但它的真正价值不是让你背型号,而是让你在下一次编译报错、特性不可用、性能骤降时,能第一时间意识到:哦,这是硬件身份的问题。只要把硬件和软件这条对应线握在手里,后面再难的并行优化都有地方落脚。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询