【问题标题】:Avoiding CPU Contention避免 CPU 争用
【发布时间】:2015-06-15 21:50:23
【问题描述】:

我有一个程序,我想计算它的执行时间:

#include <iostream>
#include <boost/chrono.hpp>

using namespace std;

int main(int argc, char* const argv[])
{


     boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();

// Intructions to burn time 

    boost::chrono::duration<double> sec = boost::chrono::system_clock::now() - start;
    cout <<"---- time execution is " << sec.count() << ";";
    return 0;
}

例如一次运行后的结果:

----时间执行为0.0223588

这个结果不是很明显,因为 CPU 时间是包括在内的。

我有一个想法,通过测试多次运行并达到平均水平来避免 CPU 争用。

问题是:

  • 如何存储上一次运行的时间值?

  • 我们可以通过文件做到这一点吗?

  • 如何在每次运行后增量计算平均值?

欢迎您的建议/伪代码。

【问题讨论】:

  • 如果您使用的是 unix 操作系统并使用 bash 作为 shell,您可以将程序调用为 time ./[progexe] 并将其 sys 时间输出用作程序的 cputime。
  • 这个问题非常广泛,归结为“我如何正确构建基准?”而且我对您尚未对该主题进行任何值得注意的研究感到不满意。
  • @LightnessRacesinOrbit:嗯,这就是应该问的问题。实际提出的问题,关于跨次运行的平均结果,是一个更合适的范围。
  • @Lightness Races in Orbit 为什么你认为这个问题超出了范围?

标签: c++ cpu average chrono


【解决方案1】:

您可以使用 2 个参数通过命令行传递平均数:当前平均值和执行的迭代次数。 然后: NewAverage = ((CurrentAverage*N) + CurrentValue) / (N+1); 其中 N 是迭代次数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 2010-09-25
    • 2010-09-25
    • 2019-06-12
    • 1970-01-01
    • 2017-12-02
    • 2019-01-10
    相关资源
    最近更新 更多