Convey, Hybrid-Core Computing Vortrag im Rahmen des Seminars Ausgewählte Themen in Hardwareentwurf und Optik HWS 09 Universität Mannheim Markus Müller 1
Inhalt Hybrid-Core Computing? Convey HC-1 Überblick Convey HC-1 Coprozessor im Detail Hostinterface Verarbeitungseinheiten Speicherinterface Programmierumgebung Codebeispiele 2
Hybrid-Core Computing? Kombination eines x86 Systems mit Hardware zur Ausführung anwendungsspezifischer Instruktionen Im Vergleich zu einem gewöhnlichen heterogenen System (z.b. IBM Cell) : Gemeinsamer cache-kohärenter logischer Adressraum Executable enthält Instruktionen die auf der Host CPU oder der anwendungsspezifischen Hardware ausgeführt werden können Im Grunde Verhalten wie ein Co-Prozessor 3
Convey HC-1 Hybrid-Core System von Convey Computer: FSB FSB DDR2 Quelle: [2] Co-Prozessor ist konfigurierbar, System kann verschiedene Personalities annehmen 4
Technische Daten Standard Dualprozessor Mainboard x86 Host Prozessor Intel Xeon Dual Core Max. 128GB RAM Convey HC-1 Co-Prozessor 14 Xilinx Virtex 5 FPGAs Max. 128GB DDR2 RAM oder Max. 32GB Convey Scatter-Gather RAM 5
Was ist ein Co-Prozessor? Mikroprozessor der den Hauptprozessor bei speziellen Aufgaben unterstützt Bsp.: Floating-point Co-Prozessor für Motorola 68k Spezielle OpCodes im Instructionset des Hosts (0xF...) Host steuert Instruction Issue, TRAP falls kein Co-Prozessor vorhanden Co-Prozessor ist mit System Bus verbunden Quelle: [5] 6
Was ist ein Device? Quelle: [4] Programmed I/O (PIO) Standard Load/Store Befehle Mindestens 4 Register Command Register Status Register Data Read Register Data Write Register Register werden memory-mapped 7
Convey HC-1 Quelle: [1] 8
HC-1 Co-Prozessor Host Interface 2 V5LX110 Application Engine 4 V5LX330 Memory Controller 8 V5LX155 Quelle: [1] V5LX330 550MHz (eher ~300 MHz) 330.000 logic cells bis zu 207.360 FFs 9
HC-1 Co-Prozessor 10
Shared Memory CPU0 Cache FSB Intel Chipsatz FSB Co- CPU1 Prozessor Cache Cache Logik Memory Controller Speicher am Co- Prozessor aus Sicht der Host CPU im Prinzip wie ein großer Cache Memory Controller RAM RAM Zugriff über Cache Consistency Logik ein Adressraum 11
Application Engine Hub (AEH) Host Interface Verbindung zum FSB Bearbeitet Data Requests der Host CPU Überwacht Cache Consistency Instruction Fetch/Decode für Application Engines Implementiert das Canonical Instruction Set 12
Personalities (1/2) Anwendungsspezifisches Instruction Set Canonical Instruction Set : Skalare Integer und Floating Point Operationen Adressberechnungen, Branches Implementiert im Host Interface Extended Instruction Set z.b. Vektorverarbeitung, State Machines Eigene Anpassung, eigene Instruktionen möglich Implementiert in den Application Engines 13
Personalities (2/2) Bestehen aus: FPGA Bitfiles für Application Engines Informationen für den Compiler und Debugger Können im Betrieb gewechselt werden Jede Anwendung kann ein speziell auf eigene Anforderungen optimiertes Instruction Set nutzen 4 Application Engines Viele parallele Verarbeitungseinheiten möglich 14
Beispiel: Vector Personality Quelle: [1] Implementiert einen Vektorrechner Single Precision (32bit) Floatingpoint Units Für Double Precision die Hälfte der Units 15
Beispiel: InsPect Personality Implementiert einen anwendungsspezifischen Feldrechner für Protein Sequencing 100x schneller als ein Nehalem Kern Quelle: [1] 16
Memory System Convey HC-1 8 Controller mit je 2 Kanälen (80 GB/s) Optimiert für 8 Byte Zugriffe Optimiert für verteilte Zugriffe Quelle: [3] (Intel Xeon) 17
Memory Interleaving char matrix[4][4]; 1 2 3 4 5 6 7 8........ Speichermodule: Adresse Daten 00 00 00 01 00 10 00 11 01 00 01 01 01 10 01 11 10 00 1 2 3 4 5 6 7 8 9 1 5 9 2 6 10 3 7 11 4 8 12 bank select Bank 0 (00) Bank 1 (01) Bank 2 (10) Bank 3 (11) 18
Skewed Storage char matrix[4][4]; i/j 0 1 2 3 0 1 2 1 2 3 4 5 6 7 8 9 101112 Speichermodule: Adresse Daten 00 00 00 01 00 10 00 11 01 00 01 01 01 10 01 11 10 00 1 2 3 4 5 6 7 8 9 1 8 11 2 5 12 3 6 9 4 7 10 (i, j) i+j mod B Adresse mod B (Bsp.: B = 4) Bank 0 (00) Bank 1 (01) Bank 2 (10) Bank 3 (11) 19
Burstmode Access Adressierung von SDRAM erfolgt in Zeilen (RAS) und Spalten (CAS) Oft sequenzielle Zugriffe Burstmode Access Ein Burst holt mehrere Wörter der selben Zeile Für jedes Wort nur noch CAS erforderlich Standard DIMMs holen meist eine 64 Byte Cacheline pro Burst Convey Scatter/Gather DIMMs sind optimiert für 8 Byte Bursts 20
Memory System Convey HC-1 Application Engines Memory Controller Memory Controller Memory Controller Memory Controller Optimiert für kleine (64 bit), verteilte Zugriffe. Convey SG Convey S/G modulo 31 skewed storage 21
Programmierumgebung Standard C/C++ oder Fortran Standard Linux System Executable auf jedem Linux ausführbar runtime test ermittelt auszuführenden Code je nach Performance und System Bestehender Code kann weitgehend übernommen werden Einfaches Programmiermodell durch Single Thread und Shared Memory Quelle: [1] 22
Compiler Vektorisierender Compiler erkennt automatisch optimierbare Bereiche (Abhängigkeitsanalyse!) Bereiche die auf dem Co-Prozessor ausführbar sind werden erkannt und entsprechende Aufrufe generiert Coderegion wird geklont Eine Kopie für x86_64 optimiert, eine für Convey Laufzeitentscheidung über Ausführung Compiler generiert Dispatcher Anweisungen für Co-Prozessor 23
Startsequenz Co-Prozessor Quelle: [1] 24
Vektorisierung Codebeispiel: for (i=0; i <= 63; i++) Y[i] = a * X[i] + Y[i]; Skalare Verarbeitung L.D F0, a ; Skalar a laden DADDIU R4, Rx, #512 Loop: L.D F2, 0(Rx) ; X(i) laden MUL.D F2, F2, F0 ; a * X(i) L.D F4, 0(Ry) ; Y(i) laden ADD.D F4, F4, F2 ; a * X(i) + Y(i) S.D 0(Ry), F4 ; Y(i) speichern DADDIU Rx, Rx, #8 DADDIU Ry, Ry, #8 DSUBU R20, R4, Rx BNEZ R20, Loop ; wenn 0, dann fertig Vektor Verarbeitung L.D F0, a ; Skalar a laden LV V1, Rx ; Vector X laden MULVS.D V2, V1, F0 ; Vector-Skalar Multiplikation LV V3, Ry ; Vector Y laden ADDV.D V4, V2, V3 ; Vektor Addition SV Ry, V4 ; Resultat speichern Quelle: [7] 6 Befehle vs. 578 Befehle (2 + (64*9)) 25
Vector Personality Benchmark Quelle: [1] 26
CPU vs. FPGA (1/3) Codebeispiel einer 4-Input Logikoperation uint32 Log4(uint32 F, uint32 A, uint32 B, uint32 C, uint32 D) { uint32 R = 0; for (int i = 0; i < 32; i++) { uint32 a = (A >> i) & 1; uint32 b = (B >> i) & 1; uint32 c = (C >> i) & 1; uint32 d = (D >> i) & 1; uint32 e = (a << 3) (b << 2) (c << 1) d; R = ((F >> e) & 1) << i; } return R; } A,B,C,D sind Eingänge, F dient als Bitmaske 27
CPU vs. FPGA (2/3) CPU Umsetzung 00401006 xoredx,edx 00401008 movecx,esi 0040100A shredx,cl 0040100C and edx,1 0040100F lea edi,[edx+edx] 00401012 or edi,edx 00401014 add edi,edi 00401016 or edi,edx 00401018 movedx,1 0040101D shredx,cl 0040101F add edi,edi 00401021 and edx,1 00401024 or edi,edx 00401026 movecx,edi 00401028 movedx,5 0040102D shredx,cl 0040102F movecx,esi 00401031 add esi,1 00401034 and edx,1 00401037 shledx,cl 00401039 or eax,edx 0040103B cmpesi,20h 0040103E jllog4+6 (401006h) 00401040 pop edi 00401041 pop esi 23 * 32 = 736 Instruktionen FPGA Umsetzung Direkte Implementierung 128 Logikzellen 28
CPU vs. FPGA (3/3) CPU Umsetzung FPGA Umsetzung 736 Instruktionen @ 3 GHz ~ 245ns Ausführungszeit 128 Zellen von 207.000 (~ 2ns Ausführungszeit) Bei 100 Watt für 4 Cores Bei 25 Watt für 207.000 Zellen 25 Watt * 245ns 128/207.000 * 25 Watt = 0,01 Watt = 6,1 * 10-9 Joule = 5,6 * 10-15 Joule 29
Fazit Einfaches Programmiermodell durch Shared Memory, Single Thread Standard Entwicklungsumgebung (gcc,gdb,...) Energieersparnis durch effizientere Verarbeitung auf FPGAs Performancegewinn stark abhängig von: Compilerqualität Spezifischer Anwendung 30
Danke für Ihre Aufmerksamkeit. 31
Quellenangaben [1] Convey Computer Hot Chips Präsentation http://www.conveycomputer.com/convey.hot%20chips.brewer.pdf [2] Convey's Energy-Efficient Computers http://www.conveycomputer.com/resources/energy-efficient%20hybrid [3] HP CAST 12 Vortrag [4] Vorlesungsskript Rechnerarchitektur 1 [5] Motorola MC68881 Datasheet [6] Wikipedia http://de.wikipedia.org/wiki/simd [7] Wikipedia http://de.wikipedia.org/wiki/vektorrechner 32