llama.cpp b11160: шейдеры INT8 coopmat1 для AMD RDNA3 и RDNA4 в Vulkan¶
4.0/10
В релизе llama.cpp b11160 для бэкенда Vulkan представлена реализация целочисленного матричного умножения INT8 cooperative matrix (coopmat1), аппаратно оптимизированная под архитектуры AMD RDNA3 и RDNA4. Шейдеры задействуют режим wave32, двойную буферизацию, параметр BK_STEP=4 (BK_STEP=2 для MUL_MAT_ID) и планирование рабочих групп с учетом локальности кэша L2. Обновление поддерживает квантованные форматы Q8_0, Q4_1, Q5_0, Q5_1, семейство k-quants (Q3_K, Q4_K, Q5_K, Q6_K), IQ4_NL, MXFP4, NVFP4, а также IQ4_XS со специализированными процедурами загрузки блоков. Реализация оптимизирует распределение регистров VGPR, обращается к данным тензорных ядер напрямую в обход shared memory и исключает компиляцию избыточных вариантов шейдеров с аккумуляцией FP16.
Аппаратное ускорение INT8 coopmat1 для RDNA3 и RDNA4¶
В бэкенде Vulkan реализован шейдер матричного квантованного умножения mul_mmq_cm1, использующий расширение Cooperative Matrix (INT8 coopmat1/WMMA) и режим подгрупп Wave32, оптимизированный под архитектуры AMD RDNA3 и RDNA4. Конвейер вычислений исключает промежуточные транзакции через разделяемую память (shmem) благодаря прямому доступу к элементам регистров VGPR, использует двойную буферизацию с шагом развертки BK_STEP = 4 и планирование рабочих групп для сохранения пространственной локализации в L2-кэше. Реализация поддерживает семейство квантований k-quants, MXFP4, NVFP4, а также формат IQ4_XS с векторизованной загрузкой LOAD_VEC_A 8 и распаковкой упакованных 4-битных нибблов через LUT-таблицы cm1_kvalues.