我已经在 CUDA 论坛上发布了我的问题,但不确定是否适合在此处发布链接以获得更多想法,以防两个论坛之间存在大量不同的受众。链接在这里。对于给您带来的任何不便,我深表歉意,并感谢对此问题的任何评论,因为我还没有收到有关特定 CUDA 内存访问和管理问题的一些细节的回复。提前致谢。
问问题
1180 次
1 回答
2
如果没有看到更多代码,我不确定这是否相关,但 CudaObj 的析构函数是从哪里调用的?
你说:
但是,如果我这样做,我会在调用 cudaFree() 的 CudaObj 的析构函数行中遇到退出应用程序的错误。这会导致 CUDA 上下文的清理代码由于错误而未执行后的内存清理代码,从而留下一团糟的内存泄漏。
在您描述了如何将 cuda 设置内容更改为 thread2 的主要功能的开头之后。如果您从另一个线程调用 CudaObj 上的析构函数,那么执行 cudaFree 清理将是错误的,原因与您必须将 cuda 初始化移动到线程 2 中的原因相同。听起来您已经知道这一点,但是 cuda 上下文特定于您进程中的单个线程。根据文档,不支持在不同的线程中进行清理,尽管我自己从未尝试过。希望这可以帮助
于 2009-11-18T18:12:47.873 回答