O projeto llama.cpp lançou a compilação b11184, introduzindo novos kernels de Transformada Rápida de Walsh-Hadamard (FWHT) para o backend Metal que suportam larguras de bloco maiores que 512. Anteriormente, a implementação do FWHT no Metal era limitada a larguras entre 64 e 512.

  • O novo kernel lida com larguras de 1024 até 8192 executando uma linha por threadgroup com 256 threads, permitindo que blocos mais largos utilizem a memória do threadgroup em vez de depender exclusivamente dos registradores.
  • Larguras de 64 a 512 continuam usando o kernel simdgroup existente, enquanto os novos kernels largos suportam ambos os tipos de origem F32 e F16.
  • A implementação inclui verificações de tamanho contra os limites do dispositivo para evitar abortos em dispositivos com memória insuficiente do threadgroup, alocando float[N] de memória que atinge 32 KB na largura 8192.
  • Testes de operação do backend em um dispositivo M5 Pro passaram em todas as verificações para MUL_MAT_HADAMARD e MUL_MAT.

Esta atualização permite que o llama.cpp realize operações de produto de Hadamard em tamanhos de bloco maiores dentro do backend Metal, ampliando a faixa de dimensões de tensor suportadas para hardware Apple Silicon.