所以cuda visual profiler中有2个计时器,
GPU时间:这是GPU上方法的执行时间。 CPU时间:启动该方法的GPU时间和CPU开销之和。在驱动程序生成的数据级别,CPU时间只是启动非阻塞方法的方法的CPU开销;对于阻塞方法,它是GPU时间和CPU开销的总和。默认情况下,所有内核启动都是非阻塞的。但是如果启用任何探查器计数器,则内核启动会阻塞。不同流中的异步内存复制请求是非阻塞的。
如果我有一个真正的节目,那么实际的演出时间是多少?我测量时间,还有一个GPU计时器和一个CPU计时器,有什么区别?
答案 0 :(得分:2)
你几乎就在那里 - 现在你已经意识到了一些不同的选择,最后一步是要问自己你想要测量的时间。对此没有正确答案,因为这取决于您尝试对测量做些什么。当您尝试优化计算时,CPU时间和GPU时间正是您想要的,但它们可能不包括等待实际上非常重要的事情。你提到“实际的执行时间” - 这是一个开始。你的意思是问题的完整执行时间 - 从用户启动程序到答案吐出并且程序结束?在某种程度上,这真的是唯一真正重要的时刻。
对于这样的数字,在Unix类型的系统中,我只想测量程序的整个运行时间; /bin/time myprog
,可能是Windows等价物。这很好,因为它完全不受欢迎。另一方面,因为它是一个总数,它太宽泛而无法提供帮助,如果你的代码有一个很大的GUI组件就不是很好,因为那时你也在测量用户点击它们的方式所需的时间结果。
如果你想要一些计算的经过时间,cuda有非常方便的函数cudaEvent *可以放在代码的各个部分 - 参见CUDA Best Practices Guide,s 2.1.2,使用CUDA GPU定时器 - 这些可以放在重要的代码之前和之后并打印结果。
答案 1 :(得分:0)
gpu计时器基于事件。 这意味着当创建一个事件时,它将被设置在gpu的队列中以进行服务。所以那里的开销也很小。 从我所测量的虽然差异不太重要