как использовать atomicMin () в CUDA / C

#c #cuda #gpu #shared-memory #atomic

#c #cuda #графический процессор #атомарный #gpu-разделяемая память

Вопрос:

Я пытался использовать atomicMin функцию в CUDA / C с использованием общей памяти, вывод всегда выполняется 0 независимо от данных, которые я ввожу. Кто-нибудь может помочь мне исправить это, если есть какая-то ошибка в синтаксисе или моем использовании указателей, или, возможно, я неправильно использую функцию.

Вот код:

 __global__ void npd(int *a, int *g)         
{   
    int index = threadIdx.x;

    __shared__ int d[N];

    d[threadIdx.x]=a[index];        

    __syncthreads();        

    int dd;
    int inn;
    int u;

    if( 0==threadIdx.x )
    { 
        for( int u = 0; u<16; u   )
        {
            atomicMin( g, d ) ;     
        }
    }
}
  

Комментарии:

1. Вы должны либо использовать atomicMin , либо выполнить все вычисления в потоке 0. Во втором случае вы можете просто вычислить минимум локально.

Ответ №1:

Как описано в документации, вторым вводом в функцию должно быть значение, а не указатель.

Вы не дали никакого описания того, что делает ваша функция, поэтому я не могу помочь это исправить, но что-то вроде

 atomicMin( g, d[0]) ;
  

будет компилироваться, скорее всего, не делая того, к чему вы стремитесь здесь.

Примечание: Всегда публикуйте полные компилируемые примеры. И попытайтесь привести в порядок свой код. Существует двойное определение u и переменная index объявлена, но никогда не использовалась.

Комментарии:

1. Ты имеешь в виду d[u] ?

2. @Sebastian можно было бы догадаться, но трудно понять, чего хотел OP 3 года назад.