gpt4 book ai didi

c++ - C++ 中的时间测量 (gettimeofday) 给出重复的结果

转载 作者:行者123 更新时间:2023-11-27 22:39:35 26 4
gpt4 key购买 nike

我试图在哈希表中插入多个项目并以毫秒为单位测量插入时间。基本上,它是这样工作的(这个函数属于我的哈希表的类):

double benchmark(int amountOfInsertions){
int valueToInsert;
timeval tv_timeStart, tv_timeEnd;
double totalTime = 0;
double db_timeStart, db_timeEnd;

for (int i = 0; i < amountOfInsertions; i++){

valueToInsert = generateRandomVariable();

gettimeofday(&tv_timeStart, NULL);
insert(valueToInsert);
gettimeofday(&tv_timeEnd, NULL);

db_timeStart = tv_timeStart.tv_sec*1000 + tv_timeStart.tv_usec/1000.0;
db_timeEnd = tv_timeEnd.tv_sec*1000 + tv_timeEnd.tv_usec/1000.0;

totalTime += (db_timeEnd - db_timeStart);
}

return totalTime;
}

问题是以前的插入次数是这样的,明显有明显的时间递增,我插入的项目越多: enter image description here

但现在,我注意到插入时间在相同值(大约 15.625 的倍数左右)之间交替出现,导致结果极其不准确: enter image description here

它突然开始发生,即使我知道输出正确时间的旧版本代码也是如此。这是 gettimeofday() 的一个特殊问题吗?如果不是,它会是什么?

这个问题对我来说太神秘了,我什至怀疑这是不是以正确的方式询问它的正确位置。

更新:我也尝试过使用 clock() 和 std::chrono::steady_clock,以及测量整个循环的时间而不是每个单独的插入(下面的示例),并且仍然得到相同的行为:

double benchmark(int amountOfInsertions){
int valueToInsert;
double totalTime = 0;

steady_clock::time_point t1 = steady_clock::now();
for (int i = 0; i < amountOfInsertions; i++){

valueToInsert = generateRandomVariable();
insert(valueToInsert);

}
steady_clock::time_point t2 = steady_clock::now();

duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
totalTime = time_span.count()*1000;

return totalTime;
}

最佳答案

我不知道是什么原因导致 gettimeofday 的计时器分辨率突然发生变化,但我知道它是 should not be used to measure time anyway .即使是 man page gettimeofday 的作者是这样说的。

请使用clock_gettime反而。或者,如果您可以使用花哨的 C++11 功能:std::chrono::steady_clock

关于c++ - C++ 中的时间测量 (gettimeofday) 给出重复的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com