Kapitel 8: Umsetzung in aktuellen Prozessoren 4 Realisierung elementarer Funktionen Reihenentwicklung Konvergenzverfahren 5 Unkonventionelle Zahlensysteme redundante Zahlensysteme Restklassen-Zahlensysteme logarithmische Zahlensysteme 6 Intervall-Arithmetik 7 Rechnen mit Zahlen beliebig hoher Stellenzahl 8 Umsetzung in aktuellen Prozessoren x86 Gleitkomma-Einheiten in AMD Athlon und Intel Pentium SIMD-Einheiten: MMX, SSE, 3DNow! und SSE2 1 Umsetzung in aktuellen Prozessoren Fallstudie 1: SIMD-Einheiten moderner Mikroprozessoren Architekturen Befehlssätze Fallstudie 2: IA-32 IA-32 FPU Intel Pentium 4 AMD Athlon XP Fallstudie 3: Itanium 2 Architektur FPU 2
Fallstudie 1: SIMD-Einheiten Idee: viele Berechnungen benötigen nicht die volle Wortbreite b eines modernen Prozessors Abbildung von p Subworten der Breite b/p auf ein Datenwort und Implementierung von datenparallelen Operationen, die auf allen p Subworten simultan arbeiten Beispiel: Berechnung der quadrierten Euklidischen Distanz x j n i 1 ( v i c ij ) 2 auf einer SIMD-Einheit für p=4 (SIMD = Single Instruction, Multiple Data) 3 Architektur von SIMD-Einheiten verfügbar seit Parallelitätsgrad p SIMD-Datentypen Anzahl Register Registerbreite b Anzahl Instr. Latenzzeit arithm. Operationen (Takte) MMX Pentium II 2 8 8/16/32 Bit 8 (FP) 64 Bit 57 2 : 8 SSE Pentium III 4 8 (neu) 128 Bit 70 4 6 /, : 22 32 SSE2 Pentium 4 2 16 8/16/32/64 Bit / double 8 (SSE) 128 Bit 144 2 8 /, : 35 62 3DNow! (AMD) K6/Athlon 2 8 (FP) 64 Bit 21/45 3 4 AltiVec (Motorola) PowerPC G4 4 16 8/16/32 Bit 32 (neu) 128 Bit 162 1 5 algorithmische Voraussetzungen für eine effiziente Nutzung: eingeschränkte Präzision ausreichend Operationen auf p benachbarten Vektorkomponenten x i, x i+1,..., x i+p 1 erforderlich 4
Instruktionssätze von SIMD-Einheiten 8 8 16 16 32 32 64 64 FP FP 16 16 32 32 FP FP 16 16 16 16 16 + 16 16 FP FP FP min / max Reduktion mit load / store pack merge / unpack permutation MMX 8[m], 8[sat] 16[m], 16[sat] 32[m] 16[h], 16[l] 32[m] 64 8,16[l,sat] 8,16,32 SSE 8,16, 16,32,128 32 16,32 SSE2 8[m], 8[sat] 16[m], 16[sat] 32[m] 64[m] double 16[h], 16[l] 64 double 32[m] 8,16,double 16,32,64,128 8,16[l,sat] 8,16,32,64 16,32,64 3DNow! (AMD) 16[h,r] 8,16, 16,64 32 16,32 AltiVec (Motorola) 8[m], 8[sat] 16[m], 16[sat] 32[m], 32[sat] 16[h,r], 32 16[h,r,sat] 32[sat] 8,16,32, 8,16,32 16,32,128 8,16[l,sat] 16,32 8 5 SIMD-Multiplikation Beispiel: Implementierung einer 16 16 32 Bit Festkomma-Multiplikation auf SIMD-Einheiten 6
Programmierung von SIMD-Einheiten Möglichkeiten der Programmierung: Maschinensprache Inline-Assembling Bibliotheken allgemein, z.b. Small Matrix Library für SSE anwendungsspezifisch, z.b. vdsp für AltiVec Gnu C Compiler ab Version 3.1: SIMD-Datentypen und Makros für MMX, SSE, 3DNow! und AltiVec Intel C++ Compiler ab Version 6.0: SIMD-Datentypen und Makros für MMX, SSE und SSE2 Vektorisierer für einfache Schleifen keine prozessorunabhängige Programmierung möglich! 7 Fallstudie 2: IA-32 FPU in der IA-32 Software-Architektur ist folgende Gleitkomma- Einheit definiert (auch als x87 FPU bezeichnet) : Programmiermodell besteht aus: Stack aus acht 80-Bit Registern Status-Register enthält u.a. Zeiger auf Stack (TOP) arithmetische Operationen verknüpfen Elemente an den Positionen TOP und TOP +i Tag-Register kennzeichnet NaN, Zero, Valid, Empty für heutige High-Performance CPUs nicht mehr adäquat! (zu wenige Register, kein IEEE-Standard, Overhead für Stack-Manipulation) 8
Intel Pentium 4 Architektur des Intel Pentium 4: Superskalarität: jeweils 3 -Instruktionen aus Trace-Cache werden auf 6 Funktionseinheiten verteilt Integer-Arithmetik: 2 ALU 1 Slow ALU 128 interne Register FP-Arithmetik: 1 FMUL/FADD 1 FSTORE 128 interne FP-Register 9 Intel Pentium 4 (Forts.) Instruktionspipeline: 20-stufig für Integer- und Gleitkomma-Arithmetik Ausführungszeiten einiger arithmetischer Befehle mit Register- Operanden: Integer-Multiplikation (auf FPU): 14 Takte, Durchsatz: 1 je 3 Takte Integer-Division: 56-70 Takte, Durchsatz: 1 je 23 Takte sonstige Integer-Befehle: i.a. im Mittel ½ Takt, Durchsatz: 2 je Takt Gleitkomma-Addition: 5 Takte, Durchsatz: 1 je Takt Gleitkomma-Multiplikation: 7 Takte, Durchsatz: 1 je 2 Takte Gleitkomma-Division (32/64 Bit): 23/38 Takte Berechnung von sqrt(x): (32/64 Bit): 23/38 Takte Berechnung von sin(x), cos(x), tan(x): 160-240 Takte Berechnung von 2 x 1: 90-150 Takte Berechnung von y ld(x): 140-190 Takte kein Pipelining 10
AMD Athlon XP Architektur des AMD Athlon XP: Superskalarität: 3-fache Befehls- Dekodierung, parallele Ausführung auf 9 Funktionseinheiten Integer-Arithmetik: 3 x ALU FP-Arithmetik: 1 FMUL 1 FADD 1 FSTORE 88 FP-Register 11 AMD Athlon XP (Forts.) Instruktionspipeline: 10-stufig für Integer-Arithmetik 15-stufig für Gleitkomma-Arithmetik Ausführungszeiten einiger arithmetischer Befehle mit Register- Operanden (Latenz-Zeit, Durchsatz i.a. 1 je Takt!) Integer-Multiplikation (16/32 Bit): 6/7 Takte Integer-Division (16/32 Bit): 24/40 Takte, kein Pipelining sonstige Integer-Befehle: i.a. 1 Takt Gleitkomma-Addition (32/64 Bit): 4 Takte Gleitkomma-Multiplikation (32/64 Bit): 4 Takte Gleitkomma-Division (32/64 Bit): 16/24 Takte Berechnung von sqrt(x): (32/64 Bit): 19/27 Takte Berechnung von sin(x), cos(x), tan(x): 96-216 Takte Berechnung von 2 x 1: 99 Takte Berechnung von y ld(x): 116-126 Takte kein Pipelining 12
Intel Pentium 4 vs. AMD Athlon XP Leistung bei Linpack Benchmark: (für n n-matrix) Leistung der FPU bei kleinem n maßgebend bei großem n ist Speicherleistung von Bedeutung Quelle: www.tech-report.com 13 Fallstudie 3: Intel Itanium 2 Itanium 2 Architektur: 6 Integer- ALUs 128 Int-Register 2 FPUs 128 FP-Register 14
Intel Itanium 2 (Forts.) EPIC-Konzept: 128-Bit Instruktionswort ( Bundle ) drei 41-Bit Instruktionen ein 5-Bit Template, in dem festgelegt wird, 1) welche Instruktionen unabhängig und somit parallel ausführbar sind (durch Einfügen eines Stop Bits S zwischen abhängigen Befehlen) 2) von welchen Funktionseinheiten die drei Instruktionen ausgeführt werden (M=Memory, I=Complex Integer, A=Integer ALU, F=Floating Point, B=Branch) 6-fache Befehlsparallelität: Itanium 2 Prozessor kann bis zu 6 Befehle aus zwei Bundles gleichzeitig beginnen 15 Intel Itanium 2 (Forts.) Instruktionspipeline 8-stufig für Integer-Arithmetik 11-stufik für Gleitkomma-Arithmetik Prädikate: fast alle arithmetischen Instruktionen mittels Prädikate bedingt ausführbar Beispiel: (p1) add r1=r2,r3 erspart Verzweigungen 64 Prädikat-Register (1 Bit) für Ergebnisse von Vergleichsbefehlen Integer-ALU keine Unterstützung von Multiplikation und Division! ( FPU) andere arithmetische Operationen wahlweise auf 1 64 Bit oder SIMD-artig auf in 64 Bit gepackte Daten 16
Intel Itanium 2 (Forts.) FPU: zwei FP-Befehle je Takt möglich, da zwei FPUs vorhanden 82 Bit Intern-Darstellung (Vorzeichen, 17 Bit Exponent, 64 Bit Mantisse) 128 FP-Register f0 bis f127 (mit f0 = 0.0, f1 = 1.0 fest verdrahtet) Hardware-Unterstützung für FMA-Befehl (FP Multiply and Accumulate) ohne Rundung des Zwischenergebnisses 4-stufige FP-Pipeline keine direkte Hardwareunterstützung für FP-Division und sqrt(x)-funktion, statt dessen: 1) FRCPA-Befehl (FP Reciprocal Approximation) berechnet näherungsweise 1/b mit Fehler 2 8 2) FRSQRTA-Befehl (FP Reciprocal Square Root Approximation) berechnet näherungsweise 1/ b mit Fehler 2 8 keinerlei Hardware-Unterstützung für weitere elementare Funktionen! 17 Vergleich Intel Itanium 2 / AMD Opteron Superskalarität Pipelinestufen ISA Reorder Buffer Size Funktionseinheiten SIMD-Erweiterungen Register Caches (I, D, L2, L3) Anzahl Transistoren E/A-Bandbreite Taktfrequenz SPECint2000 SPECfp2000 Itanium 2 6-fach 8 (11 für FP-Instr.) IA-64 ( in order ) 6 I-ALUs, 2 FPUs, 4 Load/Store 6 I-SIMD, 2 FP-SIMD 128 Int, 128 FP 16k, 16k, 256k, 1.5M-6M 220M 6,4 GByte/s 1.3-1.5 GHz 1322 (1.5 GHz) 2119 (1.5 GHz) Opteron 3-fach 12 (17 für FP-Instr.) x86-64 72 3 I-ALUs, 3 FPUs, 2 Load/Store MMX + 3DNow! + SSE +SSE2 16 Int, 8 FP, 16 SIMD 64k, 64k, 1M 100M 6,4 GByte/s Speicher + 3 Hypertransport (3.2 GByte/s je R.) 1.4-2.2 GHz 1405 (2.2 GHz) 1505 (2.2 GHz) 18