Ich schreibe ein sehr kleines Programm, um MPI (MPICH Implementierung) und Fortran 90 zu verstehen. Leider läuft der Code nicht richtig, wenn er mit "-np 2" ausgeführt wird.
Das ist der Code:
PROGRAM main
USE MPI
IMPLICIT none
INTEGER :: ierr, npe, mynpe
INTEGER :: istatus(MPI_STATUS_SIZE)
REAL :: aa
CALL MPI_INIT(ierr)
CALL MPI_Comm_size(MPI_COMM_WORLD, npe, ierr)
CALL MPI_Comm_rank(MPI_COMM_WORLD, mynpe, ierr)
IF (mynpe == 0) THEN
READ(*,*) aa
CALL MPI_Send(aa, 1, MPI_REAL, 1, 99, MPI_COMM_WORLD, ierr)
ELSE IF (mynpe == 1) THEN
CALL MPI_Recv(aa, 1, MPI_REAL, 0, 99, MPI_COMM_WORLD, istatus, ierr)
WRITE(*,*) "Ich habe die Zahl erhalten ", aa
END IF
CALL MPI_FINALIZE(ierr)
END PROGRAM
Ich kompiliere es mit mpif90 mpi_2.f90 -o output
und wenn ich es mit mpirun -np 2 output
ausführe, erhalte ich folgenden Fehler:
At line 14 of file mpi_2.f90 (unit = 5, file = 'stdin')
Fortran runtime error: End of file
Die Shell wartet immer noch auf eine Eingabe und wenn ich eine Zahl (z.B. 11) eingebe, erhalte ich folgende Ausgabe:
11
Fatal error in MPI_Send: Invalid rank, error stack:
MPI_Send(173): MPI_Send(buf=0xbff4783c, count=1, MPI_REAL, dest=1, tag=99, MPI_COMM_WORLD) failed
MPI_Send(98).: Invalid rank has value 1 but must be nonnegative and less than 1
--------------------------------------------------------------------------
mpirun noticed that the job aborted, but has no info as to the process
that caused that situation.
--------------------------------------------------------------------------
Vielen Dank für die Hilfe!