Zum Inhalt springen

Fortran: Fortran 2003: Coarrays

Aus Wikibooks
<<< 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 chmod zu 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 images
  • this_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.

[Bearbeiten]

Gedruckte Bücher

[Bearbeiten]



<<< zur Fortran-Startseite
<< Fortran 2003 Bibliotheken >>
< Submodules Sonstiges >