【发布时间】:2021-02-02 13:01:53
【问题描述】:
我正在编写一个简单的多流 CUDA 应用程序。以下是我创建cuda-streams、cublas-handle 和cudnn-handle 的代码部分:
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 Profiler 分析上述应用程序的可执行文件时,我得到以下信息:
对于我创建的每个流,它都会再创建 4 个流。我用num_streams = 8 对其进行了测试,它在分析器中显示了 40 个流。它在我的脑海中提出了以下问题:
-
cudnn是否在内部创建流?如果是,那为什么? - 如果它隐式创建流,那么使用它的方法是什么?
- 在这种情况下,显式创建流有意义吗?
【问题讨论】: