4.6 显存和缓存

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 复制代码
相关推荐
真鬼12313 小时前
【Unity 6】Unity6快捷下载,快速下载
unity·游戏引擎
会潜水的小火龙14 小时前
unity打包apk报错Failure to initialize问题解决方法
unity·游戏引擎
平行云16 小时前
实时云渲染平台数据通道,支持3D应用文件上传下载分享无缝交互
linux·unity·云原生·ue5·gpu算力·实时云渲染·像素流送
Sator118 小时前
unity仅用粒子系统实现拖尾
unity·游戏引擎
游乐码18 小时前
Unity基础(五)四元数相关
unity·游戏引擎
想做后端的前端19 小时前
Unity热更新 - HybridCLR & YooAsset
unity·游戏引擎
鹿野素材屋19 小时前
Unity预加载:减少游戏中首次加载资源时的卡顿
windows·游戏·unity
HonestGoat1 天前
Unity3d之碰撞体设置
unity
那个村的李富贵2 天前
Unity自适应文本提示框:从原理到实战
unity·游戏引擎
HonestGoat2 天前
Unity3d之鼠标光标
unity