【发布时间】:2014-11-15 21:45:33
【问题描述】:
我想测量每个内存层次结构级别的延迟,从 L1 到主内存。所以,我试图了解https://gist.github.com/jiewmeng/3787223 的1-single.c 程序。为什么数组的索引是由 [(i * 16) & lengthMod] 计算的?
[(i * 16) & lengthMod] 和 i*16 的值总是相同的。例如,
i=0, [(i * 16) & lengthMod]=0, [i*16]=0
i=1, [(i * 16) & lengthMod]=16, [i*16]=16
i=2, [(i * 16) & lengthMod]=32, [i*16]=32
i=3, [(i * 16) & lengthMod]=48, [i*16]=48
i=4, [(i * 16) & lengthMod]=64, [i*16]=64
i=5, [(i * 16) & lengthMod]=80, [i*16]=80
.........................................
所以,我尝试运行将 [(i * 16) & lengthMod] 替换为 [i * 16] 的程序,但是程序每次都崩溃。这就是我意识到这种按位操作背后一定有充分理由的原因。谁能解释一下为什么数组是由 [(i * 16) & lengthMod] 计算的?
【问题讨论】:
标签: c caching bit-manipulation latency