Unity-ECS(一)浅谈CPU缓存命中和Unity面向数据技术栈(DOTS)--笔记

一,缓存类型

  概念:局部性。 

  时间局部性:当前用到的一个存储器位置,不久的将来会被用到。

  空间局部性:当前用到的一个存储器位置,附近的位置会被用到。 

那么在CPU的层面,这两个局部性的特性就会被Cache执行,即将对拥有良好局部性的位置和指令进行缓存。来看一个具有时间局部性的例子:

这是一个简单的求数组和的函数,这里的sum和i都具有时间局部性。那么它们就会被Cache管理,被CPU取值命中。

再看一个空间局部性的例子,我们将这个一维数组改为二维。

我们知道一个二维数组在内存里的排列是按行顺序排列的,大概是这样:
ay[0,0], ay[0,1], ay[0,2],ay[1,0], ay[1,1], ay[1,2]……

SumCache的写法会完全命中ay在内存里的排布,而SumMiss的写法则会Miss,二者的函数执行效率差距几十倍。

所以ECS的架构,就是对缓存命中最大的提升,也是ECS性能倍增的原因。下一节稍微讲一下Unity日后主推的面对数据栈技术编程即DOTS。

原文地址:https://www.cnblogs.com/Jaysonhome/p/11597908.html