1
这与“使用MPI_Send/Recv处理Fortran 90中的多灰数组的块”上的较早线程相关。我的阵列是真实的,3调光说5 5 5,即X(1:5,1:5,1:5)如果我想给我的数组的下一部分说使用FORTRAN 90中的MPI_Type_Create_Subarray 90
x(2:3,2:5,4:5)
到从0 PROC 1,我使用了以下测试程序
program mpi
implicit none
include "mpif.h"
integer :: ierr,myid,nprocs,status(mpi_status_size),i,j,k,&
& starts(3),newsize(3),oldsize(3)
real :: x(1:5,1:5,1:5),y(1:5,1:5,1:5),z(2:3,2:5,4:5)
integer :: arr
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world,myid,ierr)
call mpi_comm_size(mpi_comm_world,nprocs,ierr)
if(myid == 0) then
x = 0.0
call random_number(x)
starts = (/2,2,4/)
newsize = (/2,4,2/)
oldsize = (/5,5,5/)
call mpi_type_create_subarray(3,oldsize,newsize,starts,mpi_order_fortran, &
& mpi_real,arr,ierr)
call mpi_type_commit(arr,ierr)
call mpi_send(x,1,arr,1,1,mpi_comm_world,ierr)
do i = 2,3
do j = 2,5
do k = 4,5
print*,'#1',x(i,j,k)
enddo
enddo
enddo
print*,' '
else
y = 0.0
call mpi_recv(z,16,mpi_real,0,1,mpi_comm_world,status,ierr)
do i = 2,3
do j = 2,5
do k = 4,5
print*,'#2',z(i,j,k)
enddo
enddo
enddo
endif
call mpi_finalize(ierr)
stop
end
我正在与该“开始”阵列运行时错误。它的元素必须是0或1.我在这里错过了什么?这是什么正确的形式?我无法找到使用此的FORTRAN示例。
感谢您的信息。如果数组从一个负数索引开始,对于父数组x(-n:n,-m:m),我想发送数据块x(-2:0,:)?现在应该是什么开始数组? – Madhurjya
@Madhurjya,'-2'与'-n'的偏移量是'(-2) - ( - n)= n-2'。对于第二维,偏移量为“0”。 –
谢谢Alexander和Hristo!讨论对我有很大的帮助。 – Madhurjya