4

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

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

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

4

3 回答 3

5

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

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

我想你需要告诉你计划如何记录它(文件或控制台)以及你需要的精度是多少(秒、毫秒、我们等)。“时间”以秒为单位。

于 2011-05-14T01:35:01.037 回答
3

我会推荐使用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() 返回一个可以保存到变量的双精度值。

于 2011-05-14T01:34:41.730 回答
2

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

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

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

最终,您想看看您的结果以多快的速度出现在屏幕上,对吗?出于这个原因,一个电话time可能足以满足您的需求。

于 2011-05-14T04:20:58.670 回答