Проект llama.cpp выпустил сборку b11184, в которой появились новые ядра быстрого преобразования Уолша-Адамара (FWHT) для бэкенда Metal, поддерживающие ширину блоков более 512.

Ранее реализация FWHT для Metal ограничивалась шириной от 64 до 512.

  • Новое ядро обрабатывает ширину от 1024 до 8192, выполняя одну строку на группу потоков с 256 потоками, что позволяет более широким блокам использовать память группы потоков вместо опоры исключительно на регистры.
  • Для ширины от 64 до 512 по-прежнему используется существующее ядро simdgroup, тогда как новые широкие ядра поддерживают исходные типы данных F32 и F16.
  • Реализация включает проверку размеров против лимитов устройства для предотвращения аварий на устройствах с недостаточной памятью группы потоков, выделяя память float[N], которая достигает 32 КБ при ширине 8192.
  • Тесты работы бэкенда на устройстве M5 Pro успешно прошли все проверки для MUL_MAT_HADAMARD и MUL_MAT.

Это обновление позволяет llama.cpp выполнять операции произведения Адамара с большими размерами блоков внутри бэкенда Metal, расширяя диапазон поддерживаемых измерений тензоров для оборудования Apple Silicon.