参考文献

https://baijiahao.baidu.com/s?id=1610551581415069639&wfr=spider&for=pc

https://new.qq.com/omn/20190925/20190925A05P9H00.html

https://www.bilibili.com/read/cv1947987/

零、NVIDIA RTX 系列的简介

介绍 RTX 系列之前需要先了解里面的硬件结构,RTX 使用的是继 Maxwell、Kaple、Pascal、Volta 之后的又一种全新的架构:Turing 架构。新的 Turing 架构很重要的一点就是混合渲染(Hybrid Rendering)来实现光线追踪,具体来说包括了引入全新的 RT Core 来加速光线追踪,还有在 Volta 架构就引入的 Tensor Core 来加速 AI 处理,加上更优化的光栅化处理,所以新的 Turing 架构是包含多种力量来实现高效的 “混合渲染”。

Turing 架构

新架构的到来,最关心的就是微架构级别的变化:有哪些特性、有哪些精简。

特性方面,如果说 Volta 架构引入了 Tensor Unit,那么新的 Turning 架构中最重要的就是新引入的 RT Core。这里的 RT 顾名思义就是冲着光线追踪(Ray Tracing)来的,它的作用是用来加速处理光线在三维环境中的传播,处理光线的速度是目前 Pascal 架构的 25 倍!同时,让 GPU 作为节点处理最末帧(Final Frame)的效果渲染要比将 CPU 作为节点的速度快 30 倍。

而 Turing 同样没有忘记 Tensor Core。自从 Volta 架构引入了 Tensor Core 之后,我们都知道它能提供远远高于传统 CPU 的人工智能、深度学习性能,这部分性能能够赋予我们 GPU 去做很多以往没有的工作,比如说 Turing 架构的 Tensor Core,能够在每秒处理 500 万亿的张量运算,通过这部分性能,我们能实现以往无法奢望的功能:基于深度学习的抗锯齿技术 (DLAA,Deep Learning Anti-Aliasing)。

传统的架构方面,Turing 在 SM 单元中新增整数处理(Integer Unit)单元,以及新的统一缓存架构,能够带来目前架构两倍的带宽。

规格方面,Turing 架构能够搭载最多 4608 CUDA Cores,并且能够带来最高 16 TFlops 浮点性能。

以下比较总结:

<SM>

1、Turing 的流式多处理器(SM)和 Volta 架构相同,都是 7.x。

2、每个 SM 包含 4 个线程束调度单元,每个调度单元处理一个线程束组,并有一组专用的算术指令单元。

3、指令在两个周期内执行,调度器可以在每个周期发出独立的指令。而核心数学运算相关指令如 FMA 需要 4 个周期的延迟,与 Volta 相同,但比 Pascal 的六个周期要短。

4、与 Volta 架构类似,Turing 提供了 64 个 FP32 核心,64 个 INT32 核心和 8 个 改进的混合精度 Tensor Cores 核心。这使得 FP32 和 INT32 的操作可以同时执行。但 Turing 仅提供 2 个 FP64 核心,因此双精度的计算吞吐量较弱。

5、Turing 支持独立线程调用,因此支持线程束内部的线程同步 __syncwarp()。

6、Turing 架构上编程需要注意如下几点:

  • 使用带 _sync 后缀的线程束指令 (__shfl*, __any, __all, and __ballot) 代替原有的
  • 在需要线程束同步的位置插入 __syncwarp() 指令
  • 使用 __syncthreads() 指令时需要确保线程块中的所有线程必须都能达到此位置

7、Turing 架构每 SM 支持最多 32 个线程束并行执行,相比之下 ,Volta 支持 64 个。

8、与 Pascal 和 Volta 架构相同,Turing 架构每 SM 拥有 64k 个 32-bit 寄存器,每个线程最多可使用 255 个寄存器,每 SM 支持最多 16 个线程块驻留,每 SM 的共享内存大小为 64KB。

<Tensor Cores>

9、Volta 引入 Tensor Cores 核心来加速混合精度浮点数据的矩阵乘法运算,Turing 更进一步,支持加速整数矩阵乘法运算。Tensor Cores 通过每个线程束处理一个小的矩阵运算来达到最大效率,在实践中,Tensor Cores 通过用于执行由小矩阵片段组成的大矩阵运算。

10、每个 Tensor Cores 执行矩阵乘法、加法操作:D = A * B + C。Tensor Cores 支持半精度浮点(half)矩阵运算,即矩阵 A 和 B 为 FP16 精度,矩阵 C 和 D 可 FP32 也可 FP16,CUDA 10 支持 16x16x16,32x8x16 和 8x32x16 大小的 FP16 矩阵运算。

11、Turing 架构支持 8-bit,4-bit 和 1-bit 整数输入,32bit 整数累加的整数矩阵乘。当输入为 8-bit 时,CUDA 支持 16x16x16,32x8x16 和 8x32x16 大小的矩阵运算。当输入为 4-bit 时,CUDA 支持 8x8x32 大小的矩阵运算。当输入为 1-bit 时,CUDA 支持 8x8x128 大小的矩阵运算。

12、Turing 架构拥有 96KB 的 L1/Share Memory 告诉缓存,可配置 64KB Shared /32KB L1 或 64KB L1 / 32KB Shared。

13、Turing 允许一个线程块使用全部的 64KB 的共享内存,但静态共享内存分配最大限制 48KB,超过 48KB 的只能动态分配。

<总体体系架构>

  • Turing 架构包含 Turing TU102 GPU、Turing TU104 GPU、Turing TU106 GPU。以 TU102 为例,TU102 包含 6 个 Graphics Processing Clusters(GPCs)、36 个 Texture Processing Clusters(TPCs) 和 72 个流式多处理器(SMs)。每个 GPC 包含一个专用光栅引擎和 6 个 TPC,每个 TPC 包含 2 个 SM,每个 SM 包含 64 个 CUDA Cores、8 个 Tensor Cores、1 个 256KB 寄存器、4 个纹理单元和 96KB 的 L1/共享内存区域(可自配置)。Turing 还通过每个 SM 拥有一个新的 RT 核心来实现 Ray Tracing Acceleration。
  • TU102 GPU 的全部配置包括 4608 个 CUDA Cores,72 个 RT 核心,576 个 Tensor Cores,288 个纹理单元和 12 个 32-bit GDDR6 存储控制器(共计 384-bit)。每个存储控制器包含 8 个 ROP 单元和 512KB 的 L2 缓存,所以 TU102 GPU 总计包含 96 个 ROP 单元和 6144KB 的L2 缓存。
  • Turing 第一次使用 GDDR6 DRAM 内存,可达到 14 Gbps 的速度

<SM体系架构>

  • Turing 架构引入了新的 SM 体系架构。每 TPC 包含 2 个 SM,每 SM 包含 2 个 FP64 单元(共计 144 个),64 个 FP32 核心和 64 个 INT32 核心,这使得 Turing 可以并行执行 FP32 和 INT32 运算。每个 SM 还包含 8 个混合精度 Tensor Cores。
  • Turing 的 SM 被划分为 4 个进程块,每个进程快包含 16 个 FP32 核心、16 个 INT32 核心、2 个 Tensor Cores、一个线程束调度器和一个调度单元,每个进程块还抱哈一个新的 Lo 指令缓存和一个 64KB 寄存器。这 4 个进程块共享一个可自配置的 96KB 大小 L1/共享内存区域。
  • Turing 还改造了核心执行路径,相比之前的单一执行路径,Turing 在执行混合 FP 算术指令,如 FADD、FMAD 时为每个 CUDA 核心增加了另一个并行执行单元来并行整数运算和浮点数运算。
  • SM 中的每个 Tensor Core 可以在每个时钟周期内执行高达 64 次 FP16 输入融合浮点乘法、加法运算(FMA),8 个 Tensor Core 这可以在每个时钟周期内执行总计 512 次 FP16 乘法、加法运算,或 1024 次 FP 运算。Turing 新引入的 INT8 精度模式在每个时钟周期内更是可以执行 2048 个整数运算。
  • Tesla T4 身为 Turing 第一个使用 Turing 架构的 GPU,包含 2560 个 CUDA 核心和 320 个 Tensor Cores,可实现 130 TOPs(Tera Operations per second)的 INT8 运算和高达 260 TOPs 的 INT4 运算。

RTX 平台

RTX 平台的核心结构就是上述的 Turing(图灵架构)。RTX 平台的核心技术:

  • 光线追踪(RT,Ray Tracing)
  • 人工智能(如:深度学习超级采样(DLSS,Deep Learning Super Samping))
  • 光栅化
  • 模拟

1、光线追踪

由于 Turing 架构配备了 RT Core,专用于光线追踪的处理器,能够以高达每秒 10 Giga Rays 的速度对光线和声音在 3D 环境中的传播进行加速计算。Turing 架构将实时光线追踪运算加速至上一代 NVIDIA Pascal 架构的 25 倍,并能以高出 CPU 30 多倍的速度进行电影渲染。利用经 Turing 优化的光线追踪 API(如 NVIDIA OptiX、Microsoft DXR 和 Vulkan),将实时电影级渲染效果变为现实。通过实时渲染逼真的物体和环境,再辅以精准无比的阴影、反射和折射技术,现能以前所未有的速度为用户创造令人惊叹的内容。

2、人工智能

由于 Turing 配备全新 Tensor Core(一款用于加速深度学习训练和推理的处理器),每秒可提供高达 500 万亿次的张量运算。这一性能水平能够极大加速 AI 增强功能,如去噪、分辨率缩放和视频调速,并有助构建具有全新超强功能的应用程序。RTX 平台采用全新 NGX SDK,能够将强大的 AI 增强功能融入可视化应用程序中。智能图像处理、自动处理重复作业和计算密集型流程优化有助于节约时间和资源,从而显著加快用户的创意速度。

3、光栅化

相比上一代 Pascal,Turing 架构能够借助增强的图形管线和全新可编程着色技术显著提高光栅性能。在 RTX 平台中,将基于 Turing 的全新进展引入可编程着色技术,如可变速率着色、纹理空间着色和多视图渲染。这能够创造出更丰富的视觉效果、与大型模型和场景实现更顺畅的交互,并有助改善 VR 体验。

4、模拟

逼真的视觉效果不仅包括物体呈现的外观,还包括其行为方式。基于 Turing 的 GPU 搭载新型流式多处理器(SM)架构,支持高达 16 万亿次浮点运算,同时能够并行执行 16 万亿次整数运算。借助强大的 Turing 4608 个 CUDA 核心和 含有 API(如 NVIDIA PhysX、FleX 和 CUDA 10)软件开发套件(SDK)穿件复杂的模拟,使 RTX 平台能够在游戏、虚拟环境以及特效环境中,对真实物体的行为精确建模。

一、关键技术记述

光线追踪能够模拟光的路径,真实地重现光线、材质、阴影和反射。通过 NVIDIA Turing架构的 RT Cores,能够让创作者随时随地的使用光线追踪,并拥有高达每秒百亿级的光线。

AI加速技术能够实现图片分辨率增加、照片细节增强、图像内容感知修复、AI辅助绘图这四项重要功能,进一步提升图片创作的后期效率和精细程度。基于 NVIDIA RTX Tensor Cores 能够为 AI 推理提供高达 10倍的算力。

 

在 RTX 中有两项对我印象很深刻,很关键的技术:实时光线追踪技术深度学习超级采样技术。是的,在游戏领域和虚拟现实领域中有很强劲表现的两项关键技术。

实时光线追踪技术(RT)

要明白光线追踪技术的牛逼之处,要先了解我们是如何实现将一个 3D 图形的几何信息在屏幕上呈现。在很早以前就已经提出了用光线追踪技术在屏幕上显示,但因为计算量非常大,仅能显示一张图片。因此采用了别的办法进行 3D 图形显示的方法:光栅化渲染。

传统光栅化渲染技术

光栅化渲染其实是将一个 3D 图形的几何信息转变为一个个栅格组成的 2D 图像的过程,可以理解为在这个 3D 图形的每个点都包含有 颜色、深度 以及 纹理数据,经过一系列计算变换后,将其转换为 2D 图像的像素,进而呈现在显示设备上。

这一过程也就构成了我们视觉所看到的各类阴影效果以及光线投射,直白地说,在游戏领域中,设计者结合环境说一个物体这里有阴影,并基于这一观点进行计算,进而呈现在游戏画面中,这样我们看到的这一物体就会有一块“逼真”的阴影,达到真实的视觉效果。

那么问题来了:如果开发者的判断是对的,那么画面上的效果也是对的,那么开发者只能做到让我们看到的 “逼真” 将无限逼近真实,并不能保证这就是真实的效果。但,如果开发者的判断是错的,在不可能的地方出现了阴影,那么我们将没有任何办法纠正。

所以说,光栅化技术有非常明显的缺点,因为它是一个骗人的技术。

随着游戏行业发展,现在的 3A 大作都为玩家构建了一个非常完整的世界。但不管是什么游戏,玩家的行为越来越不可控,他们会走到游戏世界的每一个角落,不走正常途径玩游戏等等这些行为对于设计师或者开发者而言,是一种极大的开发压力,因为没有人能将所有玩家途径都考虑在内。

如果对游戏场景进行限制又会让游戏丧失自由度。通常的处理方式是考虑尽可能多的环境场景,规定 GPU 在这些特定的场景下进行特定的光栅化渲染,产生阴影等视觉效果。但它的局限性在于:当玩家途径一块并不是规定的区域或角度有所偏差的时候,物体的光栅化渲染效果并不会改变,依旧是设定好的效果呈现。

造成的结果就是,在体验游戏的过程中,看到的一切画面其实都是提前设定好的,看似真实,但总是会有瑕疵。

视觉真实的光线追踪

标准化的光线追踪(RayTracing)是以光源为起点定义光线,进而追踪由此产生的光线与物体表面以及光线与光线之间的交互关系的过程。但这项技术目前实现起来非常非常的困难,因为这一技术需要 “无限多” 的光线照射在物体表面,通过反射、折射、漫射等途径进入最终的 “摄像机” 成像。这一过程需要耗费大量的算力(现今计算机也无法满足如此高的计算要求)且会有大量光线损失。

要想实现光线追踪,首先要解决的就是 “无限” 的计算压力。

RTX 20 系列显卡包括现在绝大多数光线追踪技术采用了逆向思维:以 “摄像机” 镜头为出发点,反向回溯光线并通过这些光线寻找光源。因此要计算的就只是被 “摄像机” 捕捉到的这部分 “有限” 的光线。可以理解为 RTX 的光线追踪是人为定义了射入摄像机的光线总量,通过回溯这些光线反射后以寻找光源,每一个交汇结果都可以被作为是回溯过程中招惹到的光源所发射的光线与物体作用的结果,找不到就丢弃。

这样做的好处在于光线关系的起点是摄像机,这就造成光线光线与场景可视的几何信息存在高度的关联性和可遍历性,也就是所有进入不了视野的光线都将被剔除,实际上的大大减少了光线追踪运算需求

另外,光线的实际范围被约束在了可视场景内,方便光线在回溯过程中的排序以及遍历,光线的处理过程既可以跟 shader 过程结合,也可以透过 direct compute 单独拿出来做独立数学步骤,就如 deferred shading 一样。这样做会极大的加速整个追踪和交汇检查过程的效率,可以看做是手解高阶方程与使用计算机处理的差别。

当然,缺点也是不容忽视的,这类实时光线追踪并不是从光源出发,而是从视角的角度出发,无法做到对真实的光线进行真实的遍历,人为规定了光线的数量以回溯光线的过程,也就意味着整个过程脱离不开人的定义,错误的干扰依然是不精确甚至是错误的主要原因。但总体来说,实时光线追踪可以让玩家体验到更加真实的游戏场景,光线决定了物体表现的最终纹理,在体验游戏真实性上是一次巨大的技术革新

RTX中的光线追踪技术

以 10W 束标准自然光线的场景遍历举例,平均每道光线进行 3 次交互检查,大概需要 100T 的 DP 算力。而基于 DXR 环境下的光线追踪,以 16T 的 SP 算力实现 100G 束光线的单次交汇检查,这个运算效率的提升是巨大的。它将天生与缓存体系敌对的光线追踪过程重新拉回现有渲染流水能够控制的范围内,让现有流水线能够处理本来无法完成的过程。

而效果也是明显的,虽然这个 RT 是人为规定的反向回溯,但反向回溯也是回溯,一旦正确回溯到光源,那这条光线就是真实正确的,它与物体之间的所有交互关系所产生的颜色、亮度甚至透视度等变化都将是符合自然规律的,这比光栅化渲染的人为定义光源结果要正确很多。可以说 RTX 的实时光线追踪技术以及与最终形态的光线追踪技术近乎接近。

由于光线追踪算法与现实的真实世界物理规则几乎一致,在构建画面的过程中具备了巨大的优势。

有空间物体的表面颜色、纹理等数据,有光源位置,在人为定义有限光束下,计算以摄像机为起点,经过物体各种反射后的渲染数据,再进行优化渲染,形成图像。

深度学习超级采样技术(DLSS)

DLSS,深度学习超级采样,它是一种 RTX 技术,能够使用深度学习和 AI 的强大功能来训练 GPU 渲染清晰的游戏图像,并运行速度比使用传统抗锯齿技术的上一代 GPU 快了 2 倍。

例如:有一个搭配了 GTX 1080 显卡的主机,有一台 2K 显示器,在某款大型游戏中以 2K 分辨率下可以达到 60 帧,但是如果有一台 4K 显示器,想要满足原生 4K 分辨率的要求,那么你可能在设置降低为中等画质才能保持流畅,或者使用 2K 分辨率(或 4K 分辨率 x66% 解析),虽然能让游戏运行流畅,但是在 4K 显示器下显示模糊。而显卡性能不足以支持高分辨率流畅运行的时候,我们可以利用 DLSS 技术来实现,DLSS 存在的意义或者说使用场景是:

1、使用 2K 分辨率(或 4K 分辨率 x66% 解析)的硬件消耗量

2、实现接近原生 4K 分辨率的显示效果。(显示效果从 4K 分辨率 x66% 解析,提升到 4K 分辨率 x80% 解析)

也就是说,DLSS 用低分辨的硬件要求,实现了接近于高分辨率的显示效果。DLSS 技术就在分辨率与帧数取舍之间的一种新平衡方法,动用了深度学习等技术。

PS. DLSS模型由NVIDIA Driver提供支撑,从445.75开始支持

分辨率&刷新率&FPS

显示器为什么越高刷新率越好?这里引入“FPS”和显卡“垂直同步”的概念。

FPS,Frame Per Second,表示的是每秒钟画面更新次数,是描述“帧”变化速度的物理量。对高速画面来说,60FPS才能得到比较理想的效果,这是因为人眼的缘故。

显示器的刷新率与 FPS是不平等的,刷新率不随图像内容的变化而变化,是恒定速率。若显示器刷新率设置为 60Hz而显卡生成图像都帧速是 100FPS,则最终用户看到的图像仍是 60FPS。

实际上这是限制了显卡性能的原因,显示器 60Hz意味着只要 60帧/秒,超过的不需要,那么显卡的 100FPS就只到 60FPS了。

为了平衡这两者的关系,就诞生了“垂直同步”的概念。当关闭垂直同步时,由于不再等待显示器的反馈信号,因此显卡性能得到了最大的发挥。虽然通过关闭垂直同步可以得到更高的帧速,理论上虽然如此,但实际上并非这样,实际观察到的帧速要收到显示器当前刷新率的制约,从而会对画面产生不良的影响。一般而言,关闭垂直同步会导致画面产生以下两种问题:画面的错位或断裂,以及跳帧。

刷新率 144Hz是非常重要的功能,因为在有高速需求的游戏来说,60FPS 才能得到比较理想的效果,而对于专业电竞选手来说,FPS要达到 100以上才会觉得连贯。大多数液晶显示器的屏幕刷新率只有 60Hz,这也是为什么电竞显示器一定要支持 144Hz的刷新率。

注意事项:

1、显示器与显卡的连接线需使用 DisplayPort线连接或 24针的双通道 DVI线 HDMI2.0及以上的线,VGA线材均不支持 144Hz显示

2、部分显示器需在设置中将响应时间调整至最快才可发挥 144Hz最大效果

三、显卡表

NVIDIA Graphic Card

GPU类型版本越低性能越好: GP106(低) GP104(中) GP102(高) GP100(顶)
架构性能(低→高): MaxWell → Kepler → Pascal → Volta
(麦克斯韦) (开普勒) (帕斯卡) (伏特)
支持的CUDA最低版本: ( ??? ) → ( All ) → ( 8.0↑ ) → ( 9.0↑ )
(架构) - 显卡代号显存容量GPU核心相关核心数量(SM/TensorCore/RTCore)温度与功耗其他官网原始数据
(Kepler) - Tesla K802 * 12 = 24 GBKepler GK110 x 2(S)4992375 W
(Pascal) - Tesla P10016 GB (HBM2)Pascal GP100(S)3584
(D)1792
300 W
(Volta) - Tesla V10016 GB (HBM2)Volta GV100(S)5120
(D)2560
(T)640
300 W
(Turing) - GeForce RTX 2080Ti11 GB (GDDR6)Turing TU102(S)4352
(T)576
(RT)72
250~260 W
8pin + 8pin
12nm
Real-Time Ray Tracing
DLSS 2.0
https://www.nvidia.cn/geforce/graphics-cards/rtx-2080-ti/
(Pascal) - GeForce TitanX12 GB (GDDR5 X)Pascal GP102(S)3584250 W
(Pascal) - GeForce TitanXP12 GB (GDDR5 X)Pascal GP102(S)3840250 W
(Pascal) - GeForce GTX 1080 Ti11 GB (GDDR5 X)Pascal GP102(S)3584250 W
(Kepler) - Tesla K4012 GBKepler GK110(S)2880235 W
(Kepler) - Tesla K205~6 GBKepler GK210(S)2496 ~ 2688225 ~ 235 W