Трафареты и скользящие окна
Разбивайте соседние области на фрагменты с граничными ячейками.
«Трафареты и скользящие окна» — бесплатный урок CUDA Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.
Что такое stencil
Stencil вычисляет каждый выходной элемент по фиксированному окружению входных данных, например усредняя пиксель с соседними ячейками.
Скользящее окно
При перемещении вдоль массива окно входных данных сдвигается на один элемент. Соседние выходные элементы используют большую часть одних и тех же входных данных, поэтому повторное использование очень эффективно.
Идеальный случай для тайлинга
Поскольку соседние области перекрываются, однажды загруженный тайл обслуживает множество выходных элементов. Stencil — классический пример эффективности тайлинга.
Знакомство с ореолом
Чтобы вычислить края тайла, нужны ещё несколько элементов непосредственно за его пределами. Эти дополнительные пограничные ячейки называются ореолом.
Зачем нужен ореол
Первому потоку тайла нужен левый сосед, принадлежащий предыдущему тайлу. Без ячеек ореола это чтение будет неверным.
Размер ореола
Для stencil с радиусом r загрузите по r дополнительных ячеек с каждой стороны. Размытие по 3 точкам имеет радиус 1, поэтому с каждой стороны достаточно одной ячейки ореола.
Тайл с дополнением
Объявите разделяемую память размером blockDim плюс 2 * radius, чтобы в одном аккуратном буфере помещались внутренняя часть и оба ореола.
__shared__ float tile[BLOCK + 2 * RADIUS];Загрузка внутренней части
Сначала каждый поток загружает свой элемент в тайл со смещением radius, оставляя место впереди для левого ореола.
tile[threadIdx.x + RADIUS] = in[gid];Загрузка ореолов
Первые несколько потоков выполняют двойную работу: дополнительно загружают левую и правую ячейки ореола до синхронизации блока.
Затем синхронизация и stencil
После __syncthreads каждый поток читает соседей исключительно из тайла, больше не обращаясь к глобальной памяти на этом шаге.
Множитель повторного использования
Теперь каждое внутреннее значение обслуживает 2r + 1 выходных элементов после одной загрузки в разделяемую память. Именно этот избыточный обмен данными устраняет тайлинг.
Быстрая проверка
Зачем тайлу stencil нужны ячейки ореола?
Итоги
Stencil использует перекрывающиеся скользящие окна, поэтому ореол из r дополнительных ячеек с каждой стороны позволяет тайлу обслужить каждый выходной элемент, загрузив каждое значение один раз. ✅
Изучай C++ с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Трафареты и скользящие окна» бесплатный?
Да — полный текст урока «Трафареты и скользящие окна» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.
Чему я научусь в уроке «Трафареты и скользящие окна»?
Разбивайте соседние области на фрагменты с граничными ячейками. Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CUDA Academy?
Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Трафареты и скользящие окна»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CUDA Academy?
Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проблема повторного использования данных
- Шаблон «загрузка — синхронизация — вычисление»
- Трафареты и скользящие окна
- Обработка крайних фрагментов