【问题标题】:Multi-gpu kernel launch多 GPU 内核启动
【发布时间】:2020-08-26 21:54:15
【问题描述】:

我想知道在没有实际合作的情况下通过cudaLaunchCooperativeKernelMultiDevice 在多个 GPU 上启动内核与传统循环相比是否有任何优点/缺点:

for loop over device ids
{
    cudaSetDevice(id);
    kernel<<<..., stream[i]>>>( ... );
}

cudaLaunchCooperativeKernelMultiDevice 的代码肯定比循环少...

【问题讨论】:

  • 我想您会发现cudaLaunchCooperativeKernelMultiDevice 最终的源代码行数比您在此处显示的循环要多。此外,在启动多设备内核之前,最好检查所有设备是否支持该功能。这是设备以及您正在运行的操作系统的功能。当您这样做时,您还通过您的源代码进行交流,表明需要它。如果实际上不需要它,那对于可能维护您的工作的人来说是一件令人困惑的事情。

标签: cuda multi-gpu


【解决方案1】:

一个可能的缺点是,并非所有多 GPU 系统都支持多网格协作启动机制,而循环启动方法则支持。

因此,通过使用cudaLaunchCooperativeKernelMultiDevice,您可以将代码可以正确运行的系统的占用空间限制为具有cudaDevAttrCooperativeMultiDeviceLaunch 属性集的系统。

其中隐含的各种限制包括无法在具有 WDDM 模式的 GPU 的系统上运行,以及无法在 GPU 的计算能力不完全相同的系统上运行。您可以在the programming guide 中阅读其他一些限制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 2015-11-12
    • 2012-10-28
    • 2019-02-19
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多