开源llama.cpp Releases·原文 2026年9月14日

llama.cpp b10955修复ggml-cpu预编译头导致的堆内存损坏

llama.cpp发布b10955构建版本,通过禁用ggml-cpu预编译头并移除CACHE_LINE_SIZE中的std::hardware_destructive_interference_size分支,修复了rope工作缓冲区被少算、堆溢出后崩溃的问题。

AI解读:llama.cpp的b10955版本修了一个很隐蔽的bug:同一个CACHE_LINE_SIZE在C++内核里被算成 256,在负责计算工作缓冲区大小的C代码里却是 64。结果rope的工作缓冲区被少分配了一截,写越界,堆被破坏,之后在ggml_compute_forward_rope_flt里崩溃。

修复手法是两条:关掉ggml-cpu的预编译头,让ops.h按自然顺序先于相关头文件被处理;同时删掉CACHE_LINE_SIZE里基于std::hardware_destructive_interference_size的分支,让这个值不再依赖头文件包含顺序。

对普通用户来说,直接下b10955的预编译包就行,平台覆盖macOS、Linux、Windows、Android等。只有当你自己从源码编译、或者用的是有问题的旧版本且跑rope相关推理时,才需要关心这次改动。

llama.cpp发布b10955构建版本,修复一处由ggml-cpu预编译头(PCH)引发的堆内存损坏问题(对应PR #28882,问题追踪issue #28858)。

按发布说明,问题根源是CACHE_LINE_SIZE在两个地方取值不一致:C++内核使用 256(硬件破坏性干扰尺寸),而ggml-cpu.c中负责工作缓冲区大小计算的C代码始终使用回退值 64。PCH会在ops.h之前强制包含ggml-impl.h,后者经由 / 头文件定义了 __cpp_lib_hardware_interference_size,从而把C++内核导向 256。

这一不一致让rope工作缓冲区少了 (CACHE_LINE_SIZE/4 - 16) * n_threads * 4 字节,造成堆缓冲区溢出,破坏堆并在随后ggml_compute_forward_rope_flt中崩溃。

发布说明中的修复措施为:禁用ggml-cpu预编译头,恢复自然的头文件包含顺序,使ops.h在相关头文件之前被处理,从而保持CACHE_LINE_SIZE一致;同时移除CACHE_LINE_SIZE中的std::hardware_destructive_interference_size分支,使该值确定且不依赖包含顺序。

发布说明标注该修复由pi:llama.cpp/DeepSeek-V4-Flash-Vision-Exp协助完成。

信息来源

llama.cpp Releases原始来源