Я пытаюсь реализовать сокращение в 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];
}
}
О, спасибо большое, я не знал о некоторых из этого специфического поведения cuda ... Я попытаюсь переопределить это. Спасибо! –