【问题标题】:Correct way to logging elapsed time in C++在 C++ 中记录经过时间的正确方法
【发布时间】:2011-08-25 08:20:25
【问题描述】:

我正在写一篇关于集群环境中 GPU 加速的文章
为此,我在 CUDA 中编程,这基本上是一个 c++ 扩展。 但是,由于我是一名 c# 开发人员,我不知道 c++ 的特殊性。

对记录经过的时间有一些担忧吗?一些建议或博客可供阅读。

我最初的想法是做一个大循环并多次运行程序。 50 ~ 100,并记录每个经过的时间,然后制作一些速度图形。

【问题讨论】:

    标签: c++ logging elapsedtime


    【解决方案1】:

    根据您的需要,它可以很简单:

    time_t start = time(NULL);
    // long running process
    printf("time elapsed: %d\n", (time(NULL) - start));
    

    我想您需要说明您计划如何记录(文件或控制台)以及您需要的精度(秒、毫秒、我们等)。 "time" 以秒为单位。

    【讨论】:

      【解决方案2】:

      我建议使用 boost timer library 。它与平台无关,并且很简单:

      #include <boost/timer/timer.hpp>
      boost::timer t;
      // do some stuff, up until when you want to start timing
      t.restart();
      // do the stuff you want to time.
      std::cout << t.elapsed() << std::endl;
      

      当然 t.elapsed() 返回一个可以保存到变量的双精度值。

      【讨论】:

        【解决方案3】:

        time 等标准函数的分辨率通常非常低。是的,解决这个问题的一个好方法是多次运行测试并取平均值。请注意,由于隐藏的启动成本,前几次可能会特别慢 - 尤其是在使用 GPU 等复杂资源时。

        对于特定于平台的调用,请查看 Windows 上的 QueryPerformanceCounter 和 OS X 上的 CFAbsoluteTimeGetCurrent。(我没有使用过 POSIX 调用 clock_gettime,但这可能值得一试。)

        测量 GPU 性能很棘手,因为 GPU 是运行单独指令的远程处理单元 - 通常在许多并行单元上。您可能想访问 Nvidia 的 CUDA Zone 以获取各种资源和工具来帮助测量和优化 CUDA 代码。 (与OpenCL 相关的资源也高度相关。)

        最终,您想看看您的结果以多快的速度显示在屏幕上,对吧?因此,致电time 可能就足以满足您的需求。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-06
          • 1970-01-01
          • 1970-01-01
          • 2018-12-20
          • 2012-02-17
          • 2011-10-11
          相关资源
          最近更新 更多