quando è necessaria la chiamata alla funzione cudaDeviceSynchronize
?.Quando chiamare cudaDeviceSynchronize?
Per quanto ho capito dalla documentazione CUDA, i kernel CUDA sono asincroni, quindi sembra che dovremmo chiamare cudaDeviceSynchronize
dopo ogni avvio del kernel. Tuttavia, ho provato lo stesso codice (formazione reti neurali) con e senza qualsiasi cudaDeviceSynchronize
, tranne uno prima della misurazione del tempo. Ho scoperto che ottengo lo stesso risultato ma con una velocità tra 7-12x (a seconda delle dimensioni della matrice).
Quindi, la domanda è se ci sono dei motivi per utilizzare cudaDeviceSynchronize
oltre alla misurazione del tempo.
Ad esempio:
E 'necessario prima di copiare i dati dalla GPU all'host con
cudaMemcpy
?se faccio moltiplicazione di matrici come
C = A * B D = C * F
devo mettere cudaDeviceSynchronize
tra i due?
Dal mio esperimento Pare che non lo faccia.
Perché il programma cudaDeviceSynchronize
rallenta così tanto?
Un'istanza potrebbe essere se si dispone di istruzioni di stampa nel kernel, il buffer non verrà stampato fino a un evento di sincronizzazione. –