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,甚至可以不占用缓存存储,因为只遍历关心的组件。

上一篇下一篇

猜你喜欢

热点阅读