ICSE: Coding von Multi-Core-Prozessoren

» Von Michael Kurzidim , 04.06.2012 16:03.

Der kommunikative Overhead zwischen den Threads kann einerseits den Performance-Gewinn eines optimierten Programms glatt zunichte machen, ist aber andererseits dringend notwendig. Zum Beispiel, um die gefürchteten Deadlocks zur vermeiden: zwei parallel laufende Software-Komponenten blockieren sich gegenseitig, die gesamte Programmausführung stoppt. Pankratius verweist auf das sogenannte Producer-Consumer-Pattern, eine weitere Erfolgsstrategie der parallelen Software-Entwicklung. Das Szenario: Ein Producer legt Elemente in einem Buffer ab, der x Elemente speichern kann. Ein Consumer entnimmt Elemente aus dem Puffer. Producer und Consumer takten in der Regel nicht synchron.

Java: Deadlocks verhindern

Ist nun der Buffer voll und der Producer am Zug, stockt die Programmausführung, denn der Producer kann kein neues Element in den Puffer legen (der ist ja schon voll). Durch Kommunikation zwischen beiden Komponenten, in Java durch die Funktion notifyAll(), lässt sich der Deadlock elegant vermeiden:

Der Producer wartet, bis im Puffer eine Position frei wird, addiert ein Element und benachrichtigt danach alle Consumer-Threads:

synchronized void post (Work w) {

while (queue.isFull())) {this.wait(); }

         queue.add(w);

this.notifyAll(); }

Der Consumer wartet, bis der Puffer mindestens ein Element enthält, entnimmt dieses und benachrichtigt danach alle Producer-Threads:

synchronized Work get () {

while (queue.isEmpty()) {this.wait(); }

        queue.remove();

this.notifyAll(); }

Chip-Produzenten wie Intel oder AMD rät Pankratius, bei aller Parallelisierung den herkömmlichen sequentiellen Code nicht zu vergessen. Die Zukunft liege im optimierten, hybriden Chip-Design. Denn Software ist immer nur bis zu einem gewissen Grad parallelisierbar; bestimmte Sourcecode-Anteile verlangen zwingend nach einer sequentiellen Bearbeitung. Sind dann 47 von 48 Prozessorkernen auf Parallelcode optimiert, dann lastet die sequentielle Abarbeitung auf einem einzigen Prozessorkern, und das ist definitiv zu wenig.

Punkto parallele Software-Entwicklung hält der Software-Papst zwei Trends für wegweisend: Offline-Tuning, wo der Programmierer performancerelevante Parameter vorgibt und ein in das Betriebssystem (OS) integriertes Auto-Tuning, welches das OS zur Laufzeit der Software selbst vornimmt.

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