Multicore und Parallelprogrammierung

Softwarefirma Intel

16. Juni 2010, 14:43 Uhr | Joachim Kroll
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 2

Spracherweiterungen für C und C++

Dazu zählen z.B. OpenMP und die MPI-Bibliothek im Großrechnerbereich. Viele Entwickler suchen allerdings nach weniger anspruchsvollen Erweiterungen, mit denen sich in C/C++ geschriebene Desktop- und Embedded-Anwendungen prallelisieren lassen. Eine solche Erweiterung pflegt Intel seit 1996: die Threading Building Blocks, kurz TBB. Sie erschienen jünst in Version 3.0 und sind inzwischen Open Source. C und C++ wurden – wie alle populären Programmiersprachen – nicht für Parallelprogrammierung entwickelt. TBB rüsten diese Fähigkeit nach, indem sie eine zusätzliche Abstraktionsebene für die Parallelverarbeitung einführen. Auch .net von Microsoft wurde z.B. durch TPL (Task Parallel Library) ergänzt. TBB unterstützen die Parallelverarbeitung, indem sie Befehle, Algorithmen und Funktionen für die Speicherverwaltung anbieten.

Schon heute hat Parallel-Verarbeitung auf den noch relativ einheitlichen x86-Multicore-Prozessoren viele Erscheinungsformen:

  • Pipelining,
  • SIMD mit Register-Vektorisierung (SWAR),
  • Superscalare Befehle oder VLIW,
  • Overlapping memory access with computation (prefetch),
  • Hyperthreading auf einem Core,
  • mehrere Cores,
  • mehrere Prozessoren,
  • asynchroner Betrieb von Host-Prozessor und Beschleunigungshardware.

Eine Software so flexibel zu schreiben, dass sie auf jeder denkbaren Variante und beliegiben Kombinationen aus diesen Möglichkeiten optimal abläuft, wäre mit einem ungeheuren Overhead verbunden. Mit der Zunahme des Verwaltungsaufwandes steigen auch die Gefahren von Deadlocks und Data Races. Damit Entwickler ihre Software so schreiben können, dass sie auf der vorgefundenen Hardware mit optimaler Performance läuft, gleichzeitig aber die Komplexität vor dem Programmierer verborgen wird, hat Intel das Forschungsprojekt »Ct« (C for Throughput) initiiert.

Ct parallelisiert die Verarbeitung der Daten ohne dass es zu Sicherheitsrisiken (Deadlocks/Data Races) kommt. Es ist – ähnlich TBB – eine C++-Spracherweiterung, die mit der Zeit auf möglichst vielen Compiler- und Tool-Plattformen verfügbar sein soll. Eine erste Betaversion für den Intel-Compiler soll im Herbst 2010 fertig sein, das offizielle Produkt wird 2011 unter einem neuen Produktnamen folgen. Ct nutzt Techniken von Intel und der im August 2009 gekauften Firma RapidMind. Es parallelisiert die Verarbeitung großer Datenmengen in Arrays, ist thread-sicher und hardwareunabhängig bezüglich der Zahl der Cores. D.h., die Verarbeitung der Daten kann z.B. auf einem Single-Core mit Hyperthreading genauso erfolgen wie auf einem Multicore-Prozessor mit 2, 4 oder 8 Kernen, ohne dass der Code geändert werden muss. Doch nicht nur das: Ct nutzt selbständig die SIMD- und AVX-Befehle der Intel-CPUs, wird Manycore- oder Hybrid-Architekturen unterstützen und auch Nvidia-Grafikprozessoren. Eine öffentliche Beta-Version soll im 3. Quartal 2010 erscheinen, das offizielle Produkt in 2011.

Daten- und Task-Parallelität

Neben der Datenparallelität, die durch Ct abgedeckt wird, arbeitet Intel noch an einem weiteren Forschungsprojekt, Cilk, für die Parallelisierung von Befehlsabläufen.

  • Cilk – ebenfalls ein Projekt im Beta-Stadium – entstand aus der Akquise von Cilk Arts, Massachusetts, einer MIT-Ausgründung mit sieben Mitarbeitern um MIT-Forschungsergebnisse geschäftlich zu verwerten. Cilk erweitert den Compiler um nur drei Befehle:
  • cilk_for, führt for-Schleifen parallel aus, wird im Quellcode wie bei sequenziellen Programmen verwendet;
  • cilk_spawn und cilk_sync, zur Aufteilung von Programmteilen in mehrere dynamische Multi-Tasking-Applikationen.

Cilk unterstützt ebenfalls Multicore-Prozessoren, mehrere Prozessoren, heterogene Prozessoren, Hyperthreading, NUMA-Architekturen – und das alles ohne Quellcodeänderungen. Anfangs wird Cilk nur mit dem Intel-Compiler laufen, aber Intel hofft, dass weitere Firmen folgen.

Die drei Initiativen zeigen, dass Intel es nicht alleine dem Zufall und der Softwareindustrie überlassen will, wie schnell und wie bequem Entwicklungsunterstützung für Multicore-Prozessoren verfügbar ist. Intels Strategie ist es, den Entwicklern Hilfestellung in drei Dimensionen zu geben:

  • Zuverlässigkeit: Bei parallelen Anwendungen steigen die Fehlermöglichkeiten in dem Maß, in dem mehr Dinge gleichzeitig ablaufen. Die neuen Abstraktionsebenen sollen diese Komplexität vor dem Entwickler verbergen.
  • Skalierung: je mehr Cores zum Einsatz kommen, desto schneller sollen die Programme ablaufen. Die Zahl der Cores darf nicht fest einprogrammiert sein.
  • Investitionssicherheit: Ein heute geschriebenes Programm soll auch auf künftigen (Intel-)Prozessorgenerationen lauffähig sein.

Ähnlich wie die Programmierung von Grafik-Anwendungen, bei denen Anfangs jede Linie und jedes Rechteck fest codiert wurden und die sich heute an jede Bildschirmgröße und jedes Seitenverhältnis anpassen, sollen auch Parallelanwendungen mit den Intel-Tools sich in Zukunft auf jeden Hardware-Unterbau einstellen. Damit erweitert Intel seine »Plattform« um bestimmte Software-Entwicklungswerkzeuge – ein Phänomen, das bei Mikrocontrollerherstellern schon lange üblich ist und auch bei Intel schon immer existierte, wenn auch in geringerem Umfang. Die Entwicklung kompletter Betriebssysteme wie im Rahmen von Mobin oder in Zusammenarbeit mit Nokia jetzt als Meego weitergeführt, dürfte aber die Ausnahme bleiben.

passend zum Thema


  1. Softwarefirma Intel
  2. Vom Großrechner ins Embedded-System
  3. Spracherweiterungen für C und C++

Lesen Sie mehr zum Thema


Das könnte Sie auch interessieren

Jetzt kostenfreie Newsletter bestellen!

Weitere Artikel zu INTEL GmbH