Я написал этот код и соавтор статьи, и я прошу, чтобы вы использовали эту статью только для изучения алгоритмов сканирования и не использовали код в ней.Это было написано, когда CUDA была новой, и я был новичком в CUDA.Если вы используете современную реализацию сканирования в CUDA, вам не нужно избегать банковских конфликтов.
Если вы хотите выполнять сканирование простым способом, используйте thrust::inclusive_scan
или thrust::exclusive_scan
.
Если вы действительно хотите реализовать сканирование, обратитесь к более поздним статьям, таким как эта [1] .Или для настоящего опуса с более быстрым кодом, но для этого потребуется немного больше изучения, этот [2] .Или прочитайте учебное пособие Шона Бакстера (хотя последнее не содержит ссылок на основополагающую работу по алгоритму сканирования).
[1] Шубхабрата Сенгупта, Марк Харрис, Майкл Гарланд и ДжонД. Оуэнс.«Эффективные алгоритмы параллельного сканирования для многоядерных графических процессоров».В Jakub Kurzak, David A. Bader и Jack Dongarra, редакторы, Scientific Computing with Multicore и Accelerators, Chapman & Hall / CRC Computational Science, глава 19, страницы 413–442.Тейлор и Фрэнсис, январь 2011 г. http://www.idav.ucdavis.edu/publications/print_pub?pub_id=1041
[2] Меррилл Д. и Гримшоу А. Параллельное сканирование для потоковых архитектур.Технический отчет CS2009-14, факультет компьютерных наук, Университет Вирджинии.Декабрь 2009 г.