Wann soll cudaDeviceSynchronize aufgerufen werden?
wann ruft die ancudaDeviceSynchronize
Funktion wirklich benötigt?
Soweit ich aus der CUDA-Dokumentation weiß, sind CUDA-Kernel asynchron, daher sollten wir anscheinend anrufencudaDeviceSynchronize
nach jedem Kernelstart. Ich habe jedoch den gleichen Code (Training neuronaler Netze) mit und ohne versuchtcudaDeviceSynchronize
, außer einer vor der Zeitmessung. Ich habe festgestellt, dass ich das gleiche Ergebnis erhalte, jedoch mit einer Geschwindigkeit von 7-12x (abhängig von den Matrixgrößen).
Die Frage ist also, ob es Gründe für die Verwendung gibtcudaDeviceSynchronize
abgesehen von Zeitmessung.
Zum Beispiel:
Wird es vor dem Kopieren von Daten von der GPU zurück auf den Host mit benötigtcudaMemcpy
?
Wenn ich Matrixmultiplikationen mache wie
C = A * B
D = C * F
soll ich setzencudaDeviceSynchronize
zwischen beiden?
Aus meinem Experiment Ich glaube nicht.
Warum tutcudaDeviceSynchronize
das Programm so sehr verlangsamen?