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,那么它工作正常。
谢谢
你需要使用cudaMemcpyPeerAsync做直接的GPU间内存拷贝。而且这两款GPU都必须支持对等访问,目前只有Fermi Telsa卡支持这种访问。 – talonmies 2011-04-04 15:09:03
@talonmies我之前启用了PeerAccess,因此我可以直接使用cudaMemcpyAsync。所以复制正在工作,只是我无法在其他GPU上同步。 (正如我所说的他们都是费米卡) – w00d 2011-04-04 15:11:18
您正在stream1上等待P2Pevent,但您已将其记录在stream0上。这是一个错字吗? – LumpN 2011-04-04 15:54:43