Урок 13: Иерархия памяти
У GPU есть несколько видов памяти, которые различаются по скорости, области видимости (scope) и времени жизни. Registers — самая быстрая память: каждая простая локальная переменная в kernel живёт в регистре, она приватна для одного thread и существует только пока thread выполняется. Shared memory, о
Представь кухню: registers — это твои руки: самые быстрые, но только твои и лишь на мгновение. Shared memory — это общий рабочий стол одной команды на кухне: быстрый и доступный всей команде, но не команде на другой кухне. Global memory — это гигантский холодильник на складе: огромный и обслуживающий всех, но идти до него медленно. Constant memory — это доска с рецептом на стене, которую все читают, но никто не меняет.
- registers
- Самая быстрая память, приватная для одного thread. Каждая простая локальная переменная в kernel живёт здесь и существует только пока thread выполняется.
- shared memory
- Память on-chip, объявляемая через __shared__, разделяемая всеми threads одного block. Намного быстрее global, но не выходит за пределы blocks.
- global memory
- DRAM устройства (device): большая, медленная, доступная всему grid и сохраняющаяся между запусками. Сюда копируют данные с host.
- constant memory
- Память только для чтения (read-only), объявляемая через __constant__ и кэшируемая. Отлично подходит, когда все threads читают одно и то же значение.