Intel Software Conference 2010 (Teil I)



  • Intel ISTEP 2010 Software Conference: Barcelona April 13th


    Wie jedes Jahr lud Intel auch in 2010 zur Software Conference ein, die diesmal in Barcelona stattfand. Wie bereits 2009 stand alles im Zeichen der Parallelisierung.

    In dieser kleinen Artikelserie fasse ich einige Vorträge zusammen, soweit die Themen für die Programmierung mit C++ von Relevanz sein könnten.

    The Future Is Clear: Parallelism Is Here to Stay

    James Reinders, Chief Software Evangelist and Director of Software Development Products, Intel Corporation

    *In this session, James Reinders will talk about the challenges of programming for multicore, and lay out criteria for making decisions that lead to success. He will provide a comprehensive overview of the options and implications of various programming approaches that enable software companies to protect their application investment, while reliably scaling for future processor innovations.

    Intel brings an unyielding commitment to ensuring that every development environment has the tools it needs to capitalize on the power of multicore. In 2009, Intel expanded its leadership on many fronts with the introduction of Atom™ tools, the launch of Intel® Parallel Studio for Windows* developers, and the continued enrichment of high-performance computing products and cluster tools.*

    Reinders rechnet vor, dass die Datenmengen von 2006 bis 2011 um einen Faktor 10 gestiegen sind, und dass derzeit ein jährliches Wachstum von 60% vorliegt. Anbetracht der ständig weiter steigenden Datenmengen ist Parallelprogrammierung ein wesentlicher Schlüssel, um diese Mengen überhaupt noch verarbeiten zu können, da man den CPUs alleine durch immer schnellere serielle Bearbeitung keinen großen Performancegewinn mehr entlocken kann.

    Selbst die Atom-CPU wird künftig in Richtung Multicore marschieren.

    Intel bietet nach dem Motto "Software sells Hardware" zahlreiche Entwicklertools für die Programmierung an, wobei der Schwerpunkt auf den Programmiersprachen C, C++ und Fortran liegt. Das Intel Parallel Studio ist die Ergänzung zum Visual Studio 2010 für Parallelprogrammierung und bietet speziell für die Entwicklung mit C++ Debugging- und Analyse-Tools an, um bei parallel laufenden Programmen den Überblick über Auslastung, Bottlenecks und Verteilung der Threads zu behalten.

    Die folgende Abbildung zeigt das Zusammenspiel und Nebeneinander der verschiedenen Tools und Bibliotheken von Microsoft und Intel zur Parallelprogrammierung.


    (Quelle: intel Software & Services Group, Developer Products Division, 2010)

    Nach Reinders sind die Grundfragen der parallelen Programmierung

    • Zuverlässigkeit – ganz wesentlich die Vermeidung von Deadlocks und Data-Races
    • Skalierbarkeit - läuft ein auf einem Dualcore entwickeltes Programm schneller auf einem Quadcore, oder noch schneller auf einem Multicore
    • Investitionsschutz - läuft das Programm auch auf der nächsten CPU-Generation schnell und effizient

    Wichtig erscheint eine Botschaft von Reinders an die Softwareentwickler, dass man keine Annahmen über die Fähigkeiten der Hardwarearchitektur treffen sollte. Als Beispiele brachte er Gedankenspiele, dass typische Manycore-Architekturen der nahen Zukunft vielleicht nicht nur gleichwertige Kerne enthalten könnten, sondern dass eine Achtkern-CPU aus vier vollwertigen Kernen und vier abgespeckten Kernen bestehen könne. In solchen Fällen werden sehr hart codierte Annahmen über die CPU-Architektur dazu führen, dass ein Programm auf einer neuere CPU plötzlich eine relativ schlechte Perfomance aufweisen kann, obwohl es auf einem Quadcore noch hervorragend skalierte.

    Schlecht ist aus Sicht von James Reinders die Verwendung von eingebauten Threads (pthreads, Windows-Threads) und nicht-portablen Erweiterungen. Gut aus Sicht von Intel ist als Bibliothek Intel Threading Building Blocks (TBB) und das Parallel Studio mit seinem Intel-Compiler

    In 2010 bringt Intel die nächste Generation des Parallel Studio auf den Markt, mit einer Integration in das Visual Studio 2010, weiterhin erscheinen neue Designtools für Parallelprogrammierung für Windows, Linux und Mac OS X.

    Weiterhin wird der Reigen der Parallel-Bibliotheken in Kürze so aussehen:

    • Intel Threading Building Blocks (TBB)
    • Intel Ct Technology (Beta erscheint in 2010)
    • Intel Cilk (erscheint 2010)
    • SIMD Pragmas and Array Notations for C (erscheint 2010)

    Das "alte" OpenMP bleibt weiter erhalten und wird vor allem für C und Fortran sehr oft benutzt. Auch die Bibliothek Intel MPI library wird von allen Tools weiter unterstützt, da sie vor allem für wissenschaftliche und Supercomputeranwendungen häufig eingesetzt wird.

    Intel Threading Building Blocks | ISBN: 0596514808Intel Thread Building Blocks (TBB) erweitert die Parallelprogrammierung für C und C++ für Algorithmen, Container und Speicherverwaltung und existiert seit 2006. TBB gibt es für alle wichtigen Plattformen und ist Open Source, es gibt allerdings eine Doppellizensierung (nicht-GPL für Binaries), siehe dazu auch http://threadingbuildingblocks.org.

    Intel Ct Technology soll der Vielfältigkeit der Parallelisierung Rechnung tragen, Pipelines, superskalaren Instruktionen, Prefetch von Speicher, Hyperthreading, mehrere Cores und mehrere Prozessoren – alles gleichzeitig und beliebig gemischt. Es handelt sich hierbei um Spracherweiterungen für C++ um Daten threadsicher parallel zu organisieren, besonders für schwach und stark besetzte Arrays. Man muß dazu wissen, dass Parallelisierung nicht nur aus der parallelen Aufstellung von Threads besteht, sondern dass auch das Cachingverhalten hier mitspielt. Wenn ständig Threads parallel auf Daten zugreifen, kann hier unter Umständen der Cache und das Prefetching ausgetrickst werden, so dass der parallele Thread ständig auf die Daten warten muss. Solche Fallen zu beachten vor dem Hintergrund beliebiger CPU-Architektur kann dem Softwareprogrammierer nicht mehr zugemutet werden – und genau aus solchen Gründen gibt es Erweiterungen wie Ct. Das endgültige Produkt wird erst 2011 erscheinen, da Intel noch die Technologie der vor kurzem übernommenen Firma Rapid Mind in Ct integrieren will.

    Ct steht übrigens für "C throughput", also "C-Durchsatz". Weitere Informationen dazu finden sich unter http://intel.com/software/data_parallel

    Intel Cilk ist eine Erweiterung auf Compilerebene und bietet parallele Programmabläufe an. Am besten betrachtet man dazu ein Beispiel:

    /* Matrix Transpose */
    cilk_for (int i = 0; i < n; i++) 
    {
       cilk_for (int j = 0; i< n; i++) 
       {
          b[j][i] = a[i][j];
       }
    }
    

    Zur Optimierung wird eine Divide-And-Conquer-Strategie eingesetzt, die die richtige Partitionierungsgröße ermitteln soll. Dabei handelt es sich um die Fragestellung, wie "fein" man tatsächlich aufteilt und parallelisiert – angenommen, obiges Beispiel erzeugt 1 Million Schleifenläufe, so gewinnt man natürlich wenig, wenn man 1 Million parallele Threads erzeugt. Die Paritionierungsgröße ist die Antwort auf die Frage, wie viele Threads man erzeugt und welche Anzahl von Schleifendurchläufe ein Thread jeweils abarbeiten soll.

    Weiterhin unterstützt CILK die Erstellung von Threads, auch hier ein Beispiel für die Berechnung der Fibnonacci-Folge, zuerst in serieller Form:

    int fib (int n) 
    {
       if (n < 2) 
          return 1;
       else 
       {
          int x, y;
          x = fib(n-1);
          y = fib(n-2);
          return x + y;
       }
    }
    

    In der parallelen Form unter Nutzung von CILK:

    int fib (int n) 
    {
       if (n < 2) 
          return 1;
       else 
       {
          int x, y;
          x = cilk_spawn fib(n-1);
          y = cilk_spawn fib(n-2);
          cilk_sync;
          return x + y;
       }
    }
    

    Es ist damit möglich Threads zu erzeugen und auf der Ebene der erzeugenden Funktion auch wieder zu synchronisieren.

    Eine offensichtliche Frage ist, warum es so viele Ansätze für Parallelisierung gibt – warum nicht einfach nur eine Bibliothek? Als Begründung führt James Reinders an, dass auch Applikationen aus unterschiedlichen Ebenen bestehen, zum Beispiel kann TBB pipelines auf der höchsten Ebene der Applikation die Koordination von Programmteilen durchführen, zum Beispiel in der Messageverarbeitung, aber auf der Verarbeitungsebene und Berechnung kann mit Cilk oder auf der reinen Datenverarbeitungsebene mit Intel Ct noch besser in Bezug auf die Aufgabe optimiert werden.

    Der Vorteil bei Benutzung der Intel-Bibliotheken besteht darin, dass die verschiedenen Ebenen miteinander synchronisiert sind und sich nicht gegenseitig blockieren, da sie durch einen "Work Stealing Scheduler" koordiniert werden. Auch sind alle Bibliotheken "cache aware", achten also darauf dass bei der Threadumschaltung möglichst wenig Fehltreffer im Cache auftreten.

    James Reinders sieht übrigens zur Zeit keinen Trend zu neuen Programmiersprachen, da eine große vorhandene Codebasis existiert, eher bekommen existierende Sprachen und Bibliotheken eine bessere Parallelunterstützung verpasst.

    Als Abschluß wird noch das an Universitäten ausgerichtete "Thinking Parallel"-Programm vorgestellt, denn es scheint, dass sich auch der klassische, an serieller Programmierung ausgerichtete Unterricht künftig ändern muß – meint auf jeden Fall Intel.

    Online gibt es von Intel übrigens eine Testapplikation im Web, um auf einer 16-Core-Maschine Software zu testen und zu analysieren:
    http://paralleluniverse.intel.com

    Die volle Präsentation von Reinders: http://softwareproductconference.com/presentations/presentation-barcelona-reinders.pdf



  • Nette Zusammenfassung.

    Marc++us schrieb:

    Als Abschluß wird noch das an Universitäten ausgerichtete "Thinking Parallel"-Programm vorgestellt, denn es scheint, dass sich auch der klassische, an serieller Programmierung ausgerichtete Unterricht künftig ändern muß – meint auf jeden Fall Intel.

    Finde ich wichtigen Punkt. Obwohl wir an der ETH bereits im 2. Semester Parallele Programmierung haben (erst seit dem letzten Jahr) scheint das ganze noch ein wenig vage und Verbesserungswürdig zu sein.


Anmelden zum Antworten