【发布时间】:2018-03-02 08:02:36
【问题描述】:
我们正在运行一些基准测试,我们注意到调用 function bar 并等待响应的 function foo 比 function bar 花费的时间更少。 Foo 驻留在客户端上,它是一个单独的物理机器,bar 驻留在服务器上,它是一个单独的机器,并且通过 TCP 服务器进行通信。我们正在使用<ctime>,我们正在调用clock(),就像这样。
/*
* resides on client machine
*/
foo ()
{
clock_t start,stop;
start = clock();
/*
* Blocking TCP call to bar() on server
* Uses callback functions
*/
stop = clock();
std::cout<<stop-start;
}
/*
* Function on server which executes some could and returns
* it's run time to the client machine
*/
bar ()
{
clock_t start,stop;
start = clock();
/*connect to international space station and back*/
stop = clock();
std::cout<<stop-start;
}
foo();
bar();
foo() - bar();
我们得到的输出类似于
100000
200000
-100000
我们怀疑问题在于一个 CPU 的时间感比另一个 CPU 的速度快,并导致了这种不匹配。获得有意义的时间指标的最佳方式是什么(即基于人类时间,而不是抽象的 CPU 速度)。
【问题讨论】:
-
CLOCKS_PER_SEC 是为特定的编译器定义的,所以是的,它在不同的系统上可能不同,或者在同一系统上不同的编译器可能不同..
-
@NeilButterworth 根据我的经验,CLOCKS_PER_SEC 始终为 1,000,000
-
C++ 标准没有这样的保证。
-
如果我想获得有意义的时间,即。这台电脑需要 30 毫秒来计算(ppm 漂移需要 +/- 几纳秒),而另一台需要 45 毫秒,如何实现这一点?
-
clock不是挂壁时间。现在是处理器时间。