寻找一个C / C ++程序来测试访问固定内存所需的时间,特别是在RAM中。
如何确保测试访问时间不是缓存或TLB数据?
例如,我可以“禁用”所有缓存/ TLB吗?
或者我可以在RAM中指定一个特定的地址来写/只读吗?
另一方面,我如何确保我只测试缓存?
有没有办法告诉编译器保存和读取的位置,cache / ram?
例如,是否知道该测试的标准程序(in one of these books?)?
我确实看到了这个,但我不明白如何调整列表的大小,你可以控制内存访问是否命中L1缓存,L2缓存或主内存:measuring latencies of memory
如何正确编程此测试?
答案 0 :(得分:2)
基本上,随着列表的增长,随着另一层缓存不堪重负,您将看到性能逐步恶化。这个想法很简单......如果缓存保存了你访问过的最后N个内存单元,那么在N + 1个单元的缓冲区周围循环应该可以确保缓存未命中。 (在你的问题中,“你记忆中的测量延迟”答案中有更多细节/警告)。
您应该能够从硬件文档中了解可能存在于RAM中的最大缓存的潜在大小 - 只要您操作的内存大于应该测量物理RAM时间的内存。