как использовать atomicMin () в CUDA / C ++ - PullRequest
0 голосов
/ 14 марта 2019

Я пытался использовать функцию 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 Ответ

1 голос
/ 14 марта 2019

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

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

atomicMin( g, d[0]) ;

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

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

...