• 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):增加数据的时间(和空间)的局部性
  • 相关阅读:
    [linux] 安装WEB服务器(tomcat),环境是32位
    conda常用命令及问题解决-创建虚拟环境
    Spring 注入静态@Value值
    嵌入式学习笔记(1)ARM的编程模式和7种工作模式
    【无标题】
    Redi未授权访问的两种利用方式
    《视觉SLAM十四讲》-- 回环检测
    java面试题-基础篇(万字总结,带答案,面试官问烂,跳槽必备)
    java计算机毕业设计ssm+vue网络考试信息网站
    【clickhouse】ubuntu20安装clickhouse并用DBeaver远程管理
  • 原文地址:https://blog.csdn.net/weixin_38027841/article/details/127990605