На этом шаге мы рассмотрим иерархию памяти.
Одним из серьезных отличий между GPU и CPU являются организация памяти и работа с ней. Обычно большую часть CPU занимают кэши различных уровней. Основная часть GPU отведена на вычисления. Как следствие, в отличие от CPU, где есть всего один тип памяти с несколькими уровнями кэширования в самом CPU, GPU обладает более сложной, но в то же время гораздо более документированной структурой памяти.
Чисто физически память GPU можно разделить на DRAM и на память, размещенную непосредственно на GPU (точнее, в потоковых мультипроцессорах). Однако классификацией памяти в CUDA не ограничивается ее чисто физическим размещением. В таблице 1 приводятся доступные виды памяти в CUDA и их основные характеристики.
Тип памяти | Расположение | Кэшируется | Доступ | Уровень доступа | Время жизни |
---|---|---|---|---|---|
Регистры | Мультипроцессор | Нет | R/w | Per-thread | Нить |
Локальная | DRAM | Нет | R/w | Per-thread | Нить |
Разделяемая | Мультипроцессор | Нет | R/w | Все нити блока | Блок |
Глобальная | DRAM | Нет | R/w | Все нити и CPU | Выделяется CPU |
Константная | DRAM | Да | R/o | Все нити и CPU | Выделяется CPU |
Текстурная | DRAM | Да | R/o | Все нити и CPU | Выделяется CPU |
Как видно из приведенной таблицы, часть памяти расположена непосредственно в каждом из потоковых мультипроцессоров (регистры и разделяемая память), часть памяти размещена в DRAM (Dynamic Random Access Memory).
На следующем шаге мы рассмотрим иерархию памяти в CUDA.