是否有可能在CPU缓存中显式创建静态对象,以确保这些对象始终保留在缓存中,从而不会影响到达RAM或上帝禁止 - 硬盘虚拟内存的所有方式?
我特别感兴趣的是针对大型L3共享缓存,而不是针对L1,L2,指令或任何其他缓存,只是目前存在的最大内存chub。
为了澄清与我在发布之前搜索过的其他主题的区别,我对整个缓存私有化并不感兴趣,只是一小部分类的区域。
答案 0 :(得分:12)
没有。缓存不可寻址,因此您无法在其中分配对象。
你想要问的是:在虚拟内存中分配了空间,我可以确保总是获得缓存命中吗?
这是一个更复杂的问题,答案是:部分。
通过使用操作系统的内存管理API(例如mlock()
)将区域标记为不可分页,您绝对可以避免被换出到磁盘。或者从“非分页池”开始分配。
我不相信有一个类似的API可以将内存固定到CPU缓存中。即使您可以为该块保留CPU缓存,也无法避免缓存未命中。如果另一个核心写入内存,将转移所有权,并且您将遭受缓存未命中和相关的总线传输(可能是主内存,可能是另一个内核的缓存)。
正如Mathew在评论中提到的那样,您还可以强制缓存未命中与管道中的其他有用工作并行发生,以便在您需要时将数据放在缓存中。
答案 1 :(得分:1)
您可以运行另一个循环数据并将其带入L3缓存的线程。