我在每个线程中使用--default流,以便从2个非默认流中的2个主机线程发出内核。一切正常,直到我想在两个线程中使用cudnn,因为对cudnn api的任何调用都将在默认线程上执行该api。
我想在与进行cudnn api调用的主机线程关联的流中运行每个cudnn api。我知道我可以使用cudnnSetStream()来设置非默认流,但我需要获取与主机线程关联的流,以便将其传递给cudnnSetStream()。
如何在主机端获取cuda与当前主机线程关联的流,我想从中调用cudnn api?
编辑:我使用的是C和ubuntu。谢谢。
答案 0 :(得分:4)
通常,在编译调用预编译库的代码时,编译库不会选择传递给--default-stream per-thread
的{{1}}。在这种情况下,您也不能只设置空流。
为了使库在这种情况下使用默认流(假设库具有流设置功能),您应该使用nvcc
流句柄,提到here。
类似的东西:
cudaStreamPerThread
或:
cudnnSetStream(handle, cudaStreamPerThread);
或:
cublasSetStream(handle, cudaStreamPerThread);
对于CUFFT和其他具有流设置功能的库,这也应该类似。