El proyecto llama.cpp lanzó la compilación b11184, introduciendo nuevos núcleos de Transformada Rápida de Walsh-Hadamard (FWHT) para el backend de Metal que admiten anchos de bloque mayores a 512. Anteriormente, la implementación de FWHT de Metal estaba limitada a anchos entre 64 y 512.
- El nuevo núcleo maneja anchos desde 1024 hasta 8192 ejecutando una fila por grupo de hilos con 256 hilos, permitiendo que bloques más amplios utilicen la memoria del grupo de hilos en lugar de depender únicamente de los registros.
- Los anchos de 64 a 512 continúan utilizando el núcleo simdgroup existente, mientras que los nuevos núcleos amplios admiten ambos tipos de origen F32 y F16.
- La implementación incluye comprobaciones de tamaño contra los límites del dispositivo para evitar abortos en dispositivos con memoria insuficiente del grupo de hilos, asignando float[N] de memoria que alcanza 32 KB en un ancho de 8192.
- Las pruebas de operación del backend en un dispositivo M5 Pro superaron todas las comprobaciones para MUL_MAT_HADAMARD y MUL_MAT.
Esta actualización permite a llama.cpp realizar operaciones de producto de Hadamard con tamaños de bloque más grandes dentro del backend de Metal, ampliando el rango de dimensiones de tensor admitidas para el hardware Apple Silicon.