배열의 최대 요소를 찾을 수있는 cuda를 구현하려고합니다. 이 커널을 사용하여 최소값을 찾았지만 작동하지만 최대 값을 찾으려고하면 작동하지 않습니다. 반복적으로 알고리즘을 밟았으므로 버그를 찾을 수 없습니다. 어떤 도움이라도 정말로 감사 할 것입니다. 코드 몇 가지 문제가 있습니다CUDA의 축소 구현 관련 문제
__global__
void findMaxAndMin(const float* const d_logLuminance, float* reduceCopy, int length, float* min_logLum, float* max_logLum){
int idx = threadIdx.x + blockDim.x*blockIdx.x;
if(idx >= length){
return;
}
reduceCopy[idx] = d_logLuminance[idx];
__syncthreads();
//do a reduction with max
for(int offset = 1;offset < length;offset = offset*2){
if(idx % (offset*2) == 0){
int compIdx = idx + offset;
if(compIdx < length){
float newVal = a_max(reduceCopy[idx], reduceCopy[compIdx]);
if(idx == 0){
//printf("val %f \n", newVal);
}
__syncthreads();
reduceCopy[idx] = newVal;
__syncthreads();
}
}
__syncthreads();
}
__syncthreads();
if(idx == 0){
*max_logLum = reduceCopy[0];
}
}
오, 정말 고마워,이 쿠다의 특정 동작에 대해 알지 못했지만 ... 이것을 다시 구현하려고합니다. 고맙습니다! –