繁体   English   中英

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

[英]Can i check if a chunk of memory (e.g., allocated using malloc) stays in the cache?

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

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

您可以查询内存是否在缓存中的原因是因为硬件将其管理在您容易观察到的级别以下。 在具有硬件管理的TLB的体系结构上,将通过虚拟地址随处跟踪内存。

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

一般而言,至少出于大多数实际目的,不是(即使您尝试使用这些信息,即使可以,它也很陈旧)。

如果您要重复读取数据,则可以很容易地测量长期平均访问时间,这通常可以很好地指示数据的来源。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM