You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Manjaro系统GTX970运行CUDA内核出现Bus error (core dumped)求助

CUDA内核运行出现“Bus error (core dumped)”的原因与解决方法

问题原因

  • GPU看门狗超时触发:Linux系统下NVIDIA GPU默认启用看门狗机制(GPU Watchdog),当CUDA内核连续运行时间超过阈值(通常为5秒左右),系统会强制重置GPU以避免显卡无响应,直接导致程序崩溃并抛出Bus error (core dumped)。你的内核中循环次数高达479001600次,单线程执行该循环的时间远超看门狗阈值,因此会被系统终止;受系统负载波动影响,每次触发崩溃的时间点略有差异,最终无法执行到debug 10。
  • GPU printf缓冲区输出中断:GPU的printf输出会先暂存在设备端缓冲区,仅在内核正常结束或缓冲区满时才同步到主机。若内核被看门狗提前终止,缓冲区内容无法完整输出,也会表现为输出中断、崩溃点不稳定。

解决方案

  • 优化内核并行逻辑:GPU为并行计算设计,单线程执行巨量循环并非合理用法。若需完成此类计算,应拆分任务到多个线程/块并行执行,缩短单线程运行时间,规避看门狗限制。
  • 临时调整看门狗设置(不推荐生产环境):
    • Xorg环境:修改X配置文件(如/etc/X11/xorg.conf),在Device段添加Option "Interactive" "0"禁用看门狗,之后重启X服务。
    • 无X服务器环境:通过sysctl -w dev.nvidia.nvlink=0(需root权限)临时关闭看门狗,但可能导致GPU无响应时系统卡住。
  • 添加CUDA错误检查:为CUDA操作添加错误检查,精准定位问题点,示例代码如下:
    #define CHECK_CUDA_ERROR(err) \
        if (err != cudaSuccess) { \
            fprintf(stderr, "CUDA error at %s:%d: %s\n", __FILE__, __LINE__, cudaGetErrorString(err)); \
            exit(EXIT_FAILURE); \
        }
    
    int main(void)
    {
      int N = 1;
      int M = N*6;
      char *y;
    
      CHECK_CUDA_ERROR(cudaMallocManaged(&y, M*sizeof(char)));
      CHECK_CUDA_ERROR(cudaLaunchKernel((void*)add, dim3(1), dim3(1), 0, 0, y));
      CHECK_CUDA_ERROR(cudaDeviceSynchronize());
      CHECK_CUDA_ERROR(cudaFree(y));
      
      return 0;
    }
    
  • 缩小循环范围验证:临时将fac改为较小值(如1000),验证内核是否能正常执行到debug 10,确认问题由运行时间过长导致。

内容的提问来源于stack exchange,提问作者TTho Einthausend

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:15:34