【发布时间】:2023-05-18 16:45:01
【问题描述】:
对于超快速代码,我们必须保持引用的局部性——将尽可能多的紧密使用在一起的数据保存在 CPU 缓存中:
http://en.wikipedia.org/wiki/Locality_of_reference
有什么技术可以做到这一点?可以举个例子吗?
我对 Java 和 C/C++ 示例感兴趣。了解人们用来阻止大量缓存交换的方法很有趣。
问候
【问题讨论】:
-
可以从两个方面入手:将内存中的数据打乱是一种方法,及时打乱处理是另一种方法。
-
@MSalters,但是将 0.5MB 的数据放入 RAM 并不能保证所有数据同时都在缓存中?
-
@user1107474:在其他 CPU 内核上可能还有其他进程正在竞争缓存。但是,如果 CPU 缓存对您和其他进程来说足够大,那么那些 512 kB 将在缓存中。要将它们放入 RAM,CPU 必须通过缓存,并且由于我们假设缓存足够大,因此缓存不会丢弃数据。
-
@user1107474:当人们谈论局部性时,主要关心的是帮助处理器在进程运行时预加载缓存。也就是说,要解决的问题是当内存实际上不在缓存中时会发生什么(其他一些进程一直在运行,它不适合您的L1,L2或L3缓存......如果数据量非常小,您可以假设它将在缓存中,并期望不会有 many 问题(注意 assume 和 many 不能保证)。
标签: java c++ c performance caching