我試圖開發一個小CUDA程序找指定的數組中的最大值,CUDA找到最大值在給定的數組
int input_data[0...50] = 1,2,3,4,5....,50
max_value
由input_data[0]
, 最終的答案的第一個值初始化存儲在result[0]
。 內核給出0作爲最大值。我不知道問題是什麼。 我執行1塊50線程。
__device__ int lock=0;
__global__ void max(float *input_data,float *result)
{
float max_value = input_data[0];
int tid = threadIdx.x;
if(input_data[tid] > max_value)
{
do{} while(atomicCAS(&lock,0,1));
max_value=input_data[tid];
__threadfence();
lock=0;
}
__syncthreads();
result[0]=max_value; //Final result of max value
}
即使有內置功能,只是我正在練習小問題。
好的。即使需要很長時間來執行我也不會回答。如果每個花紋獲得其鎖定,則必須更新max_value,但不更新。如何解決 – kar 2011-03-11 08:07:59
你可以使用atomicMax。由於我已經解釋過的原因,你現在所做的關鍵部分顯然不會工作。 – CygnusX1 2011-03-11 15:11:59