Vitis与Alveo加速器调用OpenCL内核报错-6的排查咨询
问题背景
- 基于Vitis和Alveo加速器平台开发,包含C++主机程序与类C的OpenCL内核文件
- 主机通过参数传递输入数据调用内核执行任务并接收返回结果
- 内核支持软件仿真、硬件仿真、硬件三种执行模式,软件仿真已通过,但硬件模式运行时报错
报错信息
INFO: Reading /home/m992c693/Workspace C2Q TC _paper/qht_3d_system/Hardware/vector addition.xclbin Loading: '/home/m992c693/Workspace C20 TC_paper/qht_3d_system/Hardware/vector_addition.xclbin Trying to program device[6]: xilinx_u250_gen3x16_xdma_shell_4 | Device[6]: program successful -./src/host.cpp:585 Error calling krnt_c2q = XRT build version: 2.13.466 Build hash: 5505e402c2calffe45eb6d3a9399b23a0dc8776 Build date: 2022-04-14 17:45:07 Git branch: 2022.1 PID: 243276 UID: 100586768 [Tue Sep 27 17:35:28 2622 GMT! HOST: alveo EXE: /home/m992c693/Workspace C20 TC_paper/qht_3d/Hardware/qht_3d [XRT] ERROR: No such compute unit ‘c2q:c2q 1': Invalid argument :Kernel (program, “c2q", Serr), error code is: -6
报错原因
- 计算单元(CU)名称不匹配:主机代码请求的CU名称
c2q:c2q 1与xclbin文件中实际存在的CU名称不一致,可能是拼写错误、空格/大小写差异,或内核编译生成的CU名称不符合预期。 - xclbin文件不匹配:当前加载的
vector_addition.xclbin可能未包含c2q内核的编译产物,或编译过程中未正确生成该CU。 - 内核实例化数量不足:主机代码尝试访问第1个
c2q实例(c2q 1),但编译时仅生成了0个或少于1个实例,导致找不到对应CU。
调试流程
1. 解析xclbin文件确认CU列表
使用xclbinutil工具查看xclbin中的CU信息:
xclbinutil --info --input vector_addition.xclbin
检查输出中是否存在c2q相关CU,重点核对名称(含空格、大小写)和实例编号是否与主机代码一致。
2. 核对主机代码中的CU名称定位
打开host.cpp第585行附近代码,查看获取内核的逻辑(如xrt::kernel构造或clCreateKernel调用),确保指定的CU名称与xclbin中的实际名称完全匹配。若xclbin中CU名称为c2q_1而非c2q:c2q 1,需修改主机代码中的名称。
3. 检查内核编译配置
- 查看Vitis工程的编译配置(.cfg文件或GUI设置),确认
c2q内核已被正确添加,且实例化数量符合主机代码预期。 - 重新编译内核生成xclbin,确保编译过程无警告/错误,日志显示
c2q内核已成功生成。
4. 验证平台兼容性
- 确认xclbin是针对Alveo U250平台编译的(报错显示设备为
xilinx_u250_gen3x16_xdma_shell_4),避免平台不匹配导致加载失败。 - 执行
xbutil examine查看当前设备信息,与编译xclbin时指定的平台核对。
5. 简化逻辑调试
暂时修改主机代码,仅加载c2q内核的基础实例(不指定实例编号,直接用名称c2q),验证是否能成功加载。若基础实例正常,再逐步添加实例编号逻辑排查问题。
内容的提问来源于stack exchange,提问作者Manu Chaudhary
相关产品推荐
相关产品推荐

