Сколько циклов задержки памяти на тип доступа к памяти в OpenCL / CUDA?
Вопрос
Я просмотрел руководство по программированию и руководство по лучшим практикам, и он упомянул, что доступ к глобальному памяти занимает 400-600 циклов. Я мало что видел в других типах памяти, таких как кэш текстуры, постоянный кеш, общая память. Регистры имеют 0 задержку памяти.
Я думаю, что постоянный кеш такой же, как регистры, если все потоки используют один и тот же адрес в постоянном кеше. Худший случай, я не так уверен.
Общая память такая же, как регистры до тех пор, пока нет никаких банковских конфликтов? Если есть, то как задержка разворачивается?
Как насчет кэша текстуры?
Решение
Задержка для совместных / постоянных / текстурных воспоминаний мало и зависит от того, какое у вас устройство. В целом, хотя GPU рассчитаны как архитектура пропускной способности, что означает, что, создавая достаточное количество нитей, задержка воспоминаниям, включая глобальную память, скрыта.
Причина, по которой руководства говорят о задержем к глобальной памяти, заключается в том, что задержка наступает порядки выше, чем у других воспоминаний, что означает, что доминирующая задержка будет рассмотрена для оптимизации.
Вы указали постоянный кеш в частности. Вы совершенно исправляетесь, что если все темы в пределах WARP (т. Е. Группа 32 потоков) доступа к тому же адресу, то нет штрафа, т. Е. Значение читается из кэша и передает всеми потоками одновременно. Однако, если потоки доступа к разным адресам, то доступ должен сериализация
Общая память, в отличие от постоянного кэша, может обеспечить гораздо более высокую пропускную способность. Проверьте Оптимизация CUDA Разговор для более подробной информации и объяснение банковских конфликтов и их влияния.
Другие советы
Для (Кеплера) Tesla K20 Задержки следующие:
Глобальная память: 440 часов
Постоянная память
L1: 48 часов
L2: 120 часов
Общая память: 48 часов
Текстура памяти
L1: 108 часов
L2: 240 часов
Откуда я знаю? Я пробежал микробенчкенки, описанные авторами Демсистифицирующая микроархитектура GPU через Microbenchmanking. Отказ Они обеспечивают аналогичные результаты для более старых GTX 280.
Это было измерено на кластере Linux, вычислительном узле, где я запускал тесты, не использовался ни какими другими пользователями или запускали какие -либо другие процессы. Это Bullx Linux с парой 8 -сердечных Xeons и 64 ГБ оперативной памяти, NVCC 6.5.12. Я изменил sm_20
к sm_35
для компиляции.
Есть также Стоимость операндов Глава в PTX ISA, хотя это не очень полезно, он просто повторяет то, что вы уже ожидаете, не давая точных цифр.