[問題] cuda運算時主程式暫停等cuda算完

看板C_and_CPP (C/C++)作者 (把青春freeze)時間15年前 (2011/04/02 21:22), 編輯推噓1(1013)
留言14則, 5人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux + GCC (nvcc) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) cublas 問題(Question): 各位先進大家好 我是c的新手 最近在modify一個程式 是把一個現成的cublas程式跟一個現成的c++程式要結合在一起 這程式中有使用到全域變數 然後對這一個全域變數做修改後放到cublas中去跑 結構大概就是這樣(不是很會表達...) global variants[] global *i strcut i { int score int array[] } for( i in variants[]) do sent i into Cublas done (原諒我表達很爛 orz) 這個cublas會運算完後直接對i的score成員做更改 也就Culas傳回的分數會存在i的score中 不過後來有發現到 當進入迴圈後 i一丟到culas中 主程式似乎就直接進入到下一個迴圈 所以i在score還沒有被運算以前 那個array就被改掉 不知道先進們有沒有甚麼辦法可以讓程式在運算cublas時停下來 等到culas確實運算完後再進行迴圈的下一步 這問題卡了好久 希望厲害的先進們可以給小弟一些指點 感激不盡 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 對不起 因為還沒經過老闆同意 不敢把實驗室的程式碼貼出來 我只是負責結合 原始碼的擁有者不是我 所以沒辦法做主擅自貼出來 真的很抱歉 補充說明(Supplement): -- 如果青春注定要向前跑 他媽的...那我的出口在那? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.70.124.55

04/02 21:26, , 1F
至少簡化一下變成一個小範例吧? 如果你沒有辦法做到,
04/02 21:26, 1F

04/02 21:26, , 2F
又怎麼有辦法結合得好?
04/02 21:26, 2F

04/02 21:43, , 3F
版大說的是 我來試著簡化看看
04/02 21:43, 3F

04/02 22:04, , 4F
cudaThreadSynchronize()
04/02 22:04, 4F

04/03 00:17, , 5F
回傳值? 不用先把計算結果複製回CPU嗎? 複製會使資料同步
04/03 00:17, 5F

04/03 06:46, , 6F
我有試過回傳 但似乎沒有作用
04/03 06:46, 6F

04/03 10:16, , 7F
CPU 和 GPU RAM 是兩回事... (初學很容易中招)
04/03 10:16, 7F

04/03 10:20, , 8F
上面錯了w # 不過真的是需要 synchronize...
04/03 10:20, 8F

04/03 13:23, , 9F
是根據你上面的敘述, 認為你使用回傳取得結果
04/03 13:23, 9F

04/03 13:24, , 10F
但要取得計算結果需將結果複製回來
04/03 13:24, 10F

04/03 13:25, , 11F
複製的動作會使得 CPU 以及 GPU 同步
04/03 13:25, 11F

04/03 13:27, , 12F
CPU call GPU 應該也只能用 void 沒有回傳值(早期)
04/03 13:27, 12F

04/04 05:11, , 13F
感謝樓上的先進提供的解決辦法 問題已經解決了 謝謝大家!
04/04 05:11, 13F

04/04 05:14, , 14F
這趟下來功力增加不少 orz
04/04 05:14, 14F
文章代碼(AID): #1DboCLXO (C_and_CPP)
文章代碼(AID): #1DboCLXO (C_and_CPP)