2011-04-04 98 views
1

有没有人在Cuda4上成功测试过这个功能?看来我无法正确地工作,不确定它是否是我的代码中的错误,或者功能尚未完全实现。Cuda 4 GPU间同步

例如,我想在从1 gpu将内存复制到另一个内存后执行内核调用。流0,mem0在gpu0流1上创建,mem1在gpu1上创建。两者都是费米特斯拉(C2070)

cudaMemcpyAsync(mem1, mem0, size, cudaMemcpyDefault, stream0); 
cudaEventRecord(P2Pevent, stream0); 

cudaStreamWaitEvent(stream1, P2Pevent, 0); 
cudaKernel<<<block,thread,0,stream1>>>(mem1); 

有时似乎内存还没有准备好内核,所以结果是不正确的。如果我在Gpu0上添加cudaDeviceSynchronize,那么它工作正常。

谢谢

+0

你需要使用cudaMemcpyPeerAsync做直接的GPU间内存拷贝。而且这两款GPU都必须支持对等访问,目前只有Fermi Telsa卡支持这种访问。 – talonmies 2011-04-04 15:09:03

+0

@talonmies我之前启用了PeerAccess,因此我可以直接使用cudaMemcpyAsync。所以复制正在工作,只是我无法在其他GPU上同步。 (正如我所说的他们都是费米卡) – w00d 2011-04-04 15:11:18

+0

您正在stream1上等待P2Pevent,但您已将其记录在stream0上。这是一个错字吗? – LumpN 2011-04-04 15:54:43

回答

0

这是我的代码中的错误!它确实工作 谢谢你们