2011-04-04 129 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

這是我的代碼中的錯誤!它確實工作 謝謝你們