llama.cpp发布b12220:Metal后端ggml_tri改用select,避免 ±inf变NaN
该版本修复了Metal内核用 0/1 比较结果相乘导致三角形外 ±inf被算成NaN的问题,改为与CPU内核一致地输出零;新增的test_tri_special覆盖四种三角形类型,据提交说明在旧内核下失败、新内核下通过。
llama.cpp发布构建版本b12220,核心改动在Metal后端:ggml_tri内核改为按比较结果做select,而不是把输入乘以 0/1 的比较结果。
Metal的ggml_tri与CPU行为对齐
提交说明(PR #30711)描述,旧Metal内核通过乘以 0/1 的比较结果来屏蔽三角形区域外的单元,这会让区域外的 +inf或 -inf变成NaN;CPU内核在同一位置写的是普通零。改动后Metal内核像CPU一样做选择,直接输出零。
为验证这一边界情况,提交新增了test_tri_special,把 ±inf放进需要被丢弃的单元,覆盖全部四种三角形类型。提交者称,该测试在改动前的内核上失败,在改动后通过。提交中还删减了重复注释。
b12220发布页列出的构建产物
发布页按平台列出预编译包下载链接,覆盖macOS(Apple Silicon arm64、Intel x64)、iOS XCFramework、Ubuntu(x64、arm64、s390x,含CPU、Vulkan、CUDA 12.8、CUDA 13.5、ROCm 10.0、OpenVINO、SYCL FP32/FP16等变体)、Linux arm64骁龙(CPU、Adreno GPU、Hexagon NPU)、Android arm64、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm、OpenCL Adreno)以及UI包。
其中macOS Apple Silicon启用KleidiAI的arm64包和openEuler相关包在发布页标注为DISABLED,并链接到对应PR(#23780、#23705)。