cuda可视化分析器中的CPU和GPU定时器

cuda可视化分析器中的CPU和GPU定时器,cuda,Cuda,cuda视觉分析器中有两个计时器 GPU时间:它是方法在GPU上的执行时间。 CPU时间:它是启动该方法的GPU时间和CPU开销的总和。在驱动程序生成的数据级别,CPU时间是启动非阻塞方法的唯一CPU开销;对于阻塞方法,它是GPU时间和CPU开销的总和。默认情况下,所有内核启动都是非阻塞的。但是,如果启用了任何探查器计数器,内核启动将被阻塞。不同流中的异步内存复制请求是非阻塞的 如果我有一个真正的程序,实际执行时间是多少?我测量时间,有一个GPU定时器和一个CPU定时器,有什么区别 你就快到了—

cuda视觉分析器中有两个计时器

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

如果我有一个真正的程序,实际执行时间是多少?我测量时间,有一个GPU定时器和一个CPU定时器,有什么区别

你就快到了——现在你已经知道了一些不同的选择,最后一步是问问自己你想要测量的确切时间。这个问题没有正确的答案,因为这取决于你试图用测量方法做什么。当您试图优化计算时,CPU时间和GPU时间正是您想要的,但它们可能不包括像等待这样实际上非常重要的事情。你提到“实际执行时间”-这是一个开始。您是指问题的完整执行时间吗?从用户启动程序到答案吐出并程序结束?在某种程度上,这是唯一真正重要的时间

对于这样的数字,在Unix类型的系统中,我只想测量程序的整个运行时<代码>/bin/time myprog,可能有一个Windows等效程序。这很好,因为它完全没有偏见。另一方面,因为这是一个总数,它太宽泛了,没有什么帮助。如果你的代码有一个大的GUI组件,那就没有多大好处,因为你还要测量用户点击结果所需的时间


如果您想要计算一组计算的运行时间,cuda有非常方便的函数cudaEvent*,可以放置在代码的各个部分-请参阅,s 2.1.2,使用cuda GPU计时器-这些函数可以放置在重要代码位之前和之后,并打印结果

gpu计时器基于事件。 这意味着当一个事件被创建时,它将被设置在gpu的一个队列中进行服务。所以那里也有一个小开销。
从我所测量的数据来看,尽管差异不太重要

我想你已经回答了你自己的问题。