wor*_*tor 2 parallel-processing cuda
我用这种方式创建了流:
cudaStream_t stream0;
cudaStream_t stream1;
cudaStreamCreate( &stream0);
cudaStreamCreate( &stream1);
Run Code Online (Sandbox Code Playgroud)
我运行像这样的内核函数
singlecore<<<1,1>>>(devL2,1000);
singlecore<<<1,1,0,stream0>>>(devL2,1000);
Run Code Online (Sandbox Code Playgroud)
目前没有执行这两个内核.但是如果我执行第一个内核stream1:
singlecore<<<1,1,0,stream1>>>(devL2,1000);
singlecore<<<1,1,0,stream0>>>(devL2,1000);
Run Code Online (Sandbox Code Playgroud)
他们将目前执行.
我想知道默认流中的内核函数当前是否无法执行.
是的,对发布到默认流的cuda命令有限制.参考关于隐式同步的C编程指南部分:
"如果主机线程在它们之间发出以下任何一个操作,则来自不同流的两个命令不能同时运行:...•对默认流的任何CUDA命令,"
因此,作为一般经验法则,对于重叠复制和计算操作,最简单的方法是在一组非默认流中编程所有此类操作.有一个漏洞(你已经发现),它可能与默认流(和其他流)中发出的命令重叠,但它需要仔细了解默认流和其他流之间的限制,以及仔细注意发出命令的顺序.C编程指南中解释了一个很好的例子.阅读"重叠行为"部分的所有内容.
在您的第一个示例中,发布到默认流的内核会阻止执行发送到其他流的内核.在第二个示例中,您可以具有并发性,因为发布到非默认流的内核不会阻止发出到默认流的内核的执行.
| 归档时间: |
|
| 查看次数: |
1722 次 |
| 最近记录: |