以C++记录经过时间的正确方法
Correct way to logging elapsed time in C++
我正在写一篇关于集群环境中
GPU 加速的文章为此,我正在用 CUDA 编程,这基本上是一个 c++ 扩展。但是,由于我是一名 c# 开发人员,我不知道 c++ 的特殊性。
对记录经过的时间有一些担忧吗?一些建议或博客阅读。
我最初的想法是做一个大循环并多次运行程序。 50~100,并记录每次经过的时间,以制作一些速度图形。
根据您的需要,它可以像以下一样简单:
time_t start = time(NULL);
// long running process
printf("time elapsed: %dn", (time(NULL) - start));
我想您需要告诉您计划如何记录(文件或控制台)以及您需要的精度(秒、毫秒、我们等)。"时间"以秒为单位给出它。
我建议使用提升计时器库。 它与平台无关,并且非常简单:
#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() 返回一个双精度值,您可以将其保存到变量中。
标准函数(如time
)通常具有非常低的分辨率。是的,解决这个问题的一个好方法是多次运行测试并取平均值。请注意,由于隐藏的启动成本,前几次可能会特别慢 - 尤其是在使用 GPU 等复杂资源时。
对于特定于平台的调用,请查看Windows上的QueryPerformanceCounter
和OS X上的CFAbsoluteTimeGetCurrent
(我没有使用过POSIX调用clock_gettime
但可能值得一试。
测量 GPU 性能很棘手,因为 GPU 是运行单独指令的远程处理单元 - 通常在许多并行单元上。您可能想访问 Nvidia 的 CUDA 专区,以获取各种资源和工具,以帮助测量和优化 CUDA 代码。(与 OpenCL 相关的资源也高度相关。
最终,您想查看结果出现在屏幕上的速度,对吗?出于这个原因,打电话给time
可能足以满足您的需求。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 将时间戳打印到流的最简单方法
- 通常使用什么方法来检测时间情况?
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- 有没有更准确的方法来记录C++时间?
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- 更好的单元测试方法,花费的时间太长
- 替换枚举以最大化编译时间检查的最佳方法
- 如何在长时间运行的方法中等待信号?
- 使用 GetLastError() 的真正正确的方法(时间)是什么?
- 为什么以相同的数量插入到集合中,基于不同的方法具有不同的运行时间?
- C 类方法的执行时间取决于什么
- 扩展中的日期时间对象方法C++问题
- 一定时间后强制终止方法
- 此插入方法的时间和空间复杂性
- 如何恢复注册表项的所有元素?(上次写入时间,类型,值,名称...这是正确的方法吗?
- 查找系统调用需要多长时间的可能方法
- 在 C++11 中表示日内时间 HH:MM:SS 的最佳方法是什么?
- C 编译时间检查模板类型中是否存在方法