llama.cpp b11195: блочный mul_mat для k-квантований ускоряет CPU GEMM в 3–6 раз¶
6.0/10
В релизе llama.cpp b11195 добавлено блочное матричное умножение (tiled mul_mat) для k-квантований на движке ggml-cpu. В новом алгоритме веса распаковываются в целочисленные макроплитки int8 размером до 256x256, после чего микроядро обрабатывает блоки 16x16 с последующей записью результатов FP32 в оперативную память. Оптимизация обеспечивает ускорение вычислений в 3–6 раз на крупных операциях GEMM при незначительной численной погрешности (RMSE порядка 1e-05, максимальная ошибка около 1e-04). Точкой безубыточности выступает перемножение размерностей 4096x64 на 64x4096, тогда как на векторно-матричных операциях GEMV зафиксировано снижение производительности до 80% от исходного уровня.
Архитектура тайлинга mul_mat на CPU¶
В процедуре `mul_mat_one_chunk` квантованные веса распаковываются специализированными под каждый квант подпрограммами в макроплитки формата `int8` размером до 256x256, что устраняет избыточные операции деквантования, свойственные подходу `vec_dot` [tool-1-1, tool-1-2]. Затем микроядро обрабатывает блоки 16x16 с задействованием векторных инструкций AVX2 и VNNI, после чего готовые результаты FP32 блоками 256x256 записываются напрямую в оперативную память [tool-1-1, tool-1-2]. Для снижения нагрузки на кэш-память L1/L2 переупаковка данных выполняется in-place независимыми микротайлами 16x64 с группировкой строк по 16 и выравниванием рабочей области по границам 512 КБ.
Эффективность и ограничения¶
Пакетная генерация и фаза prefill на CPU получают ускорение от 3x до 6x на плотных матрицах k-квантов с сохранением числовой стабильности (максимальная ошибка не превышает 1e-04). Для однопоточного декодирования с размером батча 1 (GEMV) новый путь вычислений демонстрирует чистую потерю производительности до 20%.