在多GPU系统上拆分阵列并在不同GPU之间传输数据

里昂

我在使用NVIDIA GTX 590卡的双GPU系统上使用CUDA,并且根据下图对阵列进行了分区。

如果要用于CudaSetDevice()在GPU上拆分子阵列,它们将共享相同的全局内存吗?第一台设备可以访问第二台设备上的更新数据吗?

谢谢你。 在此处输入图片说明

汤姆

每个设备的内存都是独立的,因此如果您先调用cudaSetDevice(A),然后cudaMalloc()再在设备A上分配内存。如果随后从设备B访问该内存,则访问延迟会更高,因为访问必须通过外部PCIe链接进行。

另一种策略是在GPU上划分结果并存储每个GPU上所需的所有输入数据。这意味着您有一些重复的数据,但这是GPU(以及实际上是任何并行方法,例如MPI)编程中的常见做法-您经常会听到术语“光晕”应用于需要在两次更新之间传输的数据区域。

请注意,cudaDeviceCanAccessPeer()如果您有双GPU卡,则可以使用来检查一台设备是否可以访问另一台设备的内存,这始终是正确的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章