Unity DOTS学习 前置知识(一)

DOTS是什么

Data-Oriented Technology Stack(面向数据的技术栈)

Unity 使用的5个核心包:

  1. The C# job system
    提供快速安全的多线程操作
  2. The Burst compiler
    优化C#代码的编译器,能够编译生成比mono或者L2CPP更快的代码。可以编译Unity中的任何代码
  3. Unity Mathematics
    这是一套可以在JobSystem中使用的数学库,他提供的功能在Burst编译时有特别优化。
  4. Unity Collections
    提供常见的数据类型,如list、hashmap等,内存分配属于非C#托管类型,可以在JobSystem中使用,支持安全检查,并且被Burst编译优化。
  5. Entities ( Entity-Component System )
    GameObject的轻量替代品, 主要是数据,没有逻辑

游戏功能相关的额外包

  1. Entities.Graphics ( Hybird Renderer )
    这是URP和HDRP的Entity渲染解决方案。是优化CPU而非GPU。
  2. Netcode
    DOTS网络解决方案,具有多人连线功能、客户端预测功能等。
  3. Physics
    物理解决方案
  4. Animation(WIP)
    DOTS支持
  5. Audio(WIP)
    DOTS支持

Data-Oriented Design(DOD)面向数据设计

  • 面向对象设计→面向数据设计
  • DOD本质:面向内存/缓存友好的设计
    • 需要考虑需要什么数据,以及如何在内存中更好的构造数据,以便CPU更有效的访问数据。

由于CPU的三级缓存设计结构,如果在某一级缓存没有命中时,向下一级缓存获取时花费的时间开销会是几倍到几十倍的时间开销
在这里插入图片描述

缓存Cache的3C与3R

3C 3种产生miss 的情况

  • Compulsory misses:首次读取数据时,不可避免的Miss
  • Capacity misses:缓存空间不足时,连续使用期间访问数据过多的话,无法保存所有活动的数据
  • Conflict misses:发生访问冲突时,由于数据映射到相同的缓存行,导致缓存的抖动(实际数据访问不连续)

3R 3种优化方案

  • Rearrange:重新排列(代码、数据)︰更改布局以增加数据空间的局部性
  • Reduce:减少(大小、缓存行读取)︰更小更智能的格式、压缩
  • Reuse:重用(Cache lines):增加数据的时间(和空间)的局部性

猜你喜欢

转载自blog.csdn.net/weixin_38027841/article/details/127990605
今日推荐