Post on 06-Feb-2018
Maximilian Bandle
CPU, GPU und FPGA
CPU, GPU und FPGA
•CPU: Central Processing Unit
•GPU: Graphical Processing Unit
•FPGA: Field Programmable Gate Array
Inhalt
2
Maximilian Bandle
CPU, GPU und FPGA
CPU
• Bisher in Vorlesung betrachtet • Über Assembler/Maschinensprache frei programmierbare
Verarbeitungseinheit
• Zentraler Bestandteil eines Computers • Rechenwerk (ALU) • Leitwerk • Speichermanager (MMU)
Central Processing Unit
3
Maximilian Bandle
CPU, GPU und FPGA
CPUCachehierarchie
4
Register
Prozessorcache
Arbeitsspeicher (RAM)
Festplatte/SSD
Archivspeicher
Bytes
K-M Bytes
G Bytes
T Bytes
ns
< 10ns
< 100ns
ms
Größe Zugriffszeit
Faktor 104
Maximilian Bandle
CPU, GPU und FPGA
CPU
• Übergang fließend
• Bei Mikrocontroller alles auf Chip enthalten • Evtl. nur Oszillator (Taktgeber) und Speicher extern
• Basiert häufig auf älteren Bauformen von Prozessoren • Entworfen für Steuerung von Systemen • Kein richtiges Betriebssystem - nur Bootloader
• Populär geworden in Maker-Szene durch Arduino und Co.
Abgrenzung von Mikrocontrollern
5
Maximilian Bandle
CPU, GPU und FPGA
FPU
• Entworfen für Fließkomma Berechnungen • Lookup Tabellen (LUT) mit vordefinierten Werten z.B. für Division
-> Pentium-FDIV-Bug (Fehler in LUT) • Mathematischer Koprozessor • Kann meist effizient auf Matrizen arbeiten • Heutzutage in CPU integriert da Funktionen allgemein verwendet
werden
• Programmierbar durch spezielle Assembler Befehle
Floating Point Unit
6
Maximilian Bandle
CPU, GPU und FPGA
SIMD
• Vektor Instruktionen um Programme zu parallelisieren • Gleichzeitiges Bearbeiten mehrerer Elemente in sogenannten Lanes • In jedem 64 Bit Prozessor verbaut (SSE in Intel & AMD)
• Seit Skylake Server bis zu 512 Bit (8x64bit) parallel bearbeiten
• Diverse Operationen unterstützt • Logische Operationen (Shifts, Rotationen) • Mathematische Operationen • Vergleiche • Spezielle String Befehle (zB Substring Suche)
Single Instruction Multiple Data
7
Maximilian Bandle
CPU, GPU und FPGA
SIMD vs non SIMD CodeFiltern von Elementen
8
uint32_t scalar(int32_t* in, int32_t inCount, int32_t x, int32_t* out) { uint32_t outPos = 0; // Initialisiere Ausgabe for (int32_t i=0; i < inCount; i++) { if (in[i] < x) { out[outPos++] = in[i]; } // Speichere wenn passend
} return outPos;
}
uint32_t scalar(int32_t* in, int32_t inCount, int32_t x, int32_t* out) { uint32_t outPos = 0; // Initialisiere Ausgabe for (int32_t i=0; i < inCount; i++) { uint32_t inTmp = in[i]; // Wert speichern bool vergleich = inTmp < x; // Vergleichen if (vergleich) { // Wenn passend zum Vergleich out[outPos] = inTmp; // Speichern} outPos+=vergleich; // Neuen Treffen zählen
} return outPos;
}
Maximilian Bandle
CPU, GPU und FPGA
SIMD vs non SIMD CodeFiltern von Elementen
9
uint32_t scalar(int32_t* in, int32_t inCount, int32_t x, int32_t* out) { uint32_t outPos = 0; // Initialisiere Ausgabe for (int32_t i=0; i < inCount; i++) { uint32_t inTmp = in[i]; // Wert speichern bool vergleich = inTmp < x; // Vergleichen if (vergleich) { // Wenn passend zum Vergleich out[outPos] = inTmp; // Speichern} outPos+=vergleich; // Neuen Treffen zählen
} return outPos;
} uint32_t SIMD(int32_t* in, int32_t inCount, int32_t x, int32_t* out) { uint32_t outPos = 0;__m512i cmp = _mm512_set1_epi32(x); // Vektor mit Vergleichswerten for (int32_t i=0; i<inCount; i+=16) { // 16 pro Durchlauf __m512i inV = _mm512_loadu_si512(in + i); // 16 Werte laden__mmask16 mask = _mm512_cmplt_epi32_mask(inV, cmp); // Mit Maske vergleichen _mm512_mask_compressstoreu_epi32(out + outPos, mask, inV); // Speichern outPos += __builtin_popcount(mask); // Treffer zählen und hochzählen
} return outPos;
}
Maximilian Bandle
CPU, GPU und FPGA
SIMD vs non SIMD CodeFiltern von Elementen
10
Zeit
in M
illise
kund
en
0
15
30
45
60
Selektivität
1% 10% 50% 90% 99%
2,52,21,61,01,0
8,4
16,6
53,5
20,814,7
Skalar SIMD
Maximilian Bandle
CPU, GPU und FPGA
GPU
•Entworfen für Grafikanzeige und Grafikverarbeitung
• Hochparalleles Rechnen gleichartiger Aufgaben • Schlecht bei Branches (if) da beide Pfade ausgeführt werden
• Nur ein Ergebnis wird genutzt • Für Vektor und Matrix-Operationen mit Gleitkommazahlen ausgelegt
•Programmierung durch spezielle Schnittstellen: z.B. DirectX (Windows), OpenGL, Vulkan
• Inzwischen Basismodelle in den meisten Prozessoren integeriert • Viele Laptops besitzen keine gesonderte GPU
Graphical Processing Unit
11
Maximilian Bandle
CPU, GPU und FPGA
GPGPU
• Verwendung der GPU über die Grafikverarbeitung hinaus • Vor allem wissenschaftliches Rechnen, für Simulationen • Hohe Parallelität (nicht unbedingt vorteilhaft!) • Limitierte Auswahl an Operatoren im Vergleich zu CPU
• Programmierung durch spezielle Schnittstellen, z.B. CUDA, OpenCL
General Purpose GPU
12
Maximilian Bandle
CPU, GPU und FPGA
FPGA
• FPGAs sind (frei) programmierbare Logikschaltungen
• Nutzer beschreibt seinen eigenen Mikrochip
• Konfiguration eines FPGAs ist nicht fest: Neu Konfigurierbar
Field Programmable Gate Arrays
13
Maximilian Bandle
CPU, GPU und FPGA
FPGACPU vs FPGA
14
Code Assembler
out = !a; not eax
VHDL Logik
out <= not a;
Kompilieren
Synthetisieren
Maximilian Bandle
CPU, GPU und FPGA
FPGA
• Aufgaben die eine CPU nicht gut kann • z.B. Signalverwaltung, Echtzeit Anwendungen
• Design der Hardware zur Lösung eines Problems • Bei CPU ist Hardware vorgegeben
• Flexibles Design eines Chips • Beheben von Fehlern im Design
• Produktion eines Mikrochips von vielen ist billig (Cent - Bereich) • ABER Firma & Produktion des ersten ist teuer
(Millionen - Milliarden)
Wieso brauche ich ein FPGA?
15
Maximilian Bandle
CPU, GPU und FPGA
FPGA
• Mikrochip - Produzenten • Simulation eines Chips in Entwicklung
• High Performance Computing • Spezielle Algorithmen
• Digitaltechnik • Filter, Signalanalyse
• Rüstungsindustrie • Flugstabilisierung, Cruise-Missile
Wer verwendet FPGAs
16
Maximilian Bandle
CPU, GPU und FPGA
FPGA
• Parallelität • Jeder Prozess im FPGA arbeitet parallel zu allen anderen
• Pipelining • Jeder Datensatz selbst wird sequentiell bearbeitet
• Anpassung an Daten • Je nach Problem kann die Hardware angepasst werden
• Datendurchsatz • Daten liegen direkt an den Operatoren (Kein Programm /
Betriebssystem dazwischen)
Vorteile
17
Maximilian Bandle
CPU, GPU und FPGA
FPGA
• Ungenutzte oder schlecht genutzte Kapazität • Alle (auch wenig genutzte) Optionen sind in Hardware synthetisiert
• Warten auf Zeit oder Daten • Je mehr gewartet werden muss desto geringer ist die Performanz
• Langsame Taktung • Maximal 500 MHz (ca Faktor 5-10 langsamer als CPU)
➡ Je ähnlicher das FPGA einem Prozessor wird, desto schlechter ist die Performanz
Nachteile
18
Maximilian Bandle
CPU, GPU und FPGA
FPGA
• Kombination von Prozessor und FPGA auf einem Board • FPGA in Kombination mit ARM Chip • Aufteilen der Aufgaben
• Prozessor mit integriertem FPGA Coprozessor • Angekündigt von Intel nach Kauf von Altera • Direkter verbunden - vergleichbar zu integrierter GPU
Aktuelle Entwicklungen
19