gpt4 book ai didi

assembly - 先读后条件写 vs. 写

转载 作者:行者123 更新时间:2023-12-04 14:20:42 25 4
gpt4 key购买 nike

平均而言,哪个更快 - 然后检查值,如果需要,分配或简单地分配?或者,用 C++ 术语来说:

bool b;
if(b)
b = false;

或者
b = false;

假设 if() 条件为真,概率为 50%。答案很可能是高度依赖于架构的——请说出您的低级考虑。写入总是弄脏缓存线 - 对吗?因此,通过避免写入,我们避免了 0.5 情况下的缓存刷新。但是足够智能的缓存可能会检测到一个微不足道的写入,而不是自己弄脏。但是无条件写入总是恰好是一次内存操作,而读写平均是 1.5 次操作。

免责声明:这是一个好奇的问题,而不是我实际面临的问题。

最佳答案

分支在现代 CPU 上很昂贵,而在嵌入式/较旧的 CPU 上内存访问很昂贵。因此,除非您有一些奇怪的内存,写入时间比读取时间长(提示:您没有)

由于这些原因,情况更糟:

  • 分支指令。这可能会被处理器预测到,但它仍然会产生开销的可能性。
  • 2 次内存访问而不是 1 次。在大多数形式的内存上读取和写入的速度相同,那么为什么一次可以做两次呢?
  • 更多的代码开销。这是一个微指令,但必须发出更多指令才能执行 if陈述。这意味着额外的内存读取和缓存中不必要地消耗的更多空间。
  • 悲观地说,这可能意味着 C++ 编译器决定将此变量放入寄存器而不是其他更必要的变量中。
  • 另外,如果您假设 b被放入寄存器。寄存器读/写非常便宜,但它们不是免费的..
  • 关于assembly - 先读后条件写 vs. 写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2375425/

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