title: What difference between cudaDeviceScheduleBlockingSync and cudaDeviceScheduleYield?
body: <p>As said here: <a href="https://stackoverflow.com/questions/11953722/how-to-reduce-cuda-synchronize-latency-delay">How to reduce CUDA synchronize latency / delay</a></p>
  
  <p>There are two approach for waiting result from device:</p>
  
  <ul>
  <li>"Polling" - burn CPU in spin - to decrease latency when we wait result </li>
  <li>"Blocking" - thread is sleeping until an interrupt occurs - to increase general performance</li>
  </ul>
  
  <p>For <strong>"Polling"</strong> need to use <code>CudaDeviceScheduleSpin</code>.</p>
  
  <p>But for <strong>"Blocking"</strong> what do I need to use <code>CudaDeviceScheduleYield</code> or <code>cudaDeviceScheduleBlockingSync</code>?</p>
  
  <p>What difference between <code>cudaDeviceScheduleBlockingSync</code> and <code>cudaDeviceScheduleYield</code>? </p>
  
  <p><code>cudaDeviceScheduleYield</code> as written: <a href="http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group__CUDART__DEVICE_g18074e885b4d89f5a0fe1beab589e0c8.html" rel="nofollow noreferrer">http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group__CUDART__DEVICE_g18074e885b4d89f5a0fe1beab589e0c8.html</a>
  "Instruct CUDA <strong>to yield its thread</strong> when waiting for results from the device. This can <strong>increase latency</strong> when waiting for the device, but can <strong>increase the performance</strong> of CPU threads performing work in parallel with the device." - i.e. wait result without burn CPU in spin - i.e. "Blocking". And cudaDeviceScheduleBlockingSync too - wait result without burn CPU in spin. But what difference?</p>