C/C++的快速时间函数

5

我目前正在使用ctime库中的时间函数。是否有更快的替代方案?

time_t start_time, elapsed_time;

for(int i = 0; i < n; i++) {
    start_time = time(NULL);
    /// optimized code
    if(condition_met())
    {
       elapsed_time = time(NULL) - start_time;
    } else continue;
}

time(NULL)的速度不够快。


10
你是如何确定“时间”不够快的? - cnicutar
1
不在标准库中。具体的系统有特定的方法来测量执行时间,您需要指定代码所针对的系统/操作系统。 - Lundin
1
我正在寻找更快的替代方案。因为它引入了开销(它被称为每秒大约10百万次使用的方法),所以这还不够。 - Sebi
4
为什么你要这么频繁地打电话?你想达到什么目的?也许有更好的方法。 - KillianDS
1
它是一个网络生成器。它基于特定的拓扑结构生成网络,然后尝试在集群中模拟流量。我正在使用该函数来确定非常基本的性能指标。 - Sebi
显示剩余3条评论
2个回答

8

你似乎只想测量已过时间,而不关心绝对时间。如果你使用的是x86处理器,其中一种快速测量已过时间的方法是读取rdtsc计数器。在mvsc++中可以通过以下方式实现:

#include <intrin.h>
unsigned __int64 rdtsc(void)
{
    return __rdtsc();
}

2
请注意,在多核/超线程系统上使用此方法时所述的限制,如链接的维基百科条目中所述。对于Windows系统,推荐的替代方法是使用QueryPerformanceCounterQueryPerformanceFrequency - Shawn Chin
2
但是您能否解释一下如何使用它来测量经过的时间? - Neel Basu
可以使用RDTSC将线程与特定的CPU关联起来。 - Alexey Frunze

2

我不确定,但是我猜测,由于它计算整秒数,你可能是想说time(NULL)的粒度不够细。换句话说,你可能想要降到毫秒、微秒或纳秒。

如果是这样,请看看这个问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接