Мне нужно найти минимальный индекс среди массива.это легко сделать, используя один поток, но я хочу уменьшить его, используя параллельные потоки.
Я сделал это, используя один поток (если threadIDx.x == 1) ....... и он работает нормально.но выполнение этого параллельно увеличит эффективность, которую я ищу.
Я написал этот код, и он выглядит логичным для меня.но когда я отлаживаю, он не выбирает минимальное значение вообще!
Код:
#define MIN(x,y) ((x < y) ? x : y)
#define MIN_IDX(x,y, idx_x, idx_y) ((x < y) ? idx_x : idx_y)
....
....
__shared__ int costs[nt];
__shared__ int bstids[nt];
int myM = 9999999;
int mtMId;
for (int s = nt/2 ; s >= 1 ; s/=2) {
if (threadIdx.x < s) {
myM = MIN(costs[threadIdx.x], costs[threadIdx.x+s]);
costs[threadIdx.x] = myM;
mtMId = MIN_IDX(costs[threadIdx.x], costs[threadIdx.x+s],bstids[threadIdx.x], bstids[threadIdx.x+s]);
bstids[threadIdx.x] = mtMId;
__syncthreads();
}
}
nt - это число потоков и его степень 2