Interview zur Parallelprogrammierung mit James Reinders

Seite 2: Veränderungen

Inhaltsverzeichnis

heise Developer: Was sind Ihrer Meinung nach die größten Veränderungen, die die Parallelprogrammierung in den letzten Jahren durchgemacht hat?

Reinders: Ich glaube, der wichtigste Punkt ist, dass es eine größere Bereitschaft dazu gibt, abstrakte parallele Programmierung einzusetzen. Es wird beispielsweise mehr mit der C++-Bibliothek Threading Building Blocks (TBB) und OpenMP gearbeitet. Viele Leute haben früher darauf bestanden, das zu verwenden, was ich die Assembly Language der parallelen Programmierung nenne. Sie haben also durchweg mit Pthreads und Windows-Threads gearbeitet. Programmierung auf dieser niederen Ebene habe ich in letzte Zeit nicht mehr beobachten können. Die Leute sagen vielmehr, dass sie dafür keine Zeit mehr haben und es Werkzeuge gibt, die das besser erledigen können.

Das ist ein bisschen mit der Entwicklung der Programmiersprachen vergleichbar: In den 1960er-Jahren haben die Leute langsam aufgehört, in Assembler-Sprache zu programmieren und begannen, Fortran zu entwickeln – und danach kam C auf. Ich kann mich allerdings daran erinnern, dass ich auch in den späten 1990er-Jahren noch Leute getroffen habe, die zur Programmierung von MMX oder SSE (Streaming SIMD Extensions) die Assembler-Sprache verwendeten. Aber da war sie eigentlich schon einer Art Abstraktionsschicht gewichen. Und so ist es auch in der parallelen Programmierung: Die Menschen denken abstrakter, setzen mehr auf TBB und OpenMP, und man sieht auch immer mehr, die Python nutzen. Die Sprache ist vielleicht nicht so effizient, aber sie eignet sich einfach gut, um Prototypen für Parallelprogramme zu schreiben.

Zusammenfassend sehe ich parallele Programmierung mittlerweile also auf einem höheren Level.

heise Developer: Am Anfang war die Zielgruppe der Werkzeuge für parallele Programmierung ja eher die der Softwarearchitekten. Sie war also etwas für sehr spezialisierte Entwickler. Hat sich das Ihrer Meinung nach mittlerweile geändert?

Reinders: Ja, absolut! Die Community ist deutlich gewachsen. Am Anfang hatte ja auch Intel verstärkt Softwarearchitekten angesprochen. Denn wenn man sie nicht für das Konzept hätte begeistern können, wäre es schwierig gewesen, eine größere Menge von Leuten damit zu erreichen. Mittlerweile gibt es deutlich mehr Interesse am Thema. Und gerade auch durch die Ausweitung der Zielgruppe ist das eben erwähnte höhere Abstraktionslevel nötig, damit man mehr Menschen erreichen kann.

Wir sehen auch, dass parallele Programmierung häufiger im Grundstudium behandelt wird. Zwar bei weitem nicht so intensiv, wie wir es uns wünschen würden, da entsprechende Architekturen heutzutage ja fast überall sind. Es ist ein bisschen erschreckend, dass man das Informatik-Grundstudium in den USA abschließen kann, ohne jemals mit Parallelisierung in Berührung gekommen zu sein, aber auch das bessert sich langsam.

heise Developer: Betrachtet man sich die Landschaft der parallelen Programmierung, tauchen dort zunehmend mehr Bibliotheken und Konzepte auf, die bei der Entwicklung unterstützen und ihren Nutzern helfen, die grundlegenden Ideen besser zu verstehen. Kann es sein, dass damit auch ein bisschen der Reiz verloren geht und dass die parallele Programmierung nun als weniger anspruchsvoll wahrgenommen wird?

Reinders: Ich glaube, es gibt immer noch Konzepte wie Nebenläufigkeit, Race Conditions und Dead Locks, die jeder Programmierer kennen sollte. Vor kurzem habe ich an der California State Polytechnic University einen Kurs gegeben, und da gab es Studenten, die all diese Begriffe bereits kannten, und andere, die sie noch nie in ihrem Leben gehört hatten. Es ist aber wichtig, dass jeder Programmierer die Grundlagen der parallelen Programmierung kennt. Auch wenn sie keine parallelisierten Programme schreiben wollen, sie werden früher oder später mit den Herausforderungen konfrontiert werden, die beispielsweise mit Nebenläufigkeit einhergehen. In Cloud-Szenarien zum Beispiel ist es sehr wichtig Nebenläufigkeit zu verstehen.

Es gibt zwar viele Bibliotheken und andere Hilfsmittel, aber man sollte die Grundkonzepte verstehen. Wenn man nicht mit ihnen vertraut ist, helfen auch die Bibliotheken nicht, da man die Probleme, die sie lösen sollen, gar nicht nachvollziehen kann. Wir leben in einer Welt, in der Nebenläufigkeit permanent präsent ist, auch wenn man ihr in einem konkreten Arbeitskontext nicht direkt ausgesetzt zu sein scheint. Die Konzepte sind also für alle wichtig.

heise Developer: Wenn wir schon über Bibliotheken sprechen: Wird Cilk Plus mittlerweile häufiger
eingesetzt?

Reinders: Ich sehe Cilk Plus als eine Art Experiment, um unsere Konzepte zu demonstrieren, die Standards dann vielleicht einmal übernehmen. OpenMP hat beispielsweise SMD übernommen, die Standardisierungsgremien für C und C++ sind an Parallelität und daher auch an Cilk Plus interessiert.

Ich weiß, dass es viel in der Lehre zum Einsatz kommt, aber nicht wirklich in Produktionsszenarien. Der Grund dafür ist einfach: Es kam bisher nur in Intel-Compilern vor. Mittlerweile findet man Cilk Plus jedoch auch im GCC, was ziemlich aufregend ist und den Sachverhalt eventuell etwas ändern wird. Ich hoffe, dass die Standardkomitees Teile finden, die sie für wichtig und gut genug halten, um sie im Standard unterzubringen. Dann wird es wahrscheinlich nicht mehr Cilk Plus heißen, und wahrscheinlich werden die Komitees auch nur bestimmte Features übernehmen.

Ich glaube, dass Intel da eine wichtige Rolle spielt, denn unsere Compiler und Ideen sind wichtig, und wir müssen einen Einfluss darauf haben, wie die Leute testen, welche Komponenten in C und C++ einziehen. Wir versuchen, das sehr transparent umzusetzen. Es macht ziemlich viel Arbeit, neue Features in unseren Compiler zu integrieren, damit die Leute damit experimentieren können, aber dafür sind solche Projekte da. Irgendwann werden die Komiteemitglieder gemeinsam überlegen, was sinnvollerweise in die Standards eingehen soll. Das ist besser, als wenn wir alles im stillen Kämmerlein entwickeln würden und der Welt dann sagen, was unserer Meinung nach das Richtige ist. So ist alles viel offener und interessanter, da auch andere Ideen vorgebracht werden.

heise Developer: Es gibt einige Industrien, in denen parallele Programmierung heute schon gesetzt ist. Gibt es ihrer Meinung nach andere oder auch spezielle Einsatzfälle, in denen sie noch nicht verwendet wird, obwohl es vielleicht sinnvoll wäre?

Reinders: Ziemlich jedes Gerät hat heute die Möglichkeit, mehrere Kerne zu verwenden. Entweder nutzt man Parallelität für mehr Durchsatz oder zum Reduzieren der Latenzen. Man möchte damit erreichen, dass mehr oder das alles schneller erledigt wird, wobei es meistens eine Mischung aus beidem ist. Die meisten Geräte führen mehrere Sachen gleichzeitig aus. Es lässt sich also viel mit mehreren Kernen und Parallelität anstellen, auch wenn die Programme nicht so angelegt sind.

Manchmal hat man das Gefühl, dass es einigen Anwendungen in Sachen Durchsatz gut täte, wenn sie mit Parallelität beschleunigt würden. Es gibt wahrscheinlich keine Industrie, die Parallelität wirklich ignoriert, jedoch gibt es viele Anwendungen, die sie nicht nutzen, sich damit aber wirklich verbessern könnten. Vielleicht ist hier die Priorität eine andere oder die Leute sind noch nicht dazu gekommen, sich mit Parallelität auseinanderzusetzen, aber es wird bestimmt passieren.

In Embedded-Programmierung und im HPC setzt man sich hingegen stark mit Parallelität auseinander, und auch in der Entwicklung für Smartphones und Tablets versucht man damit einiges zu beschleunigen.