目录

1、问题描述

2、问题分析

3、最终问题定位与解决

4、cuda知识学习

1、问题描述

在项目迭代优化的一个版本里,突然爆出以下问题: 某程序开辟了多个线程,每个线程分别执行模型加载、读离线视频及视频帧模型推理、模型卸载以上操作。 在程序执行了一段时间后,必现地随机报cuda的某个函数执行错误,如cudaMalloc函数执行错误、cudaStreamSynchronize函数执行错误等,并且每次报错的线程也随机,很难定位是具体哪个线程内的代码问题(备注:每个线程对应一个场景任务,其代码都不一样,如人脸检测、异常行为检测等)。

2、问题分析

因为每次报错,报错线程随机(即对应是哪个场景算法随机)、且每次报错具体内容不一样,所以不能通过gdb直接定位出代码问题行,所以正面刚无果。 下面迂回定位问题: 由于之前的版本没问题,那就从当前版本里找做了哪些改动、且是cuda相关的改动(因为每次都是cuda错误)。经过对相关改动代码进行不断注释、运行;再注释、再运行,最后找到问题。

3、最终问题定位与解决

cudaDeviceReset()函数错误调用。 该问题版本里,为了释放cuda资源,在卸载函数里加入了cudaDeviceReset()函数;但是经过细查发现,该函数使用时&