繁体   English   中英

cuda 代码可以在没有 cudaStreamDestroy() 的情况下完成吗?

[英]can a cuda code finish without cudaStreamDestroy()?

在我们的大型代码库中,我发现有多个cudaStreamCreate()函数。 但是,我在任何地方都找不到cudaStreamDestroy() 程序完成后销毁流是否重要,或者不需要担心这一点? 在这方面什么是好的编程实践?

程序完成后销毁流是否重要,或者不需要担心这一点?

运行时 API 将在正常进程终止期间清除进程拥有的上下文分配的所有资源(流、memory、事件等)。 在大多数情况下,没有必要显式销毁流。

虽然 talonmies 的回答是正确的,但销毁您的流和在 CUDA 中创建的其他实体通常仍然很重要:

  1. 如果您正在编写库 - 您可能会在应用程序退出之前完成您的工作。 (尽管在那种情况下您可能在不同的CUDA 上下文中工作,并且您可能会简单地破坏整个上下文)。
  2. 如果您创建流的代码可能会被多次调用。

此外,如果您在完成所有工作后没有同步您的流,那么您可能会遗漏一些错误(以及您最后一点工作的结果); 如果你确实有一个“最后同步”,那通常意味着有机会也摧毁 stream。

最后,如果你使用 C++ 风格的包装器,比如的,那么当你离开创建它们的 scope 时,流就会被销毁,你不必担心它(但你支付了 stream 销毁 API 调用的开销) .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM