Суть проекта: NPU вместо GPU для композитинга
npu-render — это исследовательский дисплейный драйвер для Windows 11, который перехватывает вызовы Direct3D от менеджера окон рабочего стола (DWM) и выполняет их на Intel NPU (Neural Processing Unit). Проект решает узкий, но важный вопрос: может ли нейронный процессор полностью взять на себя композитинг интерфейса без участия приложений или самого композитора.
Архитектура работает следующим образом:
- Пользовательский драйвер (UMD): Записывает вызовы рисования в пакеты кадров (frame batches).
- Worker: Выполняет эти пакеты с помощью кастомных ядер SHAVE через библиотеку OpenVINO.
- Indirect Display Driver (IDD): Выводит готовые кадры на физический экран.
Система включает механизм аварийного восстановления: если что-то идет не так, запланированная задача автоматически возвращает управление обычному GPU.
Техническая реализация: Rasterizer внутри NPU
Ключевое достижение — внедрение растровизатора непосредственно в вычисления NPU. Проект использует OpenVINO для компиляции модели, где код операции ScatterElementsUpdate содержит SHAVE-код. Драйвер компилирует собственный растровизатор (вершинное затенение, сканирование линий, билинейная выборка) и «вшивает» его в этот бинарный файл, увеличив размер окна с 24 KB до 48 KB.
Для оптимизации памяти используется планировщик тайлов: текстуры не передаются целиком, а разбиваются на 12 тайлов (по 258 КБ каждый), обрабатываемых шестью ядрами SHAVE. Шейдеры DWM и WinUI (включая эффекты Mica, Acrylic и размытие) захватываются один раз, понижаются до IR и компилируются в C-функции, работающие внутри ядра.
Результаты тестирования на Intel Panther Lake
Тесты проводились на ноутбуке с Intel Panther Lake, Windows 11 и драйвером NPU версии 5540. Проект демонстрирует точность до пикселя по сравнению с эталонным GPU, но пока не достигает целевой частоты кадров. Ниже приведены ключевые метрики производительности и нагрузки.
| Параметр | Значение / Статус | Примечание |
|---|---|---|
| Частота кадров (NPU) | 2–3 fps (верифицировано) | Цель: 30 Hz. Фактически до 1.6 fps доходит до панели. |
| Загрузка GPU 3D Engine | 0.6% (p99: 0.37%) | Снижение с 3.4% до 0.6% при переключении. Экономия ресурсов незначительна из-за низкой нагрузки DWM. |
| Загрузка NPU | 58% (p50) | Высокая загрузка нейронного процессора при рендеринге. |
| Точность рендеринга | Pixel-exact | Полное совпадение с эталоном GPU для всех поддерживаемых шейдеров. |
| Стабильность | До 40 минут непрерывной работы | Zero self-test mismatches, zero worker stderr в длительных тестах. |
| Отклик мыши | Медиана: 94 мс, p95: 1.5 с | Критическая проблема для UX. Цель не достигнута. |
Почему это важно и какие есть ограничения
Проект доказывает техническую возможность использования NPU для задач, традиционно относящихся к GPU. Однако текущая версия является прототипом, а не продуктом. Главная проблема — низкая скорость и задержки ввода. При нагрузке на 30 Hz NPU не справляется с рендерингом в реальном времени, а задержка от движения мыши до отображения на экране достигает 1.5 секунд в 95% случаев.
Также отмечается, что на текущих рабочих нагрузках (браузер, офисные приложения) экономия энергии за счет выгрузки композитинга на NPU не дает измеримого прироста времени автономной работы, так как базовая нагрузка на GPU от DWM и так мала (менее 0.4% в пике).
Статус проекта на октябрь 2026 года: исследовательский прототип. Основные открытые вопросы касаются восстановления состояния окон после переключения и оптимизации задержек для обеспечения интерактивности.
Источник: Github ↗
