Compile bug: SYCL build fails on Windows and Linux: missing device argument in can_use_mul_mat_vec_q()

这个报错通常出现在使用 SYCL 后端编译 llama.cpp 时,源文件内部函数调用参数数量不匹配,属于编译期源码回归。优先确认所用提交是否包含后续修复,而不是去排查 oneAPI 或显卡驱动。

快速结论:这个报错通常出现在使用 SYCL 后端编译 llama.cpp 时,源文件内部函数调用参数数量不匹配,属于编译期源码回归。优先确认所用提交是否包含后续修复,而不是去排查 oneAPI 或显卡驱动。

适用环境:Issue 报告的复现环境为 Windows 与 Linux,GGML 后端为 SYCL,编译器为 Intel oneAPI DPC++ / icx(Windows 侧 oneAPI 编译器为 2026.1),构建系统为 CMake / Ninja;首次出现该问题的提交为 f9599d0cc(build 11833,版本标识 0.7.0-dev)。Issue 未给出 Python、CUDA 版本或具体显卡型号,不做补写。

最快修复方案:暂无确认的一步修复方案。Issue 仅表示问题已解决,未记录具体修复提交或命令行操作,因此无法给出经过验证的单步处理方式。

注意事项:Issue 标注为 bug-unconfirmed,且关闭时正文与评论均未说明修复细节,推测可能是后续提交修正了该调用点。不要靠修改编译器版本或关闭 F16 等编译选项来“绕过”,这些都没有 Issue 证据支持。

问题场景

用户在构建 llama.cpp 的 SYCL 后端时触发该问题,编译命令通过 CMake preset 配置,使用 icx 作为 C/C++ 编译器,并开启了 -DGGML_SYCL_F16=ON。编译进行到 ggml-sycl.cpp 时失败,问题同时出现在 Windows 和 Linux 两个平台。

报错原文

FAILED: [code=1] ggml/src/ggml-sycl/CMakeFiles/ggml-sycl.dir/ggml-sycl.cpp.obj
...
error: no matching function for call to 'can_use_mul_mat_vec_q'
note: candidate function not viable: requires 4 arguments, but 3 were provided

原因分析

Issue 明确指出:ggml/src/ggml-sycl/ggml-sycl.cpp 中 can_use_mul_mat_vec_q() 的函数定义在约第 5257 行已改为接收四个参数(第一个为 int device),但约第 6897 行的调用处仍然只传入三个参数 (src0, src1, dst),导致编译器找不到匹配的重载。

由于该错误在两个操作系统上都能复现,最可能的原因是源码本身在某个提交中出现了调用点未同步更新的回归,而非平台相关的配置问题。

环境排查

  • 确认 llama.cpp 的构建版本与提交号,查看是否处于或接近 f9599d0cc(build 11833)。
  • 确认 GGML 后端为 SYCL,并检查是否启用了 GGML_SYCL_F16。
  • 确认使用的编译器为 Intel oneAPI DPC++ / icx,并记录其版本(Issue 中 Windows 侧为 2026.1)。
  • 确认构建系统为 CMake / Ninja,并检查 CMake preset 中是否有额外的 SYCL 相关开关。
  • 若已更新到新提交后仍报同一错误,需检查本地是否残留旧构建目录,可优先尝试清理后重新配置。

解决步骤

  1. 先记录当前提交号,确认处于 f9599d0cc 或其附近版本。
  2. 同步或切换到包含后续修复的较新提交,因为 Issue 已标记为已解决,但未披露具体修复提交,可优先尝试拉取最新代码后重新构建。
  3. 清理旧的构建输出目录,重新执行 CMake 配置与构建,避免旧对象文件干扰判断。
  4. 如果在新提交上仍出现 no matching function for call to 'can_use_mul_mat_vec_q',说明修复未被包含或存在另一处未同步的调用点,应回到 Issue 追踪最新进展,而不是自行改动函数签名。

验证方法

重新构建后,ggml-sycl.cpp.obj(Linux 下为对应的目标文件)应编译通过,不再出现 no matching function for call to 'can_use_mul_mat_vec_q' 以及 requires 4 arguments, but 3 were provided 的报错,整体构建可继续推进到链接阶段并完成。

参考来源

ggml-org/llama.cpp #31023

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 29757

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注