49

Informatik (Subject) / Multir-core (Lesson)

j

This lesson was created by bibabu.

Learn lesson

This lesson is not released for learning.

Advertisement
  • Klassifikation paralleler Rechnerarchitkektur nach Flynn         Instruktion       Single               MultipleData       Single              SISD                  MISD     multiple             SIMD                 MIMD
  • Nebenläufigkeit Mehrere Threads greifen gleichzeitig auf einen gemeinsamen Adressraum zukeine explizite kommunikation zwischen den threads über kanäle oder ähnliches sondern implizierte kommunikation über gemeinsame variablen Gefahr: race condidionts Zeitkritische abläufe, ergebnis kann von der relativen ausführungsgeschwindigkeit der threads abhängig sein-> zugriff auf gemeinsame variablen muss koordiniert werden
  • Mutex Variable eine Mutex variable ist eine ausschluss variable, ( lock (m), unlock (m) )
  • barrier synchronisation alle threads warten bis alle threads bei der barrier funktion sind ( barrier(); )
  • bedingte synchronisation busy waiting bis sich ne condition geändert hat:threads 1                                              thread 2lock(m)                                               lock (m)while (! condition ) {                           change_condition    unlock (m)                                       unlock (m)   sleep (100)   lock(m) }do_somethingunlock (m)nachteil: hoher cpu verbrauch durch busy waiting
  • Signal Mechanismus wait (s, m)                                 signal (s)wait wartet bis das signal gegeben wird und gibt solange mutex m frei, wenn signal gegeben wird, wird m wieder gelocket
  • taskparallelität vs datenparallelität task: mehrere voneinander unabhängige tasks eines programms werden parallel ausgeführtdaten: eine operation wird auf unterschiedliche elemente einer datenstruktur parallel ausgeführt
  • Shader funktionen die auf gpus ausgeführt werden werden zunehmend benutzt um nicht grafische anwendungen auszuführen
  • shader programmierung muss in spezieller programmiersprache geschrieben werden begrenzte länge eingabedaten müssen als texturen bereitgestellt werden grafikpipeline muss vorkonfiguriert werden ausgabe ist nur ein farbwert -> gpgpu wurde entwickelt um nachteile zu beseitigen
  • gpgpu oder gpu computing vorteile gegenüber shader programmierung:c als grund programmierspracheprogrammieren der gpu unabhängig von grafikpipelinedaten müssen nicht als textur abgelegt werdennachteile:verschiedene ansätze laufen nur auf verschiedenen systemen
  • Advertisement
  • opencl open computing language kann zur programmierung unterschiedlicher hardware genutzt werden ( heterogen) drei abstrakte modelle werden eingeführt:das plattform modelldas ausführungsmodelldas speichermodell
  • OpenCL Plattform-Modell eine opencl anwendung läuft auf dem host und sendet befehle an die devices um die berechnungen durchzuführen(bsp prozessor + hauptspeicher = host, GPU oder CPU = devices )
  • openCL ausführungsmodell es wird zwischen 2 teilen der Anwendung unterschieden:       - host programm      - kernel ( dessen instanzen auf opencl devices parallel ausgeführt werden ) host programm verwaltet und steuer die ausführung der kernel ein kernel ist eine funktion welche von opencl device auf parallele art ausgeführt wird, mehrere instanzen eines kernels werden gestartet
  • openCL work item imprinzip thread beim starten des kernels wird festgelegt wieviele instanzen gestartet werden ein work item wird immer sequentiell ausgeführt jedes work item hat eine globalID ( fortlaufend ) alle work items führen den selben quelltext aus durch unterscheidung anhand von global id kann sogar andere pfade ausgeführt werden ( if global id == 1 )
  • openCL workgroup eine workgroup besteht aus mehreren work items (natürlich alle gleiche größe und es gibt ne workgroup id ) jedes workitem erhält in jeder workgroup ne localid( nur innerhalb von der gruppe eindeutig) global id = workgroupID * workgroupsize + localID
  • Wovon wird Work Item / group ausgeführt ein work item wird von einem processing element ( pe ) eines opencl devices ausgeführt für work group groups: alle work-items einer work-group werden von einer compute unit (CU) gemeinsam ausgeführt nur workitems einer group können miteinander kooperieren, indem sie sich synchronisieren und effizient daten austauschen, weil gemeinsamer speicher
  • ausführungsmodell laufzeitverhalten kernelinstanzen werden in eine warteschlange für das device eingereiht (command queue) mögliche befehle: kernel-ausführungen, speicher-operationen, synchro-operationen befehle werden asynchron an die warteschlange übergeben ( d.h. im host programm kehren die entsprechenden funktionen umgehend zurück anstelle bis zur beendigung des befehls zu blockieren ) die warteschlange wird vom device abgearbeitet ( ein befehl fertig, nächster wird ausgeführt)
  • ausführungsmodell kompilieren opencl da für jedes device selbst kompiliert werden muss, wird das erst zur laufzeit der opencl anwendung gemacht zum kompilieren stellt opencl spezielle funktionen bereit
  • openCL speichermodell speicher von host und device ist logisch getrennt also daten die benötigt werden müssen kopiert werden speicherbereiche innerhalb eines devices:globaler speicehrkosntanter speicherlokaler speicherprivater speicher
  • opencl globaler speicher ist der größter speicher und vergleichbar mit arbeitsspeicher, alle work items der group haben lese und schreibezugriff
  • opencl konstanter speicher teil des globalen speichers, kann nur glesen werden
  • open cl lokaler speicher ist lokal für eine work group, alle items der workgroup können darauf zugreifen
  • opencl privater speicher ist nur für ein einzelnes work item sichtbar
  • typischer aufbau einer opencl anwendung initialisierung von openclkernel quellcode kompilierenglobalen speicher auf dem device reservieren und daten zum device kopierenkernel instanzen ausführendaten auf den host zurück kopieren
  • unterschied opencl - c es fehlen viele standartfunktionen wie printf oder malloc arrays variabler länge nicht möglich rekursion nicht erlaubt es gibt keine funktionszeiger
  • anzahl threads cpu vs gpu bei cpus an logischen kernen orientieren, weil umschalten zwischen threads aufwendig ist ( kontextwechsel) gpus haben viel größere register, kann also leichter umschalten
  • wie werden opencl speicherbereiche auf hardware realisiert? private skalare variablen -> register der gpu private array variablen -> grafikspeicher lokale variablen -> lokaler speicher globale und konstante variablen -> grafikspeicher
  • Erhöhung der Performance durch speicherzugriffe Daten werden in Tiles(kacheln) sortiert, auf welchen die Berechnungen unabhängig voneinander funktionieren muss alle work items berechnen mit den daten und schreiben die ergebnisse in den grafikspeicher
  • work item divergenz in einem warp werden immer die gleichen instruktionen ausgeführt, führen work items verschiedene anweisungen aus ( if verzweigung ), müssen die verschiedenen work items solange warten, während andere die andere anweisung ausführen
  • globaler speicher gpu in modernen drams ( globaler grafik speicher ) werden benachbarte werte parallel gelesen jeder wert der in dram zellen liegt, ist durch eindeutige adresse erreichbar (speicherstelle) speicherstellen haben feste segment länge
  • Advertisement
  • speicherzugriffe vermindern anwendung sollte zugriffe auf globalen speicher so anordnen dass benachbarte speicherstellen zusammen gelesen werden -> idealerweise mehrere speicherzugriffe auf einen einzigen zugriff aufs gesamte segment zusammenfassen
  • Loop unrolling schleifen etc. manuell im quellcode ausrollen, damit fallen meist viele instruktionen weg
  • Granularität erhöhen man kann mehrere workgroups zusammenfassen um die zugriffe auf den globalen speicher zu reduzieren, jedoch werden mehr ressourcen belegt ( insbesondere mehr lokaler speicher ) und es werden insg. weniger work items gestartet man muss durch tests und messungen perfekte anzahl finden bei matrix multiplikationen ist 4 work groups zu einer zusammen zu fassen
  • prefetching idee: daten die zeitnah gebraucht werden schonmal vorher in den register laden instruktionen unabhängig vom speicherzugriff machen bei großen kacheln lohnt es sich mehr aber bei einer granularität von 1x4 und loop unrolling ist prefetching nicht mehr möglich, da der register zu klein ist
  • gleitkommazahlen (-1)s*M*2e m ist zwischen 1 und 2 dadurch eindeutig exponent wird als ganzzahl ohne vorzeichen gespeichert => es können nicht alle zahlen dargestellt werden
  • denormalisierte zahlen gleitkommazahlen, die auch die 0 abbilden können. wenn der exponent 0 ist, wird die mantisse nicht mehr als 1.xx sondern als 0.xx angenommen damit kann die zahl 0 dargestellt werden und die werte zwischen 0 und 1 sind gleichmäßig verteilt kommt nur in neuen grafikkarten vor
  • multi device in openCL zur verwaltung von devices werden warteschlangen verwendet jede warteschlange für genau ein deviceder host erzeugt für jedes device eine eigene warteschlangebefehle werden in die warteschlangen einzelner devices eingereihtjedes device arbeitet unabhängig von den anderen devices die bfehle seiner warteschlange ab host ist für austausch von daten und für synchronisation zwischen den devices verantwortlich
  • verteilter speicher in multi device systemen jedes device hat einen eigenen getrennten speicher also ist datentransfer nötig, falls daten von device zu device gelangen sollen
  • synchronisationen zwischen devices clfinish (command_queue) wartet auf die beendigung aller befehle in einer command queue jeder befehl in der queue erzeugt ein event objekt von welchem der status abgefragt werden kann man kann befehlen eine reihe von events mitgeben die abgeschlossen seien müssen, damit der befehl ausgeführt wird
  • host programm aufgaben in multi device systemen teilberechnung auf devices verteilen eingabedaten aufteilen und auf die devices verteilen berechnungen zwischen unterschiedlichen devices synchronisieren datenaustausch zwischen mehreren devices durchführen ergebnisdaten von mehreren devices sammeln und evtl verknüfen
  • Parallelitätsebenen innerhalb eines Prozessors (4) 1 Parallelität auf Bitebene                • Alle Bits der Wortbreite können parallel verarbeitet werden                • Entwicklung der Wortbreite: 8 → 16 → 32 → 642 Parallelität durch Pipelining3 Parallelität durch mehrere Funktionseinheiten4 Parallelität auf Prozess- bzw. Threadebene
  • Superskalarer Prozessor besitzt dynamisches scheduling ( die befehle werden zur laufzeit verteilt ) dafür wird zusätzliche hardware benötigt
  • VLIW Prozessor Very Long instruction word statisches scheduling beim compilen wird Maschinencode erzeugt, der die Verteilung auf die Funktionseinheiten angibt wird benötigt: keine zusätzliche hardware, starker compiler
  • skalarer Prozessor benutzt nur eine Funktionseinheit gleichzeitig
  • Pipelining Idee: instruktion in viele verschiedene gleich große schritte unterteilen und die verzahnt ausführen • Pipelining ist effizient, wenn verschiedene Pipelinestufenetwa gleich lange dauern• Die Anzahl der Stufen (in der Praxis: zwischen 2 und 20)bestimmt den Parallelitätsgrad• Prozessoren mit vielen Stufen heißen super-pipelined.• Grenzen für die Stufenanzahl/Parallelitätsgrad:
  • Parallelität auf Prozess- bzw. Threadebene Es gibt verschiedene Möglichkeiten für Unterstützung von mehreren Threads (Threadparallelität) im Prozessor, man spricht dabei auch manchmal von Chip Multi-Processing (CMP), das Unterschiedlich organisiert werden kann:    • Mehrere Prozessorkerne werden auf einem Prozessorchip integriert (Multi-Core-Prozessor).    • Der Prozessor schaltet per Hardware zwischen zur Verfügung stehenden Threads um, nach      einer festen Zeitscheibe oder ereignisbasiert.    • Mehrere Threads werden ohne explizites Umschalten gleichzeitig ausgeführt.    Dies nennt man Simultanes Multithreading (SMT)
  • Simultanes Multithreading Simultanes Multithreading ist als Hyperthreading-Technik in aktuellen CPUsverbaut• Ein physikalischer Prozessor wird in mehrere logische Prozessoren unterteilt• Jeder logische Prozessor verfügt über eigenen Speicher, um eigenständigThreads zu verwalten• Mehrere logische Prozessoren teilen sich die FUs des physikalischenProzessors• Instruktionen mehrerer Threads werden verzahnt ausgeführt• Das Ziel dabei ist es, den physikalischen Prozessor besser auszulasten
  • Speicherhierarchie CPU 1 Register2 Caches3 Hauptspeicher4 Festplatte
  • Speicherhierarchie GPU Register lokaler speicher grafikspeicher