![]() |
1
3
您可以运行实验来确定数据预取器是否能够处理前向顺序访问和后向顺序访问。我有一个Haswell的CPU,所以预取器可能不同于CPU中实现的预取器(Sandy Bridge)。
L1访问延迟对任何测量噪声都特别敏感。二级访问延迟应该是
12 cycles
注意,我没有刷新数组两次遍历之间的缓存,因此第一次遍历可能会影响第二次遍历中测量的延迟。
这是我用来测量的代码。
这些实验的目的是测量单个访问延迟,以确定每个访问的缓存级别。但是,由于
如果我们有兴趣测量访问内存层次结构特定级别的平均延迟,那么使用指针跟踪可以提供更准确的结果。事实上,这是测量内存延迟的传统方法。 如果以硬件预取器(尤其是二级或三级)难以预测的模式访问大量数据,则软件预取可能非常有益。然而,获得正确的软件预取通常是困难的。此外,我得到的测量显示,L3预取器可以向前和向后预取。如果在内存访问和计算方面都有很好的并行性,那么OoO执行可以隐藏L3访问延迟的很大一部分。
:如果我没有使用输出重定向运算符>将所有输出重定向到文件,即所有输出都将打印在终端上,则所有测量的延迟都将接近三级命中延迟。原因是
|
![]() |
Sweepy Dodo · JSON lite的格式化 4 月前 |
![]() |
giantjenga · 优化整数向量到二进制向量的转换 5 月前 |
![]() |
Zegarek · Postgresql递归查询未提供预期结果 6 月前 |
![]() |
Joe · 为什么这两个查询之间的性能存在如此大的差异? 9 月前 |
![]() |
tic-toc-choc · 在`dplyr中高效使用列表进行过滤` 9 月前 |
![]() |
user2980746 · 在C#字典中键入xyz对的最有效方法是什么? 10 月前 |