Route m<=metal_matvec_max() (default 8) quantized matmuls through a single batched ne11=m matvec dispatch instead of a per-column m-loop, cutting verify-round latency in speculative decode. Dense F16/BF16/F32 weights stay on the GEMM path: the batched matvec family indexes src0/src1 by block/element counts and would mis-stride and mis-grid dense weights, so fwd() dtype-gates the batched route to the quantized families only. Adds a metal-kernels F16-GEMM-vs-CPU test and an fwd()-level F16 m=4 routing test.
hanzo-metal-kernels
This crate contains Metal kernels used from hanzo-ml.