2010-12-04 76 views
2

因此,cuda可视化剖析器中有2个定时器,cuda可视化剖析器中的CPU和GPU定时器

GPU时间:这是GPU上该方法的执行时间。 CPU时间:它是启动该方法的GPU时间和CPU开销的总和。在驱动程序生成的数据级别,CPU时间仅仅是启动非阻塞方法的方法的CPU开销;对于阻塞方法,它是GPU时间和CPU开销的总和。所有内核默认启动都是非阻塞的。但是如果任何分析器计数器被启用,则内核启动将被阻止。不同流中的异步内存复制请求是非阻塞的。

如果我有一个真正的程序,实际的exectuion时间是多少?我测量时间,还有GPU计时器和CPU计时器,有什么不同?

+0

我想你已经回答了你自己的问题。 – erjiang 2010-12-04 02:13:58

回答

2

你几乎就在那里 - 现在你已经意识到了一些不同的选择,最后一步就是问问自己到底什么时候要测量。对此没有正确的答案,因为这取决于你想要测量的内容。当您尝试优化计算时,CPU时间和GPU时间正是您想要的,但它们可能不包含诸如实际上可能非常重要的事情。你提到“实际执行时间” —这是一个开始。你的意思是从用户启动程序到答案被吐出并且程序结束为止的问题—的完整执行时间?在某种程度上,这确实是唯一真正重要的时间。

对于这样的数字,在Unix类型的系统中,我喜欢测量程序的整个运行时间; /bin/time myprog,大概是Windows的等价物。这很好,因为它完全不起眼。另一方面,因为它是一个整体,所以它的范围太广而不能提供帮助,如果你的代码有一个大的GUI组件,那么它也不是很好,因为那样你也可以测量用户点击它们所需的时间结果。

如果你想要一些组计算的经过时间,CUDA具有非常方便的功能cudaEvent *可以放置在代码—看到CUDA Best Practices Guide的各个部分,S 2.1.2,使用CUDA GPU定时器—这些,你可以在重要的代码之前和之后放置并打印结果。

0

gpu计时器基于事件。 这意味着当一个事件被创建时,它将被设置在gpu的队列中以供投放。所以这里也有小的开销。 从我已测量,虽然差异是次要的