Opencl 混合MPI/GPU代码

Opencl 混合MPI/GPU代码,opencl,mpi,gpu,Opencl,Mpi,Gpu,我已经做了MPI和GPU版本的扩散方程 在MPI版本中,我通过对网格进行分解来计算下一个值,每个进程表示一个子网格 在GPU/OpenCL版本中,我通过将2D网格转换为1D并循环该1D网格的全局索引来计算下一个值,以实现所有网格的更新 现在,我想知道是否可以将这两个版本混合使用,即为每个MPI进程分配一个子网格,并在子网格中使用GPU/OpenCL计算值 我认为只有当GPU能够在不同的MPI进程之间共享资源时才可行(我只有一个GPU设备) 有人能告诉我这是否可行吗 谢谢当然,GPU可以在多个进程

我已经做了MPI和GPU版本的扩散方程

在MPI版本中,我通过对网格进行分解来计算下一个值,每个进程表示一个子网格

在GPU/OpenCL版本中,我通过将2D网格转换为1D并循环该1D网格的全局索引来计算下一个值,以实现所有网格的更新

现在,我想知道是否可以将这两个版本混合使用,即为每个MPI进程分配一个子网格,并在子网格中使用GPU/OpenCL计算值

我认为只有当GPU能够在不同的MPI进程之间共享资源时才可行(我只有一个GPU设备)

有人能告诉我这是否可行吗


谢谢

当然,GPU可以在多个进程之间共享。它仍然只是一种资源,因此,如果您以前在一个流程中合理地利用了它,那么就不要期望太多的扩展,因为现在您的流程正在竞争一种资源。最糟糕的情况是,如果您过度订阅GPU,性能实际上会变得更差。另一个需要注意的问题是GPU内存使用情况。

谢谢,所以在我的MPI代码中,我是否只需要在代码开始时初始化GPU一次(对于所有MPI进程,使用CLGetPlatformID、CLGetDeviceID、clCreateContext OpenCL函数…),或者我是否只需要对一个MPI进程进行初始化(例如秩0,条件是“if(秩==0)”然后{initialize_GPU()})?每个进程,假设MPI进程==OS进程。如果MPI进程==OS线程,则只需一次。我如何区分OS进程和OS线程?我只在代码MPI进程中使用它的标准形式。OS进程将显示在任务管理器(或您的同等平台)中;OS线程都位于单个进程下。