首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cudnnCreate()是否在内部调用创建多个流?

cudnnCreate()是否在内部调用创建多个流?
EN

Stack Overflow用户
提问于 2020-10-19 17:46:06
回答 1查看 298关注 0票数 1

我正在编写一个简单的多流数据自动化系统应用程序。下面是我创建cuda-streamscublas-handlecudnn-handle的代码的一部分

代码语言:javascript
复制
cudaSetDevice(0);

int num_streams = 1;

cudaStream_t streams[num_streams];
cudnnHandle_t mCudnnHandle[num_streams];
cublasHandle_t mCublasHandle[num_streams];

for (int ii = 0; ii < num_streams; ii++) {
    cudaStreamCreateWithFlags(&streams[ii], cudaStreamNonBlocking);
    cublasCreate(&mCublasHandle[ii]);
    cublasSetStream(mCublasHandle[ii], streams[ii]);
    cudnnCreate(&mCudnnHandle[ii]);
    cudnnSetStream(mCudnnHandle[ii], streams[ii]);
}

现在,我的流计数是1。但是当我使用Nvidia Visual分析上述应用程序的可执行文件时,我得到如下信息:

对于我创建的每一个流,它都会创建额外的4个流。我用num_streams = 8对它进行了测试,它在分析器中显示了40条流。它在我的脑海中提出了以下问题:

  1. cudnn内部创建流吗?如果是,为什么?
  2. 如果它隐式地创建流,那么使用它的方法是什么?
  3. 在这种情况下显式创建流有任何意义吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-19 18:08:15

内部会创建流吗?

是。

如果是,那为什么?

因为它是一个图书馆,它可能需要组织CUDA并发。流用于组织CUDA并发。如果您想要详细解释流的确切用途,则不会记录库内部的内容。

如果它隐式地创建流,那么使用它的方法是什么?

这些流并不打算让您单独/独立地使用。它们是供库使用的,在库例程的内部。

在这种情况下,

显式创建流是否有意义?

您仍然需要显式地创建在库使用之外管理CUDA并发所需的任何流。

我想指出,这说法有点误导人:

“我创建的每一个流都会多创建4个流。”

您要做的是通过一个循环,在每个循环迭代中创建一个新句柄。您的观察与您创建的句柄的数量有关,而不是您创建的流的数量。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64432648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档