在上周的工程试验过程中,由于工程项目环境发生变化,在笔记本上所使用的CUDA和实际使用生产的CUDA环境发生了变化,导致工程跑到一半就会卡死,遂记录排查过程。
1.通过cudaerror_t获取cuda报错原因,在使用cudamemcpy过程中返回700报错,遂排查是否是显存空间在分配或是使用时,索引到了未知的内存空间。
结果:排查结果未发现是上述原因导致的错误。
2.通过对内存泄露故障排查,由于我在之前的工程已经做过内存泄露的修正,所以在这方面上并未过多操心,从而导致浪费了很多时间(打脸...)。
结果:在主机内存上并未发现内存泄漏,在显存空间上发现了未知的泄露,定位到泄露位置,发现只是一个cufftplan的定义,由于在笔记本使用过程中该地方并未出现错误,所以我暂时忽略。后经过一步步排查发现cufftplan并未被destroy,导致每次泄露都是32764字节。
3. 在对显存空间泄露的过程中,发现compute-sanitizer的使用,通过对cmd命令行的使用,在编译好的exe目录下使用compute-sanitizer --tool memcheck 名称.exe 可以发现空间字节泄露。通过定位,发现在核函数内部index位置偏移过多导致。