Урок 16: Основы shared-памяти
Shared-память — это небольшая быстрая память, расположенная на кристалле SM и служащая блокнотом для всех потоков одного block'а. Вы объявляете её ключевым словом __shared__, например __shared__ float tile[256];, и она примерно в 100 раз быстрее глобальной памяти — но маленькая (десятки КБ на block,
Глобальная память — это огромный, далёкий склад. Shared-память — это маленький ящик рядом со столом команды: вы приносите со склада один раз, кладёте в ящик, и вся команда быстро берёт оттуда. Каждая команда (block) получает свой отдельный ящик.
- shared-память (shared memory)
- Быстрая память на кристалле, разделяемая всеми потоками одного block'а, объявляется через __shared__. Намного быстрее глобальной, но маленькая.
- блокнот (scratchpad)
- Временное рабочее пространство, где block хранит данные, читаемые снова и снова, чтобы не обращаться каждый раз к медленной глобальной памяти.
- область видимости block'а (block scope)
- Область видимости shared-памяти: только для block'а, который её создал, и только пока этот block выполняется. Другие block'и её не видят.
- повторное использование данных (data reuse)
- Когда одно и то же значение нужно много раз. Тогда выгодно загрузить его один раз в shared-память и читать оттуда дёшево.