[疑問]關於kernel函數啟動以及cudaMemcpy的問題

請問一下
在cuda中
kernel函數的啟動總是異步的
那有個問題
如果像是下面的方法

kernel_run<<<10,10>>>(dev_data, global_return);
cudaMemcpy(host_return, global_return, xxx, cudaMemcpyDeviceToHost);

因為kernel_run是異步的
所以調用之後會馬上返回CPU端執行cudaMemcpy

那問題來了
會不會在kernel_run還沒執行完就將資料copy回來了?

還是說對於gpu來說同步的cudaMemcpy會等kernel_run結束才執行記憶體複製的動作?

会等gpu执行完之后,再传输。

cudaMemcpy在执行前会检查第三个参数的类型,然后再判断两边是否都准备好数据,再执行数据传输。这是我调试过程理解的。

請問有沒有官方的文檔有解釋呢?
我還是有點問題
為什麼是第三個參數而不是第四個?~~!!