循环步幅和缓存行

时间:2016-12-29 06:57:21

标签: arrays caching cpu-architecture cpu-cache

我正在学习缓存行,以及循环步幅对缓存的影响。我遇到了this页面,其中显示了循环执行时间与循环步幅之间的关系。根据基准测试,增加循环步幅会减少执行时间,这对我来说非常困惑。据我所知,如果缓存行是64字节,并假设在第一种情况下,循环步幅只是1,这意味着循环顺序遍历数组元素,那么应该具有最少的执行时间,因为16个整数(4byte x 16 = 64bytes)被加载到缓存中。执行时间应该最低到16的步幅,因为所有16个元素都被加载到同一个缓存行中。当步幅增加到16以上会增加执行时间,因为数组元素不在缓存行中,但页面上的图形完全相反。

running times of loop for different step values

1 个答案:

答案 0 :(得分:3)

在该示例中,长度是常数,因此步幅越大 - 您经过的元素越少。

有趣的现象是它不适用于高速缓存行,这是因为你不能带来部分行。因此,在16以下,您将获得获取所有缓存行的相同惩罚。 16岁以上,你开始跳过一些线。高于32,例如(128B)你每隔一行获取一次 - 因此+/-一半的时间(假设你的执行时间由内存延迟控制)