置頂
關於平行化的問題
原本程式碼的部分
每條thread中會產生一個值及它所在的xy坐標,分別存進result,bx,by
每組陣列有 x1*y1 筆資料
這三組陣列會被複製回host端
並在host端找result陣列中的最小值 以及對應的xy坐標
這部分已經可以順利執行找到所要的答案
但因其他需求
我想在device端就將result[ x1 * y1 ]的最小值找到
並存在result[0],bx[0],by[0]複製回host
但存在result[0]的結果 檢查後大部分是最小值
小部分不正確的值 不是最小值
但他會很接近最小值
__global__ static void test(略)
{
const int x =blockIdx.x;
const int y =threadIdx.x;
const int xid = blockDim.x;
中間過程code略過
result[y+xid*x]=cost;
bx[y+xid*x]=x;
by[y+xid*x]=y;
//以上是計算完 存好的資料
//下面是找最小值的過程,也是我有問題的地方
if(result[0]>cost )
{
result[0]=cost;
bx[0]=x;
by[0]=y;
}
else if(result[0]<cost && (bx[0]==0&&by[0]==0) && result[0]==0)
{
result[0]=cost;
bx[0]=x;
by[0]=y;
}
}
for(略)
{
for(略)
test<<<(x1),y1, sizeof(int) >>>(略)
}
up vote
0
race condition, you need atomicMin
會員登入
(先登入會員才能回覆留言喔!)