performance - 这两个循环之间的运行时间是否存在差异,是否存在异常?

标签 performance algorithm loops optimization runtime

考虑以下两个循环,其中 N = 10^9 或大到足以注意到效率低下的值。

Loop x = 1 to N
    total += A(x)
    total += B(x)

Loop x = 1 to N
    total += A(x)

Loop x=1 to N
    total += B(x)

每个函数都接受 x,执行一些任意算术计算(例如 x^2 和 3x^3 或其他无关紧要的东西),然后返回一个值。

整体运行时间是否会有任何差异,如果有的话,什么时候不会出现这种情况?

最佳答案

每个循环需要四个 Action :

  1. 准备(每个循环一次)
  2. 检查停止条件(每次迭代一次)
  3. 执行循环体(每次迭代一次)
  4. 调整用于确定迭代是否应该继续的值(每次迭代一次)

当你有一个循环时,你只需为第 1、2 和 4 项“支付”一次;当您有两个循环时,您会为所有内容“支付”两次。

假设调用这两个函数的顺序并不重要,那么在大多数常见情况下,差异不会很明显。但是,在极少的循环非常紧密的情况下,单个循环将占用较少的 CPU 资源。其实常用的技术loop unwinding依赖于通过重复主体多次来减少循环期间每次迭代检查和设置操作在整个 CPU 负载中的份额,并通过相应的因子减少迭代次数。

关于performance - 这两个循环之间的运行时间是否存在差异,是否存在异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190201/

相关文章:

c# - XDocument.Load (XmlReader) 的性能很糟糕;来自 Web 服务的 2 MB XML 需要 4 秒才能从流中解析

java - Hashtable的超时机制

performance - Oracle 编号和 varchar 连接

c++ - 双CPU内存分配性能

performance - 为什么经典的 asp 脚本或请求为每个客户端顺序运行

algorithm - 如何从给定的一组路由中找到访问图中所有节点的最小路由集?

algorithm - 确定 Pearson 哈希的完美哈希查找表

excel - 在一个非常大的表中循环一个 if 函数。太慢了

foreach 循环内的 PHP foreach 循环

java - 在 map 中寻找 key