我想知道,与传统循环相比,在没有实际合作的情况下通过cudaLaunchCooperativeKernelMultiDevice
在多个GPU上启动内核是否有任何优势/缺点:
for loop over device ids
{
cudaSetDevice(id);
kernel<<<...,stream[i]>>>( ... );
}
cudaLaunchCooperativeKernelMultiDevice
绝对比循环少……
我想知道,与传统循环相比,在没有实际合作的情况下通过cudaLaunchCooperativeKernelMultiDevice
在多个GPU上启动内核是否有任何优势/缺点:
for loop over device ids
{
cudaSetDevice(id);
kernel<<<...,stream[i]>>>( ... );
}
cudaLaunchCooperativeKernelMultiDevice
绝对比循环少……
一个可能的缺点是,并非所有的多GPU系统都支持多网格协作启动机制,而循环中启动方法受支持。
因此,通过使用cudaLaunchCooperativeKernelMultiDevice
,您可以将代码可以正确运行的系统的占用空间限制为设置了cudaDevAttrCooperativeMultiDeviceLaunch
属性的系统。
在此暗示的各种限制中,不能在带有WDDM模式下的GPU的系统上运行,也不能在GPU的计算能力不完全相同的系统上运行。您可以在the programming guide中阅读其他一些限制。