1
考慮兩個代碼片段。cudaMemcpy()調用流
Snippet1
cudaStream_t stream1, stream2 ;
cudaStreamCreate(&stream1);
cudaStreamCreate(&stream2);
cudaMemcpyAsync(dst, src, size, dir, stream1);
kernel<<<grid, block, 0, stream2>>>(...);
Snippet2
cudaStreamCreate(&stream1);
cudaStreamCreate(&stream2);
cudaMemcpy(dst, src, size, dir, stream1);
kernel<<<grid, block, 0, stream2>>>(...);
在這兩個片段,我發出的memcpy調用(snippet1異步和snippet2同步)
由於命令已經發出兩種不同的數據流,從我的理解可能有兩種情況可能重疊。
但是在Snippet2中,cudaMemcpy調用是同步的(又名阻塞)會導致我一個似是而非的結論,即cudaMemcpy和內核調用會一個接一個地執行。
哪一個纔是正確的結論?
要更簡潔地重新表述:當我們向流發出cudaMemcpy調用時,它會阻止「完整代碼」還是阻止它發出的流?
第二個代碼片段無效。 'cudaMemcpy'不能接受流號碼作爲參數,它總是在默認流中提交。 – talonmies 2012-08-16 13:09:09