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