Расчеты гистограммы в cuda - PullRequest
       3

Расчеты гистограммы в cuda

0 голосов
/ 11 сентября 2011

Код не работает.Но когда я комментирую atomicAdd в следующем коде, код работает.

В чем причина?
Где я могу получить код гистограммы для массива с плавающей запятой?

   __global__ void calculateHistogram(float *devD, int* retHis)
   {
      int globalLi = getCurrentThread(); //get the thread ID
      if(globalLi>=0 && globalLi<Rd*Cd*Dd)
      {
          int r=0,c=0,d=0;
          GetInd2Sub(globalLi, Rd, Cd, r, c, d); //some calculations to get r,c,d
          if(r>=stYd && r<edYd && c>=stXd && c<edXd && d>=stZd && d<edZd)
          {
            //calculate the histogram
            int indexInHis = GetBinNo(devD[globalLi]);  //get the bin number in the histogram
            atomicAdd(&retHis[indexInHis],1); //when I comment this line the code works
          }
       }
    }

1 Ответ

3 голосов
/ 12 сентября 2011

Взгляните на главу 9 CUDA на примере Джейсона Сандерса и Эдварда Кандрот.Он охватывает атомику и проходит простой пример вычисления гистограмм 8-битных целых чисел.Первая версия использует атомарное добавление для каждого значения, которое работает, но очень медленно.Уточненная версия примера вычисляет гистограмму для каждого блока в совместно используемой памяти, а затем объединяет все гистограммы вместе в глобальную память для получения окончательного результата.Ваш код похож на первую версию, и после того, как вы его заработаете, вам захочется сделать его более быстрым, улучшенным.

Вы можете скачать примеры из книги, чтобы увидеть обе версии: CUDA отПримеры загрузок

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

  • Вам необходимо скомпилировать с архитектурой, которая поддерживает атомарность (т. Е. Больше, чем цель архитектуры 1.0 по умолчанию)
  • Пределы индексации и индексации выглядят несколько сложными, яперепроверил бы эти
  • Ваш расчет бина мог бы дать номера бина вне допустимого диапазона для retHis, я бы добавил несколько проверок перед использованием возвращаемого значения, по крайней мере для отладки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...