【发布时间】:2013-06-27 23:35:18
【问题描述】:
我对微调缓存感知数据结构(例如,参见 Michael Spiegel's dissertation 或 Herlihy 等人的 hopscotch hashing 中的无锁跳过树)以及防止 false sharing 感兴趣。在并发数组处理期间。我已经知道如何通过“sun.arch.data.model”属性找到 JVM 指针大小,但我一直无法找到确定 L1 缓存中缓存行大小的方法。
请注意,此信息并不重要,因为我可以继续对 L1 行大小使用保守估计(微调缓存敏感数据结构时为 64 字节,或防止错误共享时为 256 字节);不过如果L1缓存属性很容易获取,那我不妨利用一下。
【问题讨论】:
-
我认为这个(非常有趣,我什至会说令人兴奋)任务的实施成本太高。我会在这里做一件懒惰的事情:硬编码 CPU 模型的缓存大小,并确定它 - 因为它可能碰巧更容易。但是,如果 JVM 在隐藏实际 CPU 模型的某种 VM 中运行,则可能会出错,而您的解决方案将针对该场景使用正确的大小...
-
行号为行号;在什么意义上它曾经是 64 和 256?
-
@OliCharlesworth 如果我不知道精确的线条大小,那么我会根据我想要完成的任务使用不同的估计值,例如如果我正在微调一个缓存感知数据结构,那么我将使用 64 字节的较低估计值,因为这样如果实际行大小大于 64 字节,并且如果我是防止错误共享,然后我将使用 256 字节的更高估计值,因为如果实际行大小小于 256 字节,这仍然会表现良好。