测量cudaMemcpy时钟周期

测量cudaMemcpy时钟周期,cuda,gpu,clock,Cuda,Gpu,Clock,我想知道如何测量在cudaMemcpy中花费的时钟周期 如果cudaMemcpy只使用CPU,这是正常的,我只需要测量CPU时钟 但是如果它使用GPU,我如何测量拷贝中花费了多少时钟周期 cudaMemcpy是一项功能,最终由GPU驱动程序提供服务,它设置DMA操作以在主机和GPU之间传输数据。GPU驱动程序是主机代码,因此您可以使用基于主机的方法或cudaEvent系统来计时,例如cudaMemcpy 异步版本(例如cudaMemcpyAsync)通常不能自行计时,因为它们设置DMA操作,然

我想知道如何测量在cudaMemcpy中花费的时钟周期

  • 如果cudaMemcpy只使用CPU,这是正常的,我只需要测量CPU时钟

  • 但是如果它使用GPU,我如何测量拷贝中花费了多少时钟周期


cudaMemcpy
是一项功能,最终由GPU驱动程序提供服务,它设置DMA操作以在主机和GPU之间传输数据。GPU驱动程序是主机代码,因此您可以使用基于主机的方法或
cudaEvent
系统来计时,例如
cudaMemcpy


异步版本(例如
cudaMemcpyAsync
)通常不能自行计时,因为它们设置DMA操作,然后立即返回到调用线程(在主机上)。DMA操作发生在一段时间之后。因此,您需要插入额外的同步(例如,
cudaDeviceSynchronize()
)来计时这些同步的持续时间。由于这通常不是您想要的,因此在这种情况下,通常建议使用
cudaEvent
系统或其中一个。

因此,如果我想查看所花费的时钟周期,我只需要在CPU代码中查看:)对于CPU时钟周期,是的。我不确定在这种情况下谈论GPU时钟周期是否有意义。Robert,您可以使用CUDA事件来测量异步memcpy性能,尽管这些测量仅在同步空流中有用。感谢Robert,您回答了我的问题,您说应该在主机代码中测量它。