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