我们正在运行一些基准测试,我们注意到function foo
调用function bar
并等待响应的时间比function bar
少。 Foo驻留在客户端上,客户端是一个单独的物理机器,并且它位于服务器上,该服务器是一台独立的机器,并且通过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速度)。
答案 0 :(得分:1)
你很可能将苹果与橙子进行比较。无法保证您的两台计算机对clock()
使用相同的分辨率。也许更有用的是确保你的时间数字以一致的单位,如秒。
std::cout << (stop-start)/CLOCKS_PER_SEC;
或者,您可能想尝试使用Modern C ++和<chrono>
using std::chrono;
auto start = high_resolution_clock::now();
...
auto stop = high_resolution_clock::now();
std::cout << duration_cast< duration<float> >(stop-start).count()
<< " seconds" << std::endl;
(虽然值得注意的是high_resolution_clock
可以实现为system_clock
; steady_clock
是专门针对您正在尝试的时间设计的。也可能是非便携式解决方案具有更高的分辨率,这些分辨率是硬件/操作系统特定的。)