проблема с поиском минимального индекса массива в разделяемой памяти - PullRequest
0 голосов
/ 02 апреля 2019

Мне нужно найти минимальный индекс среди массива.это легко сделать, используя один поток, но я хочу уменьшить его, используя параллельные потоки.

Я сделал это, используя один поток (если 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

1 Ответ

1 голос
/ 02 апреля 2019

Я только что попытался переместить __syncthreads (); вне условия if, и это выглядит работающим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...