[請益] 關於CUDA程式碼的問題...求救...

看板VideoCard (顯卡板)作者 (黑色的風)時間16年前 (2009/09/17 22:48), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
目標是做出N長度的數字串,亂數排序且不重複 已經有成功做出亂數表跟正常排序的數字串了 舉個例子來說,現在是希望將 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 上面這3條字串亂數排序變成 2 1 5 4 3 5 4 1 3 2 4 2 5 1 3 參考了a5000ml大大的泡泡排序寫出下面的CODE,希望做出亂數排序的效果 演算法的差別主要是在於判別swap的機率為取亂數表決定(50%機率交換) for(int i = blockIdx.x; i < string_number; i += gridDim.x) for(int loop=0; loop <= lenth/2; loop++) for(int j = threadIdx.x, k = 2 * threadIdx.x; j < lenth ; j += blockDim.x){ //0 based 配對資料 (0,1) (2,3) (4,5) .... //3維度randtable取值判別 if(randtable[loop * i * lenth + i * lenth + j] % 2 == 0) swap(string[i * lenth + k],string[i * lenth + k + 1]); //1 based 配對資料 (1,2) (3,4) (5,6) .... //3維度randtable取值與判別 if(randtable[loop * i * lenth + i * lenth + j] % 2 == 0) if(k < lenth-2) //若 N 為偶數時, 最後一個執行緒不作用 swap(string[i * lenth + k + 1],string[i * lenth + k + 2]); } 由於都是用1維度模擬所以陣列取值裡面的數值挺長的... 現在問題是不知道為什麼執行完以後裡面的數值會出現重複的情況 例如 1 1 5 3 2 看起來應該沒有race condition的情況才對... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.222.76 blackwindy:轉錄至看板 C_and_CPP 09/17 23:43
文章代碼(AID): #1AiambPa (VideoCard)
文章代碼(AID): #1AiambPa (VideoCard)