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?