Предотвращает ли чтение массива int из разделяемой памяти конфликты банков?

Я разрабатываю ядро ​​CUDA, которое будет запускаться с 16 потоками на блок потоков. У меня есть массив N int в общей памяти (т.е. на блок потока), который я хочу обработать.

Если шаблон доступа потоков является последовательным в массиве, означает ли это, что конфликтов банков не будет? Я понимаю, что если бы массив был массивом char, были бы конфликты банков, но я не совсем уверен, что произойдет, если это массив int. Я предполагаю, что будут конфликты банков, потому что каждый набор из 4 последовательных целых чисел использует один и тот же банк памяти?

Если это так, то какое правильное решение для предотвращения банковских конфликтов? Скремблирование адресов, как в образце гистограммы?


person twerdster    schedule 08.06.2012    source источник


Ответы (1)


Для устройств с вычислительной мощностью >= 2.0 общая память организована в 32-битные слова, которые чередуются. Таким образом, если каждый поток в варпе (варп состоит из 32 потоков) обращается к последовательным 32-битным словам, конфликтов банков не будет. Кроме того, разные потоки могут обращаться к одному и тому же 32-битному значению, не вызывая конфликтов банков. Это означает, что также не будет никаких конфликтов банков, если все потоки будут читать последовательные значения из массива символов.

Конфликты банков на самом деле вызваны только двумя или более потоками, обращающимися к разным 32-битным словам, расстояние между которыми кратно 32 адресам.

Ответ на этот вопрос может отличаться для других вычислительных возможностей — я не проверял.

Обратите внимание, что 16 потоков на блок — это очень мало. Я не думаю, что при таком малом размере блока вы сможете улучшить производительность графического процессора по сравнению с процессором (если только это не является лишь небольшой частью общей рабочей нагрузки, а данные уже находятся в памяти графического процессора).

person Roger Dahl    schedule 08.06.2012
comment
Это хорошо объясняет. И да, это только малая часть нагрузки и память уже на GPU. - person twerdster; 08.06.2012