如何使一个Fortran数组包含两个指针数组?

时间:2017-03-29 19:17:21

标签: arrays pointers fortran mpi shared-memory

Fortran代码: 试图利用MPI共享内存窗口,我对fortran指针没有多少经验。

要求: 我想做的是有多个(两个或更多)处理器分配共享内存,但将这些位置映射到单个阵列 A , 例如,如果使数组为100,则分配2个内存

以下是代码:

N=10
!allocate shared memory window
if(shmrank<2)then !allocate all memory on proc 1 and 2
 winsize=8_MPI_ADDRESS_KIND*N*(N/2)
else
 winsize=0_MPI_ADDRESS_KIND
end if
!Begin shared memory window
call mpi_win_allocate_shared(winsize,1,MPI_INFO_NULL,shmcomm,baseptr,win,ierr)

然后我可以使用shared_query获取大小和指针位置,其中 baseptr0 指的是由处理器0

分配的内存>
call MPI_Win_shared_query(win,0,winsize,disp_unit,baseptr0,ierr)
 !  write(6+rank,*)'post shared_query',shmrank,winsize0
call MPI_Win_shared_query(win,1,winsize,disp_unit,baseptr1,ierr)
 !  write(6+rank,*)'post shared_query',shmrank,winsize1

要在单个处理器上分配所有内存,我只需执行以下操作,

!associate Fortran pointer with shared memory
  call C_F_POINTER(baseptr, A, arrayshape)

我现在可以访问A(1:100)。

如果可能,我想访问A,例如,A(1)从baseptr0开始,A(50)从baseptr1开始。

我的问题: 有没有办法做到这一点?或者替代方案不需要对代码的其余部分进行太多更改?

0 个答案:

没有答案