Contract_Free_offset Macro, используемый в алгоритме Parallel Prefix от GPU GEMS 3

StackOverflow https://stackoverflow.com//questions/9689185

  •  13-12-2019
  •  | 
  •  

Вопрос

Прежде всего, вот ссылка на алгоритм:

GPU GEMS 3, глава 39: Parallel Prefix Sum (Scan) с CUDA .

Во избежание банковских конфликтов прокладка добавляется к совместному массиву памяти каждый NUM_BANKS (I.E., 32 для устройств вычислимости 2.x) элементов.Это делается (как на рисунке 39-5):

int ai = offset*(2*thid+1)-1
int bi = offset*(2*thid+2)-1
ai += ai/NUM_BANKS
bi += ai/NUM_BANKS
temp[bi] += temp[ai]
.

Я не понимаю, как ai / num_banks эквивалентно макросу:

   #define NUM_BANKS 16  
   #define LOG_NUM_BANKS 4  
   #define CONFLICT_FREE_OFFSET(n) \  
          ((n) >> NUM_BANKS + (n) >> (2 * LOG_NUM_BANKS))  
.

Разве это не равно

n >> LOG_NUM_BANKS
.

Любая помощь ценится.Спасибо

Это было полезно?

Решение

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

Если вы хотите сканировать простой способ, используйте thrust::inclusive_scan или thrust::exclusive_scan .

Если вы действительно хотите реализовать сканирование, обратитесь к более поздним статьям, таким как этот, такой, как этот один [1] Или для настоящего опуса с более быстрым кодом, но это потребует немного большего изучения, это один [2] Или прочитайте Учебное пособие Sean Baxter (хотя последний не включает цитаты семенных работ на алгоритме сканирования).

[1] Шубхабрата Сенюпта, Марк Харрис, Майкл Гирлянда и Джон Д. Оуэнс. «Эффективные алгоритмы параллельного сканирования для многих ядра GPU». В Jakub Курзак, Дэвид А. Баберу и Джек Донгарре, редакторы, научные вычисления с многокрасочными и ускорителями, CHAPMAN & HALL / CRC Вычислительная наука, глава 19, стр. 413-442. Taylor & Francis, январь 2011 года. http://www.idav.ucdavis.edu/publications/print_pub?pub_id= 1041

[2] Merrill, D. и Grimshaw, A. Параллельное сканирование для архитектуры потока. Технический отчет CS2009-14, Департамент информатики, Университет Вирджинии. Декабрь 2009 г.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top