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 复制代码
相关推荐
还是大剑师兰特17 小时前
Unity3D(Unity)完整详细介绍
unity·游戏引擎
ellis197020 小时前
u3d插件xLua[七]例6 Coroutine
unity
还是大剑师兰特21 小时前
Unity 从零搭建简易3D场景(新手分步教程)
3d·unity·游戏引擎
神码编程1 天前
【Unity】TankBattle联机坦克大战(三)创建关卡(生成地块)
unity·游戏引擎·帧同步·坦克大战
淡海水1 天前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#
玖玥拾2 天前
Unity3D RPG 入门项目(四)背包拖拽、物品悬浮提示、项目开发思维
3d·unity·游戏引擎
xcLeigh2 天前
Unity基础:Start与Update方法——Unity脚本生命周期初探
java·unity·游戏引擎·教程
郝学胜-神的一滴2 天前
[简化版 GAMES 104] 现代游戏引擎 05:游戏引擎世界构建核心机制深度解析
c++·程序人生·unity·游戏引擎·计算机图形学·opengl
LONGZETECH3 天前
无人机实训高成本痛点解法:虚拟仿真实现 70% 耗材损耗下降
大数据·算法·unity·架构·无人机
五仁烧饼3 天前
Unity Addressables 静默资源策略
游戏·unity·addressables