作者blackwindy (黑色的风)
看板VideoCard
标题[请益] 关於CUDA程式码的问题...求救...
时间Thu Sep 17 22:48:04 2009
目标是做出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