gpt4 book ai didi

c++ - C++ 的优化技术

转载 作者:IT老高 更新时间:2023-10-28 12:51:23 24 4
gpt4 key购买 nike

几天前他在 Facebook 的演讲中 - slides , video , Andrei Alexandrescu 谈到了可能证明我们错了的常见直觉。对我来说,幻灯片 7 中出现了一个非常有趣的观点,他指出假设 “更少的指令 = 更快的代码” 是不正确的,更多的指令并不一定意味着更慢的代码。

我的问题来了:他的演讲(大约 6 分 20 秒)的音频质量不是很好,我不太理解解释,但据我所知,他正在比较退休指令与最优性一种性能级别的算法。

但是,据我了解,这是无法做到的,因为这是两个独立的结构级别。指令(尤其是实际停用的指令)是一项非常重要的衡量标准,基本上,它可以让您了解实现目标的性能。如果我们忽略一条指令的延迟,我们可以概括出更少的退役指令 = 更快的代码。当然,在某些情况下,即使在循环内执行复杂计算的算法也会产生更好的性能,因为它会更早地中断循环(想想图遍历)。但是,在复杂性级别上与算法进行比较,而不是说这个循环有更多指令并且比另一个更好,难道不是更有用吗?从我的角度来看,更好的算法最终会减少退休指令。

有人可以帮助我了解他的示例将走向何方,以及如何(显着)更多退休指令导致更好的性能?

最佳答案

质量确实很差,但我认为他导致了这样一个事实,即 CPU 对计算有好处,但在内存寻道方面表现不佳(RAM 比 CPU 慢得多)和分支(因为 CPU 作为管道工作) ,而分支可能会导致管道中断)。

以下是一些指令越多越快的情况:

  1. Branch prediction - 即使我们需要执行更多指令,但它会导致更好的分支预测,CPU 的管道将有更多的时间充满,更少的操作将被“抛出”,这最终会带来更好的性能。 This thread例如,显示如何做同样的事情,但首先排序 - 提高性能。

  2. CPU Cache - 如果您的代码更加缓存优化,并遵循 principle of locality - 它更有可能比没有的代码更快,即使代码没有执行一半的指令。 This thread给出了一个小缓存优化的例子——如果没有缓存优化,相同数量的指令可能会导致代码慢得多。

  3. 完成了哪些指令也很重要。有时 - 某些指令的执行速度可能比其他指令慢,例如 - 除法 可能比整数加法慢。

注意:以上所有内容都取决于机器,并且它们如何/是否实际改变性能可能因一种架构而异。

关于c++ - C++ 的优化技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13973070/

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