找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1426

积分

0

好友

208

主题
发表于 5 天前 | 查看: 20| 回复: 0

本文将承接上篇,从架构特点、对应产品及CUDA算子支持的变化,详细解析NVIDIA的Tesla、Fermi、Kepler、Maxwell和Pascal共五代GPU架构。

1 Tesla 架构分析

Tesla架构主要包含G80和GT200两个版本,是NVIDIA第一代“统一着色与计算架构”(unified shader and compute architecture),其架构如下:

图片

其核心内容在上一篇中已有分析。Tesla架构基本奠定了现代GPU运算的雏形,建议延伸阅读关于 AI经典GPU架构---Tesla 的详细介绍。

1.2 Tesla架构对应的产品

图片

2 Fermi 架构分析

Fermi架构于2010年4月发布,采用40nm/28nm工艺,芯片代码“GFXXX”。这代架构的主要亮点包括:

  • CUDA core的精度运算能力提升;
  • 支持同一个上下文内的kernel并行;
  • 增加ECC功能;
  • 指令分发采用双warp调度;
  • GigaThread能力增强,上下文切换速度大幅提升;
  • 其它改进:更大的shared memory与L1 Cache、更多的CUDA core、更快的原子操作。

2.1 架构特点

Fermi的主架构图如下所示,逻辑功能主要包括存储、调度、运算和接口四大模块。
图片

从架构图上看,Fermi并未明确绘制TPC(Texture Processing Clusters),但在图形卡设计中依然存在TPC及GPC(Graphics Processing Clusters)。与上一代Tesla GT200相比,Fermi的主要参数优化点对比如下:
图片

核心优化在于引入了支持更高精度的FMA运算、增加了ECC功能、将LD/ST的地址提升到64bit,并支持kernel并发执行。其余提升多为数量与容量的扩展。

2.1.1 SM特点
Fermi架构共包含512个CUDA core,分布于16个SM(Streaming Multiprocessor)中,每个SM包含32个core。此外,每个SM还包含16个LD/ST单元、4个SFU以及两组warp调度与分发单元。
图片

值得注意的是,SM中存在一个Uniform Cache,公开资料未详述其用途,可暂理解为L2 cache的一部分。此外,以计算为主的SM存在两种公开版本,主要区别在于是否包含纹理单元。

2.1.2 CUDA Core
Fermi架构明确了“CUDA Core”的称谓,其最大提升在于FMA(Fused Multiply-Add)运算能力。FMA遵循IEEE 754-2008浮点标准,相比之前的MAD(Multiply-Add)在乘法后保留了完整精度,因此计算结果更精确。
图片

每个CUDA Core在每个时钟周期可完成一次单精度FMA,整卡吞吐量为512 FMA ops/clock;双精度吞吐量为256 FMA ops/clock。相比Tesla GT200的30 FMA ops/clock,性能提升超过8倍。

2.1.3 任务下发与调度
Fermi的任务调度分为两层:

  • 全局调度:由第二代GigaThread引擎负责,其上下文切换速度比Tesla快10倍,并支持同一context内的多个kernel并发执行,提高了计算单元利用率。
    图片
  • SM内部调度:采用Dual Warp Scheduler,每个调度器可独立获取、分发指令。结合运算单元分组(两组CUDA Core、一组SFU、一组LD/ST),支持Dual issue操作,即一个周期内可向两个不同的执行组下发指令,但双精度指令不能与其它指令同时下发。
    图片

2.1.4 ECC功能
Fermi是首个在GPU中引入ECC(Error Correcting Code)功能的架构,对寄存器、共享内存、L1/L2缓存均提供保护,可检测并纠正单比特错误,检测多比特错误。ECC虽会略微降低内存效率,但极大地提升了数据可靠性,成为后续Tesla系列产品的标配。

2.1.5 内存结构改进
硬件上,Fermi将L1 Cache与Shared Memory整合在统一的64KB物理块中,比例可配置(如48KB+16KB)。同时,统一了Tesla时代分离的纹理读取与ROP写入通道。
软件上,提出了统一内存地址空间,将Local、Shared、Global地址空间合并,开发者可通过统一指针进行访问,简化了编程模型,该特性在PTX 2.0中得以应用。
图片

2.2 Fermi架构对应的产品

图片

2.3 增加的CUDA操作

Fermi对应CUDA计算能力2.x,新增操作包括:

  1. 增强的线程同步函数
    int __syncthreads_count(int predicate);
    int __syncthreads_and(int predicate);
    int __syncthreads_or(int predicate);

    这些函数在同步block内所有线程的同时,对每个线程的谓词值进行统计或逻辑运算。

  2. 系统级内存栅栏__threadfence_system(),确保多GPU设备间的内存操作顺序全局可见。
  3. 增强的原子操作:支持共享内存上的64位整型原子操作,以及全局/共享内存上的32位浮点加法原子操作。
  4. 表面内存操作函数:新增一系列surf前缀函数,用于访问1D、2D表面内存。

3 Kepler 架构分析

Kepler架构于2012年4月发布,采用28nm工艺,芯片代码“GKXXX”。主要亮点:

  • 动态并行:GPU线程可动态创建新的kernel。
  • Hyper-Q:提供最多32个硬件工作队列,提升多流并发度。
  • Warp Shuffle:warp内线程可直接通过寄存器交换数据,无需经过共享内存。
  • 其他:增加Grid管理单元、GPU Boost、NVDEC/NVENC编解码器、无绑定纹理、四warp调度器、GPUDirect RDMA等。

3.1 架构特点

Kepler计算卡架构主体如下,包含15个SMX、6个内存控制器等。
图片
图形卡架构(如GTX 680)则组织为多个GPC。
图片
与Fermi的主要参数对比如下:
图片

3.1.1 SMX特点
SMX的运算单元数量达到峰值(192个单精度CUDA Core),并首次引入独立的双精度单元(64个DP Unit)
图片
主要变化:

  1. 时钟调整:采用与GPU同频的1x时钟,相比前代的2x时钟降低了功耗。
  2. 四warp调度:SMX配备4个warp调度器,每个周期可发射4个warp的8条指令,且支持双精度与其它指令混合发射
  3. 增加GMU:为实现动态并行,新增Grid管理单元(GMU),用于创建和管理GPU内部发起的网格。

3.1.2 动态并行
允许GPU kernel在运行时创建并发射新的子kernel,无需CPU介入。优势在于可根据中间计算结果动态调整后续计算粒度,提升GPU利用率和任务独立性。
图片

3.1.3 Hyper-Q
解决了Fermi单硬件工作队列的瓶颈。Kepler提供最多32个独立硬件队列,使来自不同CPU流或MPI任务的kernel能真正并发执行,提高了GPU利用率。
图片

3.1.4 Warp Shuffle指令
提供__shfl()系列指令,允许warp内的32个线程直接通过寄存器交换数据,避免了通过共享内存中转的开销,极大提升了规约等操作的效率。

3.1.5 内存结构改进
新增独立的只读数据缓存,并为其开辟了专用通道。同时,纹理单元可被当作对象灵活使用,CUDA代码中可通过const __restrict修饰符让编译器自动使用该缓存。

3.1.6 GPUDirect RDMA
支持GPU之间通过PCIe或InfiniBand等网络直接访问对方显存,无需CPU内存中转,提升了多卡间数据交换效率。

3.2 Kepler架构对应的产品

图片

3.3 新支持的CUDA操作

对应计算能力3.x,主要新特性:

  1. 使用只读数据缓存
    __global__ void saxpy(float x, float y, const float * __restrict input, float * output){
    size_t offset = threadIdx.x + (blockIdx.x * blockDim.x);
    // 编译器自动使用只读缓存加载input
    output[offset] = (input[offset] * x) + y;
    }
  2. Warp Shuffle函数:实现warp内数据广播、规约等。
  3. 动态并行:示例子kernel创建。
    __global__ void parent_kernel(int *data) {
    if (threadIdx.x == 0) {
        child_kernel<<< 1, 256 >>>(data); // GPU内创建子kernel
        cudaDeviceSynchronize();
    }
    }

4 Maxwell 架构分析

Maxwell架构于2014年发布,沿用28nm工艺。主要特点是对SM进行了重构,推出SMM,通过分区设计提高指令发射效率和资源利用率,从而在同性能下实现更低功耗。

4.1 架构特点

以图形卡GM204为例,其架构模块图如下:
图片
与Kepler图形卡的主要参数对比如下,在芯片面积增大的同时实现了功耗的显著降低:
图片

SMM特点
SMM的核心改进是将运算资源(CUDA Core、寄存器文件等)划分给多个独立的处理块,每个warp调度器拥有专属的执行资源。这种设计减少了单条指令占用的资源量,提高了SM的占用率,降低了指令延迟,从而以更少的运算单元完成相同的计算任务。
图片

4.2 架构对应的产品

图片

4.3 新支持的CUDA操作

Maxwell对应计算能力5.x。GM20B(Tegra X1)等5.3算力的产品开始支持半精度操作,但普及度不高,通常认为半精度支持从Pascal开始。

5 Pascal 架构分析

Pascal架构于2016年4月发布,采用16nm FinFET工艺,芯片代码“GPXXX”。主要亮点:

  • 首次引入NVLink高速互连。
  • 首款采用HBM2高带宽显存。
  • 优化统一内存管理,支持超额订阅和页面迁移。
  • 增强半精度计算能力。

5.1 架构特点

以GP100计算卡为例,架构主体如下:
图片
主要性能参数对比如下:
图片

5.1.1 SM单元
Pascal的SM(第六代)延续小型化思路,单个SM包含64个CUDA Core(分为两组),但每组拥有独立的指令缓冲区。主要特点:

  • Core可用寄存器增多,访问共享内存带宽增加。
  • 双精度单元与单精度Core比例达到1:2。
  • L1 Cache与Shared Memory物理独立。
  • 支持单指令双FP16运算(为深度学习优化)。
    图片

5.1.2 HBM2显存
采用3D堆叠的HBM2显存,带宽远超GDDR5/5X。其ECC功能在堆栈内本地化,消除了传统ECC带来的内存容量和带宽开销。
图片

5.1.3 NVLink
第一代NVLink提供了远超PCIe的GPU间直接互连带宽(约5倍),缓解了多卡训练时的通信瓶颈。
图片

5.1.4 统一内存优化
Pascal的统一内存得到显著增强:

  • 支持CPU和GPU同时访问统一内存。
  • 地址空间扩展到整个系统内存。
  • 引入页错误迁移机制,允许显存超额订阅。当GPU访问不在显存中的数据时,硬件自动将数据从系统内存迁移至显存,若显存已满则会先换出部分数据,这对CUDA编程中的内存管理带来极大便利。
    图片

5.2 架构对应的产品

图片

5.3 新支持的CUDA操作

对应计算能力6.x,主要新特性:

  1. 隐式统一内存管理:可使用标准的mallocfree在主机代码中分配统一内存,无需cudaMallocManaged
  2. 半精度数据类型:支持__half类型的加、减、乘、比较、转换及warp shuffle操作。
  3. 增强的原子操作:支持全局和共享内存上的64位双精度浮点数原子加操作。

参考资料




上一篇:网络安全外包岗位入职实战:从面试到项目驻场的职场初体验
下一篇:Android IoT僵尸网络Kimwolf技术分析:DNS over TLS与EtherHiding绕过检测
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 19:21 , Processed in 0.216846 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表