基准测试两个功能

时间:2013-09-02 13:14:40

标签: c visual-c++ performance

我正在尝试检查两个函数花费的时间来比较它们。

这些功能将两个后备者作为输入。

这两个在一个函数内部被调用。

void b_mark()
{
    for(int i=0;i<10;i++)
    {
         timer1.start();
         function1(std::back_inserter(itr1));
         timer1.stop();


         timer2.start();
         function2(std::back_inserter(itr2));
         timer2.stop();

    }
}

事实证明,我首先调用的函数需要更多时间,如果是,则无关紧要 function1或function2。

这可能是什么原因?

计时器是std::clock()的包装。

2 个答案:

答案 0 :(得分:1)

您测量的时间包括std::back_inserter(...)的时间。可能是第一次打电话需要更多时间,例如用于初始化?

答案 1 :(得分:1)

当你想要衡量某些东西时,你必须确保:

  • 每个测量情况与其他测量情况完全相同 - 这包括生成相同的启动数据,在再次打开资源之前关闭开放资源等等。
  • 你重复测量步骤足够多次,结果是a)可测量,b)统计显着
  • 测量功能/物体本身是正确的

在你的情况下,我怀疑:

  • 你测量每个函数调用一次,这可能会使结果变得毫无意义 - 或者是因为系统时钟分辨率,系统资源分配 - 可能还有更多原因
  • 你可能在同一个集体上运作,可能会在第一次通话时被修改;例如,第一个调用可以在集合中分配大量内存,而第二个调用仅使用它
  • 您的timer课程可能不正确,导致结果无效

简而言之:此测试用例似乎不可靠,其结果可能无效。

尝试修改这样的代码:

void b_mark()
{
    int count = 10000;
    timer1.start();
    for(int i=0;i<count;i++)
    {
        resetItr(itr1);
        function1(std::back_inserter(itr1));
    }
    timer1.stop();


    timer2.start();
    for(int i=0;i<count;i++)
    {
        resetItr(itr2);
        function2(std::back_inserter(itr2));
    }
    timer2.stop();
}