ICSE: Coding von Multi-Core-Prozessoren

Rasend schnell: Mehrkern-Prozessoren booten - im Prinzip - von jedem Kern ein eigenes OS. Aber die Software hinkt noch hinterher. Diese parallelen Techniken versprechen Erfolg.

» Von Michael Kurzidim , 04.06.2012 16:03.

Zu Beginn der Schweizer ICSE 2012 (International Conference on Software Engineering) gab es gleich einen harten Brocken zu schlucken. Victor Pankratius vom MIT referierte über "Multicore Software Engineering and Auto-Tuning", auf deutsch: Performance-Optimierung durch parallele Programmierung. Das Szenario: Nahezu alle neuen Desktop-PCs und Smartphones arbeiten heute mit Multi-Kern-Prozessoren: AMD Opteron 12 Cores, Sun Niagara 16 Cores, Intel SCC 48 Cores, nVida GTX >300 Cores. Ziehen alle Kerne an einem Strang und arbeiten parallel an einer Aufgabe, kann das die Performance von Apps extrem steigern. Nur hinken die Software-Entwickler zurzeit noch hinterher - und verschenken Optimierungspotenzial.

Kein triviales Problem

Die "Open Specifications for Multi-Processing" (OpenMP) etwa werden zurzeit in 46 Projekten erprobt. OpenMP eignet sich hervorragend für numerische Apps (Grafiken, Vektoren, Matrizen) und unterstützt die Programmiersprachen C, C++ und Fortran. Pankratius berichtet jedoch von zahlreichen, undokumentierten Fehlern in den Projekten. Oft seien falsche Annahmen über die Sichtbarkeit von Variabeln und die Ausführungsreihenfolge der Codezeilen der Grund, zugegeben in parallelem Soucecode ein nicht gerade triviales Problem.

Microsoft hat für seine .NET-Sprachen die "Task Parallel Library" (TPL) vorgestellt. die Parallelität als Methode parallel.for einführt und ab .NET 3.5 funktioniert. Schleifendurchläufe etwa, in denen ein und derselbe Sourcecode zehntausend oder hunderttausend Mal in gleicher Weise abgearbeitet wird, bieten sich zur Optimierung an. Die klassische For-Schleife in C# wird normalerweise ganz brav sequentiell, also hintereinander abgearbeitet:

for (int i = 0; i < 100000; i++) {

    a[i] = a[i]*a[i];  }

Durch die Parallelisierung der 100.000 Schleifendurchläufe gewinnen die zwei Zeilen Code auf elegante Weise erheblich an Tempo:

Parallel.For(0, 100000, delegate(int i) {

     a[i] = a[i]*a[i]; });

Microsofts "Parallel Library" sei noch in einem frühen Experimentierstadium, da könne sich noch jede Menge ändern, meint Pankratius. Abgesehen von Bibliotheken und Frameworks müssen Software-Entwickler auf dem Weg zu optimiertem, parallelem Sourcecode viele mentale Fallstricke vermeiden: zum Beispiel die Granularitätsfalle. Der Software-Guru erzählt von seinem ersten Stück Parallelcode, wo er akribisch alle theoretisch parallelisierbaren Threads auch programmiert habe. Mit dem Ergebnis: Der parallele, also auf mehrere Prozessorkerne verteilte Code lief langsamer als das simple sequentielle Programm. Pankratius hatte zu viel parallelisiert: Der kommunikative Overhead zwischen den Subroutinen zwang die Performance in die Knie.

Nächste Seite: Erfolgsstrategien & Chip-Design

Werbung

KOMMENTARE

Keine Kommentare

KOMMENTAR SCHREIBEN

*
*
*
*

Alles Pflichfelder, E-Mail-Adresse wird nicht angezeigt.

Die Redaktion hält sich vor, unangebrachte, rassistische oder ehrverletzende Kommentare zu löschen.
Die Verfasser von Leserkommentaren gewähren der IDG Communications AG das unentgeltliche, zeitlich und räumlich unbegrenzte Recht, ihre Leserkommentare ganz oder teilweise auf dem Portal zu verwenden. Eingeschlossen ist zusätzlich das Recht, die Texte in andere Publikationsorgane, Medien oder Bücher zu übernehmen und zur Archivierung abzuspeichern.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

MiniAds