Performance 了解缓存/RAM访问延迟的微基准

Performance 了解缓存/RAM访问延迟的微基准,performance,memory-management,benchmarking,cpu-architecture,cpu-cache,Performance,Memory Management,Benchmarking,Cpu Architecture,Cpu Cache,在这张照片中: 我真的不明白这个情节。它基本上显示了以不同步幅从不同大小数组读取和写入的性能。每种颜色显示不同大小的数组。我不知道为什么会变硬,但我不知道为什么会变小?。例如,对于L(数组长度)=64MB,在跨步=256k之后,为什么您认为时间会再次下降 在该链接中,代码: 谢谢。您发布的报纸试图通过microbenchmark了解克雷T3D的详细信息。得出以下结论: 缓存线/块大小为32B 缓存是直接映射的 没有二级缓存(只有一级缓存) 页面大小可能为8KB 下一个有趣的评论是,它们用另一

在这张照片中:

我真的不明白这个情节。它基本上显示了以不同步幅从不同大小数组读取和写入的性能。每种颜色显示不同大小的数组。我不知道为什么会变硬,但我不知道为什么会变小?。例如,对于L(数组长度)=64MB,在跨步=256k之后,为什么您认为时间会再次下降

在该链接中,代码:


谢谢。

您发布的报纸试图通过microbenchmark了解克雷T3D的详细信息。得出以下结论:

  • 缓存线/块大小为32B
  • 缓存是直接映射的
  • 没有二级缓存(只有一级缓存)
  • 页面大小可能为8KB
下一个有趣的评论是,它们用另一个循环围绕着实验的最内部循环,以重复实验。这个循环实际上启用了缓存

他们的代码如下:

for (arraySize = 4KB; arraySize < 8MB; arraySize *= 2)
   for (stride = 1; stride <= arraySize / 2; stride *= 2)
      for (i = 0; i < arraySize; i += stride)
         for (k = 0; k < repeats; k++)
            MEMORY_OPERATION_ON(A[i])
for(arraySize=4KB;arraySize<8MB;arraySize*=2)

对于(stride=1;stride OK,谢谢(我没有足够的投票声誉!),在序言之后,你说:“对于更大的跨步,实际读取/写入/更新的地址数量更小”,但为什么以及如何?你还说:“我的意见是,这个微基准应该在固定的数组大小(8、32或64MB)上制作。”不管步幅大小。”-是的,数组大小是固定的,但基准测试是多次进行的,每次都是针对多个步幅大小(这意味着L=1MB和S=1,2,4,8,16,…或者L=2MB和S=1,2,4,8,16,…就像你在图片中看到的那样)。我不明白。例如,对于数组大小=4MB和步幅=2MB,我们将访问[0],A[2Mb],[4Mb],[6Mb],因为我们跳过大步。所以,这只是4个地址!@ FIDELROHA,当数组大小只有4MB时,你如何访问[6Mb]?考虑你的数组大小是8MB,步长是256B。你会访问多少个地址?[6Mb]表示数组的最后一个元素(考虑数组元素之间的跨步)你应该考虑数组元素的长度。如果数组大小是8 MB,步幅是256B,在每个页面上都有:8KB(即页面大小)/256B=32个元素(来自数组),我们应该访问8Mb/8kb=1000个页面,所以我们有1000×32=32000个地址!?@ FIDelROHA。是的,步长越小,数组中的读取就越“密集”。因此,如果您必须读取32K地址,那么当您仅读取4个地址以获得更大的跨距时,您肯定会有更多的缓存未命中。