Сколько циклов задержки памяти на тип доступа к памяти в OpenCL / CUDA?

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

Вопрос

Я просмотрел руководство по программированию и руководство по лучшим практикам, и он упомянул, что доступ к глобальному памяти занимает 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, хотя это не очень полезно, он просто повторяет то, что вы уже ожидаете, не давая точных цифр.

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