Ale*_*lex 3 concurrency cuda latency gpgpu synchronize
如上所述:如何减少CUDA同步延迟/延迟
设备等待结果有两种方法:
对于"轮询"需要使用CudaDeviceScheduleSpin
.
但对于"堵"是什么,我需要使用CudaDeviceScheduleYield
或cudaDeviceScheduleBlockingSync
?
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旋转.但有什么区别?
根据我的理解,这两种方法都使用轮询进行同步.在伪代码中CudaDeviceScheduleSpin
:
while (!IsCudaJobDone())
{
}
Run Code Online (Sandbox Code Playgroud)
而CudaDeviceScheduleYield
:
while (!IsCudaJobDone())
{
Thread.Yield();
}
Run Code Online (Sandbox Code Playgroud)
即CudaDeviceScheduleYield
告诉操作系统它可以中断轮询线程并激活另一个执行其他工作的线程.这会增加CPU上其他线程的性能,但也会增加延迟,以防CUDA作业完成时,当轮询之间的另一个线程在该时刻处于活动状态时.
归档时间: |
|
查看次数: |
1503 次 |
最近记录: |