【发布时间】:2013-02-01 14:56:01
【问题描述】:
在阅读了the effect power of twos 可能导致缓存冲突之后,我花了一个下午的时间阅读处理器缓存。现在我希望将这些新知识应用到我的多线程程序的内存分配器中。但是,我还没有完全理解。
我的印象是处理器喜欢 2 的幂,所以我的分配器将请求的大小舍入到它们的下一个 2 的幂,然后将页面切成这个大小的倍数并分发出去。当页面已满时,它只是映射一个新页面并以相同的方式对其进行切片。这会导致页面中非常相似且可预测的偏移量。
我应该在多大程度上调整我的分配器以避免这个问题?例如,我应该尝试稍微随机化地址,还是我一开始就因为使用 2 的幂而被搞砸了?
谢谢!
【问题讨论】:
-
当你尝试它时会发生什么,并对差异进行基准测试?
-
@SecurityMatt 我还没有对任何东西进行基准测试,因为我对如何正确测试它没有信心。但是,考虑到分配器的操作方式,它可能会导致缓存利用率低下。尝试在分配器级别与之抗争甚至可能没有意义。我不知道。 :)
-
如果我是你,我会让你的分配器假设缓存不存在,然后链接一些大程序来使用它并测试它们。如果性能足够好,恭喜你,大功告成。否则,您可以编辑您的代码,并且您有一个很好的参考实现来进行基准测试。
标签: c performance memory-management cpu-cache