确定纯Java中处理器缓存的大小

mik*_*era 2 java performance cpu-cache

我很好地在纯Java中使用对每个核心处理器缓存大小非常敏感的数值算法:当工作数据集适合L1缓存时,它运行速度明显更快.

显然,我可以通过一些基准测试为我的本地机器微调这个.但理想情况下,我希望能够根据所用处理器的L1缓存大小自动调整工作集的大小.

本机代码不是一个选项:用Java编写这个算法的全部意义在于使它与平台无关!

有没有一种方法可靠地确定纯Java中每核心缓存的大小?

Jon*_*eet 5

如果使用一组参数比另一组参数运行速度明显更快,那么我会根据注意到的差异进行调整.在开始进行一系列长时间的计算之前(我假设是这种情况,否则你不会在意),运行具有各种不同大小的内部数据存储的较小集合.(我假设算法可以像数字那样进行调整.)

这样,差异来自L1高速缓存大小,或者L1 + L2高速缓存大小,还是完全不同的东西并不重要 - 你会选择最适合当前情况的东西.

您需要小心JIT预热期,就像在正常的基准测试中一样,但我认为这是创建一般优化方法的好方法,即使它最终会发生最重要的考虑L1缓存.

您可以将此作为单独的安装时工作,将结果写入配置文件,以便在后续运行中避免额外的工作.(您可能想要一种重新运行调整步骤的方法,以防处理器发生变化或其他情况.)