看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
loveme00835:至少簡化一下變成一個小範例吧? 如果你沒有辦法做到, 04/02 21:26
loveme00835:又怎麼有辦法結合得好? 04/02 21:26
abliou:版大說的是 我來試著簡化看看 04/02 21:43
youknowme09:cudaThreadSynchronize() 04/02 22:04
janyfor:回傳值? 不用先把計算結果複製回CPU嗎? 複製會使資料同步 04/03 00:17
abliou:我有試過回傳 但似乎沒有作用 04/03 06:46
soulgem:CPU 和 GPU RAM 是兩回事... (初學很容易中招) 04/03 10:16
soulgem:上面錯了w # 不過真的是需要 synchronize... 04/03 10:20
janyfor:是根據你上面的敘述, 認為你使用回傳取得結果 04/03 13:23
janyfor:但要取得計算結果需將結果複製回來 04/03 13:24
janyfor:複製的動作會使得 CPU 以及 GPU 同步 04/03 13:25
janyfor:CPU call GPU 應該也只能用 void 沒有回傳值(早期) 04/03 13:27
abliou:感謝樓上的先進提供的解決辦法 問題已經解決了 謝謝大家! 04/04 05:11
abliou:這趟下來功力增加不少 orz 04/04 05:14