Fortran: Fortran 2003: Coarrays
Erscheinungsbild
| <<< zur Fortran-Startseite | |
| << Fortran 2003 | Bibliotheken >> |
| < Submodules | Sonstiges > |
- Coarrays ermöglichen eine parallele Programmausführung.
- Coarrays gibt es seit Fortran 2008.
- Standardmäßig unterstützen die getesteten Compiler Coarrays aber nur nach einigen Vorbereitungsarbeiten! Es bestehen z.B. Abhängigkeiten zu Bibliotheken, die nicht standardmäßig installiert werden. Nachfolgend sei nur die erforderliche Vorgehensweise für Intels ifx unter OpenSUSE Leap gezeigt.
Intels ifx und Coarrays
[Bearbeiten]Als Testbeispiel sei bsp.f90 gegeben:
| Fortran 2003 (oder neuer)-Code |
program bsp implicit none integer :: num num = num_images() print *, "Hallo ", this_image(), "von ", num, "images" end program bsp |
Dann sind, wie bereits erwähnt, einige vorbereitende Arbeiten nötig:
- Zuerst muss Intels MPI-Bibliothek installiert werden. Zu beziehen ist sie dzt. kostenfrei über [1]. Dies ist eine .sh-Datei, die ausgeführt werden muss (d.h. die entsprechenden Befugnisse sind mittels
chmodzu setzen). Es öffnet sich ein Fenster, das durch die Installationsprozedur führt. - Dann muss der Bibliothekspfad erweitert werden (die vier Punkte stehen nachfolgend stellvertretend für das entsprechende Home-Verzeichnis):
LD_LIBRARY_PATH="/..../intel/oneapi/compiler/2025.2/lib/:/..../intel/oneapi/mpi/2021.16/lib/:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
- Jetzt sollte sich das Programm mittels ifx bsp.f90 -coarray compilieren und linken lassen.
- Tritt beim Ausführen der ./a.out-Datei eine Fehlermeldung der Art mpiexec.hydra nicht gefunden auf, so muss der entsprechende Pfad erweitert werden, z.B. mit
PATH="/..../intel/oneapi/mpi/2021.16/bin/:$PATH" export PATH
- Nun sollte sich das Programm starten lassen und folgende Ausgabe (z.B. bei vier Prozessoren oder Kernen) erscheinen:
Hallo 2 von 4 images Hallo 3 von 4 images Hallo 4 von 4 images Hallo 1 von 4 images
Wird das Beispiel ohne die Option -coarray auf dem selben Rechner compiliert, so ergibt sich nur
Hallo 1 von 1 images
Erläuterungen zu obigem Programm:
num_images()... Anzahl der imagesthis_image()... Nummer des jeweiligen images
Einige Details zu Coarrays
[Bearbeiten]- Prozesse werden als "images" bezeichnet.
- Jedes image führt das selbe Programm aus (SPMD ... single program, multiple data)
Beispiel: Das image mit der Nummer 1 soll eine andere Ausgabe wie die restlichen images erzeugen.
| Fortran 2003 (oder neuer)-Code |
program bsp
implicit none
if (this_image() == 1) then
print *, "Ich bin das image 1"
else
print *, "Ich bin ein anderes image"
end if
end program bsp
|
Ausgabe:
Ich bin das image 1 Ich bin ein anderes image Ich bin ein anderes image Ich bin ein anderes image
Beispiel: codimension
| Fortran 2003 (oder neuer)-Code |
program bsp implicit none integer, codimension[*] :: num num = this_image() print *, num[1] print *, num[2] end program bsp |
Ausgabe:
1
2
1
1
1
2
2
2
Beispiel: sync all
| Fortran 2003 (oder neuer)-Code |
program bsp implicit none integer, codimension[*] :: num num = this_image() print *, num[1] sync all print *, num[2] end program bsp |
Ausgabe:
1
1
1
1
2
2
2
2
Für weiterführende Details zu Coarrays sei auf die Weblinks verwiesen.
Einige Neuerungen mit Fortran 2018
[Bearbeiten]Mit Fortran 2018 wurde das parallele Programmieren erweitert:
- Teams
- Events
- etc.
Dieses Thema ist schon sehr speziell. Es sei vorerst auf den Weblink "The new features of Fortran 2018 von John Reid" verwiesen.
Weblinks
[Bearbeiten]- Coarrays in the next Fortran Standard von John Reid, 2010, PDF-Datei
- Coarray Fortran von Reinhold Bader, Leibniz-Rechenzentrum, PDF-Datei
- The new features of Fortran 2018 von John Reid, PDF-Datei
Gedruckte Bücher
[Bearbeiten]- Brainerd: Guide to Fortran 2008 Programming; Springer, 2015, ISBN 978-1-4471-6889-8
| <<< zur Fortran-Startseite | |
| << Fortran 2003 | Bibliotheken >> |
| < Submodules | Sonstiges > |