NVIDIA通用计算首代架构 Tesla 与 CUDA 1.0 剖析
我们大家都知道英伟达早期是通用做显卡的 ,在我上大学的计算架构时候 ,同学们给自己的首代电脑上配一块英伟达的显卡一般都是为了玩游戏更爽。
但是通用近些年来随着比特币、大模型等应用场景的计算架构火热,英伟达也早就完成了从显卡到通用计算 GPGPU 的首代华丽转身 。造就了今天将近4.3万亿美金市值的通用巨无霸 。源码下载
我们今天就从英伟达的计算架构第一代数据中心 GPU - Tesla 说起。通过深入地了解第一代 Tesla 架构以及和它配套的首代 CUDA 1.0 。学习完本文后 ,通用我们将对以下问题有比较深入的计算架构理解。
英伟达为啥要从游戏显卡转型科学计算?首代Tesla 中的统一着色架构到底是什么,为什么重要?通用通用GPU中 SM 流多处理器都包含了哪些硬件模块?为什么合理使用常量能大幅度提升 GPU 的计算能力?CUDA如何实现使用C/C++就能进行GPU编程的?好了,让我们开始今天的计算架构 GPU 学习之旅 !
一、建站模板首代英伟达游戏卡的困局
先让飞哥带大家把地球时间进度条倒回到 2004 年。
当时英伟达与 ATI(后被 AMD 收购)的显卡大战进入白热化阶段。尽管英伟达通过 GeForce 6/7 系列占据市场优势,但图形市场增长逐渐放缓,且 AMD 凭借 Radeon 9700 Pro 等产品在部分领域实现反超。此时 ,英伟达继续找到第二增长曲线。
当时就有这么一个领域 ,科学领域面临计算瓶颈。传统 CPU 集群成本高且不说,而且且性能低下。部分科学研究者开始利用 GPU 的图形 API 和各种 Shader语言(HLSL、GLSL 、亿华云Cg等)实现了一些图像分割、CT图像重建 、快速傅立叶变换、图像以及音视频编解码等算法。
这就让英伟达眼前一亮 ,原来 GPU 还可以这么玩。于是灵感就来了 ,如果能在计算场景提供专用硬件,和更方便使用的编程工具,那是不是就能占据通用计算这块市场。这第二曲线不就打开了么 !
说干就干。云计算英伟达在 2006 年推出了 Tesla 系列的 GPU ,以及 CUDA 编程套件。开始了从显卡到通用计算的转型 。
二 、Tesla 架构介绍
英伟达在 2006 年开辟了新的通用计算系列产品名字叫 Tesla。
首代 Tesla 通过统一着色架构(Unified Shader Architecture)将传统分离的顶点着色器、像素着色器 、几何着色器统一为可编程的流处理器(Streaming Processor)。该流处理器虽然设计上主要是处理可执行顶点 、像素等着色图形任务 ,源码库但也可执行与图形无关的计算指令 ,为通用计算提供了基础。
自此后面的英伟达的通用计算 GPUs 就都开始以 Tesla 来命名。例如后面 2016 年的 Tesla P100 、2017 年的 Tesla V100 、2018 年的 Tesla V4 。
但如果你最近有听过老黄的发布会的话 ,他嘴里一直在说 Data Center GPUs,服务器租用而不说 Tesla 。原因是在 2018 年发布 Tesla V4 之后,因为特斯拉汽车名声太大了 ,老黄给就他的通用计算 GPU 改了个名字,叫数据中心 Data Center GPUs 。
另外和 CPU 一样 ,GPU 中也有架构的概念。第一代的数据中心 GPU 的系列产品名字为 Tesla,架构名字也被命名为了 Tesla。
后面大概每隔两年会有一代新的架构名字,例如 2016 年的 Tesla P100 属于 Pascal 架构 。我们熟悉的 2020 年的 A100 ,其架构名是 Amphere 。2022年的 H100、H200 以及阉割版的 H20 , 其架构名是 Hopper。
图片
在这里我们要注意区分 GPU 中的几个重要概念。
第一个是架构名。
架构名代表是一代技术平台 ,如Tesla(2006、)Maxwell(2014)、Ampere(2020) 、Ada Lovelace(2022)等。
在同一代架构有着统一的微架构设计(如内存控制器、SM 单元结构) ,支持特定特性(如 Maxwell 引入动态显存压缩,Ampere 集成第三代 Tensor Core)。
第二个是核心名。
核心名代表的是架构下的具体实现。如GA102(Ampere 架构下的高端核心)、AD104(Ada 架构下的主流核心) 。
一般来说 ,同一架构可衍生多个核心 ,差异在于SM数量,CUDA 核心数量、显存带宽等参数 。例如:GA102(RTX 3090/3080):10752 CUDA 核心,384-bit 显存位宽 。GA104(RTX 3060 Ti) :4864 CUDA 核心,256-bit 显存位宽 。第三个是大家最熟悉的产品名
产品名面向市场的具体型号 ,也是大家最熟悉的 GPU 的概念 ,如GeForce 8800 Ultra、RTX 4090 、GTX 1660 Super。
同一核心可衍生多个产品 ,通过频率、显存容量等差异化定位。例如 GA104 核心下包括 RTX 3070、RTX 3060 Ti 等多个不同的产品 。
RTX 3070:8GB GDDR6,2912 MHz 频率 。RTX 3060 Ti:8GB GDDR6,1665 MHz 频率。给大家推荐一个很好的网站 https://www.techpowerup.com/。在这个网站里可以根据架构名、核心名 、产品名来检索英伟达各个 GPU 的详细数据 。飞哥的分享中很多数据都来源于这个网站。
2.1 Tesla G80 架构
Tesla 架构包括 G80、GT200 等核心。GT200 是 G80 的改进款