【问题标题】:CUDA stream per-thread and library behaviourCUDA 流每线程和库行为
【发布时间】:2017-09-16 01:42:32
【问题描述】:

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

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

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

编辑:我正在使用 C 和 ubuntu。

谢谢。

【问题讨论】:

  • @Olaf ...您不相信 cuda 使用 C 编程语言,因此您删除了 C 标签并投了反对票? :)
  • @RobertCrovella 你的建议 cudnnSetStream(cudaStreamPerThread);工作得很好。谢谢
  • CUDA 显然不是 C!只是不要垃圾邮件标签。当您接受引用 nvcc 的答案时,很明显您不使用 C。如果这是错误的,则答案是错误的,您需要通过显示 标准 C 代码!仅仅因为您使用类似的语法并不意味着您这样做。阅读How to Ask
  • @Olaf quate 来自 How to Ask. :“尝试为您的问题所涉及的语言、库和特定 API 添加标签……确保它们”与您提出的问题有关!”我确实认为 C 标签是相关的,因为在其他语言(例如 C++、python、java 等)中也有 cuda API 实现。
  • @toohonestforthissite 我也不喜欢您从问题标题中删除了 cudnn 的事实。我的问题显然是关于 cudnn 的。顺便说一句好听的名字!

标签: multithreading cuda


【解决方案1】:

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

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

类似:

cudnnSetStream(handle, cudaStreamPerThread);

或:

cublasSetStream(handle, cudaStreamPerThread);

或:

nppSetStream(cudaStreamPerThread) 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    相关资源
    最近更新 更多