cuando llama a la función cudaDeviceSynchronize
realmente necesitada ?.¿Cuándo llamar a cudaDeviceSynchronize?
Por lo que entiendo de la documentación CUDA, los núcleos CUDA son asíncronos, por lo que parece que debemos llamar al cudaDeviceSynchronize
después de cada lanzamiento del núcleo. Sin embargo, he intentado con el mismo código (redes neuronales de entrenamiento) con y sin cudaDeviceSynchronize
, excepto uno antes de la medición del tiempo. He descubierto que obtengo el mismo resultado pero con una velocidad entre 7-12x (dependiendo de los tamaños de la matriz).
Entonces, la pregunta es si hay alguna razón para usar cudaDeviceSynchronize
aparte de la medición de tiempo.
Por ejemplo:
es necesario utilizarlo antes de copiar los datos de la GPU de vuelta al servidor con
cudaMemcpy
?si hago multiplicaciones de matrices como
C = A * B D = C * F
debería poner cudaDeviceSynchronize
entre ambos?
De mi experimento Parece que no.
¿Por qué cudaDeviceSynchronize
ralentiza tanto el programa?
Una instancia sería si tiene alguna instrucción de impresión en el kernel, el búfer no se imprimirá hasta un evento de sincronización. –