【问题标题】:Fast time function C/C++快速时间函数 C/C++
【发布时间】:2012-08-13 19:31:06
【问题描述】:

我目前正在使用 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) 不够快。

【问题讨论】:

  • 你是如何确定time不够快的?
  • 不在标准库中。特定系统有特定的方法来测量执行时间,您需要指定代码的目标系统/操作系统。
  • 我正在寻找更快的替代方案。这还不够,因为它引入了开销(使用它的方法大约每秒调用 1000 万次)
  • 你为什么要这么频繁地调用它?你想做什么?可能有更好的方法。
  • 它是一个网络生成器。它基于某种拓扑生成网络,然后尝试模拟集群中的流量。我正在使用该函数来确定一个非常基本的性能指标。

标签: c++ c performance time


【解决方案1】:

我不确定,但我猜,考虑到整秒,您可能会说time(NULL) 不够粒度。换句话说,您可能想要降低到毫秒、微秒或纳秒。

如果是这样,请查看this question

【讨论】:

    【解决方案2】:

    您似乎只想测量经过的时间(而不关心绝对时间)。测量经过时间的最快方法之一(如果您使用的是 x86)是阅读rdtsc counter。在 mvsc++ 中,这可以通过以下方式实现:

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

    【讨论】:

    • 请注意在多核/超线程系统上使用此方法的注意事项,如链接的维基百科条目中所述。对于 Windows 系统,recommended alternative 将使用 QueryPerformanceCounterQueryPerformanceFrequency
    • 但是您愿意解释一下如何使用它来测量经过的时间吗?
    • 也可以使用 RDTSC 将线程关联到特定的 CPU。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2011-01-21
    • 1970-01-01
    • 2014-12-10
    • 2021-04-09
    • 2012-01-07
    相关资源
    最近更新 更多