1.显存和缓存简介
2.显存和缓存的关系
3.显存和缓存为什么会影响性能
4.显存和缓存优化思路
1.显存和缓存简介
csharp
复制代码
1).显存
a.显存是gpu外部的专用大容量存储, 主要用于存放顶点, 纹理, 渲染目标(RT), 阴影贴图
后处理缓冲
b.特点
- 容量大, 以GB为单位, 带宽高, 但是延迟大
- GPU工作时几乎会不停地从显存中读写内容
csharp
复制代码
2).缓存
a.缓存是GPU内部的小容量高速存储, 主要用于存放从显存取出的热点数据, 方便我们重复使用
b.所谓热点数据一般在CPU和GPU的优化领域中指的是在短时间内被高频访问的数据, 因为它被
用的多, 所以放在更快的存储空间中(比如寄存器、缓存)能极大的提升性能
比如在GPU中的常见热点数据为
- 顶点缓存, 渲染一个网格时, 某些顶点会被多个三角形复用, GPU会把最近变换过的顶点存在
缓存里, 避免重复计算
- 纹理缓存, 当片元连续访问相邻的UV时, 缓存会把周边像素块一起取进来
- 常量缓存, 灯光参数、矩阵等, 几乎每个片元都要用
b.特点
- 容量小, 以KB ~ MB计, 速度快
- 中(缓存中找得到对应数据)时快, 不命中(找不到)时必须回显存
csharp
复制代码
缓存缓存不会一字节一字节存, 而是一次性把一大块连续的数据搬进来, 原因: 利用空间局部
性, 取了一个地址, 附近的数据很可能也会用
2.显存和缓存的关系
csharp
复制代码
1).取数据时, 当GPU或CPU访问某个地址
a.缓存中命中(在缓存中找到了): 直接从缓存中读取, 速度快
b.缓存未命中(在缓存中没找到): 去显存中去, 同时把这块数据搬进缓存
2).往缓存里放数据时, 缓存不是一字节一字节放, 而是一次性搬一整块(通常32B/
64B/128B), 这样就能利用空间局部性, 如果你要用的数据附近的数据也很可能会用, 就顺便
搬进来
3).替换缓存数据时
a.如果缓存还有空: 直接放进去
b.如果缓存满了: 根据数据替换规则直接覆盖之前的数据(GPU一般采用Random随机替换、CPU
一般采用LRU最近最少使用的替换)
3.显存和缓存为什么会影响性能
csharp
复制代码
1).显存性能瓶颈主要来自于
a.内存带宽不足
b.容量不足
"显存决定能装多少,能传多快"
csharp
复制代码
2).缓存性能瓶颈主要来自于
a.未命中: 比如在Shader中进行随机采样纹理、UV跨度过大, 就会导致缓存命中率低; 当未命
中就睡频繁的去显存中取数据, 导致获取数据缓慢, 延迟变高
b.OverDraw、重复访问, 一个像素被多次覆盖, 导致反复的读取纹理等信息, 不停替换缓存中
内容, 缓存中内容还没有重复使用就被替换了, 让缓存命中率下降,缓存的加速作用大幅削弱
4.显存和缓存优化思路
csharp
复制代码