2013-05-16 22 views
1

我需要創建一個數組,它有兩個參數:數組和它的大小。如何用一個線程反轉多塊中的數組?

我有這樣的功能:

__global__ void reverseArray(int *data, int size){ 

    int tid = blockIdx.x// Total blocks 

} 

我可如何扭轉陣列,這個功能呢?

回答

1

這取決於你的啓動參數,但你可以嘗試做

__global__ void reverseArray(int *data,int count){ 
    const int tid = threadIdx.x + blockIdx.x*blockDim.x; 
    if(tid < count/2) 
    { 
     const int new_tid = count - tid - 1; 
     int prev_valA = data[tid]; 
     int prev_valB = data[new_tid]; 

     data[new_tid] = prev_valA; 
     data[tid] = prev_valB; 
    } 
} 

我假設這是你的previous question的延續?

此外,請注意,這裏假設你只使用你的內核啓動參數x維

+0

因爲這個代碼發佈更新'數據[new_tid]'沒有考慮是否該元素已回升由正在使用它的線程更新相應的值,它將被打破。你可以通過讓每個線程在'data []'數組中更新*兩個*值來解決這個問題,並且相互交換(並且啓動約一半的線程)。 –

+0

@RobertCrovella好點,我會更新我的答案 – alrikai

相關問題