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 复制代码
相关推荐
Martina_03213 天前
AI生成3D场景导入 Unity/Unreal 后,NPC 总串层?用6步检查导航高度与跨层连接
人工智能·游戏·数学建模·3d·unity·自然语言处理·aigc
小贺儿开发3 天前
Unity 局域网遥控幻灯片展示工具 3.0
科技·http·unity·工具·ppt·通信·网页
WarPigs5 天前
Unity对象不应该使用null传播的问题
unity
每日出拳老爷子6 天前
【VR】【Unity】抓走转放系列21|一天搭完门和抽屉工具槽:小场景按这个次序拼装
unity·vr·驱动·排错·snap zone
淡海水7 天前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
小贺儿开发7 天前
Unity 文物新生 会讲故事的文物展墙
人工智能·科技·unity·ai·视频·互动·演示
淡海水7 天前
02-03-原理篇-大对象堆
unity·c#·游戏引擎·.net·gc
WarPigs8 天前
Unity在Create菜单添加创建自定义脚本模板选项
unity
淡海水8 天前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc
babywang08 天前
Unity笔记--塔防游戏中的ECS架构:从原理到实战的全面解析
unity·ecs架构