Урок 36: Итоговый проект — сквозная оптимизация kernel
Это итоговый урок курса. Мы не будем изучать новый механизм — мы соберём всё, что уже изучили, в один процесс: как взять наивный, медленный kernel и сделать его быстрым. Этот чек-лист не волшебство, это последовательность проверок, которые мы уже видели по отдельности. Во-первых, coalescing: убедить
Улучшать kernel — это как делать ремонт в доме: нельзя просто покрасить и надеяться. Вы проверяете, что действительно сломано — трубы, проводку или крышу — и чините именно это. И есть один манометр, который нельзя игнорировать: измерение (Nsight). Без измерения вы чините не ту стену.
- чек-лист оптимизации
- Последовательность проверок для улучшения kernel: coalescing, shared memory, сокращение divergence, настройка occupancy и измерение в Nsight.
- узкое место (bottleneck)
- Настоящее ограничение, замедляющее kernel. Исправление чего-то другого не поможет, пока вы не устраните именно его.
- сначала измерить
- Использовать Nsight, чтобы определить узкое место до изменения кода, вместо того чтобы гадать, какая оптимизация нужна.
- сокращение глобальных чтений
- Перенос повторно используемых данных в shared memory сокращает чтения из медленной глобальной памяти, например с K до K/TILE при tiling.