Concurrency cudaDeviceScheduleBlockingSync和CUDADEVICESCHEDULEYOULT之间有什么区别?

Concurrency cudaDeviceScheduleBlockingSync和CUDADEVICESCHEDULEYOULT之间有什么区别?,concurrency,cuda,gpgpu,latency,synchronize,Concurrency,Cuda,Gpgpu,Latency,Synchronize,正如这里所说: 设备等待结果有两种方法: “轮询”-在旋转中烧掉CPU-以减少等待结果时的延迟 “阻塞”-线程在中断发生之前处于休眠状态-以提高总体性能 对于“轮询”需要使用CudaDeviceScheduleSpin 但是对于“阻塞”我需要使用什么CUDADeviceScheduleYOULD或cudaDeviceScheduleBlockingSync cudaDeviceScheduleBlockingSync和cudaDeviceScheduleYield之间有什么区别 cudaDe

正如这里所说:

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

  • “轮询”-在旋转中烧掉CPU-以减少等待结果时的延迟
  • “阻塞”-线程在中断发生之前处于休眠状态-以提高总体性能
对于“轮询”需要使用
CudaDeviceScheduleSpin

但是对于“阻塞”我需要使用什么
CUDADeviceScheduleYOULD
cudaDeviceScheduleBlockingSync

cudaDeviceScheduleBlockingSync
cudaDeviceScheduleYield
之间有什么区别

cudaDeviceScheduleYield
如所述:
“指示CUDA在等待来自设备的结果时产生其线程。这可以在等待设备时增加延迟,但可以提高CPU线程与设备并行工作的性能。”-即等待结果而不烧坏CPU旋转-即“阻塞”。和cudaDeviceScheduleBlockingSync-too-等待结果,而不会在自旋中烧坏CPU。但有什么不同呢?

据我所知,这两种方法都使用轮询来同步。在
CudaDeviceScheduleSpin
的伪代码中:

while (!IsCudaJobDone())
{
}
鉴于
cudadeviecescheduleyield

while (!IsCudaJobDone())
{
     Thread.Yield();
}

i、 e.
CudaDeviceScheduleYield
告诉操作系统它可以中断轮询线程并激活另一个执行其他工作的线程。这会提高CPU上其他线程的性能,但也会增加延迟,以防CUDA作业在另一个线程(而不是轮询线程)处于活动状态时完成。

我不明白您所问的区别是什么-这两个线程之间的区别正是您所引用的。一个使用中断,另一个使用轮询循环。@Talonmes,即
CUDADeviceScheduleYOURD
CudaDeviceScheduleSpin
是否都使用轮询循环?那么它们之间有什么区别呢
CudaDeviceScheduleYield
增加了文档中写入的延迟,因此不能“轮询”,不是吗?谢谢!即从低延迟到高延迟的升序:
CudaDeviceScheduleSpin
CudaDeviceScheduleYield
cudaDeviceScheduleBlockingSync
?是,以及从低到高的顺序“其他任务的CPU使用”。但是,如果轮询线程是CUDA任务完成时CPU上的当前线程,cudaDeviceScheduleSpin和cudaDeviceScheduleYield应该具有相同的延迟。