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 复制代码
相关推荐
Zik----6 小时前
简单的Unity漫游场景搭建
unity·游戏引擎
在路上看风景16 小时前
4.5 顶点和片元
unity
在路上看风景1 天前
31. Unity 异步加载的底层细节
unity
天人合一peng1 天前
Unity中做表头时像work中整个调整宽窄
unity
小李也疯狂2 天前
Unity 中的立方体贴图(Cubemaps)
unity·游戏引擎·贴图·cubemap
牛掰是怎么形成的2 天前
Unity材质贴图引用陷阱:包体暴涨真相
unity·材质·贴图
呆呆敲代码的小Y2 天前
【Unity工具篇】| 超实用工具LuBan,快速上手使用
游戏·unity·游戏引擎·unity插件·luban·免费游戏·游戏配置表
EQ-雪梨蛋花汤2 天前
【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
unity·游戏引擎
我的offer在哪里2 天前
用 Unity 从 0 做一个「可以玩的」游戏,需要哪些步骤和流程
游戏·unity·游戏引擎