Является ли локальная память медленнее, чем разделяемая в CUDA?
Я нашел только замечание, что локальная память медленнее, чем память регистров, типа два на поток.
Общая память должна быть быстрой, но быстрее ли она, чем локальная [потока]?
То, что я хочу сделать, это своего рода медианный фильтр, но с заданным процентилем вместо медианы. Таким образом, мне нужно взять кусочки из списка, отсортировать их, а затем выбрать подходящий. Но я не могу начать сортировку списка общей памяти, или что-то идет не так. Потеряю ли я производительность при копировании в локальную память?
1 ответ
Локальная память - это просто поток локальной глобальной памяти. Это намного, намного медленнее (как с точки зрения пропускной способности, так и с точки зрения задержки), чем регистры или разделяемая память. Он также использует пропускную способность контроллера памяти, которая в противном случае была бы доступна для глобальных транзакций памяти. Влияние на производительность разлива или преднамеренного использования локальной памяти может быть как незначительным, так и серьезным, в зависимости от используемого оборудования и использования локальной памяти.
Согласно исследованиям Василия Волкова - см. " Повышение производительности при меньшей загруженности" ( pdf) - существует примерно 8-кратная разница в эффективной пропускной способности между разделяемой памятью и регистром на графических процессорах Fermi (около 1000 Гбит / с для разделяемой памяти и 8000 Гбит / с. для регистров). Это несколько противоречит документации CUDA, из которой следует, что общая память сопоставима по скорости с регистрами.