【问题标题】:Use Multiple Host Threads on a Single GPU在单个 GPU 上使用多个主机线程
【发布时间】:2021-04-19 02:09:03
【问题描述】:

现在我正在使用 ROS 开发一个 CUDA 项目。有两个节点对应2个主机线程,需要同时启动2个不同的CUDA内核。

所以我想知道:

  1. 如果我不使用 CUDA Stream,单个 GPU 是否可以同时被两个主机线程调用?(假设 GPU 资源足以同时启动这两个内核。)
  2. 如果不是,为什么?
  3. 如果我不使用 cuda 流,这两个内核是绑定到单个 CUDA 上下文还是两个?
  4. 如果我使用 CUDA 流,这两个内核是绑定到单个 CUDA 上下文还是两个?
  5. 如果它们位于两个不同的 CUDA 上下文中,GPU 如何处理它们同时调用的启动/操作?

我现在使用带有 CUDA 11.0 和 i9-10900k 的 RTX 3090,它有 10 个内核。

【问题讨论】:

    标签: multithreading cuda gpu ros


    【解决方案1】:
    1. 如果我不使用 CUDA Stream,两个主机线程能否同时调用单个 GPU?

    基本上没有。来自同一进程的线程共享一个公共上下文。上下文仅在使用流时才公开并发性。如果您将代码构建为使用per thread default stream,您可能能够获得一定程度的并发,但这仍然是使用流,只是隐式而不是显式。

    1. 如果不是,为什么?

    因为 NVIDIA 就是这样设计它的。

    1. 如果我不使用 cuda 流,这两个内核是绑定到单个 CUDA 上下文还是两个?

    一个。从 CUDA 4 开始,该模型是每个设备每个进程一个上下文。

    1. 如果我使用 CUDA 流,这两个内核是绑定到单个 CUDA 上下文还是两个?

    见上

    1. 如果它们位于两个不同的 CUDA 上下文中,GPU 如何处理它们同时调用的启动/操作?

    他们不是,所以这是没有实际意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      相关资源
      最近更新 更多