Hallo liebe Community,
Im Rahmen meines Studiums führe ich die Entwicklung eines Programms weiter, welches auf Fortran basiert und mit Open MPI parallelisiert wird. Dazu verwende ich Ubuntu 22.04.1 auf einer virtuellen Maschine (VirtualBox 7.0.4).
Das hat bis vor kurzem auch alles reibungslos geklappt, jedoch bin ich dann durch ausführen des make Befehls auf folgende Fehlermeldung gestoßen.
mpifort -D_MPI_ -I/usr/lib/x86_64-linux-gnu/openmpi/lib/../../fortran/gfortran-mod-15/openmpi -I/usr/lib/x86_64-linux-gnu/openmpi/lib -I/usr/lib/x86_64-linux-gnu/openmpi/lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib/fortran/gfortran -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi -lopen-rte -lopen-pal -lhwloc -levent_core -levent_pthreads -lm -lz -O3 -Wall -cpp -g -Wno-unused -Wno-uninitialized -Wno-conversion -Wno-ampersand -ffpe-trap=invalid,zero,overflow,underflow -fcheck=all -fbacktrace -c Main.f90 -o Main.o f951: Warning: Nonexistent include directory ‘/usr/lib/x86_64-linux-gnu/openmpi/lib/../../fortran/gfortran-mod-15/openmpi’ [-Wmissing-include-dirs] f951: Warning: Nonexistent include directory ‘/usr/lib/x86_64-linux-gnu/openmpi/lib/../../fortran/gfortran-mod-15/openmpi’ [-Wmissing-include-dirs] Main.f90:65:7: 65 | use MPI | 1 Fatal Error: Cannot open module file ‘mpi.mod’ for reading at (1): Datei oder Verzeichnis nicht gefunden compilation terminated. make: *** [makefile:18: Main.o] Fehler 1
Ich kann leider nicht mehr nachvollziehen, was ich zwischen dem letzten erfolgreichen Ausführen des Programms und dem erstmaligen Erscheinen der Fehlermeldung am System geändert habe. Es dürfte wahrscheinlich auch keine Rolle mehr spielen, da ich mittlerweile die virtuelle Maschine komplett neu aufgesetzt habe. Das Programm (auch frühere Versionen, die bereits funktionsfähig waren und nicht mehr verändert worden sind) lässt sich allerdings immer noch nicht ausführen.
Nach dem neuen Aufsetzen der Maschine habe ich gemäß einer zur Verfügung gestellten Einweisung folgende Sachen installiert:
sudo apt-get install gfortran sudo apt-get install build-essential sudo apt-get -y install openmpi-bin
Meiner Erinnerung nach hat das damals ausgereicht, um das Programm erfolgreich ausführen zu können. Dies ist jetzt allerdings nicht mehr der Fall. Aktuell ist dadurch Open MPI 4.1.2 und GNU Fortran 11.3.0 installiert.
Die Makefile sieht wie folgt aus:
SRC=Main.f90 EXE=calc.mpi OBJ=$(SRC:.f90=.o) FC = mpifort all:$(EXE) $(EXE):$(OBJ) $(FC) $(CPPFLAGS) $(FCFLAGS) -o $(EXE) $(OBJ) %.o:%.f90 input_parameters.h $(FC) $(CPPFLAGS) $(MPICFLAGS) $(FCFLAGS) -c $< -o $@ #$(OBJ):$(INCL) clean: rm -rf $(EXE) *.o *.mod FCFLAGS =$(MPILNFLAGS) -O3 -Wall -cpp FCFLAGS +=-g #DEBUG FLAGS #FCFLAGS +=-Wextra FCFLAGS +=-Wno-unused FCFLAGS +=-Wno-uninitialized FCFLAGS +=-Wno-conversion FCFLAGS +=-Wno-ampersand FCFLAGS +=-ffpe-trap=invalid,zero,overflow,underflow FCFLAGS +=-fcheck=all -fbacktrace #FCFLAGS +=-finit-real=nan #FCFLAGS +=-fdefault-real-8 -fdefault-double-8 #DFLAGS =-D_MPI_ CPPFLAGS =-D_MPI_ #MPI COMPILE FLAGS MPICFLAGS =$(shell mpifort --showme:compile) #MPI LINK FLAGS MPILNFLAGS =$(shell mpifort --showme:link)
Als vage Laien-Vermutung habe ich, dass sich durch irgendein Update die Verzeichnisstruktur von Open MPI verändert hat und die mpi.mod deswegen woanders lokalisiert ist. Die in der Fehlermeldung auftauchenden Verweise
-I/usr/lib/x86_64-linux-gnu/openmpi/lib/../../fortran/gfortran-mod-15/openmpi -L/usr/lib/x86_64-linux-gnu/openmpi/lib/fortran/gfortran
sind in meiner Ordnerstruktur jedenfalls nicht vorhanden. Der Pfad existiert bei mir nur bis
/usr/lib/x86_64-linux-gnu/openmpi/lib/openmpi3/
wobei openmpi3 der einzige Ordner in lib ist.
Eine Suche nach mpi.mod ergibt, dass die Datei 4x vorhanden ist:
boot/grub/i386-pc boot/grub/x86_64-efi usr/lib/grub/i386-pc usr/lib/grub/x86_64-efi
Jetzt weiß ich allerdings als Linux-Anfänger nicht, ob mir diese Erkenntnis was bringt oder wie ich eine Veränderung herbeiführen kann, dass eine der vier Dateien von meinem Programm gefunden wird.
Ich freue mich sehr über eure Hilfe, zumal ich eigentlich kurz vor dem Abschluss meiner Arbeit bin.
Viele Grüße, Sebastian