gpt4 book ai didi

cpu - 如何使用(读/写)CPU 缓存 L1、L2、L3

转载 作者:行者123 更新时间:2023-12-05 01:17:53 25 4
gpt4 key购买 nike

我有一项需要超强性能的任务

当然我可以优化它的算法,但我也想在硬件层面进行优化。

我当然可以使用 CPU 亲和性来将整个内核分配给处理我的任务的线程

另一种优化可能是将我的任务需要完成的数据放入 CPU 缓存(L1、L2、L3)中,以尽可能避免“RAM 访问”延迟

我可以使用什么 API 进行这样的开发?

(换句话说,我的问题可能是:“如何强制 CPU 将给定的数据结构放入缓存中?”)

感谢您的帮助

最佳答案

Peter C 关于预取的优秀评论。作为一名前优化器,我们为改进代码所做的第一件事是删除所有软件预取。另外,不要试图与权力状态等混为一谈。它们现在非常好,以至于在 HPC 中付出的努力不值得。一个可能的异常(exception)是超线程。您唯一想要去那里的时候是进行某些需要一致性和性能的基准测试。

查看英特尔优化资源,例如 optimization guide .也让自己成为一个好的分析器; Intel's VTune确实是最好的之一。有关 Intel 的信息,请使用 bing(或 google)查找内容。英特尔的网站一直都是光鲜亮丽的烂摊子。 VTune 拥有学生和教育者许可。

以下是我用来优化应用程序性能的步骤。首先,用尽更高级别的软件更改。然后开始调整硬件性能。为什么?两个原因:(1) 代码更改通常与架构无关,并且更有可能在迁移到不同的硬件平台和代时幸存下来。 (2) 它们做起来要简单得多(虽然可能不那么有趣)。

代码更改:

  • 删除所有软件预取。
  • 用周期性中断替换任何轮询
  • 确保任何检查中断都有适当的间隔
  • 使用 Fortran。真的。 Fortran 还活着是有原因的。看看英特尔 Fortran 论坛。论坛都是经典的HPC。英特尔的 Fortran 编译器是最好的编译器之一。
  • 使用一个好的优化编译器,并使用编译器设置和编译指示/注释(例如 #pragma 循环计数)。同样,英特尔是最好的之一。 (我讨厌那样说,但这是真的。)
  • 使用一个好的软件分析器来寻找优化机会(你的大部分时间都花在了那里)。确保分析器能够挖掘源代码以识别在不同功能上花费的时间。首先优化这些功能。
  • 找到适当限制在内核数量范围内的线程并行化(多线程)的机会
  • 寻找矢量化机会
  • 从 AoS(结构数组)转换为 SofA。请注意,如果您必须即时进行转换,则性能成本可能不值得。
  • 构建循环,使其更有利于编译器找到矢量化机会。请参阅任何好的优化书籍以了解如何执行此操作。

  • HARDWARE HACKING/OPTIMIZATION(使用良好的硬件级性能分析器)
  • 识别缓存和 TLB 未命中,并重构代码。
  • 识别分支错误预测并重构代码。
  • 识别管道停顿并重构代码。

  • 最后一个建议,不过我相信你已经知道了。记住,去 HitTest 门的地方。较小的机会很耗时,性能改进对整个应用程序没有影响。

    祝你好运。优化可以是有趣和有益的(如果你有点疯狂)。

    关于cpu - 如何使用(读/写)CPU 缓存 L1、L2、L3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292928/

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