Kiedy zadzwonić do cudaDeviceSynchronize?
kiedy dzwoni docudaDeviceSynchronize
funkcja naprawdę potrzebna ?.
O ile rozumiem z dokumentacji CUDA, jądra CUDA są asynchroniczne, więc wydaje się, że powinniśmy zadzwonićcudaDeviceSynchronize
po każdym uruchomieniu jądra. Próbowałem jednak tego samego kodu (trening sieci neuronowych) zi bez niegocudaDeviceSynchronize
, z wyjątkiem jednego przed pomiarem czasu. Odkryłem, że uzyskuję ten sam wynik, ale z szybkością między 7-12x (w zależności od rozmiarów matrycy).
Tak więc pytanie brzmi, czy są jakieś powody, by użyćcudaDeviceSynchronize
poza pomiarem czasu.
Na przykład:
Czy jest to potrzebne przed skopiowaniem danych z GPU do hosta za pomocącudaMemcpy
?
Jeśli zrobię mnożenie macierzy, jak
C = A * B
D = C * F
powinienem położyćcudaDeviceSynchronize
między obiema?
Z mojego eksperymentu Wygląda na to, że nie.
DlaczegocudaDeviceSynchronize
spowolnić program tak bardzo?