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