【问题标题】:Concurrently running two for loops with same number of loop cycles involving GPU and CPU tasks on two GPU在两个 GPU 上同时运行两个循环次数相同的 for 循环,涉及 GPU 和 CPU 任务
【发布时间】:2013-09-04 15:33:28
【问题描述】:

我的代码中有两个for 循环运行相同数量的循环周期。这两个循环是独立的(每个循环处理不同的输入数据)。在一个循环中,有多个 CPU 功能和多个内核未同时运行。

我可以在不同的 GPU 上运行这些迭代吗?

【问题讨论】:

  • “迭代”是什么意思?你的意思是“循环”吗? for 循环,while 循环?这两个“迭代”是否具有相同的周期数?如果“迭代”在不同的数据上运行并且是独立的,那么我相信您可以在两个不同的 GPU 上分别运行所涉及的内核。但是,我认为您必须注意 CPU 处理在两个 GPU 的部分结果上的同步。因此,我认为您不会体验到2 的最大可能加速因子。
  • 是的,这些迭代是在 for 循环中调用的。并且迭代具有相同的周期数并且完全独立(单独的输入和输出)。我还有一个疑问。我需要创建流吗?我认为它必须在没有流的情况下正常工作。
  • 从 CUDA 4.0 开始,您可以使用cudaSetDevice() 设置与给定设备对应的当前上下文。当然,您可以在每个上下文中创建流以在同一个 GPU 上启用内核的并发执行,但我认为这不是您想要的。
  • 谢谢,现在清楚我需要做什么了。

标签: cuda gpgpu


【解决方案1】:

您可以在两个不同的 GPU 上分别运行相关内核。

您必须注意两个 GPU 的部分结果上的 CPU 处理同步。由于存在顺序部分,在使用2 GPU 时,您可能不会体验到2 的最大可能加速因子。

从 CUDA 4.0 开始,您可以使用 cudaSetDevice() 设置与给定设备对应的当前上下文,而无需创建流来启用多 GPU 处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2023-03-18
    • 2020-11-08
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多