Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_CUDA.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆
      1. Теоретическая часть Модель памяти cuda

Пожалуй, одной из наиболее важных для разработчиков особенностей CUDA является свободный доступ к памяти (поддержка scatter и gather операций) с возможностью побайтовой адресации.

В CUDA выделяют шесть типов памяти (см. табл.3.4):

  • Регистровая память – является самой быстрой из всех видов. Все регистры GPU 32- разрядные. В CUDA нет явных способов использования регистровой памяти, всю работу по размещению данных в регистрах берет на себя компилятор.

  • Глобальная память – основной тип памяти, имеющий самый большой объем и доступный для всех мультипроцессоров на видеочипе. Размер глобальной памяти напрямую зависит от модели видеокарты и варьируется от 256 Мбайт до 4 Гбайт. Обладает высокой пропускной способностью (более 100 Гбайт/с на последних решениях от NVIDIA), но работа с этим типом памяти сопряжена со значительными временными задержками (несколько сотен тактов). Глобальная память не кэшируется, поддерживает линейную адресацию и обычные указатели.

  • Локальная память – тип памяти, в которой по умолчанию размещаются все переменные, объявленные внутри CUDA-программы. Так же, как и глобальная память, она весьма медленная и не поддерживает кэширование.

  • Разделяемая память – это блок памяти, доступный на запись и чтение из всех потоковых процессоров в мультипроцессоре. По скорости этот тип памяти сравним с регистрами. Основное назначение разделяемой памяти – обеспечение взаимодействия между потоками. Также разделяемая память может быть использована в роли программируемого кэша, с помощью которого достигается снижение задержек при работе с глобальной памятью.

  • Константная память – область памяти, используемая для хранения константных значений программы. Этот тип памяти кэшируется. При отсутствии необходимых данных в кэше чтение из константной памяти осуществляется с задержками в несколько сотен тактов.

  • Текстурная память – блок памяти, доступный только на чтение всеми мультипроцессорами. Выборка из этого типа памяти происходит при помощи текстурных блоков видеочипа. За счет этого возможно выполнение линейной интерполяции без каких-либо дополнительных затрат. Данный тип памяти кэшируется.

Таблица 3.4.

Сравнительные характеристики разных типов памяти CUDA

Тип памяти

Доступ

Уровень выделения

Скорость работы

Регистры

чтение/запись

на поток

Высокая (on-chip)

Локальная

чтение/запись

на поток

Низкая (DRAM)

Разделяемая

чтение/запись

на блок

Высокая (on-chip)

Глобальная

чтение/запись

на сетку

Низкая (DRAM)

Константная

только чтение

на сетку

Высокая (L1 cache)

Текстурная

только чтение

на сетку

Высокая (L1 cache)

На рис. 3.5 изображена программная модель памяти видеокарты. На самом деле глобальная, локальная, текстурная и константная память представлены на чипе в виде локальной памяти видеокарты. Центральному процессору доступна лишь глобальная, константная и текстурная память.

При проектировании алгоритма для CUDA крайне важно помнить обо всех видах памяти и их особенностях.

Рис. 3.5. Программная модель памяти мультипроцессора