2012-11-21 30 views
16

Qual è la differenza tra queste tre funzioni, in particolare le ultime due? Il manuale della biblioteca dicecudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize

Si noti che questa funzione è obsoleta perché il suo nome non riflette il suo comportamento. La sua funzionalità è simile alla funzione non presidiata cudaDeviceSynchronize(), che dovrebbe essere utilizzata invece .

Ma non è molto sicuro cosa significa.

risposta

30

Queste sono tutte le barriere . Le barriere impediscono l'esecuzione del codice oltre la barriera finché non viene soddisfatta una condizione.

  1. cudaDeviceSynchronize() esecuzione soste nel thread della CPU/host (che il cudaDeviceSynchronize è stata emessa in) fino a quando la GPU ha terminato l'elaborazione tutti i compiti precedentemente richiesti CUDA (kernel, copie dei dati, etc.)
  2. cudaThreadSynchronize() come si' Ho scoperto, è solo una versione deprecata di cudaDeviceSynchronize. Deprecated significa semplicemente che funziona ancora per ora, ma si raccomanda di non usarlo (usa invece cudaDeviceSynchronize) e in futuro potrebbe non essere supportato. Ma cudaThreadSynchronize() e cudaDeviceSynchronize() sono sostanzialmente identici.
  3. cudaStreamSynchronize() è simile alle due funzioni precedenti, ma impedisce l'ulteriore esecuzione nel thread host della CPU fino a quando la GPU ha terminato l'elaborazione di tutte le attività di cuda richieste precedentemente emesse nel flusso di riferimento. Quindi, cudaStreamSynchronize() accetta un ID di flusso come unico parametro. Le attività di cuda rilasciate in altri stream potrebbero essere o non essere complete quando l'esecuzione del codice CPU continua oltre questa barriera.
Problemi correlati