__global__ void helloCUDA(float f)
{
printf("Hello thread %d, f=%f\n", threadIdx.x, f);
}
int main()
{
helloCUDA<<<1, 5>>>(1.2345f);
cudaDeviceSynchronize();
return 0;
}
Perché cudaDeviceSynchronize(); in molti posti, ad esempio here, non è necessario dopo la chiamata del kernel?perché abbiamo bisogno di cudaDeviceSynchronize(); nei kernel con device-printf?
ma se vedi il link che ho postato, immediatamente dopo la chiamata kernal stiamo chiamando cudamemcpy (.... device to host). perché non abbiamo cudadevicesynchronize() qui? – gpuguy
Poiché le operazioni CUDA (chiamate API, chiamate kernel) rilasciate allo stesso flusso, anche se asincrone, sono garantite per l'esecuzione in serie. Quindi, dato che il kernel e l'operazione cudaMecpy sono nello stesso flusso (predefinito), è possibile che cudaMemcpy non inizi finché il kernel non è completato, anche se l'avvio del kernel è asincrono (rispetto al thread host). –