每个线程和库行为的CUDA流

时间:2017-09-15 16:44:56

标签: multithreading cuda

我在每个线程中使用--default流,以便从2个非默认流中的2个主机线程发出内核。一切正常,直到我想在两个线程中使用cudnn,因为对cudnn api的任何调用都将在默认线程上执行该api。

我想在与进行cudnn api调用的主机线程关联的流中运行每个cudnn api。我知道我可以使用cudnnSetStream()来设置非默认流,但我需要获取与主机线程关联的流,以便将其传递给cudnnSetStream()。

如何在主机端获取cuda与当前主机线程关联的流,我想从中调用cudnn api?

编辑:我使用的是C和ubuntu。

谢谢。

1 个答案:

答案 0 :(得分:4)

通常,在编译调用预编译库的代码时,编译库不会选择传递给--default-stream per-thread的{​​{1}}。在这种情况下,您也不能只设置空流。

为了使库在这种情况下使用默认流(假设库具有流设置功能),您应该使用nvcc流句柄,提到here

类似的东西:

cudaStreamPerThread

或:

cudnnSetStream(handle, cudaStreamPerThread);

或:

cublasSetStream(handle, cudaStreamPerThread);

对于CUFFT和其他具有流设置功能的库,这也应该类似。