zurück zum Artikel

Interview zur Parallelprogrammierung mit James Reinders

Alexander Neumann

Entwickler, die nach Möglichkeiten suchen, ihre Programme zu beschleunigen, können durch die Parallelisierung ihres Codes häufig gute Erfolge erzielen. Der Hype mag vorbei sein, allerdings sind Multicore-Architekturen allgegenwärtig. Ein Gespräch mit James Reinders, Director and Chief Evangelist bei Intel.

Interview zur Parallelprogrammierung mit James Reinders

James Reinders hielt eine Keynote auf Intels ISTEP-Konferenz

Entwickler, die nach Möglichkeiten suchen, ihre Programme zu beschleunigen, können durch die Parallelisierung ihres Codes häufig gute Erfolge erzielen. Der Hype mag vorbei sein, allerdings sind Multicore-Architekturen allgegenwärtig, weshalb es sich lohnt, sich mit dem Thema zu beschäftigen. Ein Gespräch mit James Reinders, Director and Chief Evangelist bei Intel.

heise Developer: Linus Torvalds meinte Ende 2014, dass die parallele Programmierung keine Zukunft habe und diese statt dessen eher in größeren Caches zu finden sein. Sie hingegen sagten schon vor ein paar Jahren, dass parallele Programmierung von Dauer sei und so schnell nicht verschwinden würde. Sind Sie nach wie vor dieser Meinung?

Mehr Infos

Porträt

James Reinders ist seit 1989 bei Intel tätig, wo er derzeit unter anderem als Parallel Programming Evangelist unterwegs ist. Über die Jahre war er in Projekte wie die Entwicklung des ersten teraFLOP-Supercomputers ASCI Red [1] und Systeme wie WARP und iWarp, die mit systolischen Arrays [2] arbeiten, involviert. Darüber hinaus hat er einige Bücher zu Themen wie Threading Building Blocks (TBB) und strukturierter Parallelprogrammierung verfasst.

James Reinders: Es verwundert mich nicht, dass Linus so etwas von sich gegeben hat. Er ist ein kluger Mann, und ich verstehe, warum er das gesagt hat. Ich denke, es war seine Reaktion auf ein allgemeines Gefühl, einen allgemeinen Hype. Doch letztlich muss sich jeder irgendwann mit Parallelisierung befassen, die parallele Programmierung wird nicht einfach verschwinden.

Ich denke, dass Computer erst nach und nach zum Rest unseres Lebens aufschließen können. Wir machen vieles gleichzeitig, und Computer konnten das bisher nicht. Sie sind gerade erst dabei, hier aufzuholen. Parallelität ist in so vielen Kontexten wichtig. Das Telefon oder das Laptop oder eigentlich egal welche Art von Computer wird parallel arbeiten. Selbst wenn man sich das Internet der Dinge betrachtet oder Telefone, die mit der Cloud verbunden sind, gibt es dort Parallelität.

Softwareentwickler müssen demnach Parallelität und Nebenläufigkeit verstehen genauso wie die damit verbundenen Herausforderungen. In Zukunft müssen sich wahrscheinlich mehr Leute gut damit auskennen, weil wir Programme für all diese unterschiedlichen Geräte entwickeln wollen. Einige werden in der Lage sein, die nötigen Tools bis ins Detail zu beherrschen und das beste aus ihnen herauszuholen, andere werden hingegen einfach zur Kenntnis nehmen, dass wir in einer Welt der Parallelität leben.

heise Developer: Jedoch trügt wohl nicht das Gefühl, dass das Interesse an Parallelisierung in den letzten Jahren etwas zurückgegangen ist. Der Hype ist abgeflacht, obwohl sich doch eigentlich mehr Leute gewinnbringend damit auseinandersetzen könnten, wenn man die Vielzahl von Geräten und Ähnlichem ansieht.

Reinders: Es ist jetzt etwa zehn Jahre her, dass Herb Sutter seinen Aufsatz "The free lunch is over [3]" veröffentlicht hatte. Intel hatte damals den ersten x86-Prozessor mit zwei Kernen auf den Markt gebracht. Damals wollten die Leute jedoch Herbs Mahnung nicht wahrhaben. Sie dachten, dass mehrere Kerne nur eine Modeerscheinung seien und man bald wieder nur mit einem arbeiten würde. Heute glaubt das keiner mehr. Jeder scheint zu wissen, dass Parallelität Teil der Entwicklerlandschaft
ist. Selbst Linus! Um noch einmal darauf zurückzukommen, ich glaube, er reagierte einfach nur auf eine Bewegung und wollte verdeutlichen, dass es andere Dinge gibt, um die sich die Leute statt der Parallelisierung Gedanken machen sollten. Der Hype ist sicherlich vorüber und Parallelisierung Teil des Alltags geworden.

heise Developer: Für wie wichtig halten Sie die Parallelprogrammierung in diesem Alltag?

Reinders: Für mich ist sie unglaublich wichtig. Es gibt zwar Leute, die noch nie mit Parallelisierung zu tun hatten, und es ist durchaus interessant, denen etwas darüber beizubringen, aber selbst Menschen wie ich, die sich schon ewig damit befassen, haben noch viel zu lernen. Die Herausforderungen sind einfach andere, wenn man ein leistungsfähiges, parallelisiertes Programm für tausend Kerne schreiben will und nicht für zwei oder vier.

Letztes Jahr hatte ich die Gelegenheit, bei zwei Bootcamps vor Studenten aus ganz Amerika Vorträge zu halten. Sie haben mehr Abstand zur Art und Weise der heutigen Parallelprogrammierung und erkennen gleich all das, was wir falsch machen, wenn wir die Parallelprogrammierung in die Zukunft überführen wollen. Viele Probleme drehen sich etwa darum, dass wir zu viel Speicher teilen, es gibt zu viele Barrieren, und auch bei der Synchronisation gibt es Verbesserungspotenzial. Ich konnte viele interessante Gespräche darüber führen, wie man anders an die Parallelisierung herangehen und neue Algorithmen und Techniken ausprobieren kann, mit denen sich besser skalieren lässt.

Es ist wie bei jeder Art von Programmierung: Alles ist im Fluss, und so, wie wir heute an die Parallelisierung herangehen, werden wir diese Aufgabe in Zukunft wahrscheinlich nicht mehr angehen. Der Hype ist vorbei, aber es gibt nach wie vor jede Menge zu lernen. Das ist mir sehr wichtig und trägt sehr dazu bei, dass das Thema spannend bleibt. Je mehr Geräte wir bauen, die sich für parallelisierte Programme eignen, desto mehr Leute brauchen wir, die wissen, wie man sinnvoll dafür programmieren kann. Das klappt zwar schon alles ganz gut, aber es gibt noch eine Menge zu tun.

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 [4] oder SSE [5] (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.

heise Developer: Im Moment sind das Internet der Dinge und Big Data viel diskutierte Trends in der Entwicklerwelt. Meinen Sie, dass sie der parallelen Programmierung neuen Aufwind geben werden, da hier viel und schnell zu rechnen ist oder man mit den besonderen Einschränkungen der Hardware umgehen muss?

Reinders: Große Datenmengen sind das perfekte Einsatzgebiet für Parallelität. Betrachtet man Amdahls Gesetz, hat man immer das Gefühl, dass man nicht viel Beschleunigung bekommen kann. Aber dann gibt es auch Gustavsson, dessen Gesetz eigentlich nur eine andere Betrachtungsweise ist und sagt, dass die Beschleunigung durch das Mehr an Daten zustande kommt. Die Stärke der Parallelität entfaltet sich, wenn man mehr und mehr Daten bekommt, egal ob es durch das Internet der Dinge oder durch die Analyse großer Datenmengen geschieht oder höher aufgelöstes Videomaterial ist. Immer wenn ich also "mehr Daten" höre, denke ich, dass das perfekt für Parallelität ist – auch wenn man mehr Daten in der gleichen Zeit bearbeiten möchte, wie es bei kleineren Mengen möglich ist, ist es das perfekte Anwendungsbeispiel für Latenz und Durchsatz.

Es ist sehr schwer, ein eingeschränktes Problem zu nehmen und mit Parallelität zunehmend zu beschleunigen. Gibt es aber die Möglichkeit, es mit mehr Daten immer größer zu gestalten, ist es wesentlich einfacher, hier etwas zu beschleunigen.

heise Developer: Was sind Ihre liebsten Werkzeuge und Konzepte in der Szene der parallelen
Entwicklung?

Reinders: Ich denke zuerst nie wirklich an Tools, aber lassen sie mich erklären, was mir immer als Erstes in den Sinn kommt. Ich bin sehr von Algorithmen und den Einsatzmöglichkeiten von Parallelität fasziniert. Zum Beispiel gibt es in der Wettervorhersage etwas, was sich Ensemble-Voraussage nennt. Ich bin immer davon ausgegangen, dass man das Modell für die Prognosen verbessern könnte, indem man mehr Rechenkapazität zur Verfügung stellt. Aber die Leute dort hatten eine andere Idee: Ihren Voraussagen liegt ein Satz von Daten zugrunde, mit denen man abschätzt, wie das Wetter in zwei Tagen wird. Das System ist allerdings sehr von den Eingabewerten abhängig. Die Leute, die die Berechnungen durchführen, wissen nun also, dass es ein bestimmtes Fehlerspektrum beim Input gibt, das das Ergebnis stark verändern kann. Sie haben folglich eine ganze Wissenschaft daraus gemacht, die Voraussagen mit variierenden Eingaben durchzuführen und zu beobachten, ob sich die Prognose dadurch ändert. Sie lassen also den ganzen Vorhersageprozess mit unterschiedlichem Input laufen (Ensemble von Berechnungen), und wenn alle zum Ergebnis kommen, dass in zwei Tagen schönes Wetter für ein Picknick und einen Parkspaziergang ist, sind sie zufrieden.

Manchmal gehen die Prognosen aber stark auseinander – für mich ist das ein sehr interessantes Einsatzsszenario für Parallelität und Berechnungsleistung. Ich sehe viele Einsatzmöglichkeiten dafür, indem man Berechnungen mehrmals unter unterschiedlichen Bedingungen ausführt, um ein sehr komplexes Ergebnis zu erreichen.

Algorithmen faszinieren mich einfach. Es gibt derzeit wirklich viel Innovation in der Anwendungsentwicklung. Es geht nicht nur darum, Programme zu beschleunigen, sondern auch darum, wie man die zur Verfügung stehende Leistung nutzen kann, um Sachverhalte anders anzugehen. Aber auch Modelle, für Mehrkörperprobleme zum Beispiel, werden zunehmend genauer. Das Lustige ist, dass viele Wissenschaftler sagen, dass sie ihr ganzes Berechnungsmodell mit einem anderen Algorithmus umgesetzt haben, der deutlich genauer ist. Eigentlich sind sie es gewohnt abzuschätzen, und durch die besseren Modelle finden sie heraus, dass ihre Schätzungen gar nicht so gut waren, wie sie es angenommen hatten. Wenn ihnen jetzt also mehr Leistung zur Verfügung steht und sie ihre Modelle verbessern können, ist das aufregend. Sie können so nicht nur schnellere, sondern auch genauere Berechnungen durchführen, die vielleicht sogar dazu führen, dass es in der Wissenschaft mehr Durchbrüche gibt. Und das alles nur, weil wir ihnen bessere Werkzeuge an die Hand geben können.

Ich bin einfach begeistert davon, dass Werkzeuge wie Parallelität dafür sorgen können, dass Wissenschaftler in der Lage sind, ihre Forschung voranzubringen. Ob es dabei nun um die Erfindung von Medikamenten, die Verbesserung der Wettervorhersage oder das Abwehren von Katastrophen geht.

heise Developer: Entwickler lieben Programmiersprachen und sind an deren Umsetzung von Nebenläufigkeit und Parallelität interessiert. In welcher der jüngeren Sprachen sehen sie die beste Umsetzung?

Reinders: Das lässt sich schwer sagen, da so viel in der Industrie von C, C++ und Fortran abhängt. Offensichtlich sind TBB und OpenMP sehr wichtig, aber man sieht auch an anderen Stellen Innovation. Julia beispielsweise hat das Interesse vieler Entwickler geweckt. Das wäre wahrscheinlich die Sprache mit den meisten neuen Ideen in dem Kontext. Sie hat angeregt, über einige Probleme anders nachzudenken. Ich kann nicht abschätzen, ob es eine wichtige Sprache wird in dem Sinn, dass sie viele Leute nutzen werden. Über die Zeit gab es schon viele Hunderte Programmiersprachen, die sich nicht wirklich verbreiten konnten, die aber einen starken Einfluss auf die Denkweise der Leute hatten. Ich weiß also nicht, wie beliebt Julia auf lange Sicht sein wird, aber sie wird zumindest das Denken verändern.

heise Developer: Vielen Dank für das Gespräch, Herr Reinders.

Das Gespräch führte Alexander Neumann auf Intels Software Conference 2015 (ISTEP), die Transkription und Übersetzung hat Julia Schmidt. übernommen. Beide sind Redakteure von heise Developer. (ane [6])


URL dieses Artikels:
https://www.heise.de/-2630513

Links in diesem Artikel:
[1] https://en.wikipedia.org/wiki/ASCI_Red
[2] https://de.wikipedia.org/wiki/Systolischer_Array
[3] http://www.gotw.ca/publications/concurrency-ddj.htm
[4] https://en.wikipedia.org/wiki/MMX_%28instruction_set%29
[5] https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
[6] mailto:ane@heise.de