Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
Vorwort des Gutachters
1 Einstieg in C
2 Das erste Programm
3 Grundlagen
4 Formatierte Ein-/Ausgabe mit »scanf()« und »printf()«
5 Basisdatentypen
6 Operatoren
7 Typumwandlung
8 Kontrollstrukturen
9 Funktionen
10 Präprozessor-Direktiven
11 Arrays
12 Zeiger (Pointer)
13 Kommandozeilenargumente
14 Dynamische Speicherverwaltung
15 Strukturen
16 Ein-/Ausgabe-Funktionen
17 Attribute von Dateien und das Arbeiten mit Verzeichnissen (nicht ANSI C)
18 Arbeiten mit variabel langen Argumentlisten – <stdarg.h>
19 Zeitroutinen
20 Weitere Headerdateien und ihre Funktionen (ANSI C)
21 Dynamische Datenstrukturen
22 Algorithmen
23 CGI mit C
24 MySQL und C
25 Netzwerkprogrammierung und Cross–Plattform-Entwicklung
26 Paralleles Rechnen
27 Sicheres Programmieren
28 Wie geht’s jetzt weiter?
A Operatoren
B Die C-Standard-Bibliothek
Stichwort

Download:
- ZIP, ca. 10,6 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch
Buch: C von A bis Z

C von A bis Z
3., aktualisierte und erweiterte Auflage, geb., mit CD und Referenzkarte
1.190 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1411-7
Pfeil 26 Paralleles Rechnen
Pfeil 26.1 Parallelität
Pfeil 26.1.1 Single-Prozessorsysteme
Pfeil 26.1.2 Hyperthreading
Pfeil 26.2 Programmiertechniken der Parallelisierung
Pfeil 26.2.1 Automatische Parallelisierung
Pfeil 26.2.2 Halbautomatische Parallelisierung
Pfeil 26.2.3 Echte Parallelisierung
Pfeil 26.3 Vom Prozess zum Thread
Pfeil 26.4 Mit den POSIX-Threads programmieren
Pfeil 26.4.1 Ein serielles Beispiel
Pfeil 26.4.2 Das Grundgerüst für ein Programm mit mehreren Threads
Pfeil 26.4.3 Zusammenfassung

Der Trend des Megahertz-Wahns scheint derzeit ein wenig rückläufig zu sein, und stattdessen ist es schick geworden, mehrere Prozessoren in einen Rechner einzubauen. Allerdings nützen solche Multiprozessor-Systeme nur dann etwas, wenn auch die Programme dafür erstellt wurden. Wie das geht, erfahren Sie in diesem Kapitel.

26 Paralleles Rechnen


Galileo Computing - Zum Seitenanfang

26.1 Parallelität Zur nächsten ÜberschriftZur vorigen Überschrift


Hinweis

Das Ziel dieses Kapitels ist es nicht, Ihnen eine umfassende Einführung in die Threadprogrammierung zu bieten, sondern eher das Thema anzuschneiden. Da der Umfang des Buches schon ziemlich gewaltig ist, lässt sich einfach nicht noch ein umfangreiches Kapitel mehr hinzufügen. Sollten Sie mehr Informationen dazu benötigen, finden Sie beispielsweise in meinem Buch »Linux-UNIX-Programmierung« (3. Auflage) ein sehr umfangreiches Kapitel dazu. Da in diesem Buch die POSIX-Threads-Bibliothek behandelt wird, lässt sich das darin Beschriebene auch unter Windows verwenden. Dieses Kapitel finden Sie auf der Buch-CD.


Die Werbung der Computerbranche versucht zurzeit kräftig, sogenannte Dual- bzw. Quad-Core-PCs an den Mann (oder die Frau) zu bringen. Mittlerweile ist schon in jedem Discounter-PC ein solcher Prozessor eingebaut. Dabei wird einem versprochen, dass man mit zwei Prozessoren die doppelte Rechenleistung erhält, weil ja die Rechenaufgaben auf zwei Prozessoren aufgeteilt werden.

Zwei Prozessoren bringen also die doppelte Leistung? Nein, hier hat man die Rechnung ohne den Wirt gemacht. Zunächst machen solche Multiprozessorsysteme so viel Sinn, wie wenn man zwei Autos in der Garage stehen hat – man kann auch nur eines gleichzeitig fahren. Um also beide oder gegebenenfalls mehrere Prozessoren zu verwenden, muss auch die Software dafür geschrieben sein.

Auch wenn die Software für Multi-Prozessorsysteme angepasst wurde, kann man noch lange nicht sagen, um welchen Faktor (auch Speedup genannt) die Software schneller läuft. Es gibt mehrere Faktoren, von denen es abhängt, um wie viel das Programm letztendlich schneller läuft: Kann beispielsweise der Prozessor die Daten aus seinem eigenen schnellen Cache holen, oder müssen diese immer aus dem langsamen Arbeitsspeicher geholt werden? Dies hängt von der Cache-Größe des Prozessors ab. Hinzu kommen auch Größe, Topologie und Bandbreite des Speichers. Es gibt auch Situationen, in denen man mit der seriellen Programmierung genauso gute Ergebnisse erzielen kann wie mit der parallelen. Zusammengefasst lässt sich sagen, dass man den gewonnenen Geschwindigkeitsfaktor der Software erst im laufenden Betrieb ermitteln kann.

Fakt ist auf jeden Fall, dass sich die Multiprozessorsysteme künftig auch auf gewöhnlichen Workstation-Rechnern verbreiten werden. Ein guter Grund also, sich mit der Entwicklung paralleler Software zu befassen.


Hinweis

Im nächsten C-Standard (derzeit auch als C1x-Standard bekannt), an dem das Standardisierungskomitee seit 2007 arbeitet, wird auf jeden Fall die Threadprogrammierung implementiert sein.



Galileo Computing - Zum Seitenanfang

26.1.1 Single-Prozessorsysteme Zur nächsten ÜberschriftZur vorigen Überschrift

Damit Programme tatsächlich parallel laufen, müssen mehrere Prozessoren vorhanden sein. Trotzdem ist es auch möglich, dass Single-Prozessorsysteme von der parallelen Programmierung profitieren. So teilen sich bei einer parallelen Anwendung beispielsweise alle einzelnen Threads das Codesegment, das Datensegment, den Heap und alle anderen Zustandsdaten, die ein gewöhnlicher Prozess besitzt. Somit sind mehrere Threads leichtgewichtiger als mehrere Prozesse.


Hinweis

Auch wenn jemand Ihr Programm verwendet, das Sie eigentlich für Multiprozessorsysteme erstellt haben, lässt es sich ebenfalls problemlos auf einem Single-Prozessorsystem ausführen.



Galileo Computing - Zum Seitenanfang

26.1.2 Hyperthreading topZur vorigen Überschrift

Hyperthreading wird häufig mit Multithreading in einen Topf geworfen. Nun hat Hyperthreading aber zunächst nichts mit zwei Prozessoren zu tun und wird trotzdem bei der Entwicklung von Multithreading-Anwendungen verwendet. Die Technologie Hyperthreading wurde von Intel mit den Prozessoren Pentium III, Pentium 4 und Xeon eingeführt, aber auch AMD hat entsprechende Prozessoren auf dem Markt. Mit dieser Technologie wird der Durchsatz von Multithreaded-Anwendungen im Multitasking erhöht, indem sie die Auslastung der On-Chip-Ressourcen erhöht, die in der Intel-NetBurst-Mikroarchitektur verfügbar sind. Ein typischer Thread belastet nur etwa 35 % der NetBurst-Ausführungsressourcen. Hyperthreading erhöht die Auslastung durch notwendige Logik und Ressourcen, die der CPU hinzugefügt werden. Für die Aufteilung der einkommenden Daten auf den freien Raum sorgen somit zwei logische Prozessoren, die vom Betriebssystem mittels klassischer Multiprocessing-Verfahren verwaltet werden.


NetBurst

Die NetBurst-Architektur ist eine von Intel für den Pentium 4 neu entwickelte Mikroarchitektur, die bei mehreren CPU-Familien zum Einsatz kam. Die Architektur setzt auf eine sehr lange Pipeline, durch die sehr hohe Taktraten erreicht werden sollen.


Ich will hier nicht mit dem Fachchinesisch weitermachen – es lässt sich auch einfacher erklären. Mit Hyperthreading wird dem Betriebssystem ein zweiter logischer Prozessor vorgegaukelt. Dazu wird intern einfach das Register der CPU verdoppelt und es werden zwei getrennte Recorder- und Store-Buffer eingebaut. Allerdings teilen sich die beiden virtuellen Prozessoren die Funktionseinheiten, sodass es rein logisch nicht möglich ist, dass Befehle zweier Threads gleichzeitig ausgeführt werden. Aber in der Praxis stellte sich heraus, dass diese Technik manchmal genauso effektiv ist, als befänden sich zwei physikalische Prozessoren im System. Daher werden in der Praxis auch Prozessoren, die Hyperthreading implementiert haben, als parallele Systeme anerkannt.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z

 C von A bis Z
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Einstieg in C++






 Einstieg in C++


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


Zum Katalog: C/C++






 C/C++


Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-
 Programmierung


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Coding for Fun







 Coding for Fun 


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de