gpt4 book ai didi

performance - 内存基准图 : understanding cache behaviour

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

enter image description here

我已经尝试了所有可能得出的推理,但我并不真正理解这个情节。
它基本上显示了从不同大小的数组以不同的步幅读取和写入的性能。
我知道对于像 4 个字节这样的小步幅,我读取了缓存中的所有单元格,因此我有很好的性能。但是当我拥有 2 MB 阵列和 4k 步幅时会发生什么?还是 4M 和 4k 步幅?为什么表现这么差?最后为什么当我有 1MB 数组并且步幅是大小的 1/8 时性能不错,当 1/4 大小性能变得最差,然后在一半大小时,性能 super 好?
请帮助我,这件事让我发疯。

在此链接,代码:https://dl.dropboxusercontent.com/u/18373264/membench/membench.c

最佳答案

您的代码在给定的时间间隔内循环而不是恒定的访问次数,您没有比较相同的工作量,并且并非所有缓存大小/步幅都享有相同的重复次数(因此它们获得不同的缓存机会)。

另请注意,第二个循环可能会被优化掉(内部 for ),因为您不使用 temp任何地方。

编辑:

这里的另一个影响是 TLB 利用率:

在 4k 页面系统上,随着您在 4k 步长时增加步幅,您会享受到每个页面的利用率越来越低(最终在 4k 步幅上每页访问一次),这意味着访问时间会随着您的增长而增加必须在每次访问时访问第二级 TLB(甚至可能序列化您的访问,至少部分)。
由于您通过步幅大小对迭代计数进行了标准化,因此您通常会得到 (size / stride)在最内层循环中访问,但是 * stride外部。但是,您访问的唯一页面的数量不同 - 对于 2M 阵列、2k 步长,您将在内循环中进行 1024 次访问,但只有 512 个唯一页面,因此对 TLB L2 的访问次数为 512*2k。在 4k 步长上,仍然会有 512 个唯一页面,但是 512*4k TLB L2 访问。
对于 1M 阵列情况,您总共将有 256 个唯一页面,因此 2k 步长将具有 256 * 2k TLB L2 访问,而 4k 将再次具有两次。

这解释了为什么当您接近 4k 时每条线上的性能逐渐下降,以及为什么数组大小每增加一倍,相同步幅的时间就会增加一倍。较低的阵列大小可能仍然部分享受 L1 TLB,因此您看不到相同的效果(尽管我不确定为什么 512k 存在)。

现在,一旦您开始将步幅提高到 4k 以上,您会突然再次受益,因为您实际上是在跳过整个页面。 8K 步幅将仅访问每隔一个页面,对于相同的数组大小,将总 TLB 访问的一半作为 4k,以此类推。

关于performance - 内存基准图 : understanding cache behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20434193/

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