cuda流,两个内核具有相同的输入

时间:2014-05-23 13:42:23

标签: cuda

我想在我的代码中使用流,这是我第一次使用它们。

我有2个内核可以同时运行,因为它们可以完成不同的工作。

但是,他们采取相同的输入。如果他们可以在输入的不同部分工作,我可以使用一些偏移,但现在?

int nStreams = 2;

for (int i=0;i<nStreams;i++)  {

cudaMemcpyAsync( devInput, hostInput, streamBytes , cudaMemcpyHostToDevice , stream[i] );

Kernel1<<<...,0,stream[i]>>>(devInput, devC);
Kernel2<<<...,0,stream[i+1]>>>(devInput , devR);

}

问题在于这一行:

cudaMemcpyAsync( devInput, hostInput, streamBytes , cudaMemcpyHostToDevice , stream[i] );

如何在两个内核中使用相同的数组?

我想复制它们(hostInput,devInput)并相应地使用,但我不确定它是否是另一种方法。

1 个答案:

答案 0 :(得分:2)

您可以在cudaMemcpyAsync行之后添加stream sync point

cudaMemcpyAsync( devInput, hostInput, streamBytes , cudaMemcpyHostToDevice , stream1 );
cudaStreamSynchronize(stream1);

Kernel1<<<...,0,stream1>>>(devInput, devC);
Kernel2<<<...,0,stream2>>>(devInput, devR);

现在,在cudaMemcpyAsync操作完成之前,内核保证不会启动,然后它们将有效访问相同的devInput数据。