【发布时间】:2013-12-09 14:25:00
【问题描述】:
寻找一个 C/C++ 程序来测试访问一块固定的内存需要多长时间,特别是在 RAM 中。
如何确保测试访问时间不是缓存或 TLB 数据?
例如,我可以“禁用”所有缓存/TLB 吗?
或者我可以在 RAM 中指定一个特定的地址来只写/只读吗?
另一方面,我如何确保我只测试缓存?
有没有办法告诉编译器在哪里保存和读取,缓存/内存?
例如,是否有一个众所周知的标准程序 (in one of these books?) 可以用于此测试?
我确实看到了这个但我不明白如何调整列表的大小,您可以控制内存访问是命中 L1 缓存、L2 缓存还是主内存:measuring latencies of memory
如何正确地编写这个测试?
【问题讨论】:
-
您可以使用关键字
register请求缓存内存...不确定使用较慢的内存... -
register是使用CPU寄存器的编译器提示,与高速缓存完全不同...... -
@TonyD 你是绝对正确的......
-
@P.S.没有类似的标准标志,没有。很少有 CPU 支持缓存的软件控制,当它们支持时,很可能是特权操作(即需要 root/admin)。一些 CPU 确实具有用于控制预取和在不填充缓存的情况下访问内存内容的指令——例如MOVNTI(见rz.uni-karlsruhe.de/rz/docs/VTune/reference/vc195.htm)——你也许可以在你的基准测试中使用它。
-
@P.S.大部分对我来说很有意义,尽管我不确定为什么链接指针对测量特别有用……尽管它们是以使缓存无效的方式预先确定遍历顺序的一种方法,然后允许快速页面- 到页面跳转。
标签: c++ c windows memory operating-system