gpt4 book ai didi

c - 在自定义内存分配器中分配地址 w.r.t.缓存冲突

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:10 24 4
gpt4 key购买 nike

在阅读了有关 the effect power of twos 的内容后,我花了整个下午的时间阅读有关处理器缓存的内容可能有缓存冲突。现在我希望将这些新知识应用到我的多线程程序内存分配器中。但是,我还没有完全理解它。

我的印象是处理器喜欢 2 的幂,所以我的分配器将请求的大小轮到它们的下一个 2 的幂,然后将页面切成这个大小的倍数并将它们分发出去。当页面已满时,它只是映射一个新页面并以相同的方式将其切分。这导致页面中的偏移非常相似且可预测。

我应该在多大程度上调整我的分配器以避免这个问题?例如,我应该尝试稍微随机化地址,还是一开始就因为使用 2 的幂而搞砸了?

谢谢!

最佳答案

除非您有无可辩驳的证据证明对性能至关重要,否则就不要管它。额外的并发症很可能不值得。

每个人都应该阅读(并理解!)Bentley 的“编写高效程序”(遗憾的是现已绝版,他的 "Programming Pearls" 包含摘要,也非常值得一读)。

  • 在开始代码优化之前,确定这是值得的。如果性能足够,则可以更好地利用您的时间。是的,你必须先测量。
  • 衡量成本花在了哪里。众所周知,程序员不善于猜测成本在哪里
  • 最大的性能提升来自重述问题(有时它足以解决一个可以更快解决的问题),然后是系统的整体组织,接下来是更好的算法/数据结构;最后,像这里考虑的那样进行细节优化。
  • 您友好的编译器,在“生成良好代码”的方向上稍加刺激,今天将生成比经验丰富的汇编语言程序员在执行类似(全功能规模)任务时好得多的代码。大多数“为了性能”的本地源代码重组要么没有实际意义(编译器会自己这样做)要么有害(编译器将识别并重写通常的代码序列,不寻常的代码会使其无所事事或生成错误代码) .
  • 程序员的时间(编写、调试、维护)比零星几微秒的计算机时间更有值(value),极不寻常的情况除外。编写最简单的代码来完成工作,只有在经验表明值得时才进行返工。

关于c - 在自定义内存分配器中分配地址 w.r.t.缓存冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14914932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com