cudaDeviceScheduleBlockingSync和cudaDeviceScheduleYield有什么区别?

Ale*_*lex 3 concurrency cuda latency gpgpu synchronize

如上所述:如何减少CUDA同步延迟/延迟

设备等待结果有两种方法:

  • "轮询" - 在旋转中刻录CPU - 在等待结果时减少延迟
  • "阻塞" - 线程正在休眠直到发生中断 - 以提高一般性能

对于"轮询"需要使用CudaDeviceScheduleSpin.

但对于"堵"是什么,我需要使用CudaDeviceScheduleYieldcudaDeviceScheduleBlockingSync

cudaDeviceScheduleBlockingSync和之间有什么区别cudaDeviceScheduleYield

cudaDeviceScheduleYield如下所示:http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group__CUDART__DEVICE_g18074e885b4d89f5a0fe1beab589e0c8.html "指示CUDA 在等待设备结果时产生其线程.这可能会增加等待设备时的延迟,但可以提高与该设备并行执行工作的CPU线程的性能." - 即在旋转中没有刻录CPU的等待结果 - 即"阻塞".和cudaDeviceScheduleBlockingSync一样 - 等待结果没有刻录CPU旋转.但有什么区别?

kun*_*zmi 5

根据我的理解,这两种方法都使用轮询进行同步.在伪代码中CudaDeviceScheduleSpin:

while (!IsCudaJobDone())
{
}
Run Code Online (Sandbox Code Playgroud)

CudaDeviceScheduleYield:

while (!IsCudaJobDone())
{
     Thread.Yield();
}
Run Code Online (Sandbox Code Playgroud)

CudaDeviceScheduleYield告诉操作系统它可以中断轮询线程并激活另一个执行其他工作的线程.这会增加CPU上其他线程的性能,但也会增加延迟,以防CUDA作业完成时,当轮询之间的另一个线程在该时刻处于活动状态时.

  • 谢谢!即从低延迟到高延迟的升序:`CudaDeviceScheduleSpin`、`CudaDeviceScheduleYield`、`cudaDeviceScheduleBlockingSync`? (2认同)