[CUDA学习笔记]卷2:初识GPU架构

发布网友 发布时间:2024-10-16 20:28

我来回答

1个回答

热心网友 时间:2024-10-17 23:56

本文是作者的CUDA学习笔记,若有疏漏,欢迎各位大佬指正。

在进行CUDA开发时,硬件知识不可或缺。以手头的NVIDIA GeForce RTX 3060 12 GB为例,芯片架构为GA106。然而,从Tesla、Fermi到Volta、Ampere,Volta架构(RTX20系)更具代表性,nv转向AI与通用计算的过程可见一斑。Volta架构在中有详尽介绍,特别是新一代的Tensor Core,以及将CUDA Core分为int32和fp32类型的设计。因此,研究CUDA开发时,以Volta为参考更合适。

3060的GPU架构包含多个SM作为基础单元,每个SM又包括多个处理块,每个处理块有第三代Tensor Core和32个CUDA Core(每个int32和fp32单位视为一个CUDA Core,fp为额外的高精度单元)。总着色单元计算为3584=28×4×32。

LD/ST用于处理寄存器到显存的吞吐,而SFU则负责一些CUDA Core无法处理的计算,如三角函数、插值。

虽然GPU被认为是通用计算CUDA Core的集合,但早期GPU专门设计用于图形相关计算,通过并行处理加速图形加速。随着AI技术发展,通用计算成为新架构重点。因此,vertex shader、frag shader等组件的实际底层是通过一系列CUDA Core和专用单元上的操作与计算实现的。

回顾nv的架构发展,从Tesla、Fermi、Kepler、Maxwell、Pascal、Volta、Turing到Ampere。Pascal架构仍统一为CUDA Core,而Volta架构下CUDA Core分为fp32和int32类型。每个处理块有一半CUDA Core从fp32变为int32类型,这不仅提高了FMA操作速度,还允许FP32和INT32核心在同一周期并行运行。虽然理论上,只包含FP32计算的程序中,一半的INT32核心可能不处于满负载状态,但实际应用中,INT32的需求量很高,包括寻址和索引等操作。这种类型专用核心在效率和能效比方面通常优于通用核心,同时保持了良好的通用性。

对于SIMD(单指令多数据)和SIMT(单指令多线程)模型,SIMT在Volta架构中有所加强,允许在甲分支未执行完毕时挂起,穿插执行乙分支,一定程度上减轻了并行程序中分支指令带来的问题。此外,Volta架构允许线程在访问被其他线程锁定的资源时,正常等待放锁,而不影响其他线程的执行,提高了资源利用效率。

Volta架构还引入了第一代Tensor Core,允许一个周期内完成两个4*4矩阵的乘法,显著提升了矩阵运算的效率。虽然本文对Tensor Core的讨论较为简略,但对于更深入的理解CUDA开发而言,了解这些细节至关重要。

本文旨在粗略整理架构印象,硬件知识越深,越能认识到自己的无知。这将为进一步研究GPU细节奠定基础。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com