全局静态变量释放cudastream时,报driver shutting down问题?

  • 1 replies
  • 44 views
大家好!
       目前遇到一个问题,有个全局静态类,此类析构函数会调用cudaStreamDestory函数来释放之前create的stream,  然后在main函数退出时就会报driver shutting down错误。 我查找了一些网站,显示像cudaFree、Destory函数不能放在全局里,不知道为什么? cuda文档也没找到相应描述,请大家帮忙解答下,非常感谢。

(无标题)
« 回复 #1 于: 十二月 25, 2018, 01:15:06 pm »
这种情况往往发生在:
(1)你已经从main函数返回后,CUDA即将进行自动的销毁化工作的时候。
(2)在普通的main函数,或者它层叠调用的正常其他函数/方法中,但是此时正在进行,例如cudaDeviceReset()之类的操作。

前者往往见于写的不好的用户C++代码,例如某些对象往往在最后才被自动干掉,而在它们的析构方法中,进行了CUDA调用,而此时已经在进行了自动化的CUDA销毁工作了。

后者往往见于多线程的时候,已经有其他线程调用了cudaDeviceReset()之类的(还在进行中),此时另外的线程还当没事一样继续正常调用CUDA。

至于你如何在C++中,可控的在某个实际,能够人工的销毁掉某些对象,从而能激活它们的析构方法,则是另外一个你需要考虑的问题了。我不是C++用户。

屠戮人神