評價: 0 回應: 1 閱覽: 73
置頂

關於平行化的問題

原本程式碼的部分

每條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)  >>>(略)

}

 

熱門回應

race condition, you need atomicMin

會員登入 (先登入會員才能回覆留言喔!)

Facebook留言