缓存是否会影响时间评估循环?

时间:2018-03-17 15:10:06

标签: c++ loops caching time-estimation

考虑一种情况,我使用以下代码来评估函数执行所花费的时间。

long double Measure_micro_sec ( void (*foo) () )
{
    auto start = std::chrono::system_clock::now();
    for(long i =0; i <1000000; ++i)
    {
        foo();
        foo();
        if(i%1000 == 0)
            std::cout << i << "iterations\n";
    }
    auto end = std::chrono::system_clock::now();
    std::chrono::duration<long double> t_1 = end - start;

    auto start = std::chrono::system_clock::now();
    for(long i =0; i <1000000; ++i)
    {
        foo();
        foo();
        foo();
        if( i%1000 == 0 )
            std::cout << i << "iterations\n";
    }
   auto end = std::chrono::system_clock::now();
    std::chrono::duration<long double> t_2 = end - start;

    return (t_2.count() - t_1.count());
}

在上面的代码中,循环执行总时间的变化相差(理论上)是foo()的执行时间的n倍(1000000)。因此,foo()的执行时间为(t2 - t1)/n秒或(t2 - t1)微秒。

是否会缓存函数foo()?它会影响foo()执行时间的计算吗?即,缓存t2-t1并且未缓存foo()时的时差(foo())会有所不同。

foo()视为:

void foo()
{
    std::cout << "Example function\n";
}

正如@Hugo和@LightnessRacesinOrbit所说,缓存依赖于函数。这个函数会被缓存吗?

编辑:我使用std::chrono::system_clock作为计时器

0 个答案:

没有答案