【Unity DOTS1.0】学习之路---先导课1-4笔记

本文介绍了缓存命中率及其对应用性能的影响,缓存抖动的概念,以及AOS和SOA两种数据布局方式对缓存性能的优化。此外,还提到了SIMD技术在并行处理中的作用,非托管内存块的特性,以及Unity中的Archetypes和Chunk概念,强调了StructuralChange对性能的影响。
摘要由CSDN通过智能技术生成

【新手小白自我鞭策—补充部分专有名词】
缓存命中:缓存命中率:通常来讲,缓存的命中率越高则表示使用缓存的收益越高,应用的性能越好(响应时间越短、吞吐量越高),抗并发的能力越强。
命中:可以直接通过缓存获取到需要的数据。
不命中:无法直接通过缓存获取到想要的数据,需要再次查询数据库或者执行其它的操作。原因可能是由于缓存中根本不存在,或者缓存已经过期。
自己理解其他操作为选择下一级缓存,如果没有下一次缓存就访问内存?(不确定)

缓存抖动:缓存抖动 ,多处理器系统中若干缓存之间为了保证缓存一致性要直接通信,如果内存总线忙于其他缓存事务,需要通信的缓存就必须等待其他缓存通信(更新访问)之后才能通信,这种等待就是缓存抖动。

AOS和SOA: AOS即为结构的数组,SOA为数组的结构,例如:

struct AoSData
{
    public int a;
    public int b;
    public int c;
    public int d;
}

struct SoAData
{
    public NativeArray<int> aArray;
    public NativeArray<int> bArray;
    public NativeArray<int> cArray;
    public NativeArray<int> dArray;
}

两者在内存上的划分大致如下:
在这里插入图片描述
SOA相对于AOS的性能优化主要是现代计算的的Cache缓存策略,假设一次Cache可以加载4个数据,即可以加载abcd,那么对于AOS如果要取出这三个A,则需要三次Cache line,但对于SOA则只需要一次。

参考文章连接:https://developer.unity.cn/projects/61ff5161edbc2a001cf9856e

SIMD:即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据

非托管内存块:系统不会自动回收的内存。

prefetch:预提取,告诉系统在下一次可能会用到的资源,系统会利用空闲时间去加载,并缓存,使用 prefetch 加载的资源,下一次调用该资源时则直接会从磁盘缓存中加载。

Archetypes: 拥有相同组件集合的Entities数组,例如Entity A和B都拥有Position,Rotation,Rigidbody组件,则AB都属于同一个Archetypes,Entity C拥有Position,Rotation组件,则它和AB属于不同的Archetypes。

chunk: 简单理解为为每一个Entity的组件集合分配固定的空间,大小为16K,不足16K的补齐,如下图:
在这里插入图片描述

参考视频:Unity中文课堂 《DOTS之路》章节1前导课3:https://learn.u3d.cn/tutorial/road-to-dots?chapterId=63562b25edca72001f21cff3#635fe0d3624a9e0020a5e4b9

World:Entity组合,每一个Entity在World中是唯一的(唯一标识),统一受EntityManager的管理。

EntityManager:创建,销毁,修改,更新Entity。

Structural Change:一切导致改变内存块的操作都叫Structural Change(以下是个人见解,有错误请大佬们提出!!!)
原来的结构
图1 原来的结构(红框忽略,为什么要忽略,我不知道Doge)

改变结构后的内存块
在这里插入图片描述
改变内容后的内存块:
在这里插入图片描述
避免频繁出现Structural Change,因为只能在主线程中运行,效率低,可以在编辑时进行Bake,虽然降低了逻辑灵活性,但提高了性能。

Query:暂时不做说明,后续跟随笔记更新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值