通过MPI协议求解位于不同簇节点上的多个GPU上的泊松方程

时间:2013-09-19 13:41:40

标签: cuda mpi gpu thrust petsc

我正在尝试使用C / CUDA中的代码和MPI库在多GPU架构上的实空间中求解泊松方程。目前,我只对在周期性盒子中解决问题感兴趣。但是在将来,我可能想看看球面几何。

是否有解决此问题的现有例程? 2012年8月的评论似乎表明推力库不适用于多GPU架构。这还是正确的吗?

如果例程存在,它使用什么方法(Jacobi,SOR,Gauss-Seidel,Krylov)? 请表达您对速度和遇到的问题的看法。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

推力可用于多GPU环境。您可以使用运行时api即cudaSetDevice来切换设备。由于推力隐式处理向量的分配和解除分配,因此必须注意确保在声明设备向量时以及在它们被解除分配时选择正确的设备,即超出范围。

答案 1 :(得分:1)

通过多GPU方法求解泊松方程,其中GPU位于通过使用MPI协议进行交互的不同群集节点上,是一个相对较新的研究课题。基本思想是使用域分解,以便每个GPU解决计算域的一部分,并使用MPI来交换边界数据。

您可能希望查看2012年GTC上提交的论文Towards a multi-GPU solver for the three-dimensional two-phase incompressible Navier-Stokes equationsAn MPI-CUDA Implementation for Massively Parallel Incompressible Flow Computations on Multi-GPU Clusters。特别是在第一种方法中,Navier-Stokes方程通过Chorin的投影方法求解,而投影方法又需要泊松方程的解,这是最苛刻的任务,并且通过利用Jacobi预处理共轭梯度求解器的MultiGPU / MPI策略来解决。

关于可用的例程,过去我已经碰到了GAMER,这是一个可下载的天体物理应用软件。作者声称该代码包含各种GPU加速泊松求解器和混合OpenMP / MPI / GPU并行化。但是,我从未有机会下载它。