zoukankan      html  css  js  c++  java
  • 【记录一个问题】cuda核函数可能存在栈溢出,导致main()函数退出后程序卡死30秒CUDA

    调试一个CUDA核函数过程中发现一个奇怪的问题:
    调用某个核函数,程序耗时33秒,并且主要时间是main()函数结束后的33秒;
    而注释掉此核函数,程序执行不到1秒。

    由此可见,可能是某种栈溢出,导致了程序运行异常。
    但是,为什么程序的效果看起来是在main函数结束后还继续卡死这么长时间呢?并且没有任何core文件,很神奇!

     ====================================================

    2019-05-23补充:

    1.确实是核函数中有越界,导致程序逻辑执行完成后又卡死了30秒;
    2. 解决的办法如下:
        nvcc编译的时候加上  -g -G, 去掉 -O2
        使用 cuda-gdb调试,

             b _kennel
             r param
             n
            p var
    3. 要注意:break在核函数才能单独调试核函数;break在C函数,是无法单步到核函数的。
    4.强制指针类型转换,会被认为是越界:
        uint8_t* start = ...;
        uint32_t pixel_val = *(uint32_t*)(start + x * channels);
    5.我在计算核函数的计算时间的时候,总是不准确。
       有效的方法是调用核函数后立即执行:cudaDeviceSynchronize();

  • 相关阅读:
    SVN服务的配置与管理
    SVN配置多仓库与权限控制
    SVN使用详解
    这个问题他又来了,如何学编程!
    乘风破浪的程序员们
    Java 学习路线(史上最全 2020 版 ~ 持续更新中)
    P4782 【模板】2-SAT 问题
    HDU
    2020.8.3
    Interesting Computer Game
  • 原文地址:https://www.cnblogs.com/ahfuzhang/p/10894954.html
Copyright © 2011-2022 走看看