저는 포트란과 함께 mpi를 배우고 있습니다. 나는 다음과 같은 간단한 코드를 작성했다.mpi_recv mpi_send에서 보낸 데이터의 절반 만 수신합니까? 매우 혼란 스럽네요
program arraypractice
use mpi
integer pid, np, ierr, arraysize, i,msg, status(mpi_status_size)
integer dcount
real*8 f(10), f1(10)
call mpi_init(ierr)
call mpi_comm_size(mpi_comm_world, np, ierr)
call mpi_comm_rank(mpi_comm_world, pid, ierr)
if(pid==0) then
do i = 1, 10
f(i)=float(i)
enddo
endif
msg = 1
if(pid==0) then
call mpi_send(f(1),6,mpi_real,1,msg,mpi_comm_world,ierr)
endif
if(pid==1) then
call mpi_recv(f1(1),6,mpi_real,0,msg,mpi_comm_world,status,ierr)
call mpi_get_count(status,mpi_real,dcount,ierr)
print *,dcount
do i= 1, 6
print *,f1(i)
enddo
endif
call mpi_finalize(ierr)
end
나는 아치 리눅스 내 I5 듀얼 코어 노트북에 명령 "의 a.out에 mpirun -n 2"를 사용하여 실행 한 후 "mpif90"명령을 사용하여 코드를 컴파일하고있다. 내 결과는 다음과 같습니다.
6
1.0000000000000000
2.0000000000000000
3.0000000000000000
0.0000000000000000
0.0000000000000000
0.0000000000000000
마지막 3 개의 숫자가 업데이트되지 않는 이유에 대해 완전히 혼란 스럽습니다. mpi_recv가 mpi_send가 보내는 데이터의 절반 만 수신 할 때마다. 나는 출력이
6
1.0000000000000000
2.0000000000000000
3.0000000000000000
4.0000000000000000
5.0000000000000000
6.0000000000000000
어떤 도움이 정말 감사하겠습니다 될 것으로 기대한다.
감사합니다. 그것은 나를 위해 문제를 해결했다. –
또한 실제 * 8은 표준 포트란이 아니며 Fortran 표준이 아니 었습니다. 나는 당신이 친절한 메커니즘에 대해 알 것을 강력히 권합니다. –