我可以检查一块内存(例如,使用malloc分配)是否保留在缓存中吗?

时间:2016-01-16 02:34:42

标签: c++ c caching memory-management malloc

假设我使用malloc分配一些空间。 我可以在运行时检查这个连续内存是否保留在CPU的缓存中(甚至更好地在哪个缓存级别L1,L2,L3等)?

3 个答案:

答案 0 :(得分:1)

不,但您可以使用预取指令在使用之前将其从内存移动到缓存。如果数据已经在缓存中,这些指令应该很快(有一些特定于体系结构的警告,但我不知道您正在使用哪个平台)。

您可以查询内存是否在缓存中的原因是硬件在低于您可以轻松观察的级别下进行管理。在具有硬件管理的TLB的架构上,内存将由虚拟地址跟踪。

答案 1 :(得分:0)

确定CPU缓存的内容非常低,超出了C的范围。实际上,缓存对于您可能正在编写的代码是完全透明的,因为CPU几乎决定要缓存什么,并且不能浪费时间在如何这样做的复杂逻辑上。英特尔调优指南和性能分析论文https://software.intel.com/en-us/articles/processor-specific-performance-analysis-papers提供了针对该效果的特定工具的快速Google搜索。 显然,这将是特定于供应商的。 AMD可能会有特定的工具。

答案 2 :(得分:0)

一般来说,至少在大多数实际目的中,没有(即使你可以,当你尝试使用这些信息时,也可能是陈旧的)。

如果您反复阅读数据,您可以非常轻松地测量长期平均访问时间,这可以很好地指示数据来自哪里。

有一些(主要是嵌入式)处理器可以让您锁定缓存中的某些数据,或者将部分缓存留作您手动管理的可寻址内存。