Programmierung von Multicore-Rechnern

Transcription

Programmierung von Multicore-Rechnern
Programmierung von
Multicore-Rechnern
Prof. Dr.-Ing. habil. Peter Sobe
HTW Dresden, Fakultät Informatik/Mathematik
www.informatik.htw-dresden.de
Gliederung:
• Ein Blick auf Multicore-Prozessoren/ und -Rechner
• Weshalb ?
• Nutzbarmachung durch Computerprogramme
• Multicore-Programmierung
• Profitierende Anwendungen
Freital, 18.09.2012
Programmierung von Multicore-Rechnern
Herkömmliche PCs
Klassische Computer (insbes. PCs) bestehen aus:
einem Prozessor (CPU, core)
sockel
 Arbeitsspeicher (RAM)
 Grafikkarte (GPU)
 spezialisierter E/A-Bus zum Anschluss
von Festplatten
 E/A-Bus, z.B. zum Anschluss
einer Netzwerkkarte
 externe Interfaces, z.B. USB
auf Mainboard
mit einem
Chipsatz
Programmierung von Multicore-Rechnern
Ein Blick auf Multicore
Multiprozessor-Computer (früher nur spezielle Server-PCs)
bestehen aus:
mehreren Prozessoren
(CPU-1)
(CPU-2)
sockel
sockel
(CPU-3)
sockel
(CPU-4)
sockel
 Arbeitsspeicher (RAM)
 Grafikkarte (GPU)
 spezialisierter E/A-Bus zum Anschluss
von Festplatten
 E/A-Bus, z.B. zum Anschluss
einer Netzwerkkarte
 externe Interfaces, z.B. USB
auf Mainboard mit
einem Chipsatz
Programmierung von Multicore-Rechnern
Ein Blick auf Multicore
Multicore-Computer (heute schon fast alle PCs/Notebooks)
bestehen aus:
selten mehreren Prozessor-Chips, dafür aber Chips mit mehreren
Prozessorkernen (cores)
(CPU-0 CPU-1 CPU-2 CPU-3)
sockel
 Arbeitsspeicher (RAM)
 Grafikkarte (GPU)
 spezialisierter E/A-Bus zum Anschluss
von Festplatten
 E/A-Bus, z.B. zum Anschluss
einer Netzwerkkarte
 externe Interfaces, z.B. USB
… heute 2 bis 8 Kerne
üblich
Programmierung von Multicore-Rechnern
Weshalb werden
Multicore-Prozessoren …
… entwickelt ?
 hohe Integrationsdichte bei
Halbleitertechnologie, d.h.
man kann immer mehr
Funktionseinheiten auf
einem Chip unterbringen
 Leistungssteigerung über
höhere Taktfrequenz nicht
mehr möglich
 Besser: mehrere einfache
Prozessorkerne als ein
hochkomplexer Kern
… benötigt ?
mehr Verarbeitungsleistung für
einzelne Anwendungsprogramme,
z.B. für
 schnellere Anzeige großer Fotos
 Video-Dekodierung
 Computerspiele
 gleichzeitiges Ausführen
mehrerer Programme
In den meisten Programmen werden
mathematische Verfahren auf großen
Datenmengen ausgeführt. Diese
Datenmengen kann man aufteilen und
parallel durch mehrere CPUs
verarbeiten.
Programmierung von Multicore-Rechnern
Nutzbarmachung durch
Computerprogramme
Anwendungsprogramm 1
z.B. Webbrowser
Anwendungsprogramm 2
z.B. ein Simulator
Anwendungsprogramm 3
z.B. Foto-Konvertierung
Betriebssystem
Rechner-Hardware mit mehreren CPUs
Programmierung von Multicore-Rechnern
Multicore-Programmierung
Programmierung und Programmiersprachen entwickelten sich aus
sequentieller Sichtweise
heute (noch?) vorwiegend sequentielle Programmiersprachen:
Java, C, C++, C#, Objective-C, Fortran, Cobol
Multicore Programmierung durch Erweiterung sequentieller
Programmiersprachen
 Steuerung der Parallelarbeit durch Zugriff Betriebssystemfunktionen und
Sammlungen von Unterprogrammen, meistens basierend auf s.g. Threads
 Teilautomatische Parallelisierung durch Übersetzerprogramme, OpenMP
 Frameworks und Ausführungsrahmen mit eingebauter Erzeugung und
Steuerung paralleler Threads, z.B. Intel TBB, OpenCL
Programmierung von Multicore-Rechnern
Multicore-Programmierung
Programmierung von Multicore-Rechnern
Multicore-Programmierung
thread_create
thread_join
Programmierung von Multicore-Rechnern
Multicore-Programmierung
# … omp parallel for
for-Zyklus
Programmierung von Multicore-Rechnern
Multicore-Programmierung
for (i=0; i<N; i++)
c[j] = c[j] + A[j][i] * b[i];
}
partitioner
parallel_for
Zeit
class MatrixVectorMult {
…
public:
void operator () (const blocked_range<size_t> &r) const
{
for( size_t j=r.begin(); j!=r.end(); j=j+1 )
{
c[j]=0.0;
originales
Problem
};
parallel_for(blocked_range<size_t>(0,N),
MatrixVectorMult(A,b,c), auto_partitioner);
Threads
Programmierung von Multicore-Rechnern
Multicore-Programmierung
Programmierung von Multicore-Rechnern
Profitierende Anwendungen
 Wissenschaftliche Berechnungen:
 Lösung großer Gleichungssysteme
 Numerische Lösung von Differentialgleichungen
z.B. für die Wettervorhersage




Verschlüsselung- und Entschlüsselung
Bildverarbeitung
Videokomprimierung
Automatische Objekterkennung in Bildern
 Computerspiele
 Webserver, -browser