Я пытался разработать небольшую программу 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
}
Несмотря на то, что есть встроенные функции, я просто занимаюсь небольшими проблемами.