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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage