Nun habe ich bereits zweimal einen Kurs zur Parallelprogrammierung angekündigt (hier und hier). Und wir, in Mainz, bereiten auch wieder einen solchen Kurs für das nächste Frühjahr vor. Hoffentlich wieder in Präsenz, denn solche großen Kurse machen Spaß und ermöglichen auch regen Austausch zwischen den Teilnehmern – manche Zusammenarbeit fand hier ihren Anfang.

Nun gibt es auch die Möglichkeit online in das Thema zu schnuppern. Wer C/C++ oder Fortran beherrscht und lernen möchte, wie man hochparallele, wissenschaftliche Programme entwickelt, ist eingeladen in den Onlinekurs vom Höchstleistungsrechenzentrum Stuttgart (HLRS), ASTRON (womit hier im Blog endlich mal die Brücke zur Astronomie geschlagen wird) und SURFsara hineinzuschnuppern. Gefördert wurde die Entwicklung von der europäischen Allianz für das Hochleistungsrechnen PRACE.

Solch ein Kurs richtet sich an WissenschaftlerInnen aus den Bereichen Physik und Ingeneurswissenschaften (kein Anspruch auf Vollständigkeit, vielleicht gibt es auch in anderen Diziplinen Interessenten!), die beispielsweise den Bedarf sehen, in ihren Projekten mit wirklich großen Matrizes schnell zu rechnen. Wichtig ist auch zu wissen, dass der Kurs, dessen Link gleich folgt, keineswegs alle Aspekte des parallelen Programmierens abdeckt, nicht mal alle Aspekte, die es bei MPI (Link auf Wikipedia) gibt. Sondern ausschließlich die einseitige Kommunikation mit MPI (im Wesentlichen Punkt 2 im verlinkten Wikipedia-Artikel). Der wirklich gute Wikipediaartikel zeigt auch gleich, wie MPI-Direktiven (also der Code) aussehen – ein Kurs aber vermittelt erst das Gefühl, wie man eine solche Schnittstelle gut verwenden kann und parallele Programme designt.

Hier geht es zur Kursseite. Aus Erfahrung weiß ich, dass ein Kurs nicht ausreichene ist, um wirklich gut zu werden. Vielleicht sehen wir uns ja im nächsten Jahr beim Kurs in Mainz (auch andere Einrichtungen bieten solche Kurse an, teils noch online geplant, teils in Präsenz)? In meinen Augen ist ein Präsenzkurs, bei dem man Fragen stellen kann und Hilfestellung bei Problemen erhält, Gold wert. Und so würde ich mich freuen, wenn einige von euch berichten würden – ich selber werde nicht die Zeit haben den Kurs mal auszuprobieren.

 

flattr this!

Kommentare (4)

  1. #1 Joachim
    16. November 2021

    Vielen Dank für den interessanten Hinweis.

    Was mich erstaunt ist dass shared memory so im Vordergund steht. Geht das auf heutigen größeren Mulltiprozessorsystemen überhaupt so einfach?

    Was ist mit high-level Konzepten wie z.B. das Aktor-Modell? Da kommt niemand auf die Idee, in den anderen Prozess hineingreifen zu wollen. Spielen solche Dinge bei euch in der Praxis eine Rolle?

    • #2 Christian Meesters
      17. November 2021

      Darf ich etwas ausholen? Beschleunigung erreicht man u. a. durch Parallelisierung. Im Fall von MPI hauptsächlich durch verschiedene Prozesse. Diese müssen kommunizieren. Kommunikation ist “teuer”. Die Prozesse, die auf einem Knoten/Rechner laufen, können aber das shared memory model nutzen und so teilweise auf Kommunikation verzichten. Also, ja, das geht. Einfach? Das wird wohl im Auge der Anwender liegen.

      Bzgl. Aktor-Modell: MPI ist eine eigene Spezifikation. Einige Aspekte des Aktor-Modells findet man wieder, z. B. lässt sich Kommunikation zwischen den Prozessen auch asynchron realisieren. MPI geht aber darüber hinaus, z. B. durch die Möglichkeit shared memory nutzen zu können. MPI kennt sogar Threading, obwohl beides eher neuere Entwicklungen sind und der Standard historisch gesehen eben auf message passing zwischen Prozessen beruhte, die einander nicht in den Speicher schauen können.

      Ach so, und ob diese Dinge in der Praxis eine Rolle spielen? Ja. Auf welche Konzepte Teams zurückgreifen hängt natürlich von den zu implementierenden Konzepten/Algorithmen ab. Nicht jede MPI-Software benötigt spezielle Prozesstopologien bzw. -hierachien. Einige Programme sind hybrid in dem Sinn, dass der Multiprozessoranteil über MPI, der Threadinganteil über OpenMP realisiert wird. Etc. etc. Es ist … komplex. Eine Frage nach dem CPU-Stundenanteil auf einem typischen Cluster kann ich nicht beantworten, weil es das nicht gibt: Auf jedem Cluster gibt es unterschiedliche Nutzergruppen und demnach unterschiedliche Rechenanteile der versch. Programme. Und nur bei wenigen Programmen kenne ich die Software so gut, dass ich weiß, wie genau Effizienzsteigerungen erreicht werden.

  2. #3 Joachim
    18. November 2021

    Da kann ich sicher nicht widersprechen (sowieso nicht und will es auch gar nicht!). So ähnlich habe ich mir das vorgestellt.

    Angemerkt sei nur, dass z.B. das Aktormodell natürlich auch über shared memory realisiert werden kann und MPI nicht unbedingt widerspricht. Ist ein anderer Level, eben nicht gerade “Fortran” – sondern ähnlicher zu “OO”. Oder (jetzt übertrieben, es kommt natürlich drauf an) ist das Queues statt Blocking und Semaphoren.

    Und openMP? Ich hielt das immer für den Versuch Fortran zu parallelisieren, wo der Programmierer die verteilten Algorithmen gerade nicht finden konnte? Okay, es gibt Altlasten… Ist auch ein Argument.

    Ist das gänzlich falsch?

    Egal, MPI steht schon lange auf meiner (zu langen) Liste. Aber ich komme einfach nicht dazu. Und die passende Hardware, wo das Spaß macht, die fehlt mir auch.

    Aber spannend finde ich das! Sehr spannend. Da kann ich fast “neidisch” werden.

    • #4 Christian Meesters
      18. November 2021

      Ist das gänzlich falsch?

      Nö, genauso wenig wie meine Annahme zum Aktor-Modell – ich habe dennoch wieder was dazugelernt. Danke.

      OpenMP ist nicht allein für Fortran, sondern eine Programmierschnittstelle auch für C/C++. Im Grunde können auch andere Sprachen mit C/C++/Fortran-Bindings profitieren. So zum Beispiel Python, wo in Cython übersetzte Teile den global interpreter lock der Sprache “loslassen” können und dann echte Threads aufmachen dürfen. Oder numpy-Nutzer, die unmittelbar profitieren können, wenn Sie beispielsweise große Matrizes konvolutieren und die Bedingungen (z. B. Multiprozessorsystem, keine c-group-Beschränkungen, numpy richtig gegen OpenBlas o. FlexiBlas o. MKL gebaut) erfüllt sind: dann sieht mach auch einen Speedup, weil dieser Teil parallelisiert werden kann. Das geht prinzipiell auch auf 0815-Desktops.