llama.cpp b11596将三个上下文状态测试合并为test-llama-context
llama.cpp发布b11596,把保存/加载状态、循环状态回滚、碎片化状态恢复三个测试合并为单个二进制,并新增llama_model_set_attn_rot替代环境变量传参。
AI解读:来源称三者检查的是同一个对象的三个方面:llama_context的KV cache与循环状态,以及保存、加载、复制、回滚操作。
合并后以“用例”为测试单元:一个模型占一行,一个用例占一列,单元格记录该组合的结果。模型默认以多线程加载,参数为 -j/--threads,默认值为min(cores, 4);合并前,三个测试各有自己的main和模型循环,一次全跑会重复加载同一批模型。
新测试不再使用tests/testing.h,改为由runner统一汇报;作者描述一次覆盖 130 个模型的运行是“一张判定矩阵”,而不是子测试树。用例返回判定结果和原因,失败模型的日志按行顺序在表格完成后打印。
环境变量传参被取消:新增llama_model_set_attn_rot替代LLAMA_ATTN_ROT_DISABLE,来源称该环境变量会让一个线程加载的模型影响其他线程正在加载的模型;同时为需要复制内存缓冲的用例新增llama_memory_get_buffers。
构建与平台方面:开启线程sanitizer时ggml_aligned_malloc改用posix_memalign;macOS上使用Mach VM分配,sanitizer不拦截,曾把写入回收内存误报为竞态,来源称本次测试中有 30 次此类误报。新增common_log_set_stdo在表格构建期间保持控制台安静。
提交信息标注Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next。这是带二进制发布产物的构建,覆盖macOS/iOS、Linux(含CUDA 12/13、ROCm 10.0、Vulkan、SYCL、OpenVINO、Snapdragon)、Android、Windows与UI;openEuler构建标记为DISABLED。
llama.cpp发布b11596,核心变更是把三个上下文状态相关测试合并为一个二进制test-llama-context(PR #30023)。来源说明,test-save-load-state、test-recurrent-state-rollback和test-state-restore-fragmented此前各自拥有main、模型循环以及token与比较辅助函数的副本,合并前一次全跑会多次加载同一批模型。
合并后的测试结构:以用例为单元,模型为行
新测试目录拆分如下:tests/llama-context/test-case.h定义用例接口,cases-kv.cpp放KV cache用例,cases-rs.cpp放循环状态用例,test-util.cpp负责token、生成与比较,test-runner.cpp在线程上跑模型,test-log.cpp处理模型日志。
来源把一次运行描述为一张表:模型占一行,用例占一列,单元格是该组合的判定结果。模型默认多线程加载,参数为 -j/--threads,默认min(cores, 4);表格完成后打印,失败模型的日志按行顺序在其后打印。用例返回判定和原因,runner是唯一的汇报者。来源称测试不再使用tests/testing.h,覆盖 130 个模型时是一张判定矩阵,而不是子测试树。
取消环境变量传参,新增两个接口
来源给出的改动理由是:LLAMA_ATTN_ROT_DISABLE这个环境变量会被一个线程加载的模型改写,进而影响其他线程正在加载的模型。b11596新增llama_model_set_attn_rot取代它,并新增llama_memory_get_buffers供需要复制内存缓冲的用例使用。
同一提交还新增common_log_set_stdo,用于在表格构建期间保持控制台安静。构建层面,线程sanitizer开启时ggml_aligned_malloc改用posix_memalign分配;在macOS上它使用Mach VM分配,来源称sanitizer不拦截这种分配,因此不会看到页范围易手,会把写入回收内存误报为竞态——本次测试中出现 30 次此类误报。
发布产物与范围
b11596是带预编译产物的发布版本,覆盖macOS Apple Silicon(arm64)与Intel(x64)、iOS XCFramework;Linux侧包含Ubuntu x64/arm64/s390x CPU,以及Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO 2026.4.1、SYCL FP32/FP16,另有Linux arm64 Snapdragon(CPU、Adreno GPU、Hexagon NPU);Android提供arm64 CPU和Snapdragon版本;Windows覆盖x64/arm64 CPU、CUDA 12.4/13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0及OpenCL Adreno;另提供UI包。
来源同时标注若干DISABLED项:macOS Apple Silicon的KleidiAI启用版本(PR #23780)和openEuler构建(PR #23705)处于禁用状态。提交信息中带有Assisted-by: pi:llama.cpp/Qwen3.8-Flash-Next标注。