【问题标题】:Passing cuda context to worker pthreads将 cuda 上下文传递给工作线程
【发布时间】:2011-10-16 05:38:54
【问题描述】:

我有一些 CUDA 内核想在单独的 pthread 中运行。

我基本上必须让每个 pthread 执行,比如 3 个 cuda 内核,并且它们必须按顺序执行。

我想我会尝试向每个 pthread 传递对流的引用,因此这 3 个 cuda 内核中的每一个都将在同一个流中按顺序执行。

我可以在 pthread 的不同上下文中使用它,然后它会照常执行内核,但这似乎需要很多开销。

那么如何让每个 pthread 在同一个上下文中工作,同时与其他 pthread 一起工作?

谢谢

【问题讨论】:

    标签: c++ multithreading cuda cuda-context


    【解决方案1】:

    在 CUDA 4.0 之前,从不同 CPU 线程访问给定上下文的方法是使用 cuCtxPopCurrent()/cuCtxPushCurrent()。一个上下文一次只能对一个 CPU 线程是当前的。

    在 CUDA 4.0 中,您可以在每个 pthread 中调用 cudaSetDevice(),它一次可以是多个线程的当前线程。

    内核调用将由上下文按接收顺序进行序列化,但您可能必须执行 CPU 线程同步以确保按所需顺序提交工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2019-12-26
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多