llama.cppプロジェクトはビルドb11184をリリースし、ブロック幅が512を超えるMetalバックエンド用の新しい高速ウォールシュ・アダマール変換(FWHT)カーネルを導入しました。以前、Metal FWHTの実装は64から512の幅に制限されていました。

  • 新しいカーネルは、スレッドグループごとに1行、256スレッドで実行することで、1024から8192までの幅を処理し、より広いブロックがレジスタのみではなくスレッドグループメモリを利用できるようにします。
  • 幅64から512は既存のsimdgroupカーネルを引き続き使用し、新しいワイドカーネルはF32とF16の両方のソースタイプをサポートします。
  • この実装には、スレッドグループメモリが不足しているデバイスでの中止を防ぐためのデバイス制限に対するサイズチェックが含まれており、幅8192で32 KBに達するfloat[N]のメモリを割り当てます。
  • M5 Proデバイスでのバックエンド動作テストにおいて、MUL_MAT_HADAMARDとMUL_MATのすべてのチェックがパスしました。

このアップデートにより、llama.cppはMetalバックエンド内でより大きなブロックサイズでアダマール積演算を実行できるようになり、Apple Siliconハードウェアのサポート対象テンソル次元の範囲が拡大します。