让流程"热身"有什么用处吗?

Fru*_*rat 7 c++ performance

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

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

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

cma*_*ter 6

首先,在正常执行之前尝试预热过程通常没有任何好处:这只会加速你的情况下的前100个程序循环,总共少于20000个滴答.这远远低于你必须投资于预热的75000个蜱.

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

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