#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 года назад.