Bend 报 Failed to launch kernels (error code invalid argument) 错误怎么排查?
【免费下载链接】BendA massively parallel, high-level programming language项目地址: https://gitcode.com/GitHub_Trending/be/Bend
在 Bend 中用 CUDA 解释器把程序跑在 NVIDIA GPU 上时(即bend run-cu <file.bend>),如果终端报出Failed to launch kernels (error code invalid argument)!,说明 HVM 运行时无法在当前 GPU 上启动 CUDA kernel。根据 Bend 的 FAQ,这个错误的直接原因是:当前版本的hvm.cu是面向 RTX 4090 编写的,在较老的 GPU 上不工作,因为这些老 GPU 的 shared memory 只有新 GPU 的一半左右。这篇文章给出文档中实际记录的排查顺序:先确认 GPU 是否在支持范围,再确认 CUDA 的安装时机,最后给出 CPU 替代运行方式。
错误只在 CUDA 解释器路径上出现
先确认报错发生在哪一步。Bend 有四种运行命令(见 README):
bend run <file.bend> # 默认使用 C 解释器(并行) bend run-rs <file.bend> # 使用 Rust 解释器(顺序) bend run-c <file.bend> # 使用 C 解释器(并行) bend run-cu <file.bend> # 使用 CUDA 解释器(大规模并行)Failed to launch kernels是 CUDA kernel 启动失败,只与hvm.cu这条 GPU 路径相关。如果你只是跑run-rs或run-c也看到类似报错,那不属于 FAQ 中这一条,需要另行处理。
第一步:确认你的 GPU 是否在支持范围
FAQ 给出的判断标准是:每 SM 至少 96KB L1 cache 的 GPUshould能工作,并列出了支持情况表:
| GPU | Tested? |
|---|---|
| RTX 4090 | Yes |
| All Other Desktop 40 Series | No |
| All Desktop 30 Series | No |
| All Mobile 40 Series | No |
| All Mobile 30 Series | No |
同时 FAQ 明确说明:当前迭代的hvm.cu是按 RTX 4090 写的,在较老的 GPU 上不会工作,因为老 GPU 的 shared memory 约为新 GPU 的一半。如果你使用的是 30 系列等较老型号的显卡,这个报错就是预期内的限制,而不是配置错误——上游支持还在开发中,文档中没有给出可以自行关闭该限制的开关。
第二步:确认 CUDA 是在安装 HVM 之前装好的
如果 GPU 本身符合要求但仍然失败,检查 CUDA 与 HVM 的安装顺序。FAQ 指出:CUDA 支持只在安装 HVM 时启用。如果你的安装顺序是先cargo install hvm、之后才装 CUDA toolkit 和nvcc,那么 HVM 编译时根本没有启用 CUDA,需要重新安装 HVM:
# 重新安装 HVM,使其在检测到 CUDA 时启用支持 cargo install hvm # 确认 HVM 可访问 hvm --version完整的依赖顺序参考 README 的 Install 一节(以 Linux 为例):
# 1. 安装 Rust(如果尚未安装) curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # 2. C 版 Bend 使用 GCC,文档推荐 12.x 及以下版本 sudo apt install gcc # 3. 安装 Linux 版 CUDA toolkit 12.x(README 指向 NVIDIA 官方下载页) # 4. 在 CUDA 就绪之后再安装 HVM2 和 Bend cargo install hvm hvm --version cargo install bend-lang bend --version另外注意环境前提:README 说明目前只支持 NVIDIA GPU;Windows 上需要使用 WSL2。如果你的 CUDA 安装在 Linux 上编译阶段就报错,FAQ 区分了两类情况:错误出现在编译 CUDA runtime 阶段、或涉及ccbin的,对应 HVM 上游 issue #291;错误涉及libc缺失的,对应 Bend issue #355(均见 FAQ 中的链接)。
GPU 不满足条件时:切换到 CPU 解释器运行
如果确认 GPU 不在支持范围,文档给出的可行替代路径是改用 CPU 解释器,同样的.bend文件不需要修改:
bend run-c <file.bend> -s # C 解释器,并行 bend run-rs <file.bend> -s # Rust 解释器,顺序-s标志会输出 reduction 数量、运行时间和每秒交互数(MIPS,单位百万),用来确认程序正常跑完并观察性能(见 GUIDE)。可以拿仓库自带的可并行示例 examples/parallel_sum.bend 做验证:
bend run-c examples/parallel_sum.bend -s bend run-rs examples/parallel_sum.bend -s两个解释器能正常输出结果,就说明环境本身没问题,瓶颈仅在 GPU 支持上。
限制说明
Failed to launch kernels目前只有一种文档记录的根因:GPU 与hvm.cu不兼容(老 GPU shared memory 不足),对老 GPU 的支持"将在近期版本提供",文档没有给出其他绕过方式。- 如果换用支持的 GPU 或等支持发布后仍报其他 CUDA 错误(如
CUDA not available!),按 FAQ 检查的是安装 HVM 时 CUDA 是否已就位,而不是运行时配置。
【免费下载链接】BendA massively parallel, high-level programming language项目地址: https://gitcode.com/GitHub_Trending/be/Bend
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考