Проблема: BEV pooling как узкое место
В современных системах автономного вождения и робототехники доминирует архитектура Bird’s-Eye-View (BEV), которая проецирует данные с множества камер в единое поле зрения. Ключевым этапом здесь является BEV pooling — операция, собирающая признаки изображений, взвешенные по глубине, и распределяющая их по ячейкам сетки BEV. На практике эта операция становится «бутылочным горлышком» из-за нерегулярного доступа к памяти, повторных чтений индексов и сложного поведения scatter-reduce на GPU.
Решение: Архитектура BEVPoolV3
NVIDIA представила BEVPoolV3, который вводит четыре ключевых изменения для оптимизации работы на GPU NVIDIA:
- Снижение дублирования: Уменьшено количество повторных загрузок данных глубины (depth loads).
- Оптимизация scatter-карты: Используется карта рассеивания из пяти массивов INT32.
- Предварительные вычисления: Индексы вычисляются заранее, что исключает дорогостоящие операции целочисленного деления во время выполнения.
- Интервальные записи: Выходные данные записываются в пределах владения интервала, что снижает конфликты.
Метрики производительности
Тестирование проводилось на двух платформах, представляющих разные режимы работы с памятью: NVIDIA RTX A6000 (Ampere, 6 MB L2) и NVIDIA RTX PRO 6000 Blackwell Max-Q (Blackwell, 128 MB L2). Рабочий набор данных составляет ~49 МБ, что превышает кэш L2 у A6000 (DRAM-bound) и помещается в кэш L2 у Blackwell (L2-resident).
| Платформа | Режим памяти | Точность | Ускорение (V3 vs V2) | Время выполнения (V3) |
|---|---|---|---|---|
| RTX A6000 (Ampere) | DRAM-bound | FP16 | ~19.31x | 90.0 µs |
| RTX PRO 6000 Blackwell | L2-resident | FP16 | ~15.84x | 17.3 µs |
| RTX PRO 6000 Blackwell | L2-resident | FP8 | ~42x (макс.) | 16.4 µs |
На Blackwell использование формата FP8 дало дополнительный прирост за счет нативной поддержки ISA и эффективного использования большого кэша L2. На Ampere (A6000) оптимизация была сфокусирована на снижении трафика к DRAM.
Методология оптимизации
Процесс оптимизации включает классификацию рабочего набора по объему L2-кэша, устранение избыточного scatter-трафика, сопоставление реализации ядра с архитектурой GPU и валидацию узких мест с помощью NVIDIA Nsight Compute. Этот подход позволяет разработчикам выбирать стратегию в зависимости от того, является ли нагрузка ограниченной памятью (DRAM-bound) или процессором (L2-resident).
Источник: NVIDIA dev blog ↗
