MPI_shared_memory用于fortran中的大型数组

时间:2019-05-19 12:40:54

标签: fortran mpi shared-memory

我正在使用与mpi并行化的fortran代码,我需要改进并行化以获得更好的性能。
我有一个已分解为2D域分解的3D域,每个等级都有该域的模具。
在我的情况下,我有一个大型3D数组,例如Array_total(nx,ny,nz),分解后每个等级都有一部分该数组:

#0: Array_partial(nx,ny/4,nz/4) in rank 0
#1: Array_partial(nx,ny/4,nz/4) in rank 1
......

经过一些操作后,每个等级应该看到每个等级的Array_partial,我不能为每个等级使用allgather,因为Array_total非常大(大约10 GIG),无法将其收集到每个等级的本地缓冲区中,并且不能容纳在唯一的方法是mpi_shared内存,每个等级通过它共享自己的部分。

我知道使用mpi_shared内存在进程之间创建一个窗口的想法,这种想法对于行中具有共享内存的一个节点中的进程是可行的,但是也可以为两个进程之间的进程创建一个窗口2个节点?我的意思是在节点1和节点2的所有进程之间创建一个窗口?

不幸的是,在Fortran中没有足够的文档和mpi_shared内存示例,有人可以在Fortran中给我一个简单的示例并解释一下该函数的工作原理吗?

0 个答案:

没有答案