是否允许某个流程进行预热"?

时间:2016-04-26 13:25:01

标签: c++ performance

我最近做了一些挖掘内存以及如何正确使用它。当然,我也偶然发现了预取,以及如何让CPU更轻松。

我运行了一些基准测试,以了解正确存储/访问数据和指令的实际好处。这些基准测试不仅显示了帮助CPU预取的预期好处,还表明预取还可以在运行时加速进程。在大约100个程序循环之后,CPU似乎已经计算出来并相应地优化了缓存。这样每个周期可节省高达200.000个刻度,数量从750.000降至550.000。我使用qTestLib得到了这些数字。

现在问题:有没有一种安全的方法来使用这个运行时加速,让它热身,可以这么说?或者根本不应该计算这个并且只是从启动时构建更快的代码?

2 个答案:

答案 0 :(得分:6)

首先,在正常执行之前尝试预热过程通常没有任何好处:这只会加速你的情况下的前100个程序循环,总共少于20000个滴答。这远远低于您在升温时需要投入的75000个额外费用。

其次,所有这些来自加热过程/缓存/任何相当脆弱的收益。有许多事件会破坏您通常无法控制的变暖效应。大多数情况下,这些都来自您的过程而不是单独使用系统。进程切换的行为非常类似于异步缓存刷新,每当内核需要一页内存时,它就可能从磁盘缓存中删除一页。

由于这些因素使得计算时间变得非常不可预测,因此在运行应该产生任何可靠性结果的基准时,需要对它们进行控制。除此之外,这些影响大多被忽略。

答案 1 :(得分:-2)

重要的是要注意保持CPU忙碌并不是件坏事。理想情况下,您希望CPU在60%到100%之间运行,因为这意味着您的计算机实际上正在进行"工作"。当然,如果有一个你不知道的过程并且该过程占用了CPU周期,那就不好了。

在回答你的问题时,机器通常会处理这个问题。