Quando chamar cudaDeviceSynchronize?

quando está ligando para ocudaDeviceSynchronize função realmente necessária?

Pelo que eu entendo da documentação do CUDA, os kernels CUDA são assíncronos, então parece que devemos chamarcudaDeviceSynchronize após cada lançamento do kernel. No entanto, eu tentei o mesmo código (treinando redes neurais) com e sem qualquercudaDeviceSynchronize, exceto um antes da medição do tempo. Eu descobri que obtenho o mesmo resultado, mas com uma aceleração entre 7-12x (dependendo dos tamanhos das matrizes).

Então, a questão é se existem razões para usarcudaDeviceSynchronize além da medição do tempo.

Por exemplo:

É necessário antes de copiar os dados da GPU de volta para o host comcudaMemcpy?

Se eu fizer multiplicações de matriz como

C = A * B
D = C * F

devo colocarcudaDeviceSynchronize entre os dois?

Do meu experimento Parece que eu não sei.

PorquecudaDeviceSynchronize retardar o programa tanto?

questionAnswers(3)

yourAnswerToTheQuestion