vulkan: 在旧版 AMD 驱动程序中, vkGetDeviceQueue2 返回 VK_NULL_HANDLE, 首次调用 vkQueueSubmit 会中止
作者: thewh1teagle创建于 2026年9月4日更新于 2026年9月4日
发生了什么事?
由于队列处理重因子( “ vulkan: Refactor vk queue to use per- instance mutex and unient handers ” , LLaMA.cpp # 23570, ggml 承诺 3ca9985) , “ ggml vk create queue ” 通过 “ vkGet Device Quee2 ” 获取每个队列 :
翻译: h->queue=设备->device.getQuee2(queue info2);
一些年长的车手从"vkGetDeviceQuee2"返回了‘VK NULL HANDLE',即使他们创建了队列. 第一次“ vkQueee Submit” 失败, 进程中止 :
错误: vk 排队 : 无效队列 [VUID- vk 排队 Submit- 排队参数]
(出道代码:0xC000409 在Windows). 现为v.2.2.0级,自2026-08-30起为主("d471637"). ggml 0.16使用 " Get Quue " ,并使用同一台机器。
* 复制
AMD Ryzen 5 4500U 配有 Radeon Graphics, Windows 11, AMD驱动器 27.20.11044.7 (Vulkan 1.2.133, " DriverVersion 0x800089"). 装弹机1.3.300.
一个最小程序, 以一个计算队列( 无旗帜) 创建设备, 并双向获取 :
设备“ AMD Radeon( TM) Graphics ” api 1. 2. 133 驱动程序 0x800089 家庭0:1个旗帜 GRAPHICS ============ 家庭 1: 2 个旗子 COMPUTE : 转接 : SPARSE BINDING 第2个家庭:1个旗子 家族 0: vkGetDeviceQuee - > 0x1f87fb67bc0 vkGetDevicesQuee2 - > 0x0 从 vkGetDevice 排队时空出 vk 排队: SUCCESS
此机上的任何ggml Vulkan工作量(这里有一个低声大-v3-turbo编码)都会复制中止;‘GGML VK VISIBLE DEVICES=99'(仅CPU)有效.
建议改正
当“ 内部 同步 queues ” 错误时, 队列是没有旗帜创建的, 所以“ vkGetDeviceQuee” 将同一队列命名 。 无效检查就够了 :
翻译:
h->queue=设备->device.getQuee2(queue info2);
如果 (! h- > 队列) {
// 一些更年长的驱动程序(例如Windows上的AMD 20.x, Vulkan 1.2.133)返回一个无效
/ 从 vkGetDeviceQuee2 得到的手柄, 甚至对于他们创建的队列也是如此 。
h->queue = 设备->device.get queue(queue family index,队列-index); 2.
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?上面的独立测试显示“vkGetDeviceQuee”返回了该设备的工作队列, 一旦修补的建筑在那里运行, 我会报告。 很高兴在这里或LLaMA.cpp上打开公关,随你喜欢.
内容来源: ggml-org/ggml