gpt4 book ai didi

performance - 内存山的时间地点

转载 作者:行者123 更新时间:2023-12-04 03:27:23 26 4
gpt4 key购买 nike

csapp教科书中,内存山的描述表示增加工作大小会恶化时间局部性,但我觉得 sizestride 因素只对空间局部性有贡献,因为当更多时吞吐量降低数据稀疏地存储在较低级别的缓存中。

这里的时间局部性在哪里发挥作用?据我所知,这意味着在不久的将来再次引用相同的特定内存地址,如以下答案所示:What is locality of reference?

memory mountain chart

最佳答案

此图是通过顺序遍历数组的固定大小元素生成的。 stride 参数指定要在两个顺序访问的元素之间跳过的元素数。 size 参数指定数组的总大小(包括可能被跳过的元素)。测试的主循环如下所示(您可以从 here 获取代码):

for (i = 0; i < size / sizeof(double); i += stride*4) {
acc0 = acc0 + data[i];
acc1 = acc1 + data[i+stride];
acc2 = acc2 + data[i+stride*2];
acc3 = acc3 + data[i+stride*3];
}

书中的图 6.40 显示了该循环。书中没有显示或提及的是,该循环执行一次以预热缓存层次结构,然后测量多次运行的内存吞吐量。所有运行(在预热缓存上)的最小内存吞吐量是绘制的那个。

大小和步幅参数共同影响时间局部性(但只有步幅影响空间局部性)。例如,32k-s0 配置与 64k-s1 配置具有相似的时间局部性,因为对每一行的第一次访问和最后一次访问由相同数量的缓存行交错。如果您将大小保持在特定值并沿着步幅轴前进,则以较低步幅重复访问的某些行将不会以较高步幅访问,从而使它们的时间局部性基本上为零。可以正式定义时间局部性,但我不会那样做来回答问题。另一方面,如果您将步幅保持在特定值并沿着大小轴移动,则每条访问行的时间局部性会随着大小的增加而变小。然而,性能下降并不是因为每个访问行的时间局部性一致较低,而是因为工作集大小较大。

我认为大小轴比时间局部性更能说明工作集大小(循环在执行期间要访问的内存量)对执行时间的影响。为了观察时间局部性对性能的影响,应该将此循环第一次运行的内存吞吐量与同一循环(相同大小和步幅)第二次运行的内存吞吐量进行比较。在循环的第二次运行中,每个访问的缓存行的时间局部性增加相同的量,如果缓存层次结构针对时间局部性进行了优化,则第二次运行的吞吐量应该优于第一次。通常,应绘制同一循环的 N 个顺序调用中每一个的吞吐量,以查看时间局部性的全部影响,其中 N >= 2。

对了,其他处理器上的内存山可以查到herehere .您可以使用 this 创建 3D 山 map 或 this脚本。

关于performance - 内存山的时间地点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56720935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com