1
我需要創建一個數組,它有兩個參數:數組和它的大小。如何用一個線程反轉多塊中的數組?
我有這樣的功能:
__global__ void reverseArray(int *data, int size){
int tid = blockIdx.x// Total blocks
}
我可如何扭轉陣列,這個功能呢?
我需要創建一個數組,它有兩個參數:數組和它的大小。如何用一個線程反轉多塊中的數組?
我有這樣的功能:
__global__ void reverseArray(int *data, int size){
int tid = blockIdx.x// Total blocks
}
我可如何扭轉陣列,這個功能呢?
這取決於你的啓動參數,但你可以嘗試做
__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維
因爲這個代碼發佈更新'數據[new_tid]'沒有考慮是否該元素已回升由正在使用它的線程更新相應的值,它將被打破。你可以通過讓每個線程在'data []'數組中更新*兩個*值來解決這個問題,並且相互交換(並且啓動約一半的線程)。 –
@RobertCrovella好點,我會更新我的答案 – alrikai