由于我怀疑“黑匣子”(GPU)没有在一些较大的代码中干净地关闭(可能还有其他代码),所以我会cudaDeviceReset()
在main()
. 可是等等!这将在析构函数中使用非平凡的 CUDA 代码Segmentation fault
静态创建的所有类实例,对吗?main()
例如
class A {
public:
cudaEvent_t tt;
cudaEvent_t uu;
A() {
cudaEventCreate(&tt);
cudaEventCreate(&uu);
}
~A(){
cudaEventDestroy(tt);
cudaEventDestroy(uu);
}
};
静态实例化:
int main() {
A t;
cudaDeviceReset();
return 0;
}
退出时的段错误。问题:可能cudaDeviceReset()
在退出时自动调用main()
?
否则整个有用的代码main()
应该被转移到 some run()
,并且cudaDeviceReset()
应该是 as last 命令main()
,对吧?