【问题标题】:Why are cache sizes often defined as prime numbers?为什么缓存大小通常定义为素数?
【发布时间】:2017-08-25 16:30:12
【问题描述】:

我正在研究编写一个缓存,我发现有几个关于缓存大小是素数的参考。

例如

对象的最大数量必须是缓存计数值的质数。范围值是从 3 到对任务合乎逻辑且不影响性能的最大数字。非素数会自动四舍五入到下一个更高的素数。如果编号失败,将使用默认值。

https://www.ibm.com/support/knowledgecenter/SSPREK_7.0.0/com.ibm.isam.doc_70/ref_cache_size_appl.html

【问题讨论】:

  • 我怀疑哈希集合使用素数大小的原因相同,以减少冲突次数。不过我可能错了。

标签: caching data-structures primes


【解决方案1】:

假设我们有一个包含 m 个条目的缓存和一个使用模式,该模式导致跨步行为,它会命中某个 n 的每个第 n 个条目。该模式将环绕末端并在仍有空槽时再次命中一些条目。例如,如果缓存大小为 10,并且使用模式每 6 个条目命中一次,它将按以下顺序命中(如果它以 0 开头):0、6、2、8、4、0、6、2、8 , 4, ... 所以一半的缓存会被闲置。在一般情况下,可以准确地说像这样的跨步行为将导致 1/GCD(n,m) 行被使用,而其他行则为空。因此,如果 GCM(n,m) 为 1,我们只有在存在跨步行为的情况下才能充分利用。使缓存具有质数大小使得这很有可能。只有当 n=m 或 n 是 m 的某个倍数时,它才会失败,这对于不小的素数来说是不太可能的。

【讨论】:

    猜你喜欢
    • 2021-04-05
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2021-02-09
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    相关资源
    最近更新 更多