为什么缓存大小通常被定义为素数?

时间:2017-03-31 11:53:43

标签: caching data-structures primes

我正在调查编写缓存,我发现有几个缓存大小的引用是素数。

E.g。

  

最大对象数必须是缓存计数值的素数。范围值从3到最大数量,对于任务而言是逻辑的,并且不会影响性能。非素数自动向上舍入到下一个较高的素数。如果数字失败,将使用默认值。

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

1 个答案:

答案 0 :(得分:0)

比方说,我们有一个缓存,其中包含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的倍数的情况下失败了,对于素数不小的情况,这是不太可能的。