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
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
Ein Blick auf Multicore Multiprozessor-Computer (früher nur spezielle Server-PCs) bestehen aus: mehreren Prozessoren (CPU-1) (CPU-2) (CPU-3) (CPU-4) sockel sockel sockel 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
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
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.
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
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
Multicore-Programmierung
Multicore-Programmierung thread_create thread_join
Multicore-Programmierung # omp parallel for for-zyklus
Multicore-Programmierung 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; partitioner parallel_for originales Problem }; for (i=0; i<n; i++) c[j] = c[j] + A[j][i] * b[i]; } Zeit parallel_for(blocked_range<size_t>(0,n), MatrixVectorMult(A,b,c), auto_partitioner); Threads
Multicore-Programmierung
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