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