【发布时间】:2012-02-09 21:08:40
【问题描述】:
是否可以在 CPU 缓存中显式创建静态对象,以确保这些对象始终保留在缓存中,这样就不会从一直进入 RAM 或上帝禁止 - hdd 虚拟内存中对性能造成影响?
我对大型 L3 共享缓存特别感兴趣,而不是针对 L1、L2、指令或任何其他缓存,只是最大的片上内存块。
为了与我在发布之前搜索的其他线程区分开来,我对将整个缓存私有化不感兴趣,只是对一小部分区域进行私有化。
【问题讨论】:
-
我认为你能做的最好的就是使用 GCC 的__builtin_prefetch macro。 IIRC 缓存不能通过代码寻址,CPU 自己管理它(至少在 x86 上)。
-
什么样的处理器?一些架构具有在需要数据之前给出缓存提示或指导缓存预取的指令。
-
简短的回答:不,你不能。你唯一能做的就是保持参考的局部性。不要在内存中来回跳跃,而是尝试访问与之前操作访问的数据接近的数据。另外:保持数据在缓存边界上对齐可以帮助您避免另一个缓存提取。顺便说一句,缓存slots 不必是连续的。在 x86 上,有 IIRC 四个 L1 插槽和数百或数千个 L2 插槽。 (您必须与多进程机器上的其他进程共享)。
-
C++ 没有“CPU 缓存”的概念。
-
如果您指定操作系统,它也会有所帮助。如果您在裸机上运行,您还可以使您的代码和数据更容易放入缓存中。或类似:returninfinity.com/baremetal.html
标签: c++ c memory-management cpu-cache