1

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

这些函数将两个反向迭代器作为输入。

这两个在一个函数中调用。

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().

4

2 回答 2

1

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

于 2013-09-02T13:18:28.850 回答
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();
}
于 2013-09-02T13:23:49.280 回答