Fortran und C++ besser miteinander kombinieren

puzzle

Puzzleteile: Wenn Codes in unterschiedlichen Programmiersprachen zusammenarbeiten sollen, brauchen sie Tools, etwa Adapter. Foto: Adobe

Fortran und C++ sind im High Performance Computing (HPC) weit verbreitet, oft sollen sogar Codes oder Software, die in diesen Programmiersprachen geschrieben wurden, miteinander kooperieren. Damit das funktioniert hat Ivan Pribec, Forscher am Leibniz-Rechenzentrum (LRZ) und Teil des Computational X Supports für Anwender:innen der Supercomputer, einen Adapter entwickelt. Während der Konferenz der Platform for Advanced Supercomputing (PASC) in Davos präsentierte der Chemie-Ingenieur diese Lösung für eine bessere Interoperabilität – und gewann damit einen Preis für das beste, wissenschaftliche Poster: schöner Anlass, um sich von ihm neue Programmiertechnik und Aufgaben erklären zu lassen.

Herzlichen Glückwunsch, Ivan, zum ausgezeichneten wissenschaftlichen Poster auf der PASC23. Was erklärst du damit? Ivan Pribec: Vielen Dank – mein Poster erklärt eine Lösung für die Übergabe von Arrays zwischen C++ und Fortran, zwei Programmiersprachen, die im High Performance Computing, HPC, und darüber hinaus sehr verbreitet sind. Im Software-Jargon wird diese Art von Lösung als Adapter bezeichnet, zwei unterschiedliche Einheiten können so miteinander arbeiten, weil ihre Schnittstelle in eine Schnittstelle umgewandelt wird, die beide Clients erwarten.

Warum interessierst du dich für Fortran und C++? Pribec: Eigentlich wollte ich verfahrenstechnische Berechnungen für Chemie-Ingenieure durchführen, etwa für chemische Reaktoren oder industrielle Trockner. Um gute Codes und Software dafür zu entwickeln, braucht man zuverlässige und leistungsfähige Bibliotheken mit mathematischen Routinen und numerischen Solvern. Viele davon sind in Fortran, C und C++ geschrieben.

Wie bist du auf präsentierte Lösung gekommen? Pribec: Nachdem ich mich 2018 in die neuen Funktionen von C++20 und Fortran eingearbeitet hatte, konnte ich die Lösung schrittweise entwickeln. Für eigene Forschungsarbeiten hatte ich schon mehrere so genannten Wrapper-Bibliotheken geschrieben, also Bibliotheken mit eindeutigen, standardisierten Schnittstellen für beide Programmiersprachen. Wie C++ und Fortran zusammen interagieren, war mir vertraut. Danach besuchte ich noch bei dem Erlanger Informatiker Klaus Iglberger, einen Kurs über fortgeschrittene Konzepte von C++. Beim LRZ wiederum betreue ich seit Mitte 2022 das Exzellenzcluster CompBioMed, für das Software, Algorithmen, Simulations- und HPC-Codes rund um medizinische und pharmazeutische Fragestellungen entwickelt werden. Dafür arbeiten wir mit mehreren Codes, die in C++ geschrieben wurden sowie Alya, einen großen Code der numerischen Mechanik für multiphysikalische Berechnungen in Fortran. Da stellte sich die Frage, wie wir den Datenaustausch zwischen diesen Codes künftig optimieren oder einfacher machen können. Und so entstand schrittweise die Lösung, die ich auf der PASC23 präsentierte.

Warum brauchen Forschende deine Lösung? Pribec: Wenn sie Daten analysieren oder Berechnungen durchführen, verlassen sich Forschende auf Software und deren Bibliotheken. Aufgrund ihrer starken Abstraktionsfähigkeit und Performance werden immer mehr spezialisierte Softwarebibliotheken heute in C++ geschrieben. Nach dem Motto ,der beste Code ist der, den man nicht selbst schreiben muss’ ist es sinnvoller, diese Bibliotheken wieder zu verwenden und sie nicht in eine andere Sprache zu übertragen. Andererseits bietet Fortran einige Tricks, die das Schreiben von numerischem Code für Ingenieure attraktiv machen. Forschende arbeiten folglich sehr oft mit beiden Sprachen, und mit meiner Lösung können sie sie miteinander kombinieren und mischen.

Noch weitere Tricks für die Arbeit mit Fortran und C++ auf Lager? Pribec: C++ hat in letzter Zeit zwei neue Standard-Container eingeführt, nämlich std::span und std::mdspan. Ohne großen Mehraufwand können bei ihrem Einsatz große Vorteile für die Interoperabilität mit Fortran entstehen, auch ohne die Adapter-Lösung.

Du betreust am LRZ CompBioMed, bist auch hier mit der Interoperabilität zwischen Fortran und C++ beschäftigt. Wo genau? Pribec: CompBioMed erforscht Multiphysik-Simulationen, für die man verschiedene physikalische Modelle koppelt, etwa ein Modell für die Elektrophysiologie und Mechanik des Herzens mit einem Modell für den Blutfluss in Arterien und Venen. Je nach Fachwissen und Fähigkeiten der Forschenden werden solche Modelle in verschiedenen Programmiersprachen geschrieben, müssen aber später auf dem Supercomputer zusammen funktionieren. Zum Koppeln dieser unterschiedlichen Codes gibt’s mehrere Möglichkeiten: über externe Dateien, über das Message Passing oder Bibliotheksaufrufe. Der von mir entwickelte Adapter soll das Schreiben von Code in der Kopplungsschicht vereinfachen.

Was sind weitere Aufgaben bei CompBioMed? Pribec: CompBioMed konzentriert sich auf die Digitalisierung von Medizin und Pharmaforschung, ein Ziel ist die Entwicklung eines digitalen Zwillings des Menschen, der Virtual Human. Meine Hauptaufgabe dabei ist die Koordination des Arbeitspaketes „Datenmanagement und -Analytik“, dafür verfolge ich die vom Team erarbeiteten Lösungen und Fortschritte, sorge für den Informationsaustausch unter den beteiligten Partnerinstitutionen und bereite Präsentationen sowie Berichte vor. In Zusammenarbeit mit den Forschenden und Entwickler:innen bereite ich außerdem bestehende CompBioMed-Codes für die nächste Generation der Supercomputer, die Exascale-Rechner vor. Wir unterstützen zum Beispiel dabei, diese auf die neueren Graphics Processing Units, GPU, zu portieren, testen Software und entwickeln Benchmarks für Leistungsvergleiche.

Und außerdem bist du in die Vorbereitungen der CompBioMed Conference ab 12. September 2023 in Garching involviert. Pribec: Die Konferenz ist ein Schaufenster für die Fortschritte im biomedizinischen Rechnen. Ich sorge dabei für einen reibungslosen Ablauf vor Ort und im Konferenzprogramm. Glücklicherweise werde ich dabei von den Kolleg:innen am LRZ und dem restlichen Organisationskomitee kräftig unterstützt.

Präsentierst du dort auch dein Poster? Pribec: Ja klar, aber bis dahin werde ich es erweitert und um praktische Anwendungsbeispiele ergänzt haben.

Wie bist du eigentlich ans LRZ und zu CompBiomed gekommen? Pribec: Ich bin in Australien geboren, in Slowenien aufgewachsen und habe Chemie-Ingenieurswesen an der Universität von Ljubljana studiert. Danach wollte ich an der Technischen Universität München und am Lehrstuhl für Brau- und Getränketechnologie in Weihenstephan promovieren. Dafür arbeitete ich an verschiedenen, interessanten Themen, etwa das Trocknen von Nudeln, an Zellpopulationsbilanzen oder Messungen der Oberflächenspannung, außerdem mit Gitter-Boltzmann-Methoden. Man hat mich in Weihenstephan sehr unterstützt und mir ermöglicht, eigene Ideen zu entwickeln. Ich war zudem zertifizierter Verkoster und probierte regelmäßig Biersorten. Nach vier Jahren entschied ich mich trotzdem, tiefer in die Computerwelt einzutauchen und bewarb mich beim LRZ und für das CompBioMed-Projekt.

Und wie wird es weitergehen? Pribec: Zurzeit schreibe ich an zwei Fachbeiträgen über Lattice Boltzmann-Methoden im Zusammenhang mit meiner Doktorarbeit. Nächstes Jahr werde ich meine Dissertation verteidigen. Seit ich am LRZ arbeite, interessiere ich mich immer mehr für gute und nachhaltige Software-Praktiken, und dieses Thema würde ich gerne weiterverfolgen. Gerne würde ich mehr über das Performance-Tuning im HPC und die GPU-Programmierung lernen. Und natürlich würde ich gerne beobachten, wie der Fortran/C++-Adapter von der Programmiergemeinschaft angenommen wird und sich weiterentwickelt. (Interview: vs)

Ivan Pribecs Poster findet sich online hier: https://tiny.badw.de/zOEcHP

IP

Ivan Pribec, Forscher am LRZ