Data Locality (数据的局部性)
2018-10-30 本文已影响0人
珏_Gray
参考资料:http://gameprogrammingpatterns.com/data-locality.html
Motivation
数据的读取速度远落后于数据的处理速度。程序的性能不仅仅取决于算法,更取决于数据的存储(减少cache miss)。
硬件进展
缓存示意图
Pattern
现代计算机使用多级缓存(cache)结构。为了充分利用缓存的快速读取数据能力,应使处理的数据在内存中连续排布。
Warning
这是一种面向数据编程技术,与普遍使用的面向对象技术不同,要转换编程思维。通常情况,使用这种模式会减少抽象,增加程序复杂程度(?争议的论断)。
Methods
1.使用数组
将要遍历处理的数据放在数组当中。
2.对数组排序
若数组中存在需要跳过的不活跃对象,则遍历前应该对数组排序。目的是使待处理的对象在内存中连续排布。
3.Hot/Cold Splitting(冷热分离)
逐帧遍历对象时,需要使用的数据,应该在内存中连续排布。不使用的数据可以使用指针或引用,减小在缓存线中存储的占用,如果使用ECS,甚至可以不占用缓存存储,因为只遍历关心的组件。