Перейти к содержанию

llama.cpp b11216: широкие ядра FWHT для SYCL

4.0/10

В релизе llama.cpp b11216 реализованы специализированные ядра быстрого преобразования Уолша-Адамара (FWHT) для бэкенда SYCL при размерах блоков 1024, 2048, 4096 и 8192. Ранее операции с такими размерностями сбрасывались в плотное матричное умножение (dense GEMM) с материализацией тензора поворота, что требовало сложности O(n^2) вместо O(n log n). Корректность вычислений подтверждена тестами на устройстве Intel oneAPI DPC++ 2026.1 с максимальной абсолютной погрешностью до 3.0e-07 и относительной до 3.8e-03 при NT=256.

Метод оптимизации

Новое ядро `fwht_kernel_wide` распределяет одну строку на рабочую группу (work-group) вместо подгруппы (sub-group), выделяя каждому рабочему элементу N/NT значений вместо N/WARP_SIZE. Преобразования бабочки (butterfly) ниже ширины подгруппы выполняются через тасование регистров (shuffle), до размера рабочей группы — через локальную память (local memory), а оставшиеся этапы сохраняются в регистрах. Такой подход сохраняет исходную конвенцию знаков и структуры бабочек при масштабировании на широкие блоки.

Прирост эффективности

Алгоритмическая сложность преобразования Адамара для ширин блоков от 1024 до 8192 снижена с O(n^2) до O(n log n), полностью устраняя накладные расходы на материализацию матрицы поворота в GEMM.