Computer Architektur, COM(P)ARCH = Rechner-Strukturen, RST



Ähnliche Dokumente
Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9

Assembler am Beispiel der MIPS Architektur

Instruktionssatz-Architektur

Technische Informatik 2 Adressierungsarten

Grundlagen der Rechnerarchitektur

Assembler. Dr.-Ing. Volkmar Sieh. Department Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg

Grundlagen der Rechnerarchitektur. MIPS Assembler

5.BMaschinensprache und Assembler

Die Mikroprogrammebene eines Rechners

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Grundlagen der Rechnerarchitektur

Darstellung von Instruktionen. Grundlagen der Rechnerarchitektur Assembler 21

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 Speicherverwaltung. bs-5.1 1

Zahlensysteme: Oktal- und Hexadezimalsystem

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Lösungsvorschlag zur 4. Übung

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Modellierung und Programmierung 1

Einführung in die Systemprogrammierung

Mikroprozessor als universeller digitaler Baustein

Rechner-Strukturen: slides

Binäre Gleitkommazahlen

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

Beispiel: A[300] = h + A[300]

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Mikrocomputertechnik. Adressierungsarten

Klausur zur Mikroprozessortechnik

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

Technische Informatik 1

Einführung in die technische Informatik

Zeichen bei Zahlen entschlüsseln

Karlsruher Institut für Technologie

32 Bit Konstanten und Adressierung. Grundlagen der Rechnerarchitektur Assembler 78

H. Intel x86 CPU. Höhere Informatik. Systemprogrammierung: - Betriebssystemkonzepte, Ein- & Ausgabe

Hardware/Software-Codesign

Notwendigkeit für andere Instruktionsformate

Programmierung in C. Grundlagen. Stefan Kallerhoff

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Sin-Funktion vgl. Cos-Funktion

Beispiele von Branch Delay Slot Schedules

Ein kleiner Einblick in die Welt der Supercomputer. Christian Krohn

Rechnerarchitektur. Marián Vajteršic und Helmut A. Mayer

ERA-Zentralübung Maschinenprogrammierung

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Beispiel einer Übersetzung

U23 Assembler Workshop

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online

Compiler und Codegenerierung. Hw-Sw-Co-Design

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

Grundlagen der Rechnerarchitektur. Einführung

Einführung in die Java- Programmierung

Computer-Architektur Ein Überblick

Objektorientierte Programmierung

Computerarithmetik ( )

E-PRIME TUTORIUM Die Programmiersprache BASIC

RO-Tutorien 15 und 16

Lizenzierung von SharePoint Server 2013

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Johann Wolfgang Goethe-Universität

Lizenzierung von System Center 2012

Weitere Arithmetik. Grundlagen der Rechnerarchitektur Assembler 33

4D Server v12 64-bit Version BETA VERSION

Wichtige Rechnerarchitekturen

Grundlagen von Python

(Prof. Dr. J. Schlichter, WS 2011 / 2012) Übungsleitung: Dr. Wolfgang Wörndl (gbs-ws11@mailschlichter.informatik.tu-muenchen.de)

J.5 Die Java Virtual Machine

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation

Diplomarbeit Antrittsvortrag

Datenpfad einer einfachen MIPS CPU

Binärdarstellung von Fliesskommazahlen

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Lizenzierung von SharePoint Server 2013

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Computer-Generationen

ERA-Zentralübung Maschinenprogrammierung

Tutorium Rechnerorganisation

Algorithmen & Datenstrukturen 1. Klausur

I.1 Die Parrot Assemblersprache

Datenpfad einer einfachen MIPS CPU

Assembler - Variablen

Vorkurs C++ Programmierung

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Das Prinzip an einem alltäglichen Beispiel

CA Übung Christian kann heute nicht kommen => ich bin heute da, Christian das nächste Mal wieder

Übung 9 - Lösungsvorschlag

Übung zu Betriebssysteme

Stephan Brumme, SST, 2.FS, Matrikelnr

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

Klausur Mikroprozessortechnik 29. März 2010

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

Lineare Gleichungssysteme

Brückenkurs / Computer

Was ist die Performance Ratio?

DATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE

15 Optimales Kodieren

Grundbegriffe der Informatik

Transkript:

Fakultät E-Technik & Informatik Hochschule Bremen Computer Architektur, COM(P)ARCH = Rechner-Strukturen, RST Prof. Dr. Thomas Risse SS 2015 Sinn & Zweck: Unterstützung der Lehrveranstaltung Computer Architektur, COM(P)ARCH = Rechner- Strukturen, RST durch diverse Materialien, s.a. RST-page www.weblearn.hs-bremen.de/risse/rst c 2000-2015 risse@hs-bremen.de Letzte Änderung: 12. Juli 2015 Version 0.9.15

Inhaltsverzeichnis 0. Vorbemerkung Inhalt Lernziele Herangehensweise Vorbedingungen & Überschneidungen Vor-/Nachbereitung RST page computer architecture im WWW Materialien online Test Leistungsbewertung 1. Einführung Begriffsbestimmung Geschichte Taxonomie 2. Leistung Rechner unterschiedliche Anwendungsbereiche Leistungskenngrößen benchmarks Einflußgrößen Leistungsmessung Repräsentativität Amdahl sches Gesetz Leistungszuwachs Moore sches Gesetz 3. Compiler rechts von/oberhalb der HW-SW-Schnittstelle 3.1. compiler & Konsorten compiler passes 3.2. Code-Optimierung lexikalische Analyse syntaktische Analyse semantische Analyse Übersetzung in Zwischensprache Code-Erzeugung Bei-

Inhaltsverzeichnis (Forts.) 3 spiel: Quicksort Beispiel: Quicksort ohne Optimierung Beispiel: Quicksort 1. Optimierung Beispiel: Quicksort 2. Optimierung Beispiel: Quicksort 3. Optimierung Code-Erzeugung & Optimierung 3.3. Resumée 3.4. z.b. Matrix-Multiplikation Matrix-Multiplikation pure Matrix-Multiplikation 4-fach Matrix-Multiplikation 4-fach, 4-fach 4. Befehlssatz links von der HW-SW-Schnittstelle 4.1. Klassifikation Wieviele Operanden sind in CPU gespeichert? 4.2. Register-Architekturen Beispiele 4.3. Adressierung Adressierungsarten 4.4. Operationen Befehlshäufigkeiten Befehlshäufigkeiten und -Merkmale 4.5. Anforderungen an Befehlssätze 4.6. z.b. DLX/MIPS-Befehlssatz exemplarische, prototypische DLX/MIPS-Instruktionen DLX/-

Inhaltsverzeichnis (Forts.) 4 MIPS-Formate DLX/MIPS-(Pseudo-)Instruktionen Befehlsformate z.b. DLX/MIPS-shifts Klassifizierung des Befehlssatzes 4.7. z.b. Intel 80x86-Befehlssatz Genealogie Register Familien-Entwicklung Adressierung Operationen Befehlsformate Befehlsprefixe Beispiele für 8086 Befehle Beispiele für 80386 Befehle Beispiele für Befehlsformate belegen ISA-Heterogenität Dekodierung Condition Codes Sprung- und Verzweigungsanweisungen Bedingungen in Registern vs Condition Codes AMDs 64bit Erweiterungen Intels 64bit Erweiterungen Slogans on 80x86 architecture 4.8. z.b. 8051 4.9. z.b. MicroChip PIC24FJ128GC010Family 4.10.Resumée 5. Prozessor-Architektur 5.1. single cycle Implementierung 5.2. multi cycle Implementierung 5.3. Implementieren der Steuerung 6. pipeline-prozessor 6.1. instruction pipelines

Inhaltsverzeichnis (Forts.) 5 pipeline control data hazards control hazards superskalare Version & Leistung superskalare Prozessoren 6.2. functional pipelines arithmetische pipelines scheduling funktionaler Einheiten pipeline-vektor-prozessoren Leistungsbewertung 7. Speicher-Hierarchie Kenngrößen Lokalität 7.1. caching direct mapped caches fully associative caches set associative caches cache-schreibstrategien Havard-Architektur 7.2. Speicher: SRAM vs DRAM 7.3. Speicher-Organisation virtueller Speicher paging segmentation paged segments Belegungen des physikalischen Speichers ermitteln TLB Beschleunigen der Adreß-Umsetzung Speicherschutz-Maßnahmen 80x86-Unterstützung der Speicher-Anbindung performance gap: processor vs memory system 8. Parallelisierung von Algorithmen 8.1. Parallelisierung des Gauß schen Algorithmus Gauß scher Algorithmus Eliminieren Gauß scher Algorith-

Inhaltsverzeichnis (Forts.) 6 mus Auflösen Kommunikation Parallelisierung des Gauß schen Algorithmus durch den Compiler 8.2. Effizienz/Effektivität der Parallelisierung 8.3. parallele Speicher-Zugriffe auf Matrizen 8.4. Baumhöhenreduktion 8.5. Parallelisierung rekurrenter Relationen 8.6. Modellierung durch DAGs 8.7. Programmierung 9. Vektor-Prozessor-Systeme (SIMD) 9.1. vector processing (per pipelining oder n ALUs) 9.2. parallel processing (per n parallel processes/processors) 9.3. pipelining within/across operations 9.4. Beispiel: IBM 3090 Vector Facility reconfigurable vector registers Compound Instructions z.b. komplexe Multiplikation IBM 3090 Vector Facility Vector Instructions 10. parallele Architekturen 10.1.Klassifizierung anhand von Beispielen Symmetric / Shared-Memory Multiprocessors (SMP), Uniform Memory Access (UMA) Non-Uniform Memory Access (NUMA)

Inhaltsverzeichnis (Forts.) 7 Multiprocessors Clusters Massively Parallel Processors (MPP) 10.2.Multiprocessor-Systeme mit gemeinsamem Bus 10.3.cache-Kohärenz in Multiprozessor-Systemen cache-kohärenz durch Invalidieren cache-kohärenz durch Aktualisieren cache-kohärenz Einfaches cache-kohärenz Protokoll MESI/MOESI 10.4.Verbindungsstrukturen Beispiele Merkmale einschlägiger Verbindungsstrukturen 11. Addenda 11.1.Addendum in 2003: top 500 11.2.Addendum in 2004: announced in 2004 11.3.Addendum in 2005: top 500 11.4.Addendum in 2006: top 500 11.5.Addendum in 2007: cell-prozessor 11.6.Addendum in 2010: Core i2000 11.7.Addendum in 2011: K Computer 11.8.Addendum in 2012: Raspberry Pi 11.9.Addendum in 2013: Haswell 11.10.Addendum in 2014: Advanced RISC Machines, ARM Cortex A53 and Cortex A57 A32 Genese A32 featu-

Inhaltsverzeichnis (Forts.) 8 res ISA, Befehlsformate A32 vs A64 Details aus ARMv8 Instruction Set Overview 11.11.Addendum in 2015: IBM z13 Mainframe vs Multi-Computer-System Mainframes Distributed Systems

9 0. Vorbemerkung Inhalt 1. Einführung 2. Leistungsbewertung, Leistungsmessung 3. Compiler 4. Befehlssätze 5. Prozessor-Architektur 6. pipelining 7. Speicher-Hierarchie: caching 8. Speicher-Organisation: paging, segmentation 9. Parallelisierung 10. Multi-Prozessor/Multi-Computer-Systeme

Abschnitt 0: Vorbemerkung 10 Lernziele Interna, Architektur-Prinzipien kennenlernen Abhängigkeiten erkennen und berücksichtigen Angaben zu Leistung/features bewerten können es gibt nicht nur PCs auf dieser Welt! Leistung durch Ausnutzen von Parallelität steigern Herangehensweise Entwurfssicht Vorbedingungen & Überschneidungen Mikro-Computer-Technik Digital-Technik Betriebssysteme, Compiler (-Bau),...

Abschnitt 0: Vorbemerkung 11 Vor-/Nachbereitung in der modul-begleitenden Übung praktische Übungen zu den aktuellen Themen, z.b. anhand von Emulationen im Hinblick auf Projekte, z.b. Unterschriften-Verifikation (Vektor-Coprocessor-board) ChipCard-Terminal (µ-controller) low power processors (VHDL, FPGA) SystemC RST page computer architecture im WWW RST page mit Materialien, Archiv, link lists www.weblearn.hs-bremen.de/risse/rst/ auch über AULIS verlinkt! s. no computer without architecture Allerdings sind AULIS-Dokumente nicht notwendig up to date!

Abschnitt 0: Vorbemerkung 12 Materialien Literatur: COD, CA & Bibliographie im Skript Patterson & Hennessy: COD; 2 nd ed., MKP COD2e Patterson & Hennessy: COD; 3 rd ed., Elsevier, 40 COD3e Patterson & Hennessy: COD; 4 th ed., MKP, ca 40 Hennessy & Patterson: CA; 3 rd ed., MKP CA Hennessy & Patterson: CA; 4 th ed., MKP ca 40 CA Patterson & Hennessy: Rechner-Organisation und -Entwurf; Elsevier 55e, Oldenbourg 60e COD2e Hennessy & Patterson: CA; deutsche Übersetzung vergriffen CA Dubois, Annavaram, Stenström: Parallel COD; Cambridge 2012 online Materialien s. www.weblearn.hs-bremen.de/risse/rst/docs Skript(e) RST.pdf und RST plus.pdf Folien RSTslide.pdf (Abschluß)Klausuren klausur.pdf und aklausur.pdf COD Graphiken, Dokumente, link lists, Evaluationen etc.

Abschnitt 0: Vorbemerkung 13 online Test AULIS RST-Test soll die Veranstaltung RST unterstützen, i.e. multiple choice & fill in blank Test, derzeit zu folgenden Themen Leistung Compiler Befehlssätze Prozessor-Architektur pipelining Speicher-Hierarchie: caching Speicher-Organisation: paging, segmentation Leistungsbewertung BPO: Klausur s. www.weblearn.hs-bremen.de/risse/rst/docs/klausur.pdf www.weblearn.hs-bremen.de/risse/rst/docs/aklausur.pdf

14 1. Einführung Computer-Entwicklung 1 ist Leistungssteigerung! Begriffsbestimmung Def. Rechner-Architektur 2 ist die Organisation von Rechen-Systemen, die das Preis/Leistungsverhältnis für bestimmte Einsatzbereiche und bei gegebener hardware- und software-technologie optimiert. Geschichte 1642 B. Pascal 3 : Addition und Subtraktion 1 s. Vergleich mit Automobil 2 Amdahl, Blaauw, Brooks Entwickler der IBM /360 definierten 1964: Computer-Architektur ist die Struktur eines Computers, die ein Maschinen- Sprachen-Programmierer verstehen muß, um korrekte Programme für eine Maschine schreiben zu können. 3 Blaise Pascal, 1623-1662 www-history.mcs.st-and.ac.uk/history/mathematicians/pascal.html

Abschnitt 1: Einführung 15 1666 S. Morland 4, 1671 G. Leibniz 5 Addition und Multiplikation 1812 Charles Babbage 6 : Difference Engine (Polynom-Auswertung), Analytical Engine (Lochkarten-Steuerung), Augusta Ada King, Countess of Lovelace 7 1924 T.J. Watson: 8 von NCR über CTR zu IBM, Astronomical Computing Bureau, Hermann Hollerith: 9 National Bureau of Census 1930 Howard H. Aiken, 10 John Atanasoff, 11 George Stibitz, 12 Konrad Zuse: 13 universelle, programmierbare, digitale (Relais-) Rechner 4 Samuel Morland, 1625-1695 es.rice.edu/es/humsoc/galileo/catalog/files/morland.html 5 Gottfried Leibniz, 1646-1716 www-history.mcs.st-and.ac.uk/history/mathematicians/leibniz.html 6 Charles Babbage, 1791-1871 www-history.mcs.st-and.ac.uk/history/mathematicians/babbage.html 7 Augusta Ada King, 1815-1852 www-history.mcs.st-and.ac.uk/history/mathematicians/lovelace.html 8 Thomas J. Watson, 1874-1956 www.watson.ibm.com/t j watson history.html 9 Hermann Hollerith, 1860-1929 www-history.mcs.st-and.ac.uk/history/mathematicians/hollerith.html 10 Howard H. Aiken, 1900-1973 cc.kzoo.edu/ k98hj01/aiken.html 11 John V. Atanasoff, 1903-1995 archive.comlab.ox.ac.uk/museums/computing/atanasoff.html 12 George Stibitz, 1904-1995 www.invent.org/book/book-text/100.html 13 Konrad Zuse, 1910-1995 www-history.mcs.st-and.ac.uk/history/mathematicians/zuse.html

Abschnitt 1: Einführung 16 1939 Atanasoff: Röhren-Rechner (Lineare Gleichungssysteme) 1943 Mauchly 14 und Eckert: 15 Electronic numerical Integrator and Calculator, ENIAC 1943 M.H.A. Newman 16 und A. Turing 17 : Colossus (Kryptographie), Enigma... 1945 John von Neuman 18 : Electronic Discrete Variable Automatic Computer, EDVAC, Magnetische Speicher, Atom-Bombe, s.a. COD, pp315, s.a. Forum InformatikerInnen für Frieden und gesellschaftliche Verantwortung, http://fiff.informatik.uni-bremen.de/ z.h. Pioniere und Computer-Museen ersurfen, s.a. H&P, P&H, Literatur, WWW 14 John W. Mauchly, 1907-1980 www-history.mcs.st-and.ac.uk/history/mathematicians/mauchly.html 15 John P. Eckert, 1919-1995 www-history.mcs.st-and.ac.uk/history/mathematicians/eckert John.html 16 Max H.A. Newman, 1897-1984 www-gap.dcs.st-and.ac.uk/ history/mathematicians/newman.html 17 Alan M. Turing, 1912-1954 www-history.mcs.st-and.ac.uk/history/mathematicians/turing.html 18 John von Neuman, 1903-1957 ei.cs.vt.edu/ history/vonneumann.html

Abschnitt 1: Einführung 17 Zeit Technologie/Architektur SW/Anwendungen Systeme Röhren, Relais, CPU mit ENIAC, Princeton IAS, Assembler, single 1945-54 PC und Accu, Festpunktuser, no linkage Arithmetik IBM 701 diskrete Transistoren, Kern-Speicher, HLL, compiler, libraries, batch pro- CDC 1604, IBM 7090, 1955-64 Gleitpunkt-Arithmetik, I/O-processors, multiplexed memory access cessing Univac LARC SSI/MSI-ICs, Mikroprogrammierung, pipelining, IBM 360/370, multiprogramming, 1965-74 CDC 6600, time sharing, OS, cache, µ-processors TI-ASC, multi user PDP-8 LSI/VLSI-ICs, Halbleiter-Speicher, RISC multiprocessor OS; Apple, PC, vs 1975-90 1991- CISC, multi processors, vector supercomputers, multicomputers ULSI/VHSI-ICs, high density packaging, scalable architectures languages, compilers etc. for parallel processing MPP, grand challenges, heterogeneous processing VAX 9000, Cray X-MP, IBM 3090 Fujitsu VPP500, Cray MPP, CM-5, Intel Paragon

Abschnitt 1: Einführung 18 Taxonomie sehr grobe Einteilung von Rechnern (Flynn 19 sche Klassifikation) SD MD single data multiple data SI single SISD SIMD instruction 8051, 8086, etc. MMX, etc; Vektor-Rechner MI multiple MIMD instruction Multi-Prozessoren, -Computer z.h. Finde und klassifiziere weitere Beispiele. 19 Michael Flynn: Very high-speed computing systems; Proceedings of the IEEE, volume 54, pages 1901-1909, December 1966.

19 2. Leistung Kosten-zu-Nutzen-Verhältnis optimieren! i.e. minimize cost/benefit ratio! Rechner dedicated hardware, ASICs... FPGAs... µ-controller, DSP,... PC workstation server, mid size computer,... main frame Super-Computer Beispiele?

Abschnitt 2: Leistung 20 unterschiedliche Anwendungsbereiche... general purpose SoHo Wirtschaft Wissenschaft & Technik Super-Computer, HPC Beispiele?

Abschnitt 2: Leistung 21 Leistungskenngrößen MIPS MOPS FLOPS 1/CPI Bus-Bandbreite IO-Bandbreite 1/#wait states TPS FPS KLIPS...? Eigenschaften wie Meßbarkeit, Unbestechlichkeit, Relevanz...? z.h. Klassifiziere den Windows Leistungsindex!

Abschnitt 2: Leistung 22 benchmarks Gibson-Befehlsmix (IBM: 13 Klassen mit gemessenen Häufigkeiten) Linpack (Dongarra, Moler et al, ca 1970 -: linear algebra, LAPACK) Whetstones in MWIPS (Nat. Phys. Lab, 1976: float- und integer- Arithmetik, Zugriff auf Felder) Dhrystones (Reinhold Weicker, 1984: im Gegensatz zu Whet stone nur integer-, char-operationen; compiling etc) Livermore loops (Francis H. McMahon, 1986: vektorisierbare und nicht vektorisierbare Livermore Fortran kernels) SPECmarks in SPECint, SPECfp etc (Standard Performance Evaluation Corparation www.spec.org, 1988 ) Perfect Club Benchmarks Effective Performance Evaluation of Supercomputers (Berry et al 1994 auf AULIS: external docs) BAPCo SYSmark (Business Applications Performance Corporation www.bapco.com: PC, tablets, mobile; SoHo) Eigenschaften wie Meßbarkeit, Unbestechlichkeit, Relevanz...? z.h. Vergleiche Leistungskenngrößen vs benchmarks!

Abschnitt 2: Leistung 23 Einflußgrößen Sekunden Programm = Instruktionen Clock Zyklen Programm Instruktion Clock Sekunden Zyklus und durch Übergang zu geeigneten Mittelwerten Abhängigkeiten? Sekunden Programm = Instruktionen Programm CPI 1 Taktrate Leistungsmessung Leistung = 1 Ausführungszeit. Beschleunigungsfaktor β aufgrund einer Modifikation ist β = Leistung mit Modifikation Leistung ohne Modifikation = Ausführungszeit ohne Ausführungszeit mit

Abschnitt 2: Leistung 24 Leistungsgewinn γ aufgrund einer Modifikation ist 1 + γ = Leistung mit Modifikation Leistung ohne Modifikation = Ausführungszeit ohne Ausführungszeit mit bzw. aufgelöst γ = Leistung mit Leistung ohne Leistung ohne = Ausführungszeit ohne Ausführungszeit mit Ausführungszeit mit Repräsentativität Arithmetisches Mittel oder gewichtetes Mittel AZ = 1 n n i=1 AZ i AZ = n i=1 w i AZ i der Ausführungszeiten AZ i ausgewählter Programme P i mit zugehörigen Gewichten w i 0 und n i=1 w i = 1 bzw. harmonisches Mittel r der Raten r i r = n 1 n bzw. i=1 1 AZ = r i n n 1 i=1 1/AZ i der Raten 1 AZ i ausgewählter Programme P i Z.B. mittlere MIPS, MOPS, FLOPS; CPI? FLOPS/Watt?

Abschnitt 2: Leistung 25 z.h. Benjamin Benz: Auf den Zahn gefühlt PC-Performance selbst beurteilen; c t 18/2009 140-144 www.ctmagazin.de/0918140 mit Tests CPU: Cinebench, Prime95; Grafikkarten: Furmark, 3DMark06, 3DMark03, 3DMark Vantage, 3DMark05; Festplatten&Laufwerke: IOMeter, H2benchw, Nero Disc Speed; Speicher: Memtest86+, Memtest86; Netzwerk: NetIO, Iperf; application benchmarks: BAPCo SYSmark, 7-Zip; Spiele: Fraps. z.h. vgl. aktuelle c t-artikel zu benchmarking auf AULIS Amdahl sches Gesetz Für α = Anteil verändert liege Beschleunigungsfaktor β verändert vor. Ausführungszeit neu = (1 α)ausführungszeit alt + α Ausführungszeit alt β verändert Beispiele! β gesamt = Ausführungszeit alt 1 = Ausführungszeit (1 α)+ neu α β verändert

Abschnitt 2: Leistung 26 Leistungszuwachs 1200 1100 DEC Alpha 21264/600 1000 900 800 Performance 700 600 500 400 DEC Alpha 5/500 300 200 100 SUN-4/ 260 0 1987 MIPS M/120 1988 MIPS M2000 1989 IBM RS6000 1990 1991 DEC Alpha 5/300 DEC Alpha 4/266 IBM POWER 100 DEC AXP/500 HP 9000/750 1992 Year 1993 1994 1995 1996 1997

Abschnitt 2: Leistung 27 Also jährliche Verdoppelung der Prozessor-Leistung (gemessen etwa in MIPS oder FLOPS) Leistung= 2 Jahr 1984 (Joy sches/moore sches Gesetz) und ca alle drei Jahre Vervierfachung der Speicher-Chip-Kapazitäten 100,000 16M 64M 10,000 4M Kbit capacity 1000 256K 1M 100 64K 16K 10 1976 1978 1980 1982 1984 1986 1988 1990 1992 1994 1996 Year of introduction z.h. Aktualisiere! s. z.b. http://cpudb.stanford.edu (zur Methodik s. http://portal.acm.org/ft gateway.cfm?id=2181798), www.cpu-world.com

nt s- - i- - n - r- ) - u n - s - - n - s f l- - n -. der werbewirksamen Performance-Aussage 669 SPECint_rate2006base des Xeon 2699v3 des Abschnitt,,House-Moore'schen Gesetzes". 2: Leistung Seit gut (Haswell-EP, nur ein Chip,22 nm, 662 mm2, 28 zehn Jahren gibt es mit den Mehrkern-prozessoren nämlich eine Aufspaltung in zwei 5,56 Mrd. Transistoren) im März 2015. Damit Moore sches Gesetz Zweige: Single-Threaded und Multi-Threaded. Die 2l Monaten. Und das ist schon sehr ge- kommt man aut eine Verdopplungszeit von s.a. Andreas Stiller: 50 Jahre Moore sches Gesetz; c t 2015/10 S.72-75 Transistorzahlen gä ngiger prozestoren Die Transistorzahl der größten Chips mit einer Verdoppelung et\ /a alle zwei Jahre wird meist als,,das" Moor'sches Gesetz interpretiert. E le+r0-9 rr+oe F 1E+08 10 000 000 t 000000. @ lntels{1386. l 100000 @ lntet80286 10 000 " @ lnrel 8080 @htel4oo4 r@0 r----t- 1970 1975 elntel8086 lt 1975 1985 62-(oreXmn phi 72.(ore leon phi Xl,lL 10-(oreXeon Wertmere.U^ O 9"] - et lö-qxeleon HaswetFU, -e Itanium2i4dinleye" @Core2Duo @ pentium 4 e e6{orexeon7400 eg(ore optelor 2400 PiäiitimFioai :gäädk6 '':''' '.'-- -t '"-"" ' Pefiium @ lntel80186,rry 1990 199s 2000 2005 2010 2015 2020

. I Abschnitt 2: Leistung 29 Moore's Law 1975 Aus Moores Vortrag auf dem IEDM I 975, mit Rückblick auf die vergangenen zehn und Vorhersage aufdie l0folgenden Jahre. I Bipolarlogk I Bipolararray I MOSlogic I M0Sarray ;e 16M o älm g o+t o E = 4k.lqG*:.ryg+-, - hes Geset2 Durchsch n ittliche Tra nsistorkosten Die Kosten pro Transistor halbieren sich,la,ut lntel etwa alle drei Jahre. Die expliziten Kosten in US-Ceht/Mio. hat c,t hinzugefügt e 13,0 ct g o 6,5 ct 2,6 ct ḡ F o =e e, ty6u 1965 1970 1975 65 nm 45 nm 32 nm 22 nm 14nm l0nm 1,3 ct M ittlere Single-Thread-Performa nce Größe einer 6T-SRAM-ZeIle zwischen Moore's Law 1 und Moore,s Law 2 c't hatte und kam so auf eine Verdoppelung der performance Moore's alle Law 1998 schon mal die Transistorzahlen aller lntel-prozessoren vom 4004 bis führung Single-Thread-Performance hat sich seit Ein- 18 in der Monate, Performance-Variante sozusagen Moore,s von des Benchmark SPEC Dave House Die Größe zum einer CPU2006 SRAM-Bitzelle Mitte damals aus 6 frisch Transistoren ist ein herausgekommenen Law ist für 1 'l/2.lrgendwie Single-Thread-Applikation'en Mendocino (0,25 beliebtes sind diese,,gesetze,,in schon längst ungültig. 2006 - clt-like gemessen Maß für den Herstellungsprozess. ohne verfälschende pm, 19 Mio Transistoren, Autoparallelisierung der Compiler den Folgejahren - nicht einmal vervierfacht. Das entspricht allenfalls dann durcheinander geraten E 154 mm2 Die) halblogarithmisch - jeder t 1000 loo aufgetragen und eine durchschnittliche Verdopp- einer Verdopplung alle 5 Jahre,f nahm sich das heraus, was er brauchte. - also weit, Statt,,Komponenten" also inklusive Widerstände, Kondensatoren et cetera re- @Ne$2997y3 Iungsrate alle 2,22Jahre ermittelt. weit weg von den ursprünglich mal postulierten 18 duzierte man das Komplexitätsgesetz zumeist auf die reinen Transistorzahlen ^eo Faktencheck vor allem in e@@ dem abrupten Ende des...e @ Monaten. Der Hauptgrund dafür liegt @ - Xeon der5160 lghz Moore'schen Geseaes für den Prozessortakt. marktgängigen Produkte. Pentium 4 16Hz Jetzt ist man knapp 17 Jahre später mit dem Anfang der 2000er Jahre geriet der nach einer Vom Aspekt der Kostenoptimierung @@ hat größten lntel-chip Xeon Phi Knights Landing stürmischen Steigerungsrate im Wettbewerb man sich ebenfalls verabschiedet, 6 schließlich bei 8,1 Milliarden Transistoren (14-nm-prozess, ca. 710 mm2 Die-Größe), also beim 426- nach dem Pentium-4-Desaster mit viel zu mit AMD nahezu abrupt in eine,,sättigung" wollte man die Kosten ja gar - nicht offenlegen. Allerdings veröffentlichte lntel vereinzelt Grafiken, _ die in Pentium normalisierter Fachen angelangt, da stimmt der Verdopplungsfaktor alle zwei Jahre für die Komplexität Nur wenn die Prozessoren ihre vielen hohem Energieverbrauch. 75 Form die Kosten pro Transistor auflisteten, wenn auch noch immer recht gut. Das sind allerdings 2010 2015 2020 Kerne in Stellung 2005 bringen können, lässt 2015sich ohne explizite Dollar-Angabe. Danach ist die auch Riesenchips. Bei der reinen Transistordichte gehts hingegen nicht so schnell: eine den rund 19 SPECint_rate2006base des Pen- House-Moore hoch ansatzweise retten. Von Rate in den letzten zehn Jahren zwar einigermaßen konstant, aber.,unter Moore'sch,, mit schönt, Verdoppelung nur etvva alle 2,6 Jahre. tium D 940 (Presler, 65 nm, 162 mm2,376 einer denn bei CPU2006 Halbierung wird einfach n- Längen oder Breiten ist die Moore'sche Rate etwa alle als Maß heranzieht. drei Diese Knoten kann man Jahre. mal der gleiche Richtig problematisch wird es jedoch mit Mio. Transistoren) im Jahre 2006 bis zu den Die Job parallel gestartet. konkreten Übliche halb so hoch Werte in wie bei der proportional zur allerdings recht freizügig Dollar definieren. Die tatsächlichen 669 SPECint_rate2006base physikalischen Kenngrößen des Xeon 2699v3 und Cent der werbewirksamen Mu lti-th readed-anwend ungen erfordern Fläche verlaufenden Transistorzahl. Performance-Aussage Eine Hal- wie

30 3. Compiler rechts von/oberhalb der HW-SW-Schnittstelle Def. Ein Compiler überführt ein Programm in Quellsprache, etwa in einer Problem-orientierten Programmiersprache, in ein äquivalentes Programm in einer Zielsprache, etwa in Maschinensprache. Die Übersetzung kann in mehreren passes erfolgen und Programme in Zwischensprachen erzeugen. Referenzen: Aho, Sethi & Ullman: Compiler (das Drachenbuch) Nicolaus Wirth: Compiler; Teubner 3.1. compiler & Konsorten compile assemble link load (s. Bild COD, p156) vgl. WinDLX mit Compiler C DLX-Assembler

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 31 C program Compiler Assembly language program Assembler Object: Machine language module Object: Library routine (machine language) Linker Executable: Machine language program Loader Memory

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 32 compiler passes Untersuche EVA für jeden compiler pass, d.h. untersuche, welche Darstellung des Programmes ein jeder compiler pass in welche andere Darstellung des Programmes überführt und welche Daten dabei verwendet bzw. erzeugt werden.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 33 Quellprogramm P Umgebung ( -variable) lexikalische Analyse Folge PP von Grundsymbolen syntaktische Analyse abstrakter Baum A Fehler-Datei semantische Analyse attributierter abstrakter Baum AA Optimierung modifizierter attributierter Baum moda Symboltabelle Konstantentabelle Optimierungstabelle... Übersetzung Programm PZ in Zwischensprache Z Code-Erzeugung Objektprogramm MP Optimierung Objektprogramm optmp Testhilfen -Tabelle

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 34 3.2. Code-Optimierung Kontext-unabhängige lokale Optimierung, Registerzuteilung, Variablen-Zuweisung, Parameter-Übergabe, Elimination von redundanten Sprüngen, von redundanten Ausdrücken, von totem Code und von gemeinsamen Teilausdrücken, Verbreitung von Kopien von Konstanten und Variablen (constant propagation, variable propagation) Berechnung konstanter Ausdrücke zur Compile-Zeit (constant expression folding), Reduktion der Stärke (langsame Operationen durch schnellere ersetzen) (strength reduction), Schleifen Rotation, Beseitigung von Schleifenvariablen, Aufrollen von Schleifen (loop unrolling/unfolding), Optimieren von Prozedur-Aufrufen und -Rücksprung inline functions (C++), usw. usf.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 35 lexikalische Analyse Die lexikalische Analyse überführt das statement U = 2 * r * PI; des Quell-Programmes in die Folge (Bez,U) (Sym,=) (Ziffer,2) (Sym,*) (Bez,r) (Sym,*) (Bez,PI) (Sym,;) Dabei werden Kommentare entfernt, die Symbol-Tabelle gefüllt, etc.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 36 syntaktische Analyse Die syntaktische Analyse erzeugt aus dieser Folge einen abstrakten Baum. assign ID U MUL MUL ID PI 2 ID ID r

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 37 semantische Analyse Die semantische Analyse versieht den abstrakten Baum mit zusätzlichen Attributen. assign ID (SYMBOL,$U) (TYPE,real) (TYPE,int) MUL (TYPE, real) (SYMBOL, $PI) (TYPE,real) MUL ID (SYMBOL,$2) (TYPE,int) ID ID (SYMBOL,$r) (TYPE,int)

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 38 Übersetzung in Zwischensprache Gegebenenfalls nach einer Optimierung wird dieser Baum in eine Maschinen-unabhängige Zwischensprache übersetzt: mul_int, $2, $r, $tempint conv_ir, $tempint, $tempreal1 mul_real, $tempreal1, $PI, $tempreal2 assign, $tempreal2, $U

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 39 Code-Erzeugung Aus diesem Zwischencode wird nun der Maschinen-Code der Ziel- Maschine erzeugt, etwa LOAD, R1, 2 MULINT, R1, mem[adr[r]] CONV_IR, R1 MULREAL, R1, mem[adr[pi]] STORE, R1, ADR[U] und gegebenenfalls optimiert. Wenn typischerweise 90% der Laufzeit in 10% des Codes verbracht wird, ist es sinnvoll, diese 10% des Codes zuerst zu optimieren: z.b. innere Schleifen.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 40 Beispiel: Quicksort Verschiedene Optimierungen seien am Beispiel von Quicksort, vgl. etwa http://wapedia.mobi/en/quicksort, demonstriert. Für das folgende C-Programm sei zunächst die Aufteilung des Programms in Blöcke dargestellt. z.h. Was ist ein Block? Drei beispielhafte Optimierungsschritte werden dann am Code in Zwischensprache illustriert.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 41 void quicksort(m,n) // sortiere Feld a[i] fuer i=m,m+1,...,n int m,n; { int i,j; int v,x; if (n<=m) return; // Anfang des zu optimierenden Teils // auch andere Setzung von v moeglich, z.b. v=a[(n+m)/2] i=m-1; j=n; v=a[i]; // B1 while (1) { do i++; while (a[i]<v); // B2 do j--; while (a[j]>v); // B3 if (i>=j) break; // B4 x=a[i]; a[i]=a[j]; a[j]=x;// B5 } x=a[i]; a[i]=a[n]; a[n]=x; // B6 // Ende des zu optimierenden Teils quicksort(m,j); quicksort(i+1,n); }

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 42 Beispiel: Quicksort ohne Optimierung i:=m-1 j:=n t1:=4*n v:=a[t1] Block B1 (init) i:=i+1 t2:=4*i t3:=a[t2] if t3<v goto B2 j:=j-1 t4:=4*j t5:=a[t4] if t5>v goto B3 Block B2 (1. do loop) Block B3 (2. do loop) nicht optimierter code if i>=j goto B6 } Block B4 (break while) t11:=4*i x:=a[t11] t12:=4*i t13:=4*n t14:=a[t13] a[t12]:=t14 t15:=4*n a[t15]:=x Block B6 (swap) t6:=4*i x:=a[t6] t7:=4*i t8:=4*j t9:=a[t8] a[t7]:=t9 t10:=4*j a[t10]:=x goto B2 Block B5 (swap)

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 43 Beispielsweise in Block B5 werden (Index-) Ausdrücke mehrfach berechnet: verwende also t6 bzw. t8, anstatt t7 bzw. t10 erneut zu berechnen.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 44 Beispiel: Quicksort 1. Optimierung i:=m-1 j:=n t1:=4*n v:=a[t1] Block B1 (init) i:=i+1 t2:=4*i t3:=a[t2] if t3<v goto B2 Block B2 (1. do loop) in B5 und B6 lokal optimierter code j:=j-1 t4:=4*j t5:=a[t4] if t5>v goto B3 Block B3 (2. do loop) if i>=j goto B6 } Block B4 (break while) t11:=4*i x:=a[t11] t13:=4*n t14:=a[t13] a[t11]:=t14 a[t13]:=x Block B6 (swap) t6:=4*i x:=a[t6] t8:=4*j t9:=a[t8] a[t6]:=t9 a[t8]:=x goto B2 Block B5 (swap)

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 45 Kopien können nach Datenfluß-Analyse auch Block-übergreifend verbreitet werden!

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 46 Beispiel: Quicksort 2. Optimierung i:=m-1 j:=n t1:=4*n v:=a[t1] Block B1 (init) i:=i+1 t2:=4*i t3:=a[t2] if t3<v goto B2 Block B2 (1. do loop) Block-übergreifendes Verbreiten von Kopien j:=j-1 t4:=4*j t5:=a[t4] if t5>v goto B3 Block B3 (2. do loop) if i>=j goto B6 } Block B4 (break) x:=t3 t14:=a[t1] a[t2]:=t14 a[t1]:=x Block B6 (swap) x:=t3 a[t2]:=t5 a[t4]:=x goto B2 Block B5 (swap)

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 47 Block-übergreifend wurde also t4 aus B3 verwendet (das laut Datenfluß-Analyse nicht verändert wurde), anstatt t8 erneut zu berechnen. z.h. Wovon hängt der Beschleunigungsfaktor aufgrund dieser Optimierung ab? Variable heißen zu einem Zeitpunkt lebendig, wenn auf sie zu einem späteren Zeitpunkt noch einmal zugegriffen wird. Elimination gemeinsamer Ausdrücke kann tote Variable erzeugen, die eliminiert werden können. Verbreiten von Kopien bereitet weitere Optimierung vor: nach Ausdrücken der Form g:=f ersetze im Programm-Text g auf rechten Seiten durch f. Z.B. die Anweisung x:=t3 in B5 wird durch Verbreiten von t3 zu totem Code, der eliminiert werden kann. Schleifen werden durch Code-Verschiebung (Schleifen-unabhängige Berechnungen vor die Schleife ziehen),

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 48 Eliminieren von Schleifen-Variablen in Ausdrücken zusammen mit Reduktion der Stärke (etwa Multiplikationen durch mehrfache Additionen ersetzen) optimiert. Z.B. Ersetzen von t4:=4*j in B3 durch t4:=t4-4 mit der nun notwendigen Initialisierung t4:=4*j in B1.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 49 Beispiel: Quicksort 3. Optimierung i:=m-1 j:=n t1:=4*n v:=a[t1] t2:=4*i t4:=4*j Block B1 (init) t2:=t2+4 t3:=a[t2] if t3<v goto B2 Block B2 (1. do loop) Reduktion der Stärke in Verbindung mit Elimination der do loop Variablen t4:=t4-4 t5:=a[t4] if t5>v goto B3 Block B3 (2. do loop) if t2>=t4 goto B6 } Block B4 (break while) t14:=a[t1] a[t2]:=t14 a[t1]:=t3 Block B6 (swap) a[t2]:=t5 a[t4]:=t3 goto B2 Block B5 (swap)

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 50 z.h. Prüfe die Kontext-Neutralität dieses Optimierungsschrittes. Optimierung bislang in welchen compiler passes? Optimierende Compiler erzeugen also Code, dessen Struktur sich stark von derjenigen des Quellprogrammes unterscheidet mit der einen Folge, daß Fehler schwieriger zu erkennen sind.

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 51 Code-Erzeugung & Optimierung Verwaltung von Variablen im Speicher und Binden von Variablen an Register abhängig! Datenfluß-Analyse notwendig! Ziele? Variable t, u, v, w, x, y, z und ihre Lebensdauern 1 t u 2 t u v 3 t u v w 4 t u v w x 5 u v w x 6 u v w x y 7 u w x y 8 u w x y z 9 u y z Z e i t vier Register in Speicher rot grün blau gelb auszulagern 1 t u 2 t u v 3 t u v w 4 t u v w x 5 u v w x 6 y u v w x 7 y u w x 8 y u z w x 9 y u z

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 52 C-Programme Anweisungen in % Speicher-Zugriffe (Patterson 1982) Quellsprache Maschinensprache % Prozeduren 12 33 45 Schleifen 3 32 26 Zuweisungen 38 13 15 Alternativen 43 21 13 sonstige Befehle 4 1 1 Unterschiedliche architektonische Antworten auf Prozedur-Aufruf mit Parameter-Übergabe: Register-Fenster Prozeß-Wechsel mit Kontext-switch: multiple Register-Sätze

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 53 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for local vars 6 regs for in/out params 10 regs for global variables RISC I 8 Fenster à 32 32bit Register SPARC 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for local vars 8 regs for in/out params 8 regs for global variables Vorteile/Nachteile?

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 54 3.3. Resumée (optimierende) Compiler sind für Prozessor-Leistung entscheidend! RISC = Relegate Important Stuff to the Compiler Ziel von Optimierung: schnellerer Code und/oder weniger Speicher! Optimierung liefert verbesserten, aber sicher nicht optimalen Code! Beschleunigungsfaktoren β aufgrund von optimierendem Compiler: typischerweise 1.00000001 < β < 4 oder mehr! Maschinen-unabhängige Optimierung: redundanten Code entfernen, toten Code entfernen, Kopien verbreiten, Berechnungen an seltener ausgeführte Stelle verschieben, etc. Maschinen-abhängige Optimierung: Register-Zuweisung verbessern, sowohl Reduktion der Stärke als auch exotische Instruktionen verwenden, Latenz verbergen, etc. Z.B. loop unrolling/unfolding bei Matrix-Multiplikation

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 55 3.4. z.b. Matrix-Multiplikation Matrix-Multiplikation pure C = AB für n n-matrizen A = (a i,j ), B = (b i,j ) und C = (c i,j ) mit c i,j = n 1 k=0 a i,kb k,j for(i=0; i<n; i++) for(j=0; j<n; j++) { sum = 0.0; for(k=0; k<n; k++) sum += a[i,k]*b[k,j]; c[i,j] = sum; } 2 n 3 fl op, n 3 (branch und loop increment und jump) pro Iteration in k-loop: 2 load und 2 fl op und 1 n store

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 56 Matrix-Multiplikation 4-fach n n-matrizen A, B und C = AB cache lines à 4 words for(i=0; i<n; i++) for(j=0; j<n; j++) { register float sum = 0.0; for(k=0; k<n; k++) // n mod 4 = 0 { sum+ = a[i,k]*b[k,j]; k++; sum+ = a[i,k]*b[k,j]; k++; sum+ = a[i,k]*b[k,j]; k++; sum+ = a[i,k]*b[k,j]; } c[i,j]=sum; } 2 n 3 fl op, n 3 loop increment, 1 4 n3 (branch und jump) pro Iteration in k-loop: 8 load und 8 fl op und 4 n store a[i,k] aus cache line; dagegen b[k,j] problematisch!

Abschnitt 3: Compiler rechts von/oberhalb der HW-SW-Schnittstelle 57 Matrix-Multiplikation 4-fach, 4-fach cache s.o. for(j=0; j<n; j++) // n mod 4 = 0 for(i=0; i<n; i+=4) // precompute i+1, i+2, i+3... { c[i,j] = c[i+1,j] = c[i+2,j] = c[i+3,j] = 0.0; for(k=0; k<n; k+=4) // precompute k+1, k+2, k+3... { c[i,j] += a[i,k]*b[k,j]+a[i,k+1]*b[k+1,j] +a[i,k+2]*b[k+2,j]+a[i,k+3]*b[k+3,j]; c[i+1,j] += a[i+1,k]*b[k,j]+a[i+1,k+1]*b[k+1,j] +a[i+1,k+2]*b[k+2,j]+a[i+1,k+3]*b[k+3,j]; c[i+2,j] += a[i+2,k]*b[k,j]+a[i+2,k+1]*b[k+1,j] +a[i+2,k+2]*b[k+2,j]+a[i+2,k+3]*b[k+3,j]; c[i+3,j] += a[i+3,k]*b[k,j]+a[i+3,k+1]*b[k+1,j] +a[i+3,k+2]*b[k+2,j]+a[i+3,k+3]*b[k+3,j]; } } 2 n 3 fl op, n 3 loop increment, 1 16 n3 (branch und jump) pro Iteration: einmal (8 load & 8 fl op), dreimal (4 load & 8 fl op) a[i,k] aus cache line; b[k,j] und c[i,j] re-used!

58 4. Befehlssatz links von der HW-SW-Schnittstelle Def. Der Befehlssatz (instruction set) ist die hardware/software- Schnittstelle eines Prozessors... Was sagt der Befehlssatz über einen Prozessor aus?, Ein minimales Beispiel: Z.B. Der single instruction computer (SIC) kennt nur eine einzige Instruktion: subtract and branch if negative, SBN mit sbn a,b,c; // Mem[a]-=Mem[b]; if (Mem[a]<0) goto c. z.h. Konstanten, Move, Addition, Multiplikation im SIC? z.h. Inwiefern ist der SIC ein vollwertiger Computer? um welchen Preis? z.h. Gibt es ein maximales Beispiel?

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 59 4.1. Klassifikation Es gibt (mindestens) vier unterscheidende Merkmale für Befehlssätze: wie und wieviele Operanden sind in CPU gespeichert? wie werden Operanden addressiert? welche Operationen werden auf welchen Operanden ausgeführt? welche und wieviele Formate haben die Befehle? Wieviele Operanden sind in CPU gespeichert? Man unterscheidet Akkumulator-Architektur Stack-Architektur Register-Architektur

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 60 Akkumulator-Architektur: Ein Operand liegt implizit im Akkumulator, das Ergebnis wird im Akkumulator abgelegt. Beispiele sind PDP8, Motorola 6809 oder viele µ-prozessoren. Z.B. Die Zuweisung C = A + B lautet in Maschinen-Sprache load A; Add B; Store C; Stack-Architektur: Operanden liegen implizit auf einem Stapel, Ergebnisse werden auf Stapel abgelegt. Beispiele sind Burroughs B5500, HP3000 oder Pascal-Engine (vor PC), Java-VM. Z.B. Die Zuweisung C = A + B lautet in Maschinen-Sprache Push A; Push B; Add; Pop C;

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 61 Register-Architektur: Operanden und Ergebnisse liegen in Registern. Beispiele sind IBM /360 oder DEC VAX oder aktueller Intel 80x86 mit 8, 68040 mit 16, PowerPC mit 32, MIPS, DLX mit 32, MIPS R2000 mit 32, RISC I mit 32 von 138 oder SPARC mit 32 von 136, pico-java mit 64, MMIX mit 256 Allzweck- Registern! 64-bit AMD-Prozessoren mit 32, IA64 mit? Allzweck-Registern (SSE, AVX)! Z.B. Die Zuweisung C = A+B lautet in Maschinen-Sprache register-memory Load R1,A; Add R1,B; Store C,R1; load/store Load Ra,A; Load Rb,B; Add Rc,Ra,Rb; Store C,Rc; Z.B. Der Intel 80x86-Befehlssatz enthält auch PUSH und POP- Befehle. Die 80x86-Register sind nur bedingt Allzweck-Register!

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 62 z.h. Klassifiziere die GK-Operationen der Intel 80x86-Prozessor- Familie. z.h. Klassifiziere µ-controller- und DSP-Befehlssätze. Exkurs: JavaVM die Java Virtual Machine ISA s.a. www.weblearn.hs-bremen.de/risse/rst/docs/javavm/vmspec.pdf Das C = A+B Beispiel, hier für die JavaVM (www.artima.com/insidejvm/ed2/jvm8.html) iload_0 iload_1 iadd istore_2 // push the int in local variable 0, i.e. A // push the int in local variable 1, i.e. B // pop two ints, add them, push result // pop int, store into local variable 2, i.e. C weitere Beispiele zur Illustration der JavaVM-ISA

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 63 class Act { public static void domathforever() { int i = 0; for (;;) { i += 1; i *= 2; } }} mit Byte-Code (www.artima.com/insidejvm/ed2/jvm10.html) // Bytecode stream: 03 3b 84 00 01 1a 05 68 3b a7 ff f9 // Method void domathforever() // Left: offset of instruction from beginning of method // Center: instruction mnemonic and any operands // Right: comment 0 iconst_0 // 03 1 istore_0 // 3b 2 iinc 0, 1 // 84 00 01 5 iload_0 // 1a 6 iconst_2 // 05 7 imul // 68 8 istore_0 // 3b 9 goto 2 // a7 ff f9

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 64 class SquareCircle { static void squareitforever() { float f = 2; for (;;) { f *= f; f = 0 - f; } } } mit Byte-Ccode (http://artima.com/insidejvm/applets/circleofsquares.html) 0 fconst_2 // Push float constant 2 1 fstore_0 // Pop to local variable 0 (float f = 2;) 2 fload_0 // Push local variable 0 (float f) 3 fload_0 // Push local variable 0 (float f) 4 fmul // Pop top two floats, multiply, push result 5 fstore_0 // Pop to local variable 0 (float f *= f;) 6 fconst_0 // Push float constant 0 7 fload_0 // Push local variable 0 (float f) 8 fsub // Subtract top float from next to top float 9 fstore_0 // Pop result to local variable 0 (float f=0-f;) 10 goto 2 // Jump back to the first fload_0 instruction

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 65 4.2. Register-Architekturen Wegen der Vorteile schneller Register in den letzten Jahren nur noch Universal-Register-Maschinen mit als einem wichtigen Unterschied dyadischen oder triadischen ALU-Befehlen sowie mit verschiedener Lokalisation der Operanden: Register-Register-Operationen auch load/store mit einfacher Dekodierung, einfacher Code-Erzeugung, ähnlichen Ausführungszeiten; jedoch mit größerer Anzahl von abzuarbeitenden Befehlen Register-Speicher-Operationen mit Zugriffen ohne Laden; jedoch unterschiedliche Ausführungszeiten Speicher-Speicher-Operationen mit kompaktem Code; jedoch mit unterschiedlichen Ausführungszeiten und Speicher-Engpaß.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 66 Beispiele gpr Architektur Jahr gpr Architektur Jahr EDSAC 1 accumulator 1949 Intel 8086 1 extended accu 1978 IBM 701 1 accumulator 1953 Motorola 68000 16 reg mem 1980 CDC6600 8 load/store 1963 Intel 80386 8 reg mem 1985 IBM /360 16 reg mem 1964 MIPS 32 load/store 1985 DEC PDP-8 1 accumulator 1965 HP-PA RISC 32 load/store 1986 DEC PDP-11 8 reg mem 1970 SUN SPARC 32 load/store 1987 Intel 8008 1 accumulator 1972 Power-PC 32 load/store 1992 Motorola 6800 2 accumulator 1974 DEC Alpha 32 load/store 1992 DEC VAX 16 reg/mem mem 1977 JAVA-VM 0 stack 1995 und zwar ist die Anzahl der Argumente arithmetisch-logischer Instruktionen im Speicher bei SPARC, MIPS, PA, PowerPC sowie Alpha jeweils 0 von maximal 3, bei Intel 80x86 sowie Motorola 68000 jeweils 1 von maximal 2 und bei der VAX 2 von maximal 2 bzw. 3 von maximal 3 Operanden. z.h. Klassifiziere die Operationen von µ-controllern und DSPs.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 67 4.3. Adressierung In aller Regel arbeiten heutige Rechner byte-adressiert, und zwar big endian Byte mit Adresse x..x00 an der most significant position im Wort z.b. IBM /360, MIPS, Motorola, SPARC, DLX little endian Byte mit Adresse x..x00 an der least significant position im Wort z.b. DEC VAX, DEC RISC, Intel 80x86. Def. Ein Zugriff auf ein Datum der Länge s Byte, ab der Byte- Adresse A ist aligned genau dann, wenn A mod s = 0 sonst misaligned.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 68 Adressierungsarten Diverse Adressierungsarten reduzieren die Anzahl der Befehle, machen aber gleichzeitig die Decodierung und damit den Prozessor komplexer und langsamer. So braucht der Motorola MC68020 bis zu 12 Takte nur für bestimmte Adressierungen. Art Beispiel Bedeutung Bemerkung register Add R4,R3 R4+=R3 immediate Add R4,#3 R4+=3 immediate-größe? displacement Add R4,10(R1) R4+=M[10+R1] lokale Variable register indirect Add R4,(R1) R4+=M[R1] per pointer indexed Add R4,(R2+R3) R4+=M[R2+R3] Feld mit Base und Index direct/absolute Add R4,(1001) R4+=M[1001] static data memory indirect Add R4,@(R3) R4+=M[M[R3]] linked list auto-increment Add R4,(R3)+ R4+=M[R3] sequentieller Zugriff auf R3+=d Feldelemente, push/pop auto-decrement Add R4,-(R3) R3 =d sequentieller Zugriff auf R4+=M[R3] Feldelemente, push/pop scaled Add R4,10(R2)[R3] R4+=M[10+R2+d*R3] sequentieller Zugriff auf lok. Daten der Länge d

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 69 Beim Entwurf ist beispielsweise festzulegen Anzahl zu benennender Register Größe von Displacement und Immediate was noch alles? Displacement und Immediate sind die häufigsten Adressierungsarten. Z.B. Die Codierung der vielen Adressierungsarten der VAX illustriere eine ternären Instruktion: add13 r1, 737(r2), (r3) addiert zwei 32-bit integer bei einem OP-Code von 1byte. Address specifier enthalten in 4bit die Adressierungsart, in weiteren 4bit das zu verwendende Register: also 1byte für r1, 3byte für 737(r2), nämlich 1byte specifier für 16-bit displacement und 2byte displacement 737 und schließlich 1byte specifier für indirect (r3) insgesamt also 6byte. Maximale VAX-Befehlslänge ist 53byte. Z.B. DSPs mit Zugriff auf Ring-Puffer, z.b. TI z.h. Klassifiziere die Addressierungsarten von µ-controllern.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 70 4.4. Operationen Klassifikation anhand der Funktionalität und/oder des Daten-Typs arithmetisch-logische Befehle, wie integer add, sub oder and, or Datentransfer, wie load, store oder move Programm-Ablaufssteuerung, wie Verzweigungen, Sprünge, Unterpro Sprünge und -Rücksprünge, traps Betriebssystem-Aufrufe, Speicher-Verwaltung Gleitpunkt-Befehle, d.h. arithmetische Operationen auf Gleitkomma-Zahlen, wie fadd, fmult oder fdiv (vgl. COD chapter 4, IEEE 754, RST/docs/goldberg.pdf) Dezimal, d.h. arithmetische Operationen auf BCD-Zahlen String, d.h. Operationen auf Zeichenketten Varia, d.h. I/O, Graphik, transzendente Funktionen (80x86), insert/extract at resp. from head/tail of queue (VAX), Vektor- Instruktionen (Cray), Instruktionen, die Parallelität auf Instruktionsebene nutzen (Intels MMX, AMDs 3Dnow, Intels ISSE),

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 71 Befehlssatz-Erweiterungen wie SUN-SPARC visual instruction set (VISual) Befehlshäufigkeiten Häufigkeiten von Befehlen und der Art ihrer Operanden (Typ, Adressierung, Sprungziele,...) hängen von vielen Faktoren ab: diverse Befehlsmixe, laut Hennessy/Patterson DECstation 10% Verzweigungen, 40% load/store- sowie 50% ALU- Befehle IBM /360 15% Verzweigungen, 20% load/store- und 65% ALU-Befehle CA präsentiert detaillierte Messungen etwa für Intel 8086 Prozessoren. Das Häufige schnell machen!

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 72 Befehlshäufigkeiten und -Merkmale Befehle, die den Programmfluß verändern: 2/3 branches, 1/6 jumps, 1/6 jump to/return from subroutine Ziele von Verzweigungen sind meist PC-relativ (3/4 vorwärts, 1/4 rückwärts). Der mittlere Verzweigungsabstand beträgt weniger als 2 7 Befehle (abhängig von der mittleren Befehlslänge). 2/3 Verzweigungsbedingungen ist EQ/NE (zero), wobei Bedingung in Bedingungscode-Bits gespeichert ist (condition code etwa im Prozessor-Status-Wort), in allgemeinen Registern gespeichert oder in komplexeren test and branch -Befehlen zur Verfügung gestellt ist. Wie bedingen sich maximale Sprungweite bei unbedingten Sprüngen und das Befehlsformat gegenseitig? Bei Unterprogramm-Sprüngen muß zumindest die Rückkehr-Adresse zumeist auf dem Stack gerettet werden (wie auch die Register), gegebenenfalls auch hardware-gestützt (z.b. per jal im DLX/MIPS)

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 73 4.5. Anforderungen an Befehlssätze Verschiedene Prozessoren haben teilweise sehr unterschiedliche Befehlssätze. Z.B. Die IBM /370 hat 2-, 4- und 6-Byte-Befehle, die CDC CYBER Halb- und Ganzwort-Befehle bei einer Wortlänge von 16 (?) Byte; DEC PDP11 und Motorola MC68020 Ein-, Zwei- und u.u. auch Drei- Wort-Befehle bei 2-Byte-Worten. 4.6. z.b. DLX/MIPS-Befehlssatz Der DLX und dem MIPS R2000 gemeinsam sind 32 Allzweck-Register à 32bit und 32 GK-Register à 32bit, load store Architektur, 32bit Adreß-Raum, flat memory; z.h. Bewerte Umstand R0 = $0 0 und DLX/MIPS-Instruktionen wie jal, jalr, b zal.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 74 exemplarische, prototypische DLX/MIPS-Instruktionen exemplarisch für (Klassen von) Instruktionen: Funktionalität Format/Codierung, Verwendung von op-code-erweiterungen (etwa op=0 für bestimmte arithmetisch/logisch und Sprung-Anweisungen, op=1 für bestimme Verzweigungsanweisungen, op=0x11 für Gleitpunkt-Anweisungen) prototypisch für Implementierung von Instruktionen single/multi cycle implementation pipeline implementation \index{addi}\index{mips!add}\index{mips!lw}\index{mips!beq}\i ADDI Ra, Rb, #immd // Ra = Rb+immd ADD Ra, Rb, Rc // Ra = Rb+Rc LW Ra, offset(rb) // Ra = Mem[Rb+offset] BEQ Ra, Rb, label // If (Ra == Rb) goto label (PC-relativ!) J label // goto label

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 75 DLX/MIPS-Formate 1. Immediate addressing op rs rt Immediate 2. Register addressing op rs rt rd... funct Registers Register 3. Base addressing op rs rt Address Memory Register + Byte Halfword Word 4. PC-relative addressing op rs rt Address Memory PC + Word 5. Pseudodirect addressing op Address Memory PC Word

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 76 DLX/MIPS-(Pseudo-)Instruktionen displacement als einzige Adressierungsart für Daten per lw, lh, lb bzw. sw, sh, sb lhi (load high immediate der DLX) bzw. lui (load upper immediate des MIPS) zum Laden der oberen beiden bytes eines 4-byte-Wortes Spezialitäten wie lwl (load word left) bzw. lwr (load word right) sowie swl (store word left) bzw. swr (store word right) für den unaligned memory access ternäre arithmetisch-logische Befehle add, sub, s, mit den immediate-varianten addi, subi, s i, wobei für lt, le, eq, ne, ge, gt steht ternäre Verzweigungen wie beq, bne mit immediate-varianten beqz, bnez Sprung-Anweisungen j, und jal (im J-Format, s. S 77) sowie nicht PC-relativ jr (im R-Format! s. S 77)

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 77 Befehlsformate Alle Instruktionen sind 4byte lang, was etwa bei der Sprungziel-Adressierung ausgenutzt wird. Es gibt i.w. nur drei Befehlsformate: R-type OPcode 6 Rs 5 Rt 5 Rd 5 shamt 5 func 6 I-type OPcode 6 Rs 5 Rt 5 immediate 16 J-type OPcode 6 jump offset Der MIPS OpCode spezifiziert die Instruktion vollständig, außer für die OpCodes 0 arithmetisch-logische Befehle mit drei Operanden in integer Registern 1 branch on Rs zero wobei cond in Rt codiert ist 16-19 = 0x10+z Instruktionen für coprocessor z = 0, 1, 2, 3 f (float) steht für s (single) falls rs=16 und op=17, f (float) steht für d (double) falls rs=17 und op=17. Im Feld rs steht z für 0, 1, 2 oder 3, f alls op=17, 18, 19 bzw. 20. Falls z=0, so spezifiziert Instr[4-0] die Instruktion; falls z=1, so spezifiziert funct die Instruktion mit f=s;... 26

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 78 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 16 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f op(31:26) j jal beq bne blez bgtz addi addiu slti sltiu andi ori xori lui z = 0 z = 1 z = 2 z = 3 lb lh lwl lw lbu lhu lwr sb sh swl sw swr lwc0 lwc1 lwc2 lwc3 swc0 swc1 swc2 swc3 rs (25:21) mfcz cfcz mtcz ctcz copz copz (16:16) bczt bczt tlbr tlbwi tlbwr tlbp rte rt (20:16) bltz bgez bltzal bgezal cvt.s.f cvt.d.f cvt.w.f c.f.f c.un.f c.eq.f c.ueq.f c.olt.f c.ult.f c.ole.f c.ule.f c.st.f c.ngle.f c.seq.f c.ngl.f c.lt.f c.nge.f c.le.f c.ngt.f funct(5:0) add.f sub.f mul.f div.f abs.f mov.f neg.f funct(5:0) sll srl sra srlv srav jr jalr syscall break mfhi mthi mflo mtlo mult multu div divu add addu sub subu and or xor nor slt sltu if z = l, f = d if z = l, f = s if z = 0 0 1 funct (4:0)

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 79 z.b. DLX/MIPS-shifts 6 5 5 5 5 6 mnemonic op Rs Rt Rd sa fn semantic sll Rd, Rt, sa 0 * Rt Rd sa 0 Rd = Rt << sa sllv Rd, Rt, Rs 0 Rs Rt Rd 0 4 Rd = Rt << Rs sra Rd, Rt, sa 0 * Rt Rd sa 3 Rd = Rt >> sa srav Rd, Rt, Rs 0 Rs Rt Rd 0 7 Rd = Rt >> Rs srl Rd, Rt, sa 0 * Rt Rd sa 2 Rd = Rt >> sa srlv Rd, Rt, Rs 0 Rs Rt Rd 0 6 Rd = Rt >> Rs * unused (in MIPS ISA zeroed) logical: shift & mit Nullen auffüllen arithmetic: shift mit Erhalt des Vorzeichens, d.h. mit Nullen oder Einsen auffüllen

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 80 Klassifizierung des Befehlssatzes DLX und MIPS R2000 und höher sind typische RISC-Prozessoren mit wenigen einfachen Befehlen: 6bit opcode, basic instructions only (z.b. move Rd, Rs durch add Rd, Rs, R0 emuliert) mit load/store-isa mit wenigen Datentypen: i.w. nur integer, float, double mit wenigen Adressierungsarten: nur displacement mit ziemlich homogenen Befehlsformaten: vgl. opcode, Rs, Rt mit fester Befehlslänge: 32bit z.h. Wende diese Kriterien zur Klassifikation von Befehlssätzen auf andere RISC-Prozessoren wie etwa PA, PowerPC, SPARC usw. an, s.a. http://www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/ WebExtns.ion/survey.pdf

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 81 4.7. z.b. Intel 80x86-Befehlssatz Jeder Prozessor der Intel 80x86-Prozessor-Familie ist abwärtskompatibel zu seinen Vorgängern, damit dieselbe software weitergenutzt werden kann (vgl. Bähring und Lieb et al sowie CA, chapter 4.4). Genealogie 1978 8086 wenige 16 bit Register, nicht Allzweck 1980 8087 FP-co-Prozessor mit ca. 60 FP-Befehlen, stack orientiert 1982 80286 24 bit Adreß-Raum, memory mapping, memory protection 1985 80386 32 bit Register, 32 bit Adreß-Raum added addressing modes, added operations 8 Allzweck-Register 1989 1995 80486 bis Pentium (Pro) nur 4 neue Befehle (multi processing, conditional move) 1997 MMX 57 neue Instruktionen: Multi Media extensions (SIMD) 1999 ISSE Intel Streaming SIMD Extension: MMX plus SIMD float operations >2000 SSEx ISA-Erweiterungen: SSE2 (+144), SSE3 (+13) z.h. Bewerte P4:NetBurst (2000), P4.HTT:hyperthreading (2002), trusted computing: LaGrande & TPM (2003), NX-bit (2004), multi core Processors (2005) im Hinblick auf x86-isa, AVX (2008 angekündigt, verfügbar 2011)

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 82 80x86-Register (ab 80386) Name 31 EAX ECX EDX EBX ESP EBP ESI EDI Use 0 GPR 0 GPR 1 GPR 2 GPR 3 GPR 4 GPR 5 GPR 6 GPR 7 CS SS DS ES FS GS Code segment pointer Stack segment pointer (top of stack) Data segment pointer 0 Data segment pointer 1 Data segment pointer 2 Data segment pointer 3 EIP EFLAGS Instruction pointer (PC) Condition codes

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 83 Register Der Intel 8080 verfügte über acht 8-bit-Register AL, AH, DL, DH, CL, CH, BL und BH sowie 16-bit SP und IP-Register (accumulator machine). 1978 wurden die 8-bit Register im 8086 zu 16-bit Registern AX, DX, CX und BX zusammengefaßt (AX = Akku, CX = count register (LOOP), DX = data register (mult/div), BX = base address register. Es gibt Segment-Register CS (code), SS (stack) und DS (data). Neben Registern wie IP (instruction pointer) und FLAGS (processor status) gibt es weitere 16bit-Register wie SP (stack pointer) oder BP (base pointer). Quell-Index-Register source index (SI) und Ziel-Index-Register destination index (DI) verwendet etwa MOVSB: M[ES:DI]=M[DS:SI]; DI++; SI++. soviel zum Thema Allzweck-Register!

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 84 Wegen des dedizierten Gebrauchs der Register ist der 8086 zwischen accumulator und general purpose register machine zu platzieren, laut CA eine sogenannte extended accumulator machine. Aus Gründen der Abwärtskompatibilität mußte aber immer noch auch auf die 8-bit Register zugegriffen werden können. Familien-Entwicklung 1980 ergänzt der 8087 coprocessor 8 floating point register à 80bit und den Befehlssatz um 60 floating point instructions (extended stack architecture). 1982 bietet der 80286 einen 24bit Adreßraum mit memory mapping and protection und dem real (addressing) mode für die Abwärtskompatibilität mit dem 8086. 1985 erfüllt dieselbe Anforderung auch der 80386 mit seinen 32-bit Erweiterungen EAX, ECX, EDX und EBX der Register AX, CX, DX bzw. BX. Weiterhin gibt es zusätzliche 16-bit Segment-Register FS und GS sowie 32bit-Erweiterungen EIP, EFLAGS, ESP, EBP, ESI bzw. EDI der Register IP, FLAGS, SP, BP, SI bzw. DI.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 85 15 8 7 0 16 bit AH AL AX CH CL CX DH DL DX BH BL BX CS SS DS ES FS GS Befehlsformate Register 16 bit 32 bit AX EAX CX ECX DX EDX BX EBX SP ESP BP EBP SI ESI DI EDI FLAGS EFLAGS IP EIP Byte\bit 7 6 5 4 3 2 1 0 Bem. 1a OP-Code 1b (1 oder 2 byte) 2a Mod Reg R/M Mode Reg/Mem 2b Scl IReg BReg ScaleIndexBase 3a Address-Displacement.. 3d 0,1,2,3 oder 4 byte 3? 4a Immediates.. 3? 4d 0,1,2,3 oder 4 byte

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 86 Das Register EFLAGS enthält den Prozessor-Status (PSW) u.a. mit aligned, virtual mode, nested, i/o priviledge, overflow, direction, interrupt enable, trap, sign, zero, auxiliary carry, parity und carry flags; das Register EIP enthält den Befehlszähler (instruction pointer, IP). wenige, nämlich nur 8 Allzweck-Register! Adressierung Die 16-bit Segment-Register CS (Code), SS (Stack) sowie DS, ES, FS und GS (Daten) stehen für die Adressierung SR:X entsprechend (SR<<4)+X address = zur Verfügung. CS... GS je EAX,..., EDX, ESP, EBP, ESI, EDI segment + base address + (index 1, 2, 4 oder 8 scale factor) + in 0, 8, 32 bit displacement mindestens vier Addressierungsarten! Intel terminology address = restriction register indirect register reg ESP, EBP based mode with displacement base+displacement reg ESP, EBP base plus scaled index base+2 scale index index ESP base plus scaled index with displacement base+2 scale index+displacement index ESP

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 87 Operationen Dyadische arithmetisch-logischen Befehle (1.source=destination) mit allen Kombinationen bis auf Speicher Speicher. Befehle für bit, byte, 16bit, 32bit, 64bit, float, double, bit-felder bis 32bit, word strings, 8bit BCD Zahlen, gepackt/ungepackt (SIMD) Befehlsformate dyadische Operationen auf vielen Datentypen! Instruktionslänge zwischen einem und 12 bytes (im Fall des Intel 80486 auch noch länger). OP-Code (incl. der Angabe über die Längen der folgenden Felder) und Register plus Adressierungsart (register, memory, scaled und index based) jeweils ein oder zwei Byte, Adress- Displacement und Immediates jeweils 0, 1, 2, 3 oder 4 Byte.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 88 Befehlsprefixe Es gibt optionale instruction-, address size-, operand size- und segment override prefixes von je 1 byte Länge: instruction prefix enthält Wiederholungszähler incl. Abbruchbedingung, address- und operand size prefix bestimmen Adreß- und Operanden-Länge (default ist 16bit im real und 32bit im protected mode), segment override prefix hebt die implizite Segment-Register-Zuordnung für den betreffenden Befehl auf. Prefixe machen 0 bis 4 byte aus, vgl. etwa http://courses.engr.illinois.edu/ece391/references/patt-and-patel-appendix-b.pdf Repeat/Lock xf0 (LOCK) xf2, xf3 Segment override x2e(cs), x36(ss) x3e(ds), x26(es) x64(fs), x65(gs) This prefix guarantees that the instruction will have exclusive use of all shared memory until the instruction completes execution. This prefix allows the instruction (a string (REP/REPE/REP- NE) instruction) to be repeated some specified number of times. The iteration count is specified by ECX. The instruction is also terminated on the occurrence of a specified value of ZF. This prefix causes the memory access to use the specified segment, instead of the default segment expected for that instruction.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 89 Operand size override x66 This prefix changes the size of data expected for this instruction: instructions expecting 32-bit data elements use 16-bit data elements; instructions expecting 16-bit data elements use 32-bit data elements. Address size override x67 This prefix changes the size of operand addresses expected for this instruction: instructions expecting a 32-bit address use 16-bit addresses; instructions expecting 16-bit addresses use 32-bit addresses. Beispiele für 8086 Befehle ADD AX,#4711 AX+=4711 JZ name bzw JNZ name if (CC=0) IP=name; bzw if (CC!=0) IP=name; JMP name bzw JMPF name IP=name; (near bzw far) CALLF name,seg SP-=2;M[SS:SP]=CS;SP-=2;M[SS:SP]=IP+5;IP=name;CS=seg; MOVSB M[ES:DI]=M[DS:SI]; DI++; SI++; MOVW BX, [DI+123] BX=M[DS:DI+123]; PUSH SI SP-=2; M[SS:SP]=SI; POP DI DI=M[SS:SP]; SP+=2; SHL BX,1 BX*=2; TEST DX,#42 CCflags=DX & 42

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 90 Beispiele für 80386 Befehle ADD EAX,#4711 EAX+=4711 JZ name bzw JNZ name if (CC=0) EIP=name; bzw if (CC!=0) EIP=name; JMP name bzw JMPF name EIP=name; (near bzw far) CALL name SP-=4; M[SP]=EIP+5; EIP=name; LOOP label ECX--; if (ECX) EIP+=label; MOVSL M[EDI]=M[ESI]; EDI++; ESI++; MOVW EBX, [EDI+123] EBX=M[EDI+123]; PUSH ESI SP-=4; M[SP]=ESI; POP EDI EDI=M[SP]; SP+=4; RET EIP=M[SP]; SP+=4; TEST EDX,#42 CCflags=EDX & 42 Die mnemonics hängen auch vom verwendeten Assembler wie etwa nasm, GNUas etc. ab! vgl. mov, movl, movsd o.ä. LES reg, seg:offset; loads ES=seg and reg=offset ADD, SUB, CMP, OR, XOR, INC, DEC auch als reg-mem-befehle CBW converts lsbyte of EAX to lsword of EAX (Akku); LODS loads a byte, word, double word of a string in EAX (Akku) s.a. www.weblearn.hs-bremen.de/risse/rst/docs/intel/

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 91 Beispiele für Befehlsformate belegen ISA-Heterogenität a. JE EIP + displacement 4 4 8 JE Condition Displacement b. CALL 8 32 CALL Offset c. MOV EBX, [EDI + 45] 6 MOV d. PUSH ESI 5 3 PUSH 1 1 d w Reg 8 8 r-m postbyte Displacement e. ADD EAX, #6765 4 3 1 32 ADD Reg w Immediate f. TEST EDX, #42 7 1 8 32 TEST w Postbyte Immediate

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 92 Dekodierung Intel-Befehle sind aufwändig zu decodieren: viele Formate diverse Interpretationen des Postbyte m, reg, r/m, gesteuert von mode m und w-feld (width) im OP-Code (Fig. 3.35) w=1 16b 32b 0 AL AX EAX 1 CL CX ECX 2 DL DX EDX 3 BL BX EBX 4 AH SP ESP 5 CH BP EBP 6 DH SI ESI 7 BH DI EDI reg w=0 m=0 m=1 m=2 r/m 16bit 32bit 16bit 32bit 16bit 32bit 0 =BX+SI =EAX 1 =BX+DI =ECX same addr as in m=0 with 2 =BP+SI =EDX disp8 disp16 disp32 3 =BP+DI =EBX 4 =SI =(sib) SI+disp16 (sib)+disp8 SI+disp8 (sib)+disp32 5 =DI =disp32 DI+disp8 EBP+disp8 DI+disp16 EBP+disp32 6 =disp16 =ESI BP+disp8 ESI+disp8 BP+disp16 ESI+disp32 7 =BX =EDI BX+disp8 EDI+disp8 BX+disp16 EDI+disp32 Im mode m=3 wird ein Register genau wie im reg-feld adressiert. s.a. ag-vp-www.informatik.uni-kl.de/papers/skriptrs1/kapitel 10.pdf s.a. www.cs.uiuc.edu/class/sp06/cs232/lectures/examples/x86.pdf s.a. www.jegerlehner.ch/intel/index de.html s.a. AULIS z.h. Klassifiziere den Intel 80x86-Befehlssatz. Wieso CISC?

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 93 Condition Codes CMP (compare) {reg, mem} {reg, mem, const} \ {(mem, mem)} berechnet arg1 arg2 und setzt a,c,o,p,s,z FLAGS oder EFLAGS entsprechend (8086 80386!) a uxiliary (hier bei BCD-Überlauf) c arry o verflow p arity s ign z ero TEST {reg, mem} {reg, mem, const} \ {(mem, mem)} berechnet arg1&arg2, löscht c sowie o und setzt p,s,z FLAGS oder EFLAGS entsprechend (8086 80386!)

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 94 Sprung- und Verzweigungsanweisungen JMP unconditional jump JA branch if above (c==0)&&(z==0) JAE branch if above or equal (c==0) wie JNC JB branch if below (c==1) wie JC JBE branch if below or equal (c==1) (z==1) JE branch if equal (z==1) JNE branch if not equal (z==0) JG branch if greater (z==0)&&(s==0) JGE branch if greater or equal (s==0) JL branch if lower (s==1) JLE branch if lower or equal (z==1) (s==1) JC,JNC branch if carry set/not set (c==1) / (c==0) JC wie JB JO,JNO branch if overflow set/not set (o==1) / (o==0) JP,JNP branch if parity set/not set (p==1) / (p==0) PE, PO JS,JNS branch if sign set/not set (s==1) / (s==0) JZ,JNZ branch if zero set/not set (z==1) / (z==0) JCXZ branch if counter reg zero (CX==0)

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 95 Bedingungen in Registern vs Condition Codes DLX/MIPS Verzweigungsbedingungen in Registern slt Ra,Rb,Rc; Ra=(Rb<Rc) bnez Ra, lt; if (Ra) goto lt...... lt: AMDs 64bit Erweiterungen Intel 80x86 Verwendung von Conditioncodes CMP BX,CX; (BX<CX) in FLAGS JL lt; if ( lower flags ) goto lt...... lt: Der sledgehammer von AMD ist eine abwärtskompatible 64bit Erweiterung des Pentium. Dazu werden die 8 Allzweck-Register auf 64bit Register EAX, ECX, EDX, EBX, ESP, EPB, ESI und EDI RAX, RCX, RDX, RBX, RSP, RPB, RSI und RDI erweitert. Es gibt 8 weitere 64bit Allzweck-Register R8 bis R15. Nun sind auch die low-bytes SPL, BPL, SIL und DIL zugreifbar.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 96 Alle 1byte OP-Codes sind vergeben: neue Register müssen per Präfix angesprochen werden. Die Kurzform der 16 Dekrement/Inkrement- Befehle werden dazu für die sogenannten REX-Instruktionen umdefiniert. Ein paar andere Instruktionen werden im 64bit-Modus nicht mehr unterstützt. MOVSXD erweitert 32bit Daten vorzeichenrichtig auf 64bit. Wie bei der 80x86-Familie sind alle Operationen 2-Operanden Operationen. 3DNow! wurde zugunsten von ISSE2 der Kompatibilität geopfert... Der Prozessor unterstützt im legacy mode den real, virtual und protected mode, im long mode den 32bit compatibility mode und endlich den 64bit mode. Im 64bit mode greift der Prozessor ohne Segmentierung auf den Speicher zu (flat memory), hierarchische Adress-Umsetzung, 4KB- oder 2MB-Seiten im Gegensatz zu den zwischen 4KB und 4GB variabel großen Seiten des ia64. Details in www.weblearn.hs-bremen.de/risse/rst/docs/amd64.pdf

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 97 Intels 64bit Erweiterungen vgl. Gautam Doshi: Understanding the IA-64 Architecture, 1999 http: //www.weblearn.hs-bremen.de/risse/rst/docs/intel/idfisa.pdf vgl. Chris Lomont: Introduction to x64 assembly http://software. intel.com/en-us/articles/introduction-to-x64-assembly Slogans on 80x86 architecture This history illustrates the impact of the golden handcuffs of compatibility! Adding new features as someone might add clothing to a packed bag! An architecture that is difficult to explain and impossible to love! What the 80x86 lacks in style is made up in quantity, making it beautiful from the right perspective! 4.8. z.b. 8051 Der 8051 µ-controller ist ein typischer 8 bit CISC-Rechner der 80er Jahre (vgl. z.b. www.iiit.uni-karlsruhe.de/download/befss 8051.pdf):

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 98 Er weist wie auch die 80x86 Prozessoren Merkmale sowohl einer Akkumulator- wie auch einer Register-Architektur auf. Nicht alle Register sind echte Allzweck-Register. Der Prozessor verarbeitet nur dyadische Operationen. Der Prozessor verarbeitet komplexe Instruktionen. Der Prozessor unterstützt mancherlei Adressierungsart. Der Prozessor unterstützt in keineswegs orthogonaler Weise wenige Datentypen. Der Prozessor verarbeitet Verzweigungsanweisungen unter Verwendung von condition codes. 8051-Programme sollten geringe Anforderungen an den Speicher stellen. Die Instruktionen sind also kompakt, verschieden lang und sehr inhomogen. z.h. Führe Belege für obige Aussagen an.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 99 4.9. z.b. MicroChip PIC24FJ128GC010Family s. http://ww1.microchip.com/downloads/en/devicedoc/30009312b.pdf 4.10. Resumée Neben technologischen Randbedingungen sind damit zwei fast kontroverse Anforderungen zu befriedigen.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 100 Für Compiler (-Bauer) sind folgende Eigenschaften wünschenswert: Wenn Operation, Datentyp und Adressierungsart orthogonal, d.h. unabhängig sind, vereinfacht sich die Code-Erzeugung! Lieber Primitive als Konstrukte für eine bestimmte Programmier- Sprache! Leitlinie: einfachere Entscheidung zwischen Code-Alternativen! Befehle, die zur Compile-Zeit vorhandene Information auch zu nutzen erlauben! Z.B. Für die VAX enthält eine Maske, welche Register bei Prozedur-Aufrufen zu retten sind. Z.B. Compiler können MMIX mitteilen, welches Verzweigungsverhalten zu erwarten ist. Z.B. Der VAX-Befehlssatz ist hoch-orthogonal, erlaubt einfache Zuordnung von Hochsprachen-Anweisungen zu Maschinen-Befehlen. Der Code ist so optimiert, daß Programme nur wenig vom damals knappen Speicher brauchen. 1978 war die VAX die erste Speicher-Speicher-Architektur.

Abschnitt 4: Befehlssatz links von der HW-SW-Schnittstelle 101 Für den Prozessor (-Designer) sind folgende Eigenschaften wünschenswert: leichte Dekodierbarkeit load/store Architektur wenige Addressierungsarten leichtes pipelining Z.B. Wie die ersten ausgesprochenen RISC-Maschinen (IBM 801, RISC I und RISC II in Berkeley sowie MIPS in Stanford) weisen DLX und MIPS mit load/store-architektur, mit 32-bit-Festformat-Befehlen und mit einem in der pipeline-implementierung CPI-Wert von kleiner als zwei exemplarische RISC-Befehlssätze auf. Der Befehlssatz legt einen Prozessor weitgehend fest! Insofern ist der Befehlssatz mitentscheidend für die Leistung eines Prozessors! z.h. Identifiziere andere Einflußgrößen für die Prozessor-Leistung.

102 5. Prozessor-Architektur Das Material ist COD entnommen, aufbereitet und kommentiert, s. www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel5.pdf 5.1. single cycle Implementierung s. fig 5.1 fig 5.29 (1 23 von 40) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel5.pdf 5.2. multi cycle Implementierung s. fig 5.30 fig 5.51 (24 40 von 40) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel5.pdf Wegen der Bedeutung für die Implementierung hier wie auch im Skript die Tabelle der Phasen der Abarbeitung der fünf prototypischen Befehle, nämlich ADD, LW, SW, BEQ und J, Fig. 5.35:

Abschnitt 5: Prozessor-Architektur 103 R-Type load/store branch jump ADD LW, SW BEQ J step R-Type load/store branch jump IF IR = Mem[PC] PC += 4 ID A = Reg[IR[25-21]]; B = Reg[IR[20-16]] ALUOut = PC+(sign ext(imm)<<2) EX/ BEQ & J completion ALUOut ALUOut = A if (A-B==0) PC = PC[31-28] = A op B +sign ext(imm); PC = ALUOut (IR[25-0]<<2) ADD & SW Mem/ completion Reg[IR[15-11]] MDR = Mem[ALUOut] = ALUOut or Mem[ALUOut] = B WB Reg[IR[20-16]] = MDR 5.3. Implementieren der Steuerung s. fig C.3 fig C.20 (1 7) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/appendix/appndx c.pdf

Abschnitt 5: Prozessor-Architektur 104 Modellieren der Steuerung durch FSM (C.6) erlaubt diverse Implementierungen per ROM (Moore-Automat!) per FSM (s. C.7) per PLA (s. C.14) per sequencer (s. C.15, C.16) per µ-programm (s. C.20) µ-programm für MIPS R2000 mit ADD, LW, SW, BEQ, J ALU Register PC write sequenlabel cntrl SRC1 SRC2 control Memory control cing Fetch Add PC 4 read PC ALU seq Add PC Extshft read dispatch1 Mem1 Add A Extend dispatch2 LW2 read ALU seq write MDR to Rt fetch SW2 write ALU fetch R-Type1 func A B seq write ALU to Rd fetch BEQ1 Sub A B ALU-zero fetch JUMP1 jumpaddr fetch

105 6. pipeline-prozessor Das Material ist COD entnommen, aufbereitet und kommentiert, s. www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel6.pdf Materialien zur DLX ( MIPS) gibt es reichlich, beispielsweise http://de.wikipedia.org/wiki/dlx-mikroprozessor Valentin Gherman: DLXSim für Windows bzw. für Linux zum Download; Vorlesungsmitschrift - Kapitel 3 Der DLX als RISC- Beispiel; Minitutorial für DLX; Institute of Computer Science, University of Stuttgart www.ra.informatik.uni-stuttgart.de/~ghermanv/lehre/ro02-03 Christian Hochberger: Mikrorechner; Fakultät Informatik, TU Dresden Kapitel4-Rechner.pdf und Kapitel4-Rechner-Teil2.pdf (allg.&dlx) www.mr.inf.tu-dresden.de/lehre ws/infet1/docs/ Rade Kutil: DLX-Simulator für Windows; Kurze Einführung zur Assemblerprogrammierung in DLX; link auf Gherman Department of Computer Sciences, University of Salzburg www.cosy.sbg.ac.at/project/tutorien/digitale/ws0708/

Abschnitt 6: pipeline-prozessor 106 6.1. instruction pipelines pipeline control s. fig 6.29 fig 6.35 (25 31 von 59) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel6.pdf data hazards s. fig 6.36 fig 6.49 (32 44 von 59) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel6.pdf control hazards s. fig 6.50 fig 6.56 (45 51 von 59) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel6.pdf superskalare Version & Leistung s. fig 6.58 fig 6.71 (52 59 von 59) www.weblearn.hs-bremen.de/risse/rst/docs/cod2e/figures/kapitel6.pdf

Abschnitt 6: pipeline-prozessor 107 superskalare Prozessoren Def. Superskalare Prozessoren haben mehrere (unabhängige) funktionale Einheiten (FUs); spezielle HW (scoreboard) dient der Synchronisation der FUs; Programm-Parallelität auf Anweisungsebene wird in Parallelarbeit von FUs umgesetzt. Z.B. superskalare Version des MIPS Prozessors durch Verdoppelung der Befehlspipeline: eine für arithmetisch/logische Operationen und Verzweigungen und eine ausschließlich für load/store Operationen.. z.h. Bewerte die Auslastung einer jeden pipeline. z.h. Verbessere die Auslastung einer jeden pipeline. z.h. Implikationen für data hazards? für control hazards?

Abschnitt 6: pipeline-prozessor 108 superskalare Erweiterung des MIPS-Prozessors 40000040 M u x 4 M u x ALU PC Instruction memory Registers M u x Write data Data memory Sign extend Sign extend ALU Address M u x

Abschnitt 6: pipeline-prozessor 109 Inkrementierung eines jeden Feldelementes um eine Konstante ; cycle loop: lw Rt,0(Rp) ; load Mem[Rp] into temporary Rt 1 add Rt,Rt,Rs ;increment element by scalar in Rs 2 sw Rt,0(Rp) ; store result at Rp 3 addi Rp,Rp,4 ; increment pointer Rp 4 bne Rp,Re,loop; if (Rp!=Re) goto loop 5 ALU/branch load/store ; cycle loop: lw Rt,0(Rp) ; Rt Mem[Rp] 1 add Rt,Rt,Rs ; increment Rt 2 addi Rp,Rp,4 ; increment Rp 3 bne Rp,Re,loop sw Rt,-4(Rp);branch and store 4 ergibt sich CPI von 4 5 = 0.8. Unter welchen Annahmen? z.h. Läßt sich obiger code für die superskalare Erweiterung weiter optimieren? z.h. Welcher Beschleunigungsfaktor ergibt sich? Welche Arten von Kenngrößen gehen grundsätzlich in den Beschleunigungsfaktor ein?

Abschnitt 6: pipeline-prozessor 110 Abarbeitung von Befehlspaaren im superskalaren MIPS Paare bestehen aus zwei Instruktionen, aus einer arithmetisch-logischen oder einer branch-instruktion einer load- oder einer store-instruktion etwa ADD/BEQ und LW/SW. ADD BEQ LW SW IF IRa=Mem[PC]; IRm=Mem[PC+4]; PC+=8; ID Aa=Reg[IRa[25-21]] Am=Reg[IRm[25-21]] Ba=Reg[IRa[20-16]] Bm=Reg[IRm[20-16]] target=pc+signext(ira[15-0]) EX ALUouta IF (Aa==Ba) ALUoutm=Am+SignExt(IRm[15-0]) = Aa op Ba PC = target MEM MDR=Mem[ALUoutm] Mem[ALUoutm]=Bm WB Reg[IRa[15-11]] Reg[IRm[20-16]] = ALUouta = MDR Für die Bearbeitung der ADD/BEQ- bzw. der LW/SW-Instruktionen nötige, ansonsten aber gleichnamige Register sind hier durch die Suffixe a bzw. m voneinander unterschieden.

Abschnitt 6: pipeline-prozessor 111 6.2. functional pipelines arithmetische pipelines Beispielsweise die Multiplikation einer 8-bit mit einer 4-bit unsigned integer kann konventionell mit drei Addierern und vier Bus-gates multiplicand multiplier bus gate 8bit adder bus gate 0 bus gate 8bit adder bus gate 8bit adder } {{ } 12 bit product

Abschnitt 6: pipeline-prozessor 112 und pipelined nur mit zusätzlichen latches realisiert werden. multiplicand input latches multiplier bus gate 8bit adder bus gate 0 1 st /2 nd stage latches bus gate 8bit adder 2 nd /3 rd stage latches bus gate 8bit adder output latch 12 bit product

Abschnitt 6: pipeline-prozessor 113 Implementierungen der Multiplikation von breiteren Faktoren liegen auf der Hand. Welche Vorteile/Nachteile ergeben sich zu welchen Kosten? Def. Die Auflösung einer Operation in pipeline-stufen heißt Granularität. Z.B. x 123.456.789 = (x 123)10 6 + (x 456)10 3 + x 789, liefert Multiplikations-pipelines unterschiedlicher Granularität. Def. Die Menge der verschiedenen Funktionen, die eine multifunktionale pipeline ausführen kann, bestimmt die sogenannte Variabilität einer pipeline. Z.B. Texas Instruments Advanced Scientific Computer, TI ASC mit dynamisch zu konfigurierender pipeline zur Abarbeitung arithmetischer Operationen: float +, *, Skalarprodukt... s. z.b. Daniel P. Siewiorek, C. Gordon Bell, Allen Newell: Computer Structures Principles and Examples; McGraw-Hill pp753 http://research.microsoft.com/users/gbell/computer Structures Principles and Examples/

Abschnitt 6: pipeline-prozessor 114 scheduling funktionaler Einheiten FUs aufeinander abstimmen und synchronisieren; dabei Daten-Abhängigkeiten berücksichtigen! Z.B. CDC6600 1964 der erste Super-Computer mit 10 FUs: 2 Addierer, 2 Inkrementierer, 2 Multiplizierer, 1 Dividierer sowie je eine branch, Boolean und shift unit. Je FUs zwei Operanden-Register F j und F k, ein Ergebnis-Register F i, Operationsmodus F m, busy flag, read flags R j und R k (falls R j bzw. R k gesetzt sind, sind die Daten in F j bzw. F k valide) sowie Zeiger Q j und Q k auf die die Operanden produzierenden FUs. je acht (Basis-) Adreß-Register A 0,..., A 7, Index-Register B 0,..., B 7 und Akkumulatoren X 0,..., X 7. control unit (CU), scoreboard verwaltet XBA result register designators (welche FU beliefert welches XBA- Register) entry operand register designators (welches XBA-Register ent-

Abschnitt 6: pipeline-prozessor 115 hält Werte für welchen Operanden einer FU) function unit designators Q j bzw. Q k (welche FU produziert O- peranden für F j bzw. F k ) X3=F1(X1,X4), X4=F2(X5,X6) und X6=F5(.,.). Die CDC6600 hat eine 2-stufige Befehls-pipeline: decode welche FU liefert ihr Ergebnis an welches Register, wait, bis FU frei ist (busy flag) und dieses Register frei ist (es ist nicht Ergebnis-Register einer Instruktion, die noch bearbeitet wird) issue instruction to FU X6:=X1*X2 X5:=X6+X4 X3:=X1/X2 X5:=X4*X3 X4:=X0+X6 score board resolves structure hazards and data hazards (RAW, WAR)! (X6: RAW) (X3: RAW) (X4: WAR)

Abschnitt 6: pipeline-prozessor 116 X3:=X1/X2; X5:=X4*X3; X4:=X0+X6 X3 X4 X5. DIV ADD DIV MUL F m DIV F j X1 F k X2 Q j Q k RF j 1 RF k 1 busy 1.

Abschnitt 6: pipeline-prozessor 117 X3:=X1/X2; X5:=X4*X3; X4:=X0+X6 X3 X4 X5. DIV MUL ADD DIV MUL F m DIV MUL F j X1 X4 F k X2 X3 Q j Q k DIV RF j 1 1 RF k 1 0 busy 1 1.

Abschnitt 6: pipeline-prozessor 118. X3:=X1/X2; X3 DIV X5:=X4*X3; X4 ADD X4:=X0+X6 X5 MUL. ADD DIV MUL F m ADD DIV MUL F j X0 X1 X4 F k X6 X2 X3 Q j Q k DIV RF j 1 1 1 RF k 1 1 0 busy 1 1 1

Abschnitt 6: pipeline-prozessor 119 z.h. Untersuche WAW hazards. CDC6600 ist erster superskalarer Prozessor. theoretisch maximal erzielbare Leistung = #FUs Taktrate Z.B. Weitere Beispiele superskalarer Prozessoren sind DEC21064 und DEC 21264 (Alpha), Intel i80860xp, IBM RS/6000, Motorola MC88110, MIPS R4000 oder SUN SuperSPARC. Bem. superpipeline-architekturen charakterisiert durch tiefe Befehls- (10 und mehr pipeline-stufen) und Funktions-pipelines. Der Compiler muß in diesem Fall also große load und branch delays ausgleichen, während der Compiler für superskalar-architekturen möglichst keine Paare, Tripel o.ä. abhängiger Befehle erzeugen sollte, damit die funktionalen Einheiten stets ausgelastet sind. Z.B. DEC 21064 (Alpha) und MIPS R4000 gelten als sowohl superskalar als auch superpipelined.

Abschnitt 6: pipeline-prozessor 120 pipeline-vektor-prozessoren Vektor-Operationen wie z = a x + y mit a, x, y, z IR n entweder durch n Rechen-Elemente das i-te Rechen-Element berechnet z i = a i x i + y i effektiv ausführen oder eben durch pipeline-multiplizierer mit nachgeschaltetem pipeline-addierer. a i F U i a i x i + zi x i + z i y i y i Wichtigste Beispiele sind die SAXPY- bzw. DAXPY-Benchmarks, d.h. single/double a*x[i]+y[i]. Anwendungen?

Abschnitt 6: pipeline-prozessor 121 Def. pipeline-vektor-prozessoren verfügen typischerweise über spezialisierte, dynamisch konfigurierbare pipelines. Vektor-Operationen effizient ausführen: per komponentenweiser arithmetischer Operation, per compress( v, b), expand( v, b), merge( v, w, b), gather( v, i) mit Boole schen Vektoren b und Index-Vektoren i, per speziellen triadischen Operationen, z.b. D[i]:=A[i]*B[i]+C[i]. Spezielle Vektor-Register, caches und häufig verschränkte Speicher unterstützen die Vektor-Verarbeitung in Vektor-Maschinen. Typische Vektor-Anwendungen sind LGS (z.b. per Gauß oder Gauß- Seidel), Differentialgleichungssysteme (DglS z.b. per Runge-Kutta), finite Elemente Methode (FEM) usw. Z.B. ILLIAC-IV, (CDC-) Star-100, TI ASC, CRAY-1 sowie die NEC SX-, Siemens VPx und Fujitsu VPx-EX-Familien mit den gemeinsamen Merkmalen: Befehls-pipeline, mehrere pipeline-fus, verschränkter Speicher (interleaved memory), unabhängige Befehls-caches (instruction cache) und Daten-caches (data cache) sowie mehrfache Bus- Systeme (multiple buses).

Abschnitt 6: pipeline-prozessor 122 Jahr Anzahl Vektor- Register Vektor- Register Länge funktionale Vector Einheiten Cray 1 1976 8 64 6 (+,, inv, logic, shift) 1 Cray X-MP 1983 8 64 8 (+,, inv, 2 logic, shift) Y-MP 1988 Cray 2 1985 8 64 5 (+,,, inv, logic) 1 Fujitsu 1982 8 256 32 1024 3 (+,, /) je GK und FK 2 VP100/200 Hitachi S810/820 load store units 2 load 1 store 1983 32 256 4 (2 (FK+, logic), +, /+) 4 Convex C1 1985 8 128 4 (+,, /, FK-logic) 1 8 256 NEC SX/2 1984 16 (4 (+,, /, shift, FK+, logic)) 8 8K konfig DLXV 1990 8 64 5 (+,, /, FK+, logic) 1 z.h. Fortschreiben!

Abschnitt 6: pipeline-prozessor 123 Z.B. Die DLX kann über Kommando-Zeilen-Parameter zur Vektor- Maschine DLXV mit Vektor-Vektor-Operationen (+,,, /), z.b. ADDV V1,V2,V3, Skalar-Vektor-Operationen (+,,, /), z.b. ADDSV V1, F1, V2, sowie den Lade-Vektor-Operationen, z.b. LV V1,R1 (load V1 aus dem Speicher ab Adresse R1) und Speicher-Vektor-Operationen, z.b. SV V1,R1 (store V1 im Speicher ab Adresse R1) konfiguriert werden. Weitere Operationen wie beispielsweise Boole sche Vektor-Operationen oder das Setzen und Auslesen von Vektor-Längen- bzw. Vektor- Masken-Registers. Z.B. CNAPS coprozessor board von Adaptive Solutions mit 64 bzw. 256 Prozessoren (s. Labor ELKA). Vektorisierung erzielt verhältnismäßig große Leistungssteigerungen mit verhältnismäßig geringen Mehrkosten für hardware und Compiler.

Abschnitt 6: pipeline-prozessor 124 Vektor-Instruktionen im Mikro-Programm reduzieren Speicher- Zugriffe; Schleifen werden im Mikro-Programm i.a.r. schneller ausgeführt als solche im Assembler-Programm. HW-Verarbeitung entsprechender Vektor-Instruktionen reduziert ebenso Speicher-Zugriffe und eliminiert darüberhinaus den Schleifen- Overhead. Z.B. frühe Vektor-Maschinen: STAR100 und CYBER203 mit verschränkten Speichern, multiplen Bussen, E/A-Prozessoren und Strom- Einheit, stream unit (Mikro-Controller, Register-Bänke, Befehlskeller, Dekoder, Steuer-Vektor(?)) und zwei pipeline-prozessoren, einem GK- Adder und -Multiplier sowie einem GK-Adder und -Divider. 6-stufiger Adder, 7-stufiger Multiplier bei 40ns Zykluszeit. n 1/2 200! Befehlskeller mit 16 128bit Wörtern; Pipeline-Inhalte werden in spezielle Unterbrechungsregister gerettet. Heute sind Vektor-Operationen meist ununterbrechbar; bei Unterbrechungen löst das exception handling z.b. ein roll back aus. Z.B. CRAY-1: load/store-architektur, je acht Vektor-Register (V),

Abschnitt 6: pipeline-prozessor 125 Skalar-Register (S) und Adreß-Regsister (A) mit einem Adreß-Multiplizierer, z.b. für mehrdimensionale Felder, und Funktionseinheiten als pipelines mit 2 bis 14 Stufen. Verketten von Operationen, also mehrere Operationen nacheinander auf einem Datenstrom auszuführen (z.b. für LGS). vier Befehlspuffer für je 64 Befehle; scoreboard Einheit synchronisiert durch Register-Verriegelung die diversen Funktionseinheiten.

Abschnitt 6: pipeline-prozessor 126 Leistungsbewertung Sei t cond die für die Konditionierung der pipeline notwendige Zeit, t flush die Durchflußzeit (flushing time), d.h. die Zeit für den Durchlauf durch die (konditionierte) pipeline, also die Zeit vom Holen der Argumente bis zum Wegspeichern der Ergebnisse, und t clock die Zyklus-Zeit (clock time) der Verarbeitungselemente, also die Verarbeitungszeit einer jeden Stufe der pipeline. Dann ist t cond +t flush die Ausführungszeit einer Skalar-Operation und n Skalar-Operationen dauern t cond + n t flush. Also ergibt sich eine Ausführungszeit T scal (n) = t flush + t cond n pro Operation bei n Operationen. Falls die pipeline in jedem Zyklus, also alle t clock Zeiteinheiten ein Ergebnis produziert und falls in jedem Zyklus Operanden geholt und Ergebnisse abgespeichert werden, so ist t cond + t flush + (n 1) t clock = t conf + n t clock mit t conf = t cond + t flush t clock die Zeit für die Bearbeitung eines Vektors der Länge n durch eine Vektor-Operation und

Abschnitt 6: pipeline-prozessor 127 damit T vect (n) = t clock + t conf n die Ausführungszeit pro Vektor-Element bei Vektor-Länge n. Die Leistung P der pipeline, also die Anzahl von Operationen pro Zeiteinheit ist dann 1 P =P (n)= T vect (n) = 1 t clock (1 + t conf 1 t clock 1 t clock n ) Für n ergibt sich die theoretische Maximal-Leistung P = und für n 1/2 = t conf t die halbe Maximal-Leistung P (n 1/2 ) = clock P ( t conf t clock ) = 1 t clock (1+1) = 1 2 P und somit auch P = P (n) = P n n+n 1/2. Def. n x und n 1/2 messen die Nützlichkeit von Vektor-Prozessoren: n x = Vektor-Länge, so daß Skalar- = Vektor-Geschwindigkeit, T scal(n x ) = T vect (n x ) n 1/2 = Vektor-Länge, so daß Vektor-Geschwindigkeit = 1 asymptotische Vektor-Geschwindigkeit 2

Abschnitt 6: pipeline-prozessor 128 so daß T vect (n 1/2 ) = T vect( ) 2 n x ist der break even point der Vektorisierung. Je kleiner n x und n 1/2 ausfallen, um so nützlicher ist Vektorisierung. Wie schon bei pipeline-rechnern muß hier das Speicher-System erst recht mithalten können (Daumen-Regel: Speicher-Bandbreite = dreifache pipeline-rate). Z.B. Die Vektor-Ausführung für n Elemente brauche t conf + n t clock Zeiteinheiten oder Zyklen, die Skalar-Ausführung n t scal. Vektorisierung empfiehlt sich also für t conf + n t clock < n t scal oder eben falls n > t conf /(t scal t clock ). Für die CRAY-1 gilt t conf = 5, t clock = 1 sowie t scal = 2 und damit n > 5.

129 7. Speicher-Hierarchie Welche Bestandteile hat die Speicher-Hierarchie? Speed CPU Size Cost ($/bit) Fastest Memory Smallest Highest Memory Slowest Memory Biggest Lowest

Abschnitt 7: Speicher-Hierarchie 130 Daten stehen auf einer Ebene jeweils in Kopie aus der darunterliegenden Ebene zur Verfügung: Processor Data are transferred

Abschnitt 7: Speicher-Hierarchie 131 Inwiefern ist die Speicher-Hierarchie eine Pyramide? CPU Levels in the memory hierarchy Level 1 Level 2 Increasing distance from the CPU in access time Level n Size of the memory at each level

Abschnitt 7: Speicher-Hierarchie 132 Kenngrößen etwas aktuellere Angaben zur Speicher-Hierarchie (2002 und 2005) Betriebssysteme Speicherverwaltung Speicherhierarchie Zugriffszeit 1 ns 2 ns 10 ns 10 ms 100 s Register Cache Main Memory Disk Tape Kapazität < 1 KB < 2 MB 256-2048 MB 40-400 GB > 0,5 TB 17.05.05 Dr. Jörg Gruner 7

Abschnitt 7: Speicher-Hierarchie 133 Lokalität Die Speicher-Hierarchie funktioniert nur aufgrund der Lokalität von Zugriffen auf die jeweils unterliegende Speicher-Ebene: zeitliche Lokalität: auf den Zugriff auf ein Datum folgt mit hoher Wahrscheinlichkeit bald ein erneuter Zugriff. räumliche Lokalität: auf den Zugriff auf ein Datum folgt mit hoher Wahrscheinlichkeit bald ein Zugriff auf ein benachbartes Datum. Der Nutzen der Speicher-Hierarchie beruht wieder auf einer 90/10- Faustregel: ein Programm verbraucht 90% der Laufzeit in 10% des Codes. z.h. Wie sieht die 90/10-Faustregel für Daten aus? z.h. Verifikation? Bedeutung? Konsequenz?

Abschnitt 7: Speicher-Hierarchie 134 7.1. caching Platzierung von Daten im cache: suchen & finden oder ggfls. nachladen & verdrängen X4 X1 Xn 2 X4 X1 Xn 2 Xn 1 X2 X3 a. Before the reference to Xn Xn 1 X2 Xn X3 b. After the reference to Xn

Abschnitt 7: Speicher-Hierarchie 135 direct mapped caches Jeder Speicher-Adresse entspricht genau eine cache line! Cache 000 001 010 011 100 101 110 111 00001 00101 01001 01101 10001 10101 11001 11101 Memory

Abschnitt 7: Speicher-Hierarchie 136 Identifiziere Kenngrößen und Arbeitsweise der Implementation eines direct mapped caches! Hit Address (showing bit positions) 31 30 13 12 11 2 1 0 Byte offset 20 10 Tag Index Data Index 0 1 2 Valid Tag Data 1021 1022 1023 20 32

Abschnitt 7: Speicher-Hierarchie 137 direct mapped cache: one word blocks trace: Zugriffe auf einen direct mapped oder 1-assoziativen cache mit 8 1-Wort-Blöcken 5 6 14 25 15 5 6 15 26 16 5 6 0 16 1 25 2 26 3 4 5 5 5 5 6 6 14 6 6 7 15 15 m m m m m t m t m m t t line = Adresse mod 8 Keine räumliche Lokalität! 4 hits Keine Verdrängungsstrategie!

Abschnitt 7: Speicher-Hierarchie 138 Z.B. DEC-Station mit direct mapped cache Address (showing bit positions) 31 30 17 16 15 5 4 3 2 1 0 Hit 16 14 Byte offset Data 16 bits 32 bits Valid Tag Data 16K entries 16 32

Abschnitt 7: Speicher-Hierarchie 139 direct mapped cache: four word blocks erst ganze Blöcke in jeder cache line erlauben, auch räumliche Lokalität zu nutzen! Address (showing bit positions) 31 16 15 43210 Hit Tag 16 12 2 Byte offset Index Block offset Data 16 bits 128 bits V Tag Data 4K entries 16 32 32 32 32 Mux 32

Abschnitt 7: Speicher-Hierarchie 140 trace: Zugriffe auf einen direct mapped oder 1-assoziativen cache mit 4 2-Wort-Blöcken 5 6 14 25 15 5 6 15 26 16 5 6 0 (24,25) (16,17) 1 (26,27) 2 (4,5) (4,5) (4,5) 3 (6,7)(14,15) (14,15) (6,7)(14,15) (6,7) m m m m s t m m m m t m line = (Adresse/2) mod 4 2 mal temporal hits 1 mal spatial hits 3 hits Keine Verdrängungsstrategie!

Abschnitt 7: Speicher-Hierarchie 141 hits bzw. misses in Abhängigkeit von cache- und Block-Größe 40% 35% 30% Miss rate 25% 20% 15% 10% 5% 0% 4 16 64 256 Block size (bytes) 1 KB 8 KB 16 KB 64 KB 256 KB

Abschnitt 7: Speicher-Hierarchie 142 fully associative caches Eröffnen von Freiheiten, Blöcke in cache lines zu platzieren! Direct mapped Block # 0 1 2 3 4 5 6 7 Set associative Set # 0 1 2 3 Fully associative Data Data Data Tag 1 2 Tag 1 2 Tag 1 2 Search Search Search macht Verdrängungsstrategie und hardware-aufwand notwendig: random fifo lru

Abschnitt 7: Speicher-Hierarchie 143 set associative caches verschiedene Assoziativität bei fester cache-netto-kapazität One-way set associative (direct mapped) Block 0 Tag Data 1 2 3 4 5 6 7 Two-way set associative Set 0 1 2 3 Tag Data Tag Data Set 0 1 Four-way set associative Tag Data Tag Data Tag Data Tag Data Eight-way set associative (fully associative) Tag Data Tag Data Tag Data Tag Data Tag Data Tag Data Tag Data Tag Data

Abschnitt 7: Speicher-Hierarchie 144 set associative cache: one word blocks trace: Zugriffe auf einen 2-assoziativen cache mit 1-Wort-Blöcken (2-assoziativ, also 2 Blöcke pro set) 5 6 14 25 15 5 6 15 26 16 5 6 set 0 16 set 1 5 5 5 25 set 2 6 6 6 14 26 set 3 15 15 m m m m m t t t m m t t set = Adresse mod 4 Keine räumliche Lokalität! 5 hits least recently used, LRU!

Abschnitt 7: Speicher-Hierarchie 145 set associative cache: two word blocks trace: Zugriffe auf einen 2-assoziativen cache mit 2-Wort-Blöcken (2-assoziativ, also 2 Blöcke pro set) 5 6 14 25 15 5 6 15 26 16 5 6 set 0 (4,5) (4,5) (4,5) (24,25) (16,17) set 1 (6,7) (6,7) (26,27) (14,15) (14,15) (14,15) (6,7) m m m m s t t t m m t m set = (Adresse/2) mod 2 5 hits least recently used, LRU!

Abschnitt 7: Speicher-Hierarchie 146 Implementation eines 4-assoziativen caches Address 31 30 12 11 10 9 8 3 2 1 0 22 8 Index 0 1 2 V Tag Data V Tag Data V Tag Data V Tag Data 253 254 255 22 32 4-to-1 multiplexor Hit Data

Abschnitt 7: Speicher-Hierarchie 147 Performance set-assoziativer caches 15% 12% 9% Miss rate 6% 3% 0% One-way Two-way Four-way Eight-way Associativity 1 KB 2 KB 4 KB 8 KB 16 KB 32 KB 64 KB 128 KB

Abschnitt 7: Speicher-Hierarchie 148 Performance set-assoziativer caches 14% 12% 10% Miss rate per type 8% 6% 4% 2% Capacity 0% 1 2 4 8 16 32 64 128 Cache size (KB) One-way Four-way Two-way Eight-way

Abschnitt 7: Speicher-Hierarchie 149 cache-schreibstrategien Prozessor, DMA-hardware, EA-Prozessoren und erst recht andere Prozessoren greifen unabhängig auf einen gemeinsamen cache/speicher zu Konsistenz-Problem! Def. Datenkonsistenz von cache und Speicher cache und Speicher-Ausschnitt stimmen stets überein. Def. Datenkohärenz von cache und Speicher stets wird der zuletzt geschriebene Wert gelesen. write through immer zugleich in den cache und in den Speicher zu schreiben garantiert Konsistenz! copy back erst beim Verdrängen der (modifizierten) Daten (dirty bit) aus dem cache diese in den Speicher zurückzuschreiben garantiert Kohärenz!

Abschnitt 7: Speicher-Hierarchie 150 Kohärenz per Schnüffel-Logik: indexcache!sniffing falls die zu schreibende Speicher-Adresse am Bus im cache vorkommt, valid=false (also cache miss). (Aufwand?) Ebenso bei Prozeß-Wechsel alle cache lines oder per Prozeß-Kennung nur die des noch aktuellen Prozesses invalidieren (cache flush). cache miss beim Schreiben (miss on write): fetch on write (miss) oder write allocate: der entsprechende Block wird geladen und danach (ohne miss) geschrieben. write around oder no write allocate: der entsprechende Block wird unter Umgehung des caches in den Speicher der darunter liegenden Speicher-Hierarchie-Ebene geschrieben. z.h. Beschleunigungsfaktor aufgrund des Verzichts auf Konsistenz zugunsten von Kohärenz Z.B. s.a. Optimierung der Matrix-Multiplikation (nur) bei Berücksichtigung des caching in Abschnitt 3.4, S. 55ff vgl. www.weblearn.hs-bremen.de/risse/rst/docs/cachesim.pdf

Abschnitt 7: Speicher-Hierarchie 151 Havard-Architektur Def. Maschinen mit getrennten Speichern (damals) bzw. caches (heute) für Instruktionen und Daten weisen die sogenannte Havard- Architektur auf. Z.B. 1997 COD2e pp 611 614 1 st level caches Pentium Pro vs PowerPC 604 feature Pentium Pro PowerPC 604 organisation split I-cache and D-cache cache sizes 8KB each 16KB each associativity 4-associative replacement pseudo LRU LRU block size 32B write policy write back write back/through 2 nd level caches Pentium Pro vs PowerPC 604: 256KB or 512KB instructions and data

Abschnitt 7: Speicher-Hierarchie 152 7.2. Speicher: SRAM vs DRAM DRAM (Dynamic Random Access Memory) word select line pass transistor capacitor bitline (data in/out ) a dynamic RAM cell for one bit bit stored as charge in capacitor optimized for density (1 transistor, 6 for SRAM) capacitor discharges on a read (destructive read) read is automatically followed by a write (to restore bit) charge leaks away over time refresh by reading/writing every bit once every 5ms (row at a time) access time (time to read) cycle time (minimum time between reads) > access time 2004 by WiscGang & Wittie Tue2Nov04 From Lect12 Lect18Slide 85

Abschnitt 7: Speicher-Hierarchie 153 DRAM Organization square row/column matrix multiplexed address lines internal row buffer operation put row address on lines set row address strobe (RAS) read row into row buffer put column address on lines set column address strobe (CAS) read column bits out of row buffer write row buffer contents to row rewrite since destructive read data pin interface usually narrow 2004 by WiscGang & Wittie Tue2Nov04 From Lect12 Lect18Slide 86

Abschnitt 7: Speicher-Hierarchie 154 Z.B. 4M 1 DRAM, multiplexed address (22bit = 11bit + 11bit) Row decoder 11-to-2048 2048 2048 array Address[10 0] Column latches Mux RAS/CAS statt immer nur auf nur ein bit einer ganzen Zeile zuzugreifen: page mode bzw. static column mode : mehrere bits bei fester rowaddress oder nibble mode: ein nibble bei fester row-address Dout

Abschnitt 7: Speicher-Hierarchie 155 1st Year 1986 1989 1992 1996 1998 2000 2002 2004 DRAM Specs #bits/chip Min Clock Access Time 1Mb 25ns 135ns 4Mb 20ns 110ns 16Mb 15ns 90ns 64Mb 12ns 75ns 128Mb 10ns 70ns 256Mb 7ns 65ns 512Mb 5ns 60ns 1Gb 3.8ns 55ns Cycle Time 190ns 165ns 120ns 110ns 100ns 90ns 80ns 70ns density: +60% annual increase (post 92: 40%) Moore s law: doubles every 18 months (post 92: 24 months) speed: only 5% annual improvement in access time much flatter improvement 2004 by WiscGang & Wittie Tue2Nov04 From Lect12 Lect18Slide 87

Abschnitt 7: Speicher-Hierarchie 156 7.3. Speicher-Organisation Anforderung an Speicher-Verwaltung/Memory Management hardware-unabhängigkeit (Speicher-Größe) effiziente Nutzung des physikalischen Speichers schneller context switch Protection innerhalb und zwischen Prozessen: code/data, user/system, multiprogramming Verschiebbarkeit (relocatable code) sharing memory regions: sharing code (reentrant programs), sharing data (inter-process communication) dynamic allocation of new memory: dynamic sizing of existing memory (heap, stack)

Abschnitt 7: Speicher-Hierarchie 157 virtueller Speicher Obige Anforderungen werden durch virtuellen Speicher bedient! Virtual addresses Address translation Physical addresses Disk addresses

Abschnitt 7: Speicher-Hierarchie 158 Vergleich cache vs memory H.&P. cache/memory physical/virtual 1990 proc cache cache memory memory hard disk block 4-128B 512B-8KB page hit time 1 cycle 110 cycles hit time miss time 8-32 cycles 100K-600K cycles miss time access time 6-10 cycles 100K-500K cycles access time transfer time 2-22 cycles 10K-100K cycles transfer time miss rate 10 2 2 10 1 10 7 10 5 fault rate cache size 1KB 256KB 4MB 2GB memory size typical access times (1997): SRAM 5 25ns DRAM 60 120ns Disk 10 20 Mio ns

Abschnitt 7: Speicher-Hierarchie 159 paging Seiten-Tabelle/page table Verwendung Virtual page number Valid Page table Physical page or disk address Physical memory 1 1 1 1 0 1 1 0 1 1 0 1 Disk storage

Abschnitt 7: Speicher-Hierarchie 160 Seiten-Tabelle/page table schematisch Page table register Virtual address 31 30 29 28 27 15 14 13 12 11 10 9 8 3 2 1 0 Virtual page number Page offset 20 12 Valid Physical page number Page table If 0 then page is not present in memory 18 29 28 27 15 14 13 12 11 10 9 8 3 2 1 0 Physical page number Page offset Physical address

Abschnitt 7: Speicher-Hierarchie 161 paging Implementierung Virtual address 31 30 29 28 27 15 14 13 12 11 10 9 8 3 2 1 0 Virtual page number Page offset Translation 29 28 27 15 14 13 12 11 10 9 8 3 2 1 0 Physical page number Page offset Physical address Konsequenzen aus der gigantischen page fault penalty: große pages aber Verschnitt und Transfer-Zeit Verringern der page fault rate per optimaler Verdrängungsstrategie (fully associative, LRU) handling of page faults per software, i.e. os write back Strategie: copy back

Abschnitt 7: Speicher-Hierarchie 162 Größe der Seiten-Tabelle! z.h. Größe der page table als Funktion der page size! Reduktion des Speicherbedarfs der page tables dynamisch wachsende page tables (eine bzw. zwei pro Prozess, falls Adreß-Raum in eine bzw. zwei Richtungen wächst) inverted page table / hashing hierarchy of page tables paging the page tables

Abschnitt 7: Speicher-Hierarchie 163 Ersetzungsstrategien bei paging opt optimal wenn auch illusionär wäre, genau die Seite zu ersetzen, die in Zukunft für die längste Zeit nicht referenziert wird! nur zum Zweck des Vergleichs! FIFO first in first out (älteste ersetzen) LRU least recently used: am längsten nicht referenziert ersetzen clock Ring-Puffer-Variante von FIFO: use bit:=1 bei Referenz, ersetze nächste page mit use bit==0, if (use bits==1) use bit=0; working set Menge der Seiten während der letzten n Referenzen / während der letzten n virtuellen Zeit-Einheiten eines Prozesses weitere second chance, not used recently, NUR... zur Illustration diene die folgende Sequenz von Referenzen 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 und zwar für einen physikalischen Speicher mit drei oder vier pages = frames = Kacheln.

Abschnitt 7: Speicher-Hierarchie 164 opt frame 1 2 3 4 1 2 5 1 2 3 4 5 a 1 1 1 3 b 2 2 2 4 c 3 4 5 5 m m m m h h m h h m m h 7 page faults frame 1 2 3 4 1 2 5 1 2 3 4 5 a 1 1 1 4 b 2 2 2 c 3 3 d 4 5 5 m m m m h h m h h h m h Häufigkeit berücksichtigen, Lösung nicht eindeutig, ohne Orakel nicht implementierbar! 6 page faults

Abschnitt 7: Speicher-Hierarchie 165 FIFO frame 1 2 3 4 1 2 5 1 2 3 4 5 a 1 4 5 5 b 2 1 1 3 c 3 2 2 4 m m m m m m m h h m m h 9 page faults frame 1 2 3 4 1 2 5 1 2 3 4 5 a 1 1 5 4 b 2 2 1 5 c 3 2 d 4 3 m m m m h h m m m m m m aber: auf alte Seiten kann durchaus häufig zugegriffen werden! FIFO ist per Pointer einfach zu implementieren! Bélády s Anomalie: mehr frames weniger page faults 10 page faults

Abschnitt 7: Speicher-Hierarchie 166 LRU frame 1 2 3 4 1 2 5 1 2 3 4 5 1 1 4 5 3 2 2 1 1 4 3 3 2 2 5 m m m m m m m h h m m m 10 page faults frame 1 2 3 4 1 2 5 1 2 3 4 5 1 1 1 1 5 2 2 2 2 3 3 5 4 4 4 3 m m m m h h m h h m m m page fault rate kaum höher als bei opt, allerdings aufwändige Implementierung! 8 page faults

Abschnitt 7: Speicher-Hierarchie 167 segmentation segments = logical units of programs, individual base address, length, protection etc. in segment descriptor table, z.b. code, data, stack, heap Z.B. Intel 80x86 segment registers: CS, DS, ES, SS... plus SegReg:Offset addressing, VAX virtual address = segment, offset if (offset>segment.length) protection fault physical address = segment.base address + offset address translation per adder Nutzung des physikalischen Speichers: ohne interne aber mit externer Fragmentierung (splinters, crunching), Segmente sind ganz oder garnicht geladen! schneller context switch Protection: differenziert (f/r/w/e), einfach

Abschnitt 7: Speicher-Hierarchie 168 memory sharing: simpel wie protection dynamic allocation of new memory, dynamic sizing of existing memory: schwierig paging vs segmentation paging 1-Wort-Adressen HW-orientiert große page table oder hierarchy Seiten fester Größe einfache Blockersetzung schwierige Protection interne Fragmentierung ungenutzter Teile einer Seite Nachteil: thrashing augmentation einfach resizing einfach z.h. context switch? segmentation 2-Wort-Adressen SW-orientiert kleine segment descriptor table Segmente variabler Größe (code/data) schwierige Blockersetzung einfache Protection externe Fragmentierung ungenutzte Teile des Hauptspeichers Nachteil: splinters, zusätzlicher Adder augmentation schwierig resizing schwierig (crunching)

Abschnitt 7: Speicher-Hierarchie 169 Segmentierung: Er- und Einsetzungsstrategien unvermeidliche Überschneidungen mit der Lehrveranstaltung EBS! klassische Einsetzungsstrategien bei segmentation anhand einer verzeigerten Liste von freien Bereichen first fit erster Freibereich, der groß genug ist next fit nächster erster Freibereich, der groß genug ist best fit kleinster Freibereich, der groß genug ist gesamte Liste muss durchsucht werden; sortiere Freibereich nach der Größe. worst fit größter Freibereich gesamte Liste muss durchsucht werden. quick fit für verschiedene Größen eigene Listen freier Bereiche Buddy-lists Allokation von Speicher in Blöcken mit Kapazitäten von 2 n Speicher-Einheiten für n = min, min + 1,..., max falls Speicher-Anforderung nicht bedient werden kann: Zusammenschieben und Verschmelzen der freien Bereiche = Kompaktierung (wie Festplatten-Defragmentierung)

Abschnitt 7: Speicher-Hierarchie Belegungstrategien 170 freie Speicherbereiche FirstFit Der erste, ausreichend große Speicherbereich, der frei ist, wird belegt. Dies führt meist zu einem Restspeicherbereich, der unbelegt bleibt. Speicheranforderung Betriebssysteme 9 KB 7 KB 12 KB 7 KB 4 KB 11 KB 22 KB 12 KB 2 7 KB 4 KB 9 KB 12 KB 10 KB 12 KB KB Direkte Speicherbelegung Belegung Belegungstrategien 17.05.05 NextFit Dr. Jörg Gruner 37 Die FirstFit-Strategie führt dazu, daß in den ersten Speicherbereichen nur Reststücke (Verschnitt) verbleiben, die immer wieder durchsucht werden. Um dies zu vermeiden geht man bei der NextFit-Strategie analog der FirstFit-Strategie vor, setzt aber bei dem wiederholten Durchlauf die Suche an der Stelle fort, an der bei dem vorangegangen Durchlauf die Suche beendet wurde. Speicheranforderung freie Speicherbereiche Belegung 9 KB 7 KB 12 KB 7 KB 4 KB 11 KB 22 KB 12 KB 7 KB 4 KB 9 KB 2 KB 7 KB 15 KB 12 KB 17.05.05 Dr. Jörg Gruner 38

Abschnitt Belegungstrategien 7: Speicher-Hierarchie 171 BestFit Speicheranforderung freie Speicherbereiche Die gesamte Liste bzw. Tabelle wird durchsucht, bis man einen Speicherbereich findet, der gerade ausreicht, um die Speicheranforderung zu befriedigen und den Verschnitt minimiert. Betriebssysteme 9 KB 7 KB 12 KB Direkte Speicherbelegung 7 KB 4 KB 11 KB 22 KB 12 KB 2 Belegung 7 KB 4 KB 9 KB 22 KB 12 KB Belegungstrategien KB 17.05.05 WorstFit Dr. Jörg Gruner 39 Sucht den größten vorhandenen, freien Speicherbereich mit dem Ziel den Verschnitt zu maximieren» um bei weiteren Speicheranforderungen ausreichend freien Speicher zur Verfügung zu haben oder» diesen Verschnitt als neuen freien Speicherbereich zur Verfügung zu stellen. 9 KB 7 KB 12 KB Speicheranforderung freie Speicherbereiche Belegung 7 KB 4 KB 11 KB 22 KB 12 KB 7 KB 4 KB 11 KB 7 KB 15 KB 12 KB 9 KB 24 KB 17.05.05 Dr. Jörg Gruner 40 15 KB

Belegungstrategien Abschnitt 7: Speicher-Hierarchie 172 QuickFit Für jede Sorte von Belegungen wird eine separate Liste unterhalten. Separate Listen ermöglichen eine schnellere Suche nach passenden, freien Speicherbereichen. Beispiel» Werden durch das Nachrichtensystem des Betriebssystems regelmäßig Nachrichten der Länge 1 KB versendet, so ist es sinnvoll eine Liste für 1 KB Belegungen zu führen und alle Speicheranforderung Betriebssysteme schnell und ohne Verschnitt zu befriedigen. Direkte Speicherbelegung Belegungstrategien 05 QuickFit Dr. Jörg Gruner 41 Speicheranforderung 1 1 1 1 4 1 1 1 7 4 1 1 1 1...... 11 8 10 7 9 6 8 5 7 4 6 3 5 2 4 1 3 2 sonstige freie 1 Speicherbereiche 1 KB 17.05.05 Speicherbereiche Dr. Jörg Gruner 42...

Abschnitt 7: Speicher-Hierarchie 173 Buddy-Systeme Erweiterung der QuickFit-Strategie Buddy-Systeme sehen für jede gängige Speicherbelegungsgröße Betriebssysteme eine Liste vor. Gängige Speicherbelegungsgrößen sind z.b. Zweierpotenzen (2 0, 2 1, 2 2, 2 3,... Byte). Direkte Speicherbelegung Speicher wird nur in gängigen Speicherbelegungsgrößen vergeben. Belegungstrategien Beispiel: Speicheranforderung von 280 Byte vergebene Buddy-Systeme Speicherbelegungsgröße 512 Byte = 2 9 Byte 2 11 Byte 2 11 Byte 2 11 Byte 2 12 Byte 2 11 Byte 2 10 Byte 2 10 Byte 2 10 Byte 2 9 Byte 2 9 Byte 4 KB 2 * 2 KB = 4 KB 2 * 1 KB + 2 KB = 4 KB 2 * 512 B + 1 KB + 2 KB = 4 KB 17.05.05 Dr. Jörg Gruner 46

Abschnitt 7: Speicher-Hierarchie 174 Ist kein freier Speicherbereich der Größe 2 k vorhanden, wird ein freier Speicherbereich 2 k+n (n = 1, 2,...) gegebenenfalls wiederholend in zwei Speicherbereiche 2 k+n m (m = 1, 2,...) zerlegt (halbiert), bis die Speicherbelegungsgröße 2 k zur Verfügung steht. Ein freier Speicherbereich der Größe 2 k liegt vor, wenn m = n gilt, d.h. wenn n Speicherbereichshalbierungen bzw. -zerlegungen durchgeführt wurden. Die Anfangsadressen der Speicherbereiche einer Halbierung (die Partner bzw. Buddies) sind identisch bis auf das k.-bit in ihrer Adresse. Das k.-bit der Anfangsadressen von Partnern ist invertiert. Beispielsweise sind...abc0xyz... und...abc1xyz... die Anfangsadressen von Partnern. Die Invertierung des k.-bits der Anfangsadresse ermöglicht, in einem Schritt zu prüfen, ob ein frei gewordener Speicherbereich der Größe 2 k einen freien Partner in der Belegungstabelle besitzt.

Abschnitt 7: Speicher-Hierarchie 175 Dies ermöglicht die schnelle Verschmelzung der beiden Partner zu einem Speicherbereich der Größe 2 k+1. Sowohl das Suchen eines freien Speicherbereiches (gegebenenfalls mit Halbierungen) als auch das Verschmelzen zu größeren Speicherbereichen läßt sich rekursiv über mehrere Partner-Ebenen (Zweierpotenzen) durchführen. Buddy-Systeme Bewertung Bei Buddy-Systemen, welche auf der Basis von Zweierpotenzen Speicher zur Verfügung stellen, beträgt der Verschnitt im 1 statistischen Mittel 25% bzw. 4 des zur Verfügung gestellten Speicherbereiches. Bei einer Speicheranforderung von N Byte, wird nämlich ein Speicherbereich von 2 k Byte mit 2 k 1 < N 2 k vergeben. Angenommen P (N <= 2 k 1 + 2 k 2 ) = P (N > 2 k 1 + 2 k 2 ) = 1 2 dann gilt im statistischen Mittel N = 2 k 1 + 2 k 2 = 2 k 2 k 2 = 2 k 1 4 2k = 1 4 (4 2k 2 k ) = 3 4 2k

Abschnitt 7: Speicher-Hierarchie 176 3 d.h. 4 des zur Verfügung gestellten Speicherbereiches von 2k Byte werden im statistischen Mittel verwendet. Damit wird 1 4 des zur Verfügung gestellten Speicherbereiches nicht verwendet. Dies ist der Verschnitt. Dadurch charakterisiert sich das Buddy-System auf Basis von Zweierpotenzen als eine Belegungstrategie, die zwar schnell aber bei der Hauptspeicherverwaltung nicht effizient ist. Die Ursache für die schlechte Effizienz dieses Buddy-Systems ist die Verwendung großer Partitionen durch die Speicherplatzverdopplung. Korrigiert man das Verfahren der Speicherplatzverdopplung, so kann man den Nutzungsgrad des Hauptspeichers verbessern. Die Hauptspeicherverwaltung wird dann allerdings komplexer.

Abschnitt 7: Speicher-Hierarchie 177 paged segments paged segments = Kombination von paging und segmentation Intel 80x86 segments, paged segments... AT&T,DG,IBM/370,VAX,MC68030,80x86 2-level virtual address = segmentindex pageindex offset physical address = PT[ST[root+segmentindex].physpage +pageindex].page+offset + : sharing, non-contiguous PT, growth : große contiguous ST in main memory, dynamic growth schwierig MC68030 4-level: segment, outer, middle, inner page table + : gut für über den ganzen, großen virtuellen Speicher verteilte Daten, kleine PTs : max 4 memory references, PTs mit hoher interner Fragmentierung IBM RS6000 inverted page table (linked list) + : kleine inverted PT in main memory : Anzahl memory accesses für address translation nicht const.

Abschnitt 7: Speicher-Hierarchie 178 Belegungen des physikalischen Speichers ermitteln unvermeidliche Überschneidungen mit der Lehrveranstaltung EBS! Z.B. Gegeben Mini-Speicher, organisiert z.b. per paged segments 20 Bit virtuelle Byte-Adressen (s.u.), Seiten à 256B physikalischer Speicher mit 64KB Kapazität = 256 pages Zugriff auf segment table: (natürlich) fully-associative Segment-Länge in Anzahl Seiten Segment-Anfänge fallen mit Seiten-Anfängen zusammen. Zugriff auf page table: (natürlich) direct-mapped Adressen hexadezimal address format seg# (4 bit) page#(8bit) offset (8bit) Ermittele die zu virtuellen Adressen gehörenden physikalischen Adressen bei gegebener segment table, ST, und gegebener page table, PT.

Abschnitt 7: Speicher-Hierarchie 179 ST: seg# base len 0x1 0x0A00 0x03 0x2 0x0100 0x01 0x3 0xF800 0x02 0x7 0x0200 0x05 seg#,segoffset } {{ },pageoffset frame#, pageoffset PT: page# frame# 0x01 0x03 0x02 0x25 0x03 0xAB 0x04 0xBA 0x05 0x11 0x06 0x17 0x0A 0x02 0x0B 0x32 0x0C 0x70 0xF8 0x18 0xF9 0xE8 segmentation violation? konsistente PT? Speicher-Ausbau? maximale Segment-Größe? maximale Anzahl Segmente? Segment-Anfang = Seiten-Anfang: notwendig? sinnvoll?

Abschnitt 7: Speicher-Hierarchie 180 TLB Beschleunigen der Adreß-Umsetzung TLB = translation lookaside buffer = address translation cache indexmemory!translation lookaside buffer, TLB

Abschnitt 7: Speicher-Hierarchie 181 Virtual page number Valid Tag TLB Physical page address 1 1 1 1 0 1 Physical memory Page table Physical page Valid or disk address 1 1 1 1 0 1 1 0 1 1 0 1 Disk storage

Abschnitt 7: Speicher-Hierarchie 182 TLB & cache (hier z.b. DECstation mit MIPS R2000) Virtual address 31 30 29 15 14 13 12 11 10 9 8 3 2 1 0 20 Virtual page number Page offset 12 Valid Dirty Tag Physical page number TLB TLB hit 20 Physical page number Page offset Physical address Physical address tag Cache index 16 14 2 Byte offset Valid Tag Data Cache 32 Cache hit Data

Abschnitt 7: Speicher-Hierarchie 183 Zusammenspiel TLB & cache (hier z.b. DECstation mit MIPS R2000) Virtual address TLB access TLB miss exception No TLB hit? Yes Physical address No Write? Yes Cache miss stall No Try to read data from cache Cache hit? Yes No Write protection exception Write access bit on? Yes Write data into cache, update the tag, and put the data and the address into the write buffer Deliver data to the CPU

Abschnitt 7: Speicher-Hierarchie 184 designing the translation lookaside buffer (TLB) feature typical size 32 4K entries block size 1 2 page table entries à 4 8B each hit time 0.5 1 clock cycle miss penalty 10 30 clock cycles miss rate 0.01% 1% TLB miss und page fault sind zu unterscheiden! entweder kleine, voll-assoziative TLBs oder große TLBs, direct mapped oder mit geringer Assoziativität Reduktion der TLB miss penalty ohne page fault per simpler Verdrängungsstrategie virtually indexed/tagged caches verwenden virtuelle Adressen! physically indexed/tagged caches verwenden physikalische Adressen!

Abschnitt 7: Speicher-Hierarchie 185 virtuelle cache Adressierung CPU cache MMU + virtuelle Adresse gleichzeitig an cache und MMU konkurrierende DMA-Zugriffe mit physikalischen Adressen werden durch Bus-snooping nicht erkannt: non-cachable oder cache-flush/cache-clear vor DMA-Zugriffen Tasks mit nicht disjunkten virtuellen aber disjunkten physikalischen Adress-Räumen bei Task-Wechsel cache-flush/cache-clear Tasks mit shared regions und daher mit disjunkten virtuellen aber nicht disjunkten physikalischen Adress-Räumen: non-cachable oder spezielle cache-auslegung physikalische cache Adressierung CPU MMU cache erst virtuelle Adresse an MMU dann physikalische Adresse an cache! aber wenn cache-index von der Adress-Umsetzung nicht betroffen, kann cache line schon selektiert werden. + Probleme bei Task-Wechsel und address aliasing treten hier nicht auf.

Abschnitt 7: Speicher-Hierarchie 186 Mischformen von virtueller und physikalischer cache-adressierung = virtuell/physikalische cache-adressierung (Index enthält bits der virtual page number, tag enthält physical page number), z.b. hypersparc Z.B. DECstation 3100: nur 4 Kombinationen von mindestens einem miss bei Zugriff auf TLB, (physically indexed/tagged) cache und page table möglich: page cache TLB table scenario miss hit hit TLB hit, page table irrelevant, cache miss hit miss hit TLB miss, page table hit, cache hit miss miss hit TLB miss, page table hit, cache miss miss miss miss TLB miss, page fault, on retry cache must miss * hit miss translation ok contradicts page not in memory hit miss miss cache hit contradicts page not in memory

Abschnitt 7: Speicher-Hierarchie 187 Z.B. memory hierarchies PentiumPro vs PowerPC604 feature Pentium Pro PowerPC 604 virtual addresses 32 bit 52 bit physical addresses 32 bit page size 4KB, 4MB 4KB, 256MB TLB split I-TLB und D-TLB beide 4-ass. beide 2-ass. pseudo LRU LRU 32 I-TLB lines 128 I-TLB lines 64 D-TLB lines 128 D-TLB lines hw handles TLB misses

Abschnitt 7: Speicher-Hierarchie 188 Speicherschutz-Maßnahmen Vorbedingungen für protection mindestens zwei Modi: user/operating system (kernel, supervisor) mode nur im system mode kann das Betriebssystem mit speziellen Instruktionen page table register, TLB usw. schreiben kontrollierter, begrenzter Wechsel von user mode in system mode etwa per system call (exception) Z.B. allgemeine Schutzverletzung, segmentation violation, protection violation o.ä.

Abschnitt 7: Speicher-Hierarchie 189 80x86-Unterstützung der Speicher-Anbindung Intel 80x86/Pentium Memory Management unsegmented, unpaged memory: etwa für high performance µ-controllers... unsegmented, paged memory: e.g. Berkeley UNIX segmented, unpaged memory: high granularity protection, segment in memory ST in memory, also absehbare Zugriffszeiten segmented, paged memory: e.g. UNIX System V s.a. www.memorymanagement.org/articles/begin.html, 2001

Abschnitt 7: Speicher-Hierarchie 190 8086 80286 80386 80486 Pentium Datenbus/bits 16 16 32 32 64 Adreßbus/bits 20 24 32 32 32 Verarbeitung/bits 16 16 32 32 32 superskalar - - - - data cache - - - unified 8KB instruction cache - - - 8KB cache 8KB instruction queue 6B 6B 16B 32B 2 32B # Segemente 4 4 6 6 6 segment base 20bit 20/24bit 20/32bit 20/32bit 20/32bit optional paging - - modi 1 4 4 4 4 multitasking -

Abschnitt 7: Speicher-Hierarchie 191 logical address selector CS... GS 32 bit offset segment table mit 8B segment descriptors 0. u.a. 20bit Länge, 32bit base address. + linear address 10bit dir no 10bit page no 12bit offset 8K-1 page directory table 0 +. page table 0. 1023 +.. 1023 physical address 20bit physical page no 12bit offset

Abschnitt 7: Speicher-Hierarchie 192 virtual addresses = logical addresses unsegmented memory: 2 32 B = 4GB = 16bit segment 32bit offset segmented memory: (2bit segment für protection) 2 14+32 B = 64TB physical address space: 2 32 B = 4GB global virtual memory: 4K segments 4GB segments local virtual memory: 4K segments 4GB segments protection of segments: privilege level (geschützt 0 3 ungeschützt) plus access attributes (data: r/w; code: r/e) Programm mit PL p darf nur auf Daten mit PL d zugreifen, falls p d PL0 für MM, protection, access control PL1 für OS-Rest PL2 für application security (DBMS) PL3 für application

Abschnitt 7: Speicher-Hierarchie 193 virtual address = 16bit segment selector 32bit offset segment selector = 13bit Index TI RPL TI = 1bit Table Indicator = local/global RPL = 2bit requested privilege level segmentation = address translation: virtual address linear address = 10bit dirindex 10bit pagindex 12bit offset paging = address translation: linear address physical address 2-stufiges table lookup erzeugt physical address: dirindex indiziert das page (table) directory mit max. 1K Einträgen und damit eine der max. 1K page tables mit max. 1K Einträgen für 4K pages. pagindex indiziert in dieser page table den Eintrag eine Seite. physical address = (PT-No.[PTD[dirindex]]) [pagindex]+offset

Abschnitt 7: Speicher-Hierarchie 194 segment table, page table directory und page table 32bit entries enthalten Informationen zu Zielgrößen, protection, Verfügbarkeit, write strategy, dirty bit etc. Pentium verfügt über einen TLB mit 32 page table entries. Im Unterschied zu 80386 und 80486 unterstützt der Pentium zwei Seitengrößen: if page size extension (PSE) ==1 then size=4kb or size=4mb Bei 4MB-Seiten ergibt sich entsprechend nur ein table lookup!

Abschnitt 7: Speicher-Hierarchie 195 performance gap: processor vs memory system 100 Improvement factor 10 1 1980 1982 1984 1986 1988 1990 1992 1994 1996 Year CPU (fast) CPU (slow) DRAM

Abschnitt 7: Speicher-Hierarchie 196 zwei Arten, die Speicher-Bandbreite zu erhöhen CPU CPU CPU Cache Multiplexor Cache Cache Bus Bus Bus Memory Memory bank 0 Memory bank 1 Memory bank 2 Memory bank 3 Memory b. Wide memory organization c. Interleaved memory organization a. One-word-wide memory organization

197 8. Parallelisierung von Algorithmen Entwicklung paralleler Algorithmen Entwicklung paralleler Rechner-Architekturen am Beispiel der Lösung von linearen Gleichungssystemen (LGS), z.b. DGl-Systeme, partielle DGl-Systeme, FEM... Z.B. s.a. Matrix-Multiplikation Das LGS A x = b bestehe aus n Gleichungen in n Unbekannten; die Koeffizienten-Matrix A ist also quadratisch.

Abschnitt 8: Parallelisierung von Algorithmen 198 for ( i =1; i<=n ; i ++) // eliminiere Unbekannte x i, 1 i < n for ( j=i +1; j<=n ; j++) // in der j-ten Gleichung, j = i+1,..., n { const double p i v o t = A[ j ] [ i ] /A[ i ] [ i ] ; A[ j ] [ i ] = 0. 0 ; // x i in j-ter Gleichung eliminieren // restliche Koeffizienten der j-ten Gleichung aktualisieren for ( k=i +1; k<=n ; k++) A[ j ] [ k ] = p i v o t A[ i ] [ k ] ; b [ j ] = p i v o t b [ i ] ; // Koeffizienten der r.s. aktualisieren } // Das Gleichungssystem hat jetzt Dreiecksgestalt: die Unbekannten x i // lassen sich aus n j=i Aij xj = bi von unten nach oben bestimmen. for ( i=n ; i >0; i ) // bestimme x i für i = n, n 1,..., 1 { double tmp = b [ i ] ; // berechne b i n j=i+1 Aij xj in tmp for ( j=n ; j>i ; j ) tmp = A[ i ] [ j ] x [ j ] ; } x [ i ] = tmp/a[ i ] [ i ] ;

Abschnitt 8: Parallelisierung von Algorithmen 199 Mehrere Fragen sind zu beantworten: Welche Operationen lassen sich unter Berücksichtigung von Daten-Abhängigkeiten überhaupt parallelisieren? Wieviele Prozessoren oder processing elements (PE) sollen zur Verfügung stehen? Wie kommen die PEs an die von ihnen benötigten Daten und wie werden soweit notwendig Zwischenergebnisse ausgetauscht? Bewertung der Implementierungen anhand von Kenngrößen wie Beschleunigungsfaktor aufgrund von Parallelisierung Auslastung der PEs Kommunikationsaufwand in Abhängigkeit von der angenommenen Vernetzung

Abschnitt 8: Parallelisierung von Algorithmen 200 8.1. Parallelisierung des Gauß schen Algorithmus Annahmen, Einschränkungen, Disclaimer: A sei quadratisch (eben kein least squares problem)... A x = b sei eindeutig lösbar, det(a) 0... Alle pivot-elemente sind von 0 verschieden... Keine Berücksichtigung der Numerik, also ohne Pivotisierung, s.a. www.weblearn.hs-bremen.de/risse/mai/docs/numerik.pdf www.weblearn.hs-bremen.de/risse/mai/docs/heath.pdf... Es stehen p = n + 1 PEs zur Verfügung... Der Algorithmus selbst besteht aus zwei Teilen: 1. Eliminieren, Triangulierung (Überführen in Dreiecksgestalt) 2. Auflösen: von unten nach oben (backward substitution)

Abschnitt 8: Parallelisierung von Algorithmen 201 Gauß scher Algorithmus Eliminieren 1. eliminiere x 1 ist in der zweiten, dritten,..., n-ten Gleichung, also in den n 1 Gleichungen n A jk x k = b j für j = 2,..., n k=1 Aktualisiere n Koeffizienten A jk für k = 1,..., n und b j der rechten Seite. Wegen A jk := A jk p A ik und b j := b j p b i mit pivot = A ji und i = 1 A ii sind diese Operationen Daten-unabhängig und können von den n + 1 PEs parallel ausgeführt werden (A j1 := 0 wird aktiv gesetzt, alle PEs sind busy). Bem. Die Koeffizienten A jk und b j werden ständig verändert.

Abschnitt 8: Parallelisierung von Algorithmen 202 2. eliminiere x 2 in der dritten bis n-ten Gleichung. n PEs aktualisieren n Koeffizienten in n 2 Gleichungen. und allgemein für i = 1,..., n 1 eliminiere x i i. eliminiere x i in der i + 1-ten bis n-ten Gleichung. n i + 2 der n + 1 PEs aktualisieren n i + 2 Koeffizienten in (n i) Gleichungen. SIMD, MAC: saxpy/daxpy, Vektorisierung! In einer Zeiteinheit (ZE) aktualisiere ein PE gerade einen Koeffizienten. Überführung der Koeffizienten-Matrix in Dreiecksgestalt und Aktualisierung der rechten Seite durch n + 1 PEs in insgesamt n 1 (n 1) + (n 2) +... + 1 = i = i=1 (n 1)n 2 ZE

Abschnitt 8: Parallelisierung von Algorithmen 203 Ein Mono-Prozessor-System braucht dafür (n + 1)(n 1) + n(n 2) + (n 1)(n 3) +... + 3 1 = 2(n 1) + (n 1) 2 + 2(n 2) + (n 2) 2 n 1 n 1 +2(n 3) + (n 3) 2 +... + 2 + 1 = 2 i + = n(n 1) + 1 6 (n 1)n(2 n 1) = 1 6 (n 1) n (2 n + 5) ZE Der Beschleunigungsfaktor β aufgrund Parallelisierung für das Eliminieren ist (für n ) 1 6 (n 1) n (2 n + 5) β = 1 2 n (n 1) = 2 n + 5 ( = 2 3 3 n 1 + 5 ) 2 2n 3 n i=1 i=1 i 2

Abschnitt 8: Parallelisierung von Algorithmen 204 Insgesamt sind 1 6 (n 1) n (2 n + 5) PEs von insgesamt (PE-Anzahl Eliminierungsschritte) = (n + 1) 1 2 (n 1)n = 1 2 (n 1) n (n + 1) PEs aktiv: die Auslastung α während des Eliminierens beträgt also α = 1 6 (n 1) n (2 n + 5) 1 2 (n 1) n (n + 1) = 1 3 2 n + 5 n + 1 2 3 für n Bem. Wenn PEs gleichzeitig lesend auf ein Datum zugreifen können, gibt es keine Zugriffskonflikte (no memory contention)! z.h. Bestimme obige Kenngrößen für eine entsprechende parallele Version der Eliminierung im Gauß schen Algorithmus durch sehr viele, etwa (n 1)(n + 1) PEs oder wenige PEs, etwa #PE (n + 1), d.h. die Anzahl der PEs ist Teiler von n + 1. z.h. Bestimme allgemein β = β(n, #PEs) und α = α(n, #PEs). z.h. Welcher Beschleunigungsfaktor, welche Auslastung ergeben sich bei Gauß-Jordan?

Abschnitt 8: Parallelisierung von Algorithmen 205 Gauß scher Algorithmus Auflösen n + 1 PEs stehen zur Verfügung, um parallel nacheinander x n, x n 1,..., x 1 zu berechnen. Sie berechnen also sukzessive x i = b n i A ij x j für i = n, n 1,..., 1 A ii A ii j=i+1 Jedes PE berechne Aij A ii x j bzw. A ii gerade in einer ZE. Jedes PE brauche für das Aufsummieren eines eigenen mit einem fremden Zwischenergebnis gerade c m ZE. n + 1 PEs erledigen die Auflösung in größenordnungsmäßig i=1 b i n 1 n 1 n + c m ld i = n + c m ld i = n + c m ld((n 1)!) ZE i=1

Abschnitt 8: Parallelisierung von Algorithmen 206 Sequentiell sind dagegen n n 1 1 + (2 + c 1 ) + (3 + 2c 1 ) +... + (n + c 1 (n 1)) = i + c 1 i i=1 i=1 = 2( 1 (n + 1) n + c1 n (n 1) ) = n 2 (n + 1 + c 1 n d) ZE erforderlich, wenn eine (lokale) Summation gerade c 1 ZE braucht. Wegen n! 2π n n e n n (Stirling) folgt ld(n!) ld 2π + (n + 1 2 ) ld n + ln(e n ) ld e n(ld n ld e). Der Beschleunigungsfaktor β aufgrund Parallelisierung ist (für n ) β n 2 = n 2 (n + 1 + c 1 n c 1 ) n + c m ld((n 1)!) 1 2 1 + c 1 + 1 c1 n 1 + c m ld( n e ) (1 + c 1 )n 2 + 2 c m ld(n/e) n (1+c 1 ) + 1 c 1 1 + c m (ld n ld e)

Abschnitt 8: Parallelisierung von Algorithmen 207 Die Auslastung α der PEs (für n ) ist etwa für c = c 1 = c m ( ) α = 1 n (n+1+c n c) 2 (n+1)(n+c ld n) = 1 2 1 + c n 1 n n+1 n+c ld n 1+c 2 Bem. Wegen n 1 i=1 O(ld n) gilt β 1 2 1 ld i = n ld n ln 2 (n 1) + g(n) für ein g(n) n (n (1+c 1)+1 c 1) 1 n (1+c 1)+1 c 1 n+c m (n ld n n 1 ln 2 ) 2 asymptotisch für n. 1+c m (ld n 1 ln 2 ) n 2 1+c 1 1+c m ld n z.h. Bestimme obige Kenngrößen einer entsprechenden parallelen Version für das Auflösen im Gauß schen Algorithmus durch (maximal?) p = (n 1)(n + 1) PEs oder für den Fall, daß n ein Vielfaches der PE-Anzahl p ist.

Abschnitt 8: Parallelisierung von Algorithmen 208 Kommunikation Unterstellt wurde: jedes PE kann auf alle Daten zugreifen: Daten liegen in einem gemeinsamen globalen Speicher ((multi port) shared global memory). memory PE 1 PE 2 PE n+1 Aufgrund dieser Annahme des unbeschränkten Zugriffs der PEs auf jedes Datum konnten obige Kenngrößen insbesondere für das Auflösen bestimmt werden.

Abschnitt 8: Parallelisierung von Algorithmen 209 Aber Machbarkeit und andere Aspekte wie Kosten und eben Geschwindigkeit Zugriffsschutz Ausfallssicherheit, Fehlertoleranz (Zuverlässigkeit, Verfügbarkeit) Erweiterbarkeit, Flexibilität, Skalierbarkeit etc. können lokale Speicher und spezielle Verbindungsstrukturen für die PEs notwendig machen. Dann fallen zusätzlich Kosten für die Inter- Prozessor-Kommunikation an. Probleme des global/shared memory Synchronisation der Speicher-Zugriffe, cache Kohärenz, z.b. MESI Verbindungsstrukturen zwischen PEs und memory: Bus, Ring, Stern, Gitter, Torus, Kreuzschienenverteiler (cross bar), hypercube... Speicher-Organisation

Abschnitt 8: Parallelisierung von Algorithmen 210 Gesetzt den günstigsten Fall, daß das k-ten PE bzw. das n + 1-te PE direkt nur auf die Koeffizienten A jk bzw. b j zugreifen kann. Dann kommt zu jedem Schritt der Eliminierung noch ein Kommunikationsoverhead: initial werden die Koeffizienten A 1k und b 1 der ersten Gleichung geladen, dann werden A 2k und b 2 der zweiten Gleichung geladen und aktualisiert, dann A 3k und b 3 usw. bis zuletzt die Koeffizienten A nk und b n der n-ten Gleichung geladen und aktualisiert werden.

Abschnitt 8: Parallelisierung von Algorithmen 211 Entweder legen die PEs die aktualisierten Koeffizienten in genügend großen lokalen Speichern ab oder sie schreiben sie zugleich wieder in den globalen Speicher zurück. Angenommen, die mit einer Aktualisierung verbundene Kommunikation koste c = c 1 = c m ZE. Dann beträgt der Kommunikationsaufwand für die parallele Eliminierung 1 2 c (n 1) n ZE und derjenige der sequentiellen Eliminierung 1 6 c (n 1) n (2n + 5) ZE Der Beschleunigungsfaktor β aufgrund Parallelisierung ist 1 6 c (n 1) n (2 n + 5) β = 1 2 c n (n 1) = 2 n + 5 ( = 2 3 3 n 1 + 5 ) 2 2n 3 n für n In diesem günstigsten Fall die Speicherzugriffsbreite kann so wie die Anzahl der PEs gesteigert werden bleibt auch die Auslastung α 2 3 unverändert.

Abschnitt 8: Parallelisierung von Algorithmen 212 Gesetzt der ungünstige Fall, daß die PEs Ketten-förmig angeordnet sind und die Koeffizienten wie etwa in Transputer-Netzen nur über genau ein Interface-Prozessor PE o durch die Kette der verarbeitenden PEs durchgereicht werden können. PE 0 PEn+1 PEn PE1 PEs seien wieder den Spalten der Koeffizienten-Matrix fest zugeordnet (PE k bzw. PE n+1 bearbeitet A jk bzw. b j ). Alle PEs bearbeiten zu einem Zeitpunkt dieselbe j-te Gleichung. Eliminiere x 1 : Es dauert c m (n + 1) ZE, bis die Koeffizienten der ersten Gleichung in die vorgesehenen PEs geladen sind. Laden und Rückschreiben der modifizierten Koeffizienten dauert c m (n + 1) ZE für jede der n 1 Gleichungen: Gesamtdauer also c m ( (n + 1) + (n 1)(n + 1) ) ZE.

Abschnitt 8: Parallelisierung von Algorithmen 213 Eliminiere x 2 : Es dauert c m (n) ZE, bis die Koeffizienten der zweiten Gleichung in die vorgesehenen PEs geladen sind. Laden und Rückschreiben der modifizierten Koeffizienten dauert c m (n + 1) ZE für jede der n 2 Gleichungen: Gesamtdauer also c m ( (n) + (n 2)(n + 1) ) ZE. allgemein also: Eliminiere x i : Es dauert c m (n + 2 i) ZE, bis die Koeffizienten der i-ten Gleichung in die vorgesehenen PEs geladen sind. Laden und Rückschreiben der modifizierten Koeffizienten dauertc m (n + 1) ZE für jede der n i Gleichungen: Gesamtdauer also c m ( (n + 2 i) + (n i)(n + 1) ) ZE. Zusammen ergibt sich ein Kommunikationsaufwand C von n 1 ( ) C = c m (n + 2 i) + (n + 1)(n i) i=1 = c m ( (n+2)(n 1) 1 2 n(n 1) + (n+1)n(n 1) (n+1) 1 2 (n 1)n) = 1 2 c m(n 1) ( 4 + 2n + n 2) = 1 2 c m(n 1)(n + 2) 2

Abschnitt 8: Parallelisierung von Algorithmen 214 Wenn der Mono-Prozessor c 1 ZE für einen Speicherzugriff braucht, gilt für die Beschleunigung β aufgrund Parallelisierung β = (1+c1) 1 6 (n 1) n (2 n+5) 1 = 2 n(n 1)+ 1 2 cm(n 1)(n+2)2 (1+c1) n (2 n+5) 1 3n+3c m(n+2) = 2 3 (1+c 1 )(2n+5) + 3cm(n+2)2 (1+c 1 )(2n+5) also asymptotisch β 2 1+c 1 3 c m für n. Bei dieser Verbindungsstruktur der PEs wird der Geschwindigkeitsgewinn durch Parallelisierung der Eliminierung in diesem (schlechten) Fall durch den Kommunikationsaufwand zunichte gemacht. z.h. Untersuche Kommunikationsaufwand bei der Parallelisierung der Auflösung für best und worst case. z.h. Berechne β und α für Verbindungsstrukturen wie Ring, Stern, Torus, cross bar, hypercube usw. Beispielsweise lassen sich PEs auf einem Chip günstig Gitter-förmig (wie z.b. Transputer) anordnen. Berechne β und α für quadratisch angeordnete ( ) n+1 2 2 PEs. z.h. Welcher overhead ergibt sich bei Gauß-Jordan?,

Abschnitt 8: Parallelisierung von Algorithmen 215 Parallelisierung des Gauß schen Algorithmus durch den Compiler Compiler können program code vektorisieren bzw. (allgemeiner) parallelisieren. entweder durch den Programmierer mit Konstrukten wie parbegin und parend und/oder automatisch durch den compiler: Grundlage ist wie im Beispiel eine Datenfluß-Analyse, die Daten-Abhängigkeiten erkennt, soweit möglich auflöst und Vektor-Operationen oder parallelen Code erzeugt. Z.B. vektorisierende FORTRAN-compiler etwa auf Convex C1, HP N-class etc. Maschinen-abhängiger code! & Amdahl Z.B. paralleles Sortieren, s.a. www.inf.fh-flensburg.de/lang/algorithmen/sortieren/

Abschnitt 8: Parallelisierung von Algorithmen 216 Z.B. Zum Addieren von 2 17 Zahlen etwa in zwei-dimensionalem array auf 128 = 2 7 PEs berechnet jedes PE die Summe von 1024 = 2 10 Zahlen. sum=0.0; for(i=0; i<1024; i++) sum+=local_array[i]; Dann sendet eine Hälfte der PEs der anderen Hälfte die eigenen Ergebnisse zum Aufaddieren, von denen wieder eine Hälfte die eigenen Teilsummen der anderen Hälfte sendet, bis auf diese Weise schließlich ein PE die Gesamt- Summe bestimmt. limit=128; half=128; repeat half=half/2; // send vs receive dividing line if (half<=pn && Pn<limit) send(pn-half,sum); if (Pn<half) sum=sum+receive(); limit=half; // upper limit of senders until (half==1) Pn ist das betrachtete der ausführenden PEs, send(p,v) sendet den Wert v über das Verbindungsnetzwerk an Prozessor p, während receive() das betreffende PE veranlaßt, einen Wert über das Netz entgegenzunehmen.

Abschnitt 8: Parallelisierung von Algorithmen 217 8.2. Effizienz/Effektivität der Parallelisierung Def. Für einen gegebenen Algorithmus definiert β(p) = T (1)/T (p) den Beschleunigungsfaktor β(p) aufgrund von Parallelisierung mit p PEs, wo T (p) Zeit für Abarbeitung des Algorithmus auf p PEs ist. E(p) = β(p)/p mißt die Effizienz eines parallelen Algorithmus. F (p) = β(p)/(p T (p)) = Beschleunigung/Kosten mißt die Effektivität von parallelen Algorithmen. Ein paralleler Algorithmus, der F (p) maximiert, heißt effektiv. Z.B. einige wenige Beispiele Problem bzw. Algorithmus β(p) Matrizenrechnungen, Diskretisierung O(p) Sortieren, tridiagonale Systeme, lineare Rekursion, O ( p/ ld(p) ) Polynomauswertung Suchen O ( ld(p) ) Horner, gewisse nichtlineare Rekursion, bestimmte O(1) Anteile der Compilation

Abschnitt 8: Parallelisierung von Algorithmen 218 Z.B. Für die Addition von 16 Zahlen a i gilt T (1) = 15 sowie p T (p) β(p) E(p) F (p)t (1) = β(p)e(p) 1 15 1.00 1.00 1.00 2 8 1.88 0.94 1.76 3 6 2.50 0.83 2.08 4 5 3.00 0.75 2.25 8 4 3.75 0.47 1.76 8.3. parallele Speicher-Zugriffe auf Matrizen Z.B. Zugriff auf Matrix A = (a ij ) in verteiltem Speicher P 1 P 2 P 3 a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 P 1 P 2 P 3 a 11 a 12 a 13 a 23 a 21 a 22 a 32 a 33 a 31 zyklisch geshiftete Zeilen Verallgemeinerungen: Schiefe-Systeme P 1 P 2 P 3 P 4 a 11 a 12 a 13 a 14 a 24 a 21 a 22 a 23 a 33 a 34 a 31 a 32 a 42 a 43 a 44 a 41

Abschnitt 8: Parallelisierung von Algorithmen 219 8.4. Baumhöhenreduktion Compiler nutzen Assoziativität, Kommutativität und Distributivität zur Reduktion der Baumhöhe h = h(a) algebraischer Ausdrücke A. Z.B. h A per A h 3 (((a + b) + c) + d) Assoziativität (a + b) + (c + d) 2 3 a + bc + d Kommutativität (a + d) + bc 2 Z.B. y 2 + y 3 = y(y + y 2 ) = y 2 (1 + y) mit DAG-Höhen 3, 3 bzw. 2 allgemeine Verfahren. Jedoch NB: möglicher Verlust numerischer Stabilität, z.b. fl ( (1 + ɛ) + ɛ ) fl ( 1 + (ɛ + ɛ) )! 8.5. Parallelisierung rekurrenter Relationen Z.B. Beispiele linearer rekurrenter Relationen Problem Algorithmus Anfangsbedingung Rekurrenz Skalarprodukt z = x k y k z := 0 z = z + x k y k Horner p = a k x k o p := a n p = a n k + x op ) Fibonacci (f k f 2 := f 1 = 1 f k = f k 1 + f k 2 Def. x = c+a x mit strikter unterer Dreiecksbandmatrix A ist lineare

Abschnitt 8: Parallelisierung von Algorithmen 220 { 0 fürk 0 rekurrente Relation mit x k = c k + k 1 j=k m a kjx j für1 < k < n. Falls x k = f(a l, A r ) mit parallel abzuarbeitenden Algorithmen A l und A r gleicher Komplexität, wende rekursives Doppeln auf A l und A r an, dann Parallelisierung bzw. Vektorisierung, falls identische Operatoren in identischer Reihenfolge in A l und A r. column sweep algorithm mit β(p) = n 2 und E(p) = n 2(n 1) > 1 2 für p = n 1 1. x 1 bekannt; parfor(i=2;i<=n;i++) berechne c (1) i rofrap und damit x 2 2.... = a i1 x 1 + c i 3. x k bekannt; parfor(i=k+1;i<=n;i++) berechne c (k) i = a ik x k + c (k 1) i rofrap und damit x k+1 4.... 5. x n 1 bekannt; berechne x n = a i,n 1 x n 1 + c (n 2) i Verallgemeinerungen für nichtlineare rekurrente Relationen!

Abschnitt 8: Parallelisierung von Algorithmen 221 8.6. Modellierung durch DAGs Gleichartige PEs bearbeiten eine Menge von #tasks voneinander abhängigen (sub-) tasks. Abhängigkeiten, Ausführungszeiten und Kommunikationszeiten (communication overhead) lassen sich durch gerichtete, azyklische Graphen mit Knoten- und Kanten-Labeln beschreiben. Jedes PE bearbeitet zu einer Zeit maximal ein (sub-) task. Ein PE kann eine subtask st erst dann zu bearbeiten beginnen, wenn alle Zwischenergebnisse der tasks vorliegen, von denen st abhängig ist. Kommunikation je nach Modell-Vorgaben (gleichzeitiges und mehrfaches Senden und Empfangen?) Kommunikation auf ein und demselben PE braucht 0ZE! Für gegebene Zuordnung von PE zu (sub-) task PAT = (p i ) i=1,...,#tasks mit p i {0, 1,..., #P Es 1} eine der #P Es vielen PEs minimiere die Zeit t DAG (P AT ), die die PEs bei gegebener Zuordnung PAT brauchen, um die gesamte task zu bearbeiten.

Abschnitt 8: Parallelisierung von Algorithmen 222 a 5 b 3 1 c 3 d 2 e 1 2 3 1 3 a(α) b(α) b(α) to d(β) c(α) d(β) d(β) to e(α) e(α) 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 für beispielsweise P AT = αααβα. Berechne also nacheinander t DAG = min t DAG(P AT ) P AT {P AT s} für geeignete Mengen {P AT s} und ggfls. t = min DAG {DAGs} t DAG Z.B. Ein algebraischer Ausdruck expr definiert verschiedene Auswertungsbäume, also zugehörige DAGs. Zu expr bestimme t, wo über alle zugehörigen DAGs und alle PATs mit vorgegebener Anzahlen von PEs, die jeweils genau die in expr vorkommenden algebraischen Operationen ausführen können, zu minimieren ist. z.h. Erzeuge Beispiele obiger Art und bestimme jeweils t.

Abschnitt 8: Parallelisierung von Algorithmen 223 8.7. Programmierung per fork, d.h. duplizieren von Prozessen, identifiziert durch id z.b. zwei Prozesse/oren addieren vier Feldelemente x[1],..., x[4] Annahme: shared memory! Programmer: static scheduling shared x, childs_sum, parents_sum; unshared id, i, nprocs=2, sum=0; id = fork(); // child gets 0, parent gets child s pid if (id==0) i = 1; else i = 2; while (i<=4) { // child adds odd, parent even elements sum += x[i]; i += nprocs; } if (id==0) {childs_sum = sum; exit()} else parents_sum = sum; return childs_sum+parents_sum; // race condition hazard = race condition, aufzulösen etwa durch Synchronisation per init_barrier(a,nprocs) if (id==0) childs_sum = sum; else parents_sum = sum; barrier(a); if (id==0) exit(); return childs_sum+parents_sum;

Abschnitt 8: Parallelisierung von Algorithmen 224 Aufwand für x[i]=g(i) sei unterschiedlich oder nicht abschätzbar. Programmer: dynamic scheduling per mutual exclusion, MUTEX shared si, childs_sum, parents_sum, lck; // lock unshared id, i, nprocs=2, sum=0; si = 1; id = fork(); // child gets 0, parent gets child s pid for(;;) { mutex_lock(lck); // atomically test & set a memory cell i = si; si +=1; // critical region mutex_unlock(lck); if (i>4) break; sum += g(i); } if (id==0) childs_sum = sum; else parents_sum = sum; barrier(a); if (id==0) exit(); return childs_sum+parents_sum; if locked: busy wait oder sleep wait z.h. Vorteile/Nachteile?

Abschnitt 8: Parallelisierung von Algorithmen 225 Duplizieren von Prozessen und deren Verwaltung ist teuer! Verwende stattdessen threads = light weight processes mit shared code, aber eigene lokale Daten, PC, SP, Stack, vgl. hyperthreading global n=10; x[n], sum, nthreads=3, si=1, lcka, lckb; %... for(i=0;i<nthreads;i++) thread_create_run(&workerid[i],work()); for(i=0;i<nthreads;i++) thread_join(&workerid[i]); // barrier return sum; function work() local i, mysum=0, myid=thread_self(); for(;;) { mutex_lock(lcka); i = si; si += 1; mutex_unlock(lcka); if (i>n) break; mysum += x[i]; } mutex_lock(lckb); sum += mysum; mutex_unlock(lckb); // implicit thread_exit()

Abschnitt 8: Parallelisierung von Algorithmen 226 a a 2 S S * a 4 a 3 S * S * a 8 a 7 a 6 a 5 Russian Peasant Algorithm (im Bild n = 8 im Programm n = 32) berechne a 1, a 2,..., a n mit einem thread/multiplikation global x, y[1..32]; // compute y[i] = x^i %... local n=1, i, k; y[1] = x; for(k=1;k<=5;k++) { // 5 = ld(32) for(i=1;i<=n;i++) thread_create(mult(),n); // pass n to mult // threads generated with thread id = 1,2,...,n while (thread_join()==0); // barrier n *= 2; } function mult(int n) local i=thread_self(); y[i+n] = y[i]*y[n];

227 9. Vektor-Prozessor-Systeme (SIMD) z.b. Matrix-Multiplikation C = AB mit c ij = n k=1 a ikb kj skalar processing for(i=1; i<=n; i++) for(j=1; j<=n; j++) { c[i][j]=0; for(k=1; k<=n; k++) c[i][j]+=a[i][k]*b[k][j]; }

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 228 9.1. vector processing (per pipelining oder n ALUs) for(i=1; i<=n; i++) { parfor(j=1; j<=n; j++) c[i][j]=0; for(k=1; k<=n; k++) parfor(j=1; j<=n; j++) c[i][j]+=a[i][k]*b[k][j]; } zeilenweise parallel

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 229 9.2. parallel processing (per n parallel processes/processors) for(j=1; j<=n; j++) fork (j) { for(i=1; i<=n; i++) { c[i][j]=0; for(k=1; k<=n; k++) c[i][j]+=a[i][k]*b[k][j]; } } join(n); jeder Prozess berechnet eine Spalte: zeilenweise parallel

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 230 9.3. pipelining within/across operations z.b. pipelined fadd = (compare exponents, shift significand, add significands, normalize) pipelining across operations, chaining, d.h. unmittelbare Weitergabe von Zwischen-Ergebnissen an functional units ohne Speicherung der Zwischen-Ergebnisse in (Vektor-) Registern z.b. in CRAYs etwa bei a x + y (saxpy, daxpy) V1=X V2=Y V3=a*V1 V4=V2+V3 C=V4 ; can ; be ; chained

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 231 9.4. Beispiel: IBM 3090 Vector Facility Vektor-Instruktionen vermindern den Schleifen-Overhead (vgl. loop unrolling/unfolding) Vektor-Operationen pipelined oder parallel Zwischenergebnisse in Vektor-Registern vermeiden Speicher-Zugriffe Skalar-Prozessor mit Skalar-Registern (Sr) wird um Vektor-Prozessor mit Vektor-Registern (Vr) ergänzt! (sw-kompatibel) Befehlssatz ist um Vektor-Instruktionen ergänzt! (unterbrechbar, vector interruption index) Vector Facility = Add on, integriert in die /370-Architektur

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 232 reconfigurable vector registers 1 Speicher-Zugriff pro cycle, 2 read und 1 write Register pro cycle, 1 ALU-Operation pro cycle. 16 Vektor-Register mit 128 32bit-Elementen oder 8 Vektor-Register mit 128 64bit-Elementen (single/double/integer), pipelined vector ALU Vektor-Register für 32bit oder 64bit integer oder floating point! architecture specifies vector registers with 8 512 elements! relative start-up time der Vektor-ALU-pipeline vs save/restore Vektor-Register on process switch etc. plus vector mask register, vector status register (u.a. length), vector activity count (register) (timer)...

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 233 Compound Instructions z.b. Multiply-and-Accumulate (=add) mit drei Quell-Operanden! etwa Vr=Vr*V[Mem]+Vr accumulate instructions berechnen partielle Summen von Vektoren, wegen Latenz interleaved, d.h. in speziellem Vektor-Register partial sum 0 = v 0 + v 4 +... + v 124 partial sum 1 = v 1 + v 5 +... + v 125 partial sum 2 = v 2 + v 6 +... + v 126 partial sum 3 = v 3 + v 7 +... + v 127 target vector = partial sum i in speziellem Vektor- Register P Stallings: non critical!

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 234 z.b. komplexe Multiplikation z.b. a, b, c C n mit c j = a j b j C mit C z = (Rz, Iz) = (zr,zi) for(j=1; j<=n; j++) { cr[j]=ar[j]*br[j]-ai[j]*bi[j]; // real part ci[j]=ar[j]*bi[j]+ai[j]*br[j]; // imaginary part } memory to memory Operation Cycles t1[j]=ar[j]*br[j] 3 t2[j]=ai[j]*bi[j] 3 cr[j]=t1[j]-t2[j] 3 t3[j]=ar[j]*bi[j] 3 t4[j]=ai[j]*br[j] 3 ci[j]=t3[j]+t4[j] 3 total 18 compound instructions Operation Cycles v1[j]=ar[j] 1 v2[j]=v1[j]*br[j] 1 v3[j]=ai[j] 1 v2[j]=v2[j]-v3[j]*bi[j] 1 cr[j]=v2[j] 1 v4[j]=v1[j]*bi[j] 1 v4[j]=v4[j]+v3[j]*br[j] 1 ci[j]=v4[j] 1 total 8

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 235 register to register Operation Cycles v1[j]=ar[j] 1 v2[j]=br[j] 1 v3[j]=v1[j]*v2[j] 1 v4[j]=ai[j] 1 v5[j]=bi[j] 1 v6[j]=v4[j]*v5[j] 1 v7[j]=v3[j]-v6[j] 1 cr[j]=v7[j] 1 v8[j]=v1[j]*v5[j] 1 v9[j]=v4[j]*v2[j] 1 v0[j]=v8[j]+v9[j] 1 ci[j]=v0[j] 1 total 12 memory to register Operation Cycles v1[j]=ar[j] 1 v2[j]=v1[j]*br[j] 1 v4[j]=v3[j]*bi[j] 1 v5[j]=v2[j]-v4[j] 1 cr[j]=v5[j] 1 v6[j]=v1[j]*bi[j] 1 v7[j]=v3[j]*br[j] 1 v8[j]=v6[j]+v7[j] 1 ci[j]=v8[j] 1 total 10

Abschnitt 9: Vektor-Prozessor-Systeme (SIMD) 236 IBM 3090 Vector Facility Vector Instructions Operation arg type Vr=OP(operands), Vmr=comp(operands) resp. add sdi Vr+Vr Vr+Mem Sr+Vr Sr+Mem sub sdi Vr Vr Vr Mem Sr Vr Sr Mem mult sdi Vr*Vr Vr*Mem Sr*Vr Sr*Mem div sd Vr/Vr Vr/Mem Sr/Vr Sr/Mem comp sdi Vr op Vr Vr op Mem Sr op Vr Sr op Mem mul & add sd Vr+Vr*Mem Vr+Sr*Vr Vr+Sr*Mem mul & sub sd Vr Vr*Mem Vr Sr*Vr Vr Sr*Mem mul & acc sd P+op Vr P+op Mem complement sdi Vr pos/neg abs sdi ± Vr max/min sd Sr op Vr sll/srl lgcl op Vr and/or/xor lgcl Vr op Vr Vr op Mem Sr op Vr Sr op Mem P = partial sum of vector: sum j = i mod 4=j v i, j = 0, 1, 2, 3

237 10. parallele Architekturen Ziel ist eine skalierbare, hochverfügbare, hochzuverlässige oder etwa fehlertolerante Architektur, auf der eine Anwendung, einige wenige oder beliebige Anwendungen mit möglichst maximalem, d.h. mit linearem speedup abgearbeitet werden. Mehrere PEs bearbeiten eine gemeinsame Anwendung PEs greifen auf gemeinsame Daten zu! single address space/shared (global) memory synchronization by e.g. memory locks uniform memory access, UMA oder symmetric multiprocessors, SMP non uniform memory access, NUMA message passing für PEs mit lokalem/privatem Speicher, z.b. cluster Verbindung der PEs über (einen) Bus oder über ein Netzwerk!

Abschnitt 10: parallele Architekturen 238 10.1. Klassifizierung anhand von Beispielen Symmetric / Shared-Memory Multiprocessors (SMP), Uniform Memory Access (UMA) Digital AlphaServer 8400 Hewlett Packard 9000 IBM servers (PC, AS/400, RS/6000, S/390) Sun Microsystems Ultra Enterprise 6000 Sun Microsystems Ultra Enterprise 10000 Non-Uniform Memory Access (NUMA) Multiprocessors HP/Convex Exemplar Sequent NUMA-Q 2000 Silicon Graphics Origin2000

Abschnitt 10: parallele Architekturen 239 Clusters Hewlett Packard 9000 EPS 21 Sun Ultra Enterprise Cluster HA Server Massively Parallel Processors (MPP) Cambridge Parallel Processing Inc. s DAP: The DAP now has an 8 bit processing element, but is still a classic SIMD MPP, with 1024 or 4096 processing elements! DOE Accelerated Strategic Computing Initiative (ASCI) IBM RS/6000 SP ASCI Blue Pacific model (costing $93M) to reach 3 TeraFLOPS by December, 1998 Intel Scalable Server ASCI Red (9000 Pentium Procs costing $46M with 1.8 TeraFLOPS peak) reached 1 Teraflops on December, 1996 SGI/CRAY Origin ASCI Blue Mountain model (3072 processors costing $110M) to reach 3 TeraFLOPS in 1998 s.a. top500

Abschnitt 10: parallele Architekturen 240 10.2. Multiprocessor-Systeme mit gemeinsamem Bus gängige PEs, gängige Bus-Systeme caches mindern Bus-traffic, reduzieren Latenz cache-kohärenz etwa per MESI PE 1 PE 2 PE n cache 1 cache 2 cache n gemeinsamer Bus Memory IO z.b. Compac Proliant mit 4 Pentium Pro, Digital AlphaServer mit 12 Alpha 21164, HP 9000 mit 4 PA8000, IBM RS/6000 mit 8 PowerPC 604, SGI Power Challenge mit 36 MIPS R10000, SUN Enterprise 6000 mit 30 UltraSPARC 1 usw.

Abschnitt 10: parallele Architekturen 241 10.3. cache-kohärenz in Multiprozessor-Systemen ein gemeinsamer Bus und globaler Speicher: per snooping protocol Processor Processor Processor Snoop tag Cache tag and data Snoop tag Cache tag and data Snoop tag Cache tag and data Single bus Memory I/O

Abschnitt 10: parallele Architekturen 242 cache-kohärenz durch Invalidieren event PE1 PE2 PE3 start no copy no copy no copy PE1 reads clean copy no copy no copy PE2 reads clean copy clean copy no copy PE3 writes invalidated copy invalidated copy dirty copy PE2 reads invalidated copy clean copy clean copy cache-kohärenz durch Aktualisieren event PE1 PE2 PE3 start no copy no copy no copy PE1 reads clean copy no copy no copy PE2 reads clean copy clean copy no copy PE3 writes updated copy updated copy updated copy PE2 reads clean copy clean copy clean copy

Abschnitt 10: parallele Architekturen 243 cache-kohärenz Anforderungen, Kohärenz zu garantieren PEs write exclusively after a write: invalidate or update all copies write shared data: invalidate or update all copies on read miss: check other caches first snooping protocols mit write invalidate oder write update write invalidate writing PE invalidiert (per bus signal) alle Kopien in anderen caches und ändert erst dann lokale Kopie wie write back (nur first write is signaled) write update/write broadcast writing PE broadcasts die neuen Daten zwecks update aller Kopien wie write through (reduziert Latenz) bus traffic? Vorteile/Nachteile?

Invalid Abschnitt 10: parallele Architekturen 244 Einfaches cache-kohärenz Protokoll Invalid (not valid (clean) cache block) Simples cache-kohärenz write invalidate/write back Protokoll per fsm Processor write miss read only cache line is clean (not written) and may be shared read miss read/write cache line is not clean (written, dirty), may not be shared invalid cache line is invalid Read/Write (dirty) Processor Processor read miss Read Only (Send if invalidate (Write back dirty block to memory) hit) Processor write (hit or miss) Processor write Invalid (not valid cache block) Processor read miss Read Only (clean) a. Cache state transitions using signals from the processor Processor write miss Processor write Invalid (hit or miss) (not valid Processor cache block) read miss Another processor has a read miss or a write miss for this block (seen on bus); write back old block Read/Write (dirty) Read/Write (dirty) Processor write (Send invalidate if hit) (Write back dirty block to memory) Invalidate or another processor has a write miss for this block (seen on bus) Read Only (clean) a. Cache state transitions using signals from the processor b. Cache state transitions using signals from the bus

Abschnitt 10: parallele Architekturen 245 Generell kein Zustandsübergang on read hit Zustandsübergänge on read miss, write hit, write miss read miss new block: state=read only; old block: if dirty write back to memory remote caches with old block: state=invalid if dirty write hit send invalidate (remote caches with block: state=invalid) write into block: state=read/write write miss wie read miss; new block: state=read/write MESI/MOESI MESI ist ein cache-kohärenz write invalidate/write back Protokoll Modified wie read/write: dirty, no to be shared Exclusive wie read only, aber nur genau eine Kopie Shared wie read only, aber mehrere Kopien Invalid wie invalid z.h. Zustandsübergänge? MOESI? (Owned = modified shared)

Abschnitt 10: parallele Architekturen 246 Cache A Modified in Cache A Cache B Cache A Shared in Cache A Cache B M Valid Data I Invalid Data S Valid Data S Valid Data Invalid Data System Memory Valid Data System Memory Exclusive in Cache A Cache A Cache B Cache A Invalid in Cache A Cache B E Valid Data Invalid Data I Invalid Data Don't Care Valid Data System Memory Don't Care System Memory

Abschnitt 10: parallele Architekturen 247 MESI State Diagram SHR Invalid SHI RMS Read Shared RH LRU Push Invalidate SHR SHI WM Push Read Push RME SHI WH Invalidate SHR Events: RH = Read Hit RMS = Read miss, shared RME = Read miss, exclusive WH = Write hit WM = Write miss LRU = LRU replacement Read RH Modified WH Exclusive RH WH Events: Bus Transactions: Bus Transactions: Snoop Events: RH Read Hit Push = Write cache line Push back to= Write back to memory SHR = Snoop hit on read RMS Read miss, shared memory Invalidate = Broadcast invalidate SHI = Snoop hit on invalidate RME Read miss, exclusive Invalidate = Broadcast invalidate Read = Read from memory WH = Write hit Read = Read cache line from WM = Write miss memory SHR = Snoop hit on read SHI = Snoop hit on invalidate

Abschnitt 10: parallele Architekturen 248 10.4. Verbindungsstrukturen Beispiele P E P E P E P E P E bus mem grid P E P E P E P E P E P E P E P E star P E ring P E

Abschnitt 10: parallele Architekturen 249 m m m m m m P E P E P E P E torus P E crossbar P E dim=2 dim=3 P E P E 10 11 110 111 010 011 complete P E P E P E 00 01 100 101 000 001 0 1 hypercube dim=0 dim=1

Abschnitt 10: parallele Architekturen 250 P 0 P 1 P 0 P 1 P 2 P 3 P 4 P 5 P 2 P 3 P 4 P 5 P 6 P 7 P 6 P 7 a. Crossbar b. Omega network A B C D c. Omega network switch box vgl. z.b. www.top500.org/2007 overview recent supercomputers/shared memory mimd machines basierend auf www.top500.org/2007 overview recent supercomputers/main architectural classes

Abschnitt 10: parallele Architekturen 251

Abschnitt 10: parallele Architekturen 252 Merkmale einschlägiger Verbindungsstrukturen Qualitative Merkmale Skalierbarkeit Quantitative Merkmale Durchmesser = längste Weglänge # ports pro PE # switches in Verbindungsstruktur total bandwidth = # links link-bandwidth bisection bandwidth (min/average/max) Latenz Fehlertoleranz = # verschiedene Wege

Abschnitt 10: parallele Architekturen 253 Sei n = # PEs. Alle links seien bidirectional. Topologie skalierbar Durchmesser #ports #switches # links Bus ja 1 1 1 oder 20 n 1 Ring ja n 2 n 1 Stern ja 2 1 n n n-gitter ja 2( n 1) 4 n? 2 n( n 1) 1 complete nein 1 n 1 2n(n 1) n n-torus ja 2 n 2 4 n? 2n 1 ld n-hypercube nein ld n ld n n ld n 2 n ld n crossbar ja 1 1 n 2 2n crossbar hc für C = ja 2h + 1 h n 2hC h stages C C-crossbars Omega ja ld n 4 2n ld n oder 20 n 2 ld n mehr-stufig ja log n 1 n ld n n log n Benes ja 2 log n 1 1 n(ld n 1/2) n(2 ld n 1) z.h. Untersuche Kombinationen. 20 je nach Auslegung

254 11. Addenda 11.1. Addendum in 2003: top 500 www.top500.org, s.a. c t 14/2003 # brand computer 1 NEC Earth Simulator 2 HP ASCI-Q AlphaServer 1,25 GHz 3 Linux NetworX MCR Linux Cluster XEON 2,4GHZ, Quadrics 4 IBM ASCI-White SP Power3, 375MHz 5 IBM SP Power3, 375MHz 16way 24 IBM IBM Regatta, Power4, 1,3GHz 29 Hitachi Hitachi SR 8000-F1 33 NEC NEC-SX-6 (6 proc) / 192M24 # TFLOPS Betreiber Jahr N 1 35,860 Earth Simulation Center, Yokohama, JP 2002 5120 2 13,880 Los Alamos Natl. Lab, USA 2002 8192 3 7,634 Lawrence Livermore Natl. Lab, USA 2002 2304 4 7,304 Lawrence Livermore Natl. Lab, USA 2000 8192 5 7,304 NERSC, LBNL, USA 2002 6656 24 2,050 MPI, Garching 2002 768 29 1,653 Leibniz-RZ, München 2002 168 33 1,484 Dt. Klima-RZ, DKRZ 2003 192

Abschnitt 11: Addenda 255 11.2. Addendum in 2004: announced in 2004 vgl. www.top500.org ASCI = DOE s Accelerated Strategic Computing Initiative Advanced Simulation and Computing Program ASCI Purple im Auftrag des DOE, am Lawrence Livermore National Laboratory: IBM, 12544 Power5 Prozessoren, 50 TB Haupt-Speicher, 2 PB Festplatten-Speicher, 100 TFLOPS, 156 TB/s Speicher-Bandbreite (31200 DVD-Filme/s) und 12,5 TB/s Kommunikationsbandbreite IBM Blue Gene/L: für physikalische, biologische und metereologische Simulationen; ca 130000 procs, ca 367 TFLOPS, Linux IBM Blue Gene: für Faltung großer Eiweiß-Moleküle in der Gen- Technik; SMASH (simple, many and self-healing): 1 Mio procs, 8 Mio parallel threads, 1 PFLOPS; jeweils als 32 32 32 = 2 15 Würfel

Abschnitt 11: Addenda 256 11.3. Addendum in 2005: top 500 s.a. c t 14/2005, S.18; Rmax = maximal LINPACK performance Rechner Betreiber Land rank procs Rmax 11/04 TFlop/s BlueGene LLNL/DOE USA 1 65536 PowerPC440, 700MHz 136,7 BlueGene IBM, T.J.Watson USA 40960 PowerPC440, 700MHz 91,3 Columbia NASA USA 2 10160 Itanium 2, 1.6GHz 51,9 Earth Simulator Earth Simulation Center Japan 3 5120 NEC SX6 35,9 MareNostrum Barcelona SCC Spain 4 4800 PowerPC970, 2.2GHz 27,9 BlueGene ASTRON/Uni Groningen NL 12288 PowerPC440, 700MHz 27,5 Thunder LLNL USA 7 4096 Itanium 2, 1.4 GHz 19,9 BlueGene École Polytec. Lausanne CH 8192 PowerPC440, 700MHz 18,2 BlueGene JAIST Japan 8192 PowerPC440, 700MHz 18,2 Cray Red Storm Oak Ridge NL USA 500 Opteron, 2GHZ 15,2 unter www.top500.org s.a. home: The Linpack benchmark can now be run using HPL, A Portable Implementation of the High-Performance Linpack Benchmark for Distributed-Memory Computers home: lists, list statistics since June 1995 home: highlights, trends home: Overview of Recent Supercomputers InFocus: Literatur, upcoming supercomputers etc.

Abschnitt 11: Addenda 257 11.4. Addendum in 2006: top 500 s.a. c t 15/2006, S.18; Rmax = maximal LINPACK performance Rechner Betreiber Land rank procs Rmax 11/05 TFlop/s BlueGene DOE/LLNL USA 1 131072 PowerPC440, 700MHz 280,6 BlueGene IBM, T.J.Watson USA 2 40960 PowerPC440, 700MHz 91,3 ASC purple DOE/LLNL USA 3 12208 PowerS, 1.9GHz 75,8 Columbia NASA USA 4 10160 Itanium2, 1,6GHz 51,9 Tera-10 Comm.Energ.Atom. France 8704 Itanium2, 1,6GHz 42,9 Thunderbird Sandia Natl.Lab. USA 5 9024 Xeon, 3,6GHz 38,3 TSUBAME Tokyo IT Japan 10368 Opteron, 2,6GHz 38,2 JUBL,BlueGene FZ Jülich BRD 6 16384 PowerPC440, 700MHz 37,3 Cray Red Storm Oak Ridge N.L. USA 10 10880 Opteron, 2,4GHz 36,2 Earth Simulator Earth Simulation Ctr Japan 7 5120 NEC SX6 35,9 www.top500.org: The TOP500 table shows the 500 most powerful commercially available computer systems known to us. Die Liste stellt ein halbjährliches ranking dar. Sie ist unter diversen Kriterien durchsuchbar. Es gibt ein Archiv alter Listen. www.top500.org bietet damit den Herstellern von Super-Computern eine Bühne. Werbung! Die veröffentlichten technischen Details lassen aber auch trends im high performance computing, HPC erkennen.

Abschnitt 11: Addenda 258 statt Linpack benchmark in Zukunft HPC Challenge, HPCC? wohl häufig nur transient zusammengestellte Super-Computer clusters, clouds... FPGA-Beschleuniger, cell-prozessoren, GPGPUs... s. InFocus: Literatur, upcoming supercomputers etc.

Abschnitt 11: Addenda 259 11.5. Addendum in 2007: cell-prozessor entwickelt seit 2000 von IBM, Sony, Toshiba Ziel: 100-fache PS2-Leistung gaming, multi media, real time responsiveness von IBM: 90nm-Prozess, SiliconOnInsulator, low-k dielectrics, copper interconnects, Architektur 21 hardware performance and efficiency memory latency & -bandwidth ( memory wall/gap ): DRAM latencies, = hundreds of multi-ghz processor cycles = a thousand of (multi-) processor (with shared memory) cycles; Spekulation ist kein Ausweg power: improve power efficiency along with performance Frequenz-Steigerungssackgasse (kürzere cycles immer längere pipelines immer höhere penalties) 21 Kahle et al: Introduction to the Cell multiprocessor; IBM J. Res.&Dev. Vol 49, No 4/5, July/Sept. 2005 http://researchweb.watson.ibm.com/journal/rd/494/kahle.html

Abschnitt 11: Addenda 260 real time responsiveness to user and network keep the players satisfied! support real time OS support communication oriented workload variety of e.g. streaming standards flexibility and programmability of acceleration security, DRM, privacy Applicability to a wide range of platforms long term 64bit Broadband Architecture 22 + LINUX-based software development environment = software development community Introduction in 2005 Power Architecture = basis for Cell 22 s.a. http://www-306.ibm.com/chips/techlib/techlib.nsf/products/cell

Abschnitt 11: Addenda 261 Design Concept and Architecture Cell = 64bit Power + synergistic processors + DMA + memory flow control first generation Cell = dual issue 64bit Power processor element, PPE + 8 synergistic processor elements, SPE + on chip memory controller + on chip IO controller SXU LS DMA L2 L1 SXU LS DMA SXU SXU SXU SXU SXU SXU LS On-chip coherent bus (up to 96 bytes per cycle) Power core LS LS Memory controller LS Dual Rambus XDR** LS LS DMA DMA DMA DMA DMA DMA PPE (a) Rambus XDR DRAM interface SPE Bus interface controller Rambus FlexIO** between the p to allow a sin PPEs and SPE of programmi High-bandwid a number of s chip configura glueless coh does not requ the two proce Full-custom m performance p millimeter of derivative pro Extensive sup management, software debu

Abschnitt 11: Addenda 262 high frequency design, i.e. small number of gates per cycle (low voltage, low power) & (high frequency, high performance) Power architecture compatibility virtualization, multi OS support, symmetric multiprocessing SIMD (PPEs vector media extensions, SPEs vector instructions) SPEs for coherent offload: SPEs with local memory, asynchronous coherent DMA, large register file... high bandwith coherent bus, high bandwidth memory (single address space) high bandwith flexible configurable IO High frequency & low voltage konfligierende Ziele: performance, power, frequency, voltage, area An optimally balanced design operates at minimum voltage supported by the circuits and at the maximum frequency at that minimum voltage! 10 FO4 later 11 FO4

Abschnitt 11: Addenda 263 Power architecture compatibility erleichtert Portieren von Software: existing Power applications run on Cell SIMD Vektorisierung ist entscheidend für performante multi media Anwendungen! typische Entwicklung solcher Anwendungen 1. develop single threaded software without SIMD 2. use SIMD on PPE 3. use SIMD on SPEs Power processor element, PPE nur 23 pipeline Stufen bei halber cycle time short wire = short communication delays dual issue in order; two threads (cp. Intels hyperthreading) 32KB 1 st level I-cache and D-cache, 512KB 2 nd level cache caching is not transparent: data is lockable in 2 nd level cache

Abschnitt 11: Addenda 264 two simultaneous threads in PPE PPE = two-way multiprocessor with shared dataflow software sees two processing units (all registers are duplicated etc) PPE = instruction unit, IU + fixed point execution (+ load/store) unit, XU + vector scalar (floating point) unit, VSU IU fetches 4 instructions per cycle per thread into buffer and dual issues to execution; nearly all combinations possible; 4KB branch history table XU with 32 64bit registers per thread + fixed point unit + load/store unit The load/store unit supports a non-blocking L1 D-cache which allows cache hits under misses. VSU with 32 64bit registers per thread; vector execution = 128bit data flow with 32 128bit vector registers (2 64, 4 32, 8 16, 16 8, 128 1) + FUs for simple, complex, permute and SP float operations Power processor element, PPE: IU, XU, VSU

Abschnitt 11: Addenda 265 8 IU Pre-decode L2 interface Fetch control Branch scan 4 L1 instruction cache Thread A Thread B 4 Threads alternate fetch and dispatch cycles SMT dispatch (queue) 2 1 Microcode L1 data cache Decode Dependency Issue 2 Thread A Thread B Thread A 1 Load/store unit Fixed-point unit Completion/flush 1 1 Branch execution unit XU VSU VMX load/store/permute VMX/FPU issue (queue) 2 1 1 1 1 VMX arith./logic unit FPU arith./logic unit FPU load/store VMX completion FPU completion (a) PPE pipeline front end Power processor element, MC1 MC2 PPE: MC3 pipline MC4... MC9 MC10 MC11 Microcode Instruction cache and buffer IC1 IC2 IC3 IC4 IB1 IB2 ID1 ID2 ID3 IS1 IS2 IS3 Instruction decode and issue

VMX completion FPU completion Abschnitt 11: Addenda (a) 266 PPE pipeline front end Instruction cache and buffer IC1 IC2 IC3 IC4 IB1 IB2 ID1 ID2 ID3 IS1 IS2 BP1 BP2 BP3 BP4 Branch prediction MC1 MC2 MC3 MC4... MC9 MC10 MC11 Microcode Instruction decode and issue IS3 PPE pipeline back end Branch instruction DLY DLY DLY RF1 RF2 EX1 EX2 EX3 EX4 IBZ IC0 Fixed-point unit instruction Load/store instruction Figure 2 DLY DLY DLY RF1 RF2 EX1 EX2 EX3 EX4 EX5 WB RF1 RF2 EX1 EX2 EX3 EX4 EX5 EX6 EX7 EX8 WB RISC = Reduced Inside Complexity (b) Power processor element (a) major units and (b) pipeline diagram. Instruction fetch and decode fetches and decodes four instructions in parallel from the first-level instruction cache for two simultaneously executing threads in alternating cycles. When both threads are active, two instructions from one of the threads are issued in program order in alternate cycles. The core contains one instance of each of the major execution units (branch, fixed-point, load/store, floating-point (FPU), and vector-media (VMX). Processing latencies are indicated in part (b) [color-coded to correspond to part (a)]. Simple fixed-point instructions execute in two cycles. Because execution of fixed-point instructions is delayed, load to use penalty is limited to one cycle. Branch miss penalty is 23 cycles and is comparable to the penalty in designs with a much lower operating frequency. IC IB BP MC ID IS DLY RF EX WB Instruction cache Instruction buffer Branch prediction Microcode Instruction decode Instruction issue Delay stage Register file access Execution Write back

Abschnitt 11: Addenda 267 Synergistic processor elements, SPEs spezifische ISA 23 1, 2, 4, 8, 16 byte data types: byte, 1 2word, word, 2word, 4word 128bit SIMD execution unit organisation, 2 7 registers 6 Formate für die 32bit Instruktionen mit 4 11bit OPcodes: rrr, rrrr (fma = MAC = AXPY), rri7, rri10, RI16, RI18 ISA support to eliminate branches: The SPU ISA defines compare instructions to set masks that can be used in three operand select instructions to create efficient conditional assignments. Such conditional assignments can be used to avoid difficult-to-predict branches. hint for branch instructions, i.e. hints on branch target channel instructions, i.e. 128bit IO to external devices maskable memory addresses allow for different local memory size 23 Synergistic Processor Unit Instruction Set Architecture, s.a. www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/76ca6c7304210f3987257060006f2c44

Floating-point instruction Abschnitt 11: Addenda 268 Floating-point unit Fixed-point unit Result forwarding and staging Register file Permute unit Load/store unit Branch unit Channel unit Local store (256 KB) Single-port SRAM 8 bytes per cycle 16 bytes per cycle 64 bytes per cycle 128 bytes per cycle PE pipeline front end IF1 IF2 IF3 IF4 IF5 IB1 IB2 ID1 ID2 ID3 IS1 IS2 PE pipeline back end 128bit Branch instruction data flow: all instructions are SIMD (wie PPE) RF1 Instruction issue unit/instruction line buffer 128B read 128B write On-chip coherent bus DMA unit (a) 256KB local memory coherent sophisticated DMA access to system memory RF2 IF Instruction fetch max 2 instructions per cycle: fixed/floating point instruction IB Instruction buffer Permute instruction gepaart mit load/store, permutation oder branch ID Instruction decode EX1 EX2 EX3 EX4 WB IS Instruction issue RF Register file access hint Load/store for instruction branch instructions, i.e. hints on branch target: EX Execution EX1 EX2 EX3 EX4 EX5 EX6 WB WB Write back prefetching at least 17 instructions at branch target address Fixed-point instruction SPE is only 14.5 mm 2, only a few watts at multi GHz EX1 EX2 WB

On-chip coherent bus Abschnitt 11: Addenda DMA unit 269 SPE pipeline front end IF1 IF2 IF3 IF4 IF5 IB1 IB2 ID1 ID2 ID3 IS1 IS2 (a) SPE pipeline back end Branch instruction RF1 RF2 Permute instruction EX1 EX2 EX3 Load/store instruction EX1 EX2 EX3 EX4 EX4 EX5 EX6 WB WB IF IB ID IS RF EX WB Instruction fetch Instruction buffer Instruction decode Instruction issue Register file access Execution Write back Fixed-point instruction EX1 EX2 WB Floating-point instruction EX1 EX2 EX3 EX4 EX4 EX6 High Bandwidth: on-chip (SPE) Figure 3 Synergistic processor element (a) organization and (b) pipeline diagram. Central to the synergistic processor is the 256-KB local store SRAM. The local store local supports both memory 128-byte access to from local direct memory access (DMA) per DMA read and write, as well as instruction fetch, and a 16-byte interface for load and store operations. The instruction issue unit buffers and pre-fetches instructions and issues up to two instructions per cycle. A 6-read, 2-write port register file provides both execution pipes with 128-bit operands and stores the results. Instruction execution latency is High two cycles for Bandwidth: simple fixed-point instructions and main six cycles for memory both load and single-precision floating-point instructions. Instructions are staged in an operand-forwarding network for up to six additional cycles; all execution units write their results in the register file in the same stage. The penalty for mispredicted branches is 18 cycles. point and load instructions take six cycles. Two-way SIMD double-precision floating point is also supported, (b) main = system memory = Rambus XDR DRAM with two 32 bit channels à 12.8GB/s vs 96byte per cycle on chip WB The control area makes up only 10 15% of the area of the 10-mm 2 SPE core, and yet several applications

bandwidth at a low system cost teneration a lowabschnitt systemcell cost 11: processor Addenda by XDR XDR 270 mbus ll processor XDR** by DRAM memory XDR XDR rs * DRAM 12.8 GB/s High memory per Bandwidth: 32-bit memory IO eper channels 32-bit memory are supported on the Cell e supported on configurable the to support multiple Cell high bandwidth processorsystem configurations: Since base, 2-way, IOIF0 4-way symmetric IOIF1 multiprocessor l bandwidth of 25.6 GB/s. Since processor IOIF0 IOIF1 of 25.6 GB/s. chip delivers nearly an order of (a) nearly an order of (a) per th (96 cyclebytes at peak), per cycle at peak), XDR XDR tion vable oncontention DMA on DMA XDR XDR XDR XDR XDR XDR XDR p. ithin the chip. Cell Cell Cell Cell Cell processor processor e I/O processor IOIF BIF processor IOIF processor sor systems IOIF0 and IOIF1 (b) IOIF BIF IOIF ennected dual-processor accelerator(a) systems and (b) width terface I/O-connected chip, Cell accelerator XDR XDR XDR XDR ted nfigurable system XDRI/OXDR interfacexdr chip, XDR Cell XDR XDR XDR XDR andwidth l of seven transmit configurable I/O Cell Cell IO** bytes [16] can processor processor l layer, acell total of seven Cell transmit IOIF CellIOIF ical interfaces, one Cell processor processor IOIF RRAC FlexIO** BIFbytes [16] can BIF as a coherent IOIF Switch processor processor IOIF BIF IOIF pports separate multiple logical (b) interfaces, one IOIF BIF IOIF ed (Figure to operate 4). as a coherent Cell Cell Switch processor processor XDR XDR XDR XDR BIF processor supports multiple IOIF IOIF onfigurations (Figure 4). Cell Cell a highly optimized XDR XDR XDR XDR processor processor Cell Cell r implementation processor processor (c) Fm ation a chip; IOIF

Abschnitt 11: Addenda 271 Full custom implementation/optimization latch families custom design of wires design methodology (analysis at transistor level) power distribution and heat dissipation engineering: fine grained clock gating, multiple thermal sensors modular design allows for multiple PPEs and SPEs multiple clock grids power-on reset, self test, test support packaging low power CMOS SOI

Abschnitt 11: Addenda 272 Programming Cell runs 32bit and 64bit Power and PowerPC applications! inter processor communication and data movement facilities make a wide range of programming models feasible! function offload to one or more SPEs specified by programmer/hints to the compiler/compiler device extension, e.g. SPE in isolated mode for DRM, privacy/security PPE is host for SPEs which perform tasks in parallel (based both on shared memory or message passing) parallelized/scheduled by programmer/compiler streaming models: PPE acts as streaming controller, SPEs as stream data processors in a pipeline shared memory multiprocessor model: per DMA: shared memory local store; per load/store: local store registers; locking per DMA lock line command asymmetric thread runtime model: on PPEs or SPEs, most flexible

Abschnitt 11: Addenda 273 Benchmarking benchmarking 24 according to objectives matrix multiplication LINPACK MPEG2 video decoding triangle transform and lightning in the graphic render pipeline cryptography: AES, DES, MD5, SHA-1, SHA-256 24 Chen et al: Cell Broadband Engine Architecture and its first implementation A Performance View; 2005 www-128.ibm.com/developerworks/power/library/pa-cellperf

Abschnitt 11: Addenda 274 11.6. Addendum in 2010: Core i2000 siehe Christof Windeck: Intels neue Prozessor-Generation Core i-2000 alias Sandy Bridge; c t 3/2011, S. 94-99 Core i3-2000, i5-2000 und i7-2000 in 32nm-Technik gefertigte desktop- und mobil-versionen im neuen Sockel LGA1155 für neue mainboards mit geänderter Stromversorgung und neuen Chipsätzen GPU core core core core shared L3 cache, LLC MMU GPU = Processor graphics LLC = last level cache MMU = System Agent GPU für 1-2 displays, System Agent = Speicher-, PCI und IO-Controller sowie Taktsteuerung, Einheiten, insbesondere jeder Kern über Ring- Bus vernetzt (mit 1000 Signalleitungen in eigenem layer ): max 300GB/s. GPU nutzt auch den LLC: das RAM kann häufiger schlafen. Unterstützten Advanced Vector Extensions, AVX, d.h. 256bit breite Argumente vs 128bit in SSE4: β SSE AVX 1.86 für Linpack aber nur unter Win7SP1, Linux, aber fused multiply add, FMADD erst 2012

Abschnitt 11: Addenda 275 Mit AVX einhergehend Verbesserungen bei load/store units, branch prediction, (größerer?) Puffer für µ-ops. Aber: AVX-units bearbeiten einige SSE-Instruktionen langsamer als die Vorgänger. Aus einem externen 100MHz Taktgeber werden alle Takte intern erzeugt kein Übertakten. Wie bisher Turbo-Boost, jetzt aber mit eingebautem Übertakten konfigurierbar: wir haben es jedenfalls rasch geschafft, soviel falsch zu machen, daß das System erst nach BIOSreset per CMOS clear wieder startete Turbo Boost auch für GPU; LLC per Prozessor-Takt. Automatisches Umschalten zwischen GPU und externer Grafikkarte. GPU mit 6 oder 12 execution units, EUs unterstützt DirectX 10.1 und OpenCL 1.1. GPU mit separatem Hardware encoder für das Transcodieren von Video-streams, z.b. 97min MPEG4 HD-Video mit 8Mbit/s und AAC-Stereo-Ton in ipod-format per QuickSync in 7 15, per MediaConverter 7 in 25, auch 3D-Unterstützung, aber keine 3D-Spiele auf 120Hz displays PCIe 2.0 mit 500MB/s/lane, sollte u.a. für USB 3.0 reichen, c t mißt 197MB/s lesend, ca die Hälfte schreibend, je nach Chipsatz 12-14

Abschnitt 11: Addenda 276 USB 2.0 ports, SATA-6G für Platten > 2TB, setzt aber notwendig UEFI 2.0 voraus. Chipsätze mit Fernwartung (Active Management Technology, AMT ), TPM (Trusted Execution Technology), Virtualisierung... Performance-Messungen per SPEC CPU2006, Cinebench, BaPCo SYSmark 2007, Office, gcc, zip etc. also alles ohne AVX, siehe http://www.heise.de/ct/inhalt/2011/03/94/ bis http://www.heise.de/ct/inhalt/2011/03/99/. Fazit: viel Rechenleistung für s Geld, Preis/Leistung besser als bei Vorgänger-Prozessoren und besser als bei AMD! integrierte GPU konkurriert mit 40Euro-Grafikkarten, vorteilhaft für notebooks und Büro-Computer, GPU reicht nicht für gamer.

Abschnitt 11: Addenda 277 11.7. Addendum in 2011: K Computer www.top500.org The K Computer, built by Fujitsu, currently combines 68544 SPARC64 VIIIfx CPUs, each with eight cores, for a total of 548,352 cores - almost twice as many as any other system in the TOP500. The K Computer is also more powerful than the next five systems on the list combined. The K Computers name draws upon the Japanese word Kei for 10 16, representing the system s performance goal of 10 petaflops. RIKEN is the Institute for Physical and Chemical Research. Unlike the Chinese system it displaced from the No. 1 slot and other recent very large system, the K Computer does not use graphics processors or other accelerators. The K Computer is also one of the most energy-efficient systems on the list. Some Other Highlights from the newest List: Intel continues to provide the processors for the largest share (77.4 percent) of TOP500 systems. Intels Westmere processors increased their presence in the list strongly with 169 systems,

Abschnitt 11: Addenda 278 compared with 56 in the last list. Quad-core processors are used in 46.2 percent of the systems, while already 42.4 percent of the systems use processors with six or more cores. Tracking Changes The entry level to the list moved up to the 40.1 Tflop/s mark on the Linpack benchmark, compared to 31.1 Tflop/s six months ago. The last system on the newest list was listed at position 262 six months ago. This turnover rate has steadily increased during the last few lists and is now above average. Some Final Notes on Power Consumption Average power efficiency is 248 Mflops/W (up from 219 Mflops/W six months ago and 195 Mflops/watt one year ago). The No. 1 system, the K Computer, also reports the highest total power consumption of 9.89 MW.

Abschnitt 11: Addenda 279 Site RIKEN Advanced Institute for Computational Science (A System Family Fujitsu Cluster System Model K computer Computer K computer, SPARC64 VIIIfx 2.0GHz, Tofu interconnect Vendor Fujitsu Application area Research Installation Year 2011 Operating System Linux Interconnect Custom Processor SPARC64 VIIIfx 2000 MHz (16 GFlops) The K system does not have GPUs, because they really would not add to the performance of the system. The most important part is the direct network connection, which currently is based on Infiniband. The individual speed of the nodes is not that important, as long as their connection is. Actually most of the porting work goes into parallelisation. Adapting it to the processor and operating system is only minor work. K computer is a huge system with over 500.000 nodes. About every 15 hours a node fails. So they are working on low level rerouting of

Abschnitt 11: Addenda 280 nodes so that applications do not fail. http://en.wikipedia.org/wiki/k computer: On the 20th of June 2011, K topped the LINPACK benchmark with the performance of 8.162 petaflops with a computing efficiency ratio of 93.0%, making it the fastest supercomputer in the world. The system is still under construction and enters service in November 2012 with 864 cabinets. Currently it uses 68,544 2.0GHz 8-core SPARC64 VIIIfx processors packed in 672 cabinets, for a total of 548,352 cores, manufactured by Fujitsu with 45 nm CMOS process technology. Each cabinet contains 96 compute nodes in addition to 6 IO nodes. Each compute node contains a single processor and 16 GB of memory. Its water cooling system minimizes failure rate and power consumption. The K computer uses a special six-dimensional torus network interconnect called Tofu, and a Tofu-optimized Message Passing Interface based on the open-source Open MPI library. Users can create application programs adapted to either a one-, two-, or three-dimensional torus network.

Abschnitt 11: Addenda 281 The system adopts a two-level local/global file system with parallel/- distributed functions, and provides users an automatic staging function for moving files between global and local file systems. Fujitsu developed an optimized parallel file system based on Lustre, called Fujitsu Exabyte File System, scalable to several hundred petabytes. The K also reports the highest total power consumption of 9.89 MW. The K computer s performance equals one million linked desktop computers. Its power usage is roughly that of 10,000 houses and its annual running costs are US$10 million. http://www.golem.de/1106/84337.html Die Wasserkühlung des schnellsten Rechners der Welt: Dieser derzeit schnellste Supercomputer wird durch eine ausgeklügelte Wasserkühlung auf Betriebstemperatur gehalten. Die einzelnen Nodes des K-Computers sind aus Rackeinschüben mit nur einer Höheneinheit aufgebaut. Das ist die Grundlage, um die insgesamt über eine halbe Million Prozessorkerne noch bei vertretbaren Latenzen zu vernetzen. Jeder Einschub enthält vier Sparc-VIII-CPUs mit je acht Kernen. Ein Board des K-Computers misst nur eine Höheneinheit. Von den

Abschnitt 11: Addenda 282 üblicherweise rund 40 Höheneinheiten eines Racks nutzt Fujitsu nur 24 für die Nodes, sie sind oben und unten in Einheiten von je 12 Einschüben untergebracht. In der Mitte sitzen Stromversorgung und Netzanbindung, beide Komponenten werden per Luft gekühlt. Mit den 24 Nodes mit je vier Achtkern-CPUs ergeben sich 768 Kerne pro Rack. Um diese hohe Dichte zu erreichen, muss auch die Wasserkühlung sehr flach gestaltet werden. Für jeden Node gibt es daher einen zentralen Zu- und Ablauf, auf den Bildern als Water Cooling Module bezeichnet. Die Pumpen sind für jedes Rack zentral gehalten. Daher sind die Nodes auch leicht gedreht in die Racks gesetzt, um Platz für die Wasserleitungen zu schaffen. Jede der vier CPUs und auch die vier Vernetzungsmodule besitzen einen eigenen Kupferkühler - nur der Speicher bleibt luftgekühlt. Über die Art der Verschaltung der Prozessorsockel und der Nodes ist noch wenig bekannt, das japanische Forschungszentrum Riken in Kobe, wo der K-Computer steht, bezeichnet es als Tofu Interconnect. Auch die Tabellen von top500.org verzeichnen für die Vernetzung nur custom-

Abschnitt 11: Addenda 283 es handelt sich also um ein Design, das für diese Maschine entwickelt wurde. www.weblearn.hs-bremen.de/risse/rst/docs/fujitsu/when-high-performance-computing-meets www.hotchips.org/uploads/archive22/hc22.24.510-1-toyoishima-tofu-icc.pdf www.wseas.us/e-library/conferences/2011/paris/ecc/ecc-21.pdf www.weblearn.hs-bremen.de/risse/rst/docs/fujitsu/programming-on-k-computer.pdf

Abschnitt 11: Addenda 284 11.8. Addendum in 2012: Raspberry Pi www.raspberrypi.org elinux.org/raspberrypiboard Erste-Schritte-mit-dem-Raspberry-Pi-1573973.html www.raspberrypi.org/faqs List of single-board computers raspberrycenter.de http://de.wikipedia.org/wiki/raspberry Pi: Der Raspberry Pi ist ein kreditkartengroßer Einplatinen-Computer, der von der Raspberry Pi Foundation entwickelt wird. Der PC, der zu Experimenten anregen soll, wird in zwei Versionen, A für 18e und B 26e, angeboten.

Abschnitt 11: Addenda 285 Die Platine enthält im Wesentlichen das Ein-Chip-System BCM 2835 von Broadcom mit dem 700-MHz-Hauptprozessor ARM1176JZF-S sowie 256 MB Arbeitsspeicher. Das Modell B hat zudem Ethernet und einen zweiten USB-Anschluss. Linux und andere Betriebssysteme, die die ARM-Architektur unterstützen, können installiert werden. Eine Festplatte ist nicht vorgesehen. Stattdessen können Speicherkarten (SD bzw. MMC) als nicht-flüchtiger Speicher benutzt werden. Auf Versuchsplatinen wurde gezeigt, dass die Desktop-Umgebung LX- DE unter Debian sowie Quake 3 und H.264-Videos mit einer Auflösung von 1080p via HDMI funktionieren. Anvisierter Preis US$25 (GBP 16) / US$35 (GBP 22) Größe Größe einer Kreditkarte 85,60 mm 53,98 mm 17 mm SoC Broadcom BCM2835 CPU ARM1176JZF-S (700 MHz) GPU Broadcom VideoCore IV SDRAM 256 MB USB 2.0 Anschlüsse 1 / 2 (über integrierten Hub) Videoausgabe Composite, HDMI

Abschnitt 11: Addenda 286 Tonausgabe 3.5 mm Klinkenstecker, HDMI Nicht-flüchtiger Speicher SD/MMC/SDIO Kartenleser Netzwerk - / 10/100 MBit Ethernet-Controller (LAN9512 von SMSC) Bussysteme Bis zu 16 GPIO Pins, SPI, I 2 C, UART Echtzeituhr Energieverbrauch 500mA, (2,5 Watt) / 700mA, (3,5 Watt) Stromquelle 5V Micro USB Anschluss, alternativ 4x AA Batterien Betriebssysteme GNU/Linux (Debian, Fedora, Arch Linux), RISC OS Prozessor Der Prozessor nutzt den ARMv6-Instruktionssatz. Des Weiteren wird der ARM-Thumb-Instruktionssatz unterstützt. Der Speicher ist über einen 64 bit breiten Bus angebunden und wird direkt als Package on Package auf den Prozessor gelötet. http://en.wikipedia.org/wiki/raspberry Pi: Broadcom don t release a full datasheet for the BCM2835, which is the chip at the heart of the Raspberry Pi. www.broadcom.com/products/bcm2835:

Abschnitt 11: Addenda 287 High Definition 1080p Embedded Multimedia Applications Processor The BCM2835 is a cost-optimized, full HD, multimedia applications processor for advanced mobile and embedded applications that require the highest levels of multimedia performance. Designed and optimized for power efficiency, BCM2835 uses Broadcom s VideoCore IV technology to enable applications in media playback, imaging, camcorder, streaming media, graphics and 3D gaming. Low Power ARM1176JZ-F Applications Processor Dual Core VideoCore IV Multimedia Co-Processor 1080p30 Full HD HP H.264 Video Encode/Decode Advanced Image Sensor Pipeline (ISP) for up to 20-megapixel cameras operating at up to 220 megapixels per second Low power, high performance OpenGL-ES 1.1/2.0 VideoCore GPU. 1 Gigapixel per second fill rate. High performance display outputs. Simultaneous high resolution LCD and HDMI with HDCP at 1080p60

Abschnitt 11: Addenda 288 Grafik Der ARM11-Prozessor ist mit Broadcoms VideoCore-Grafikkoprozessor kombiniert. OpenGL ES 2.0 wird unterstützt, Filme in FullHD- Auflösung (1080p30 H.264 high-profile) können dekodiert und über HDMI und Composite ausgegeben werden. Software Der Linux-Kernel läuft auf dem Raspberry Pi. Eine Entwicklerversion des RISC OS 5 wurde im Oktober 2011 veröffentlicht. http://en.wikipedia.org/wiki/raspberry Pi: The Foundation provides De-

Abschnitt 11: Addenda 289 bian and Arch Linux ARM distributions for download. Also planned are tools for supporting Python as the main programming language, with support for BBC BASIC, C, and Perl. Zum Vergleich: gooseberry gooseberry.atspace.co.uk raspberrycenter.de/tags/gooseberry gooseberry-developer-boards-40-alternative-raspberry-pi.html Das Gosseberry ist keine Eigenentwicklung. Es handelt sich vielmehr um ein Mainboard, das derzeit in verschiedenen Tablets zum Einsatz kommt. Daraus erklärt sich auch das Fehlen einer RJ45-Netzwerk- Schnittstelle (dafür ist WLAN onboard). Findige Briten haben den Produzenten ausgemacht und machen es so Endkunden zugänglich. Die Hardware des Gooseberry im Überblick: CPU: AllWinner A10, 1GHz ARM Cortex A8 Dual-Core mit bis zu 1,5 GHz MALI-400 GPU, 400MHz OpenGL ES 1.1 und 2.0, OpenVG 1.1 512 MB RAM

Abschnitt 11: Addenda 290 4 GB Flash MicroSD Slot 802.11 b/g/n Wireless Netzwerk Kopfhörer- und Mikrophon-Anschluss (Mini-Klinke) HDMI MiniUSB Buttons für Lautstärke und Power LVDS-Anschluss (Low Voltage Differential Signaling) Preis: GBP 40, zzgl. GBP 2,70 für den Versand innerhalb der EU Details zur CPU :-( s. z.b. http://rhombus-tech.net/allwinner a10 www.cnx-software.com/.../allwinner-a10a1x-processor-resources-development-board-and-sd inote-allwinner-a10-tablet-pc-integrierter-gps-bluetooth-8-zoll-high-definition affordable-tablet-with-ips-panel-allwinner-a10 Details zur GPU :-( s. z.b. http://limadriver.org/hardware www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php http://infocenter.arm.com/.../dui0555a mali optimization guide.pdf www.arm.com/products/multimedia/mali-graphics-hardware/mali-400-mp.php

Abschnitt 11: Addenda 291 typisches SoC, vgl. z.b.

Abschnitt 11: Addenda 292 Benjamin Benz: ARM, aber sexy Was Smartphones und Tablets so schnell macht; c t 6/2012 S.102-109, also ct 2012 06 S.102-109.pdf auf AULIS, s.a. www.ct.de/1206102 Benjamin Benz, Christof Windeck: Wohngemeinschaft Die Technik der Tablet- und Smartphone-Prozessoren; c t 6/2012 S.110-113, also ct 2012 06 S.110-113.pdf auf AULIS, s.a. www.ct.de/1206110

Abschnitt 11: Addenda 293 Gooseberry vs Raspberry Pi The goose-berry has roughly 3 x the processing power of the Pi. The goose-berry has a newer ARM architecture: the board is compatible with newer software such as Ubuntu which the Pi can not run. The goose-berry has double the RAM of the Pi (512MB). The board does not have a LAN port, although Wifi is present. The board does not have analogue video: no connection to old TVs. Only a limited OS (Android) is supported as of yet fully, the board however is capable of running other OSs such as Ubuntu (currently without graphics acceleration). Premade images for Ubuntu are now available and videos of the board running Ubuntu and other Linux flavours shall be uploaded. zeitgenössische Alternativen 74-android-mini-computer-is-slightly-larger-than-a-thumb-drive cx-01-53-android-4-0-pc-stick.html

Abschnitt 11: Addenda 294 11.9. Addendum in 2013: Haswell Die aktuellen Haswell-Prozessoren geben Anlaß zu prüfen, inwieweit die Inhalte der Veranstaltung RST helfen, populärwissenschaftliche Veröffentlichungen einzuordnen und zu bewerten. Andreas Stiller: Der Rechenkünstler Mikroarchitektur und Instruktionssätze der neuen vierten Core-Generation Haswell; c t 14/2013 S.114-119 sowie Material auf AULIS Pentium grüßt von Ferne out of order execution eigene load/store unit mit load/store L0 cache dicke (breitere) µops 256 bit AVX-Instruktionen physical register file mit 160 integer und 144 GP-Registern µop fusion

Abschnitt 11: Addenda 295 Detail-Verbesserungen: Sprungvorhersage, Die Datenpfade sind breiter, die Puffer und die Reservation Station größer, ebenso die Zahl der physischen Register, der Ports und der Ausführungseinheiten., s.a. Buffer und Register, 256 bit Vektoren, cache- System mit L4 cache etc., s.a. Caches und TLBs Volle Integer-Breitseite 256 bit AVX2, BMI1 (s.a. Intrinsics mit CRC), FMA und TSX gather (vgl. array of structures in multi body problem), allerdings kein scatter wie im XEON Phi Volle FMA Power plus zwei 256 bit FMA units mit kleiner Latenz plus zwei (?, vgl. rote Verbesserungen) 256 bit FMUL units angebunden durch load store unit plus (store?) Address Generation Unit, AGU FMA mit drei Operanden, FMA3 oder mit vier Operanden, FMA4

Abschnitt 11: Addenda 296 Transactional Memory Transactional Extension, TSX unterstützt zwei Programmier-Modelle (s.a. HLE-Kasten): Hardware Lock Elision, HLE: optimistisch locks ignorieren und bei konfligierenden Zugriffen die ganze Transaktion verwerfen und mit konventionellem (aufwändigen) locking wiederholen Restricted Transactional Memory, RTM: programm-gesteuerte Reaktion im Konfliktfall flexibel und leistungsfähig bei für nicht TSX-fähige Prozessoren inkompatiblem Code! Kasten: Zwischen Performance und Leakage Energie-bewußter Entwurf: gezielter Einsatz von Transistoren im Bereich Ultra Low Power High Performance, hpc/ulp = 10 4 Feinkörnige Stromversorgung: Fully Integrated Voltage Regulator, FIVR weiterer Strom-Spar-Zustand

Abschnitt 11: Addenda 297 11.10. Addendum in 2014: Advanced RISC Machines, ARM http://arm.com/products/processors/instruction-set-architectures/ armv8-architecture.php http://www.arm.com/files/downloads/armv8_architecture.pdf https://en.wikipedia.org/wiki/arm_architecture http://bear.ces.cwru.edu/eecs_382/arm7-tdmi-manual-pt2.pdf ARMv8-A for applications, ARMv8-R for real time applications, embedded, industrial control, ARMv8-M for micro controller applications ARMv8-A introduces 64-bit architecture support to the ARM architecture and includes: 64-bit general purpose registers, SP (stack pointer) and PC (program counter) 64-bit data processing and extended virtual addressing Two main execution states: AArch32/AArch64 - The 32-bit/64- bit execution state including exception model, memory model, programmers model and instruction set

Abschnitt 11: Addenda 298 The execution states support three key instruction sets: 1. A32 (or ARM): a 32-bit fixed length instruction set, enhanced through the different architecture variants. Part of the 32-bit architecture execution environment now referred to as AArch32. 2. T32 (Thumb) introduced as a 16-bit fixed-length instruction set, subsequently enhanced to a mixed-length 16- and 32-bit instruction set on the introduction of Thumb-2 technology. Part of the 32-bit architecture execution environment now referred to as AArch32. 3. A64 is a 64-bit fixed-length instruction set that offers similar functionality to the ARM and Thumb instruction sets. Introduced with ARMv8-A, it is the AArch64 instruction set. ARM ISAs are constantly improving to meet the increasing demands of leading edge applications developers, while retaining the backwards compatibility necessary to protect investment in software development. In ARMv8-A there are some additions to A32 and T32 to maintain alignment with the A64 instruction set.

Abschnitt 11: Addenda 299 Cortex A53 and Cortex A57 ACP = Accelarator Coherency Port SCU = Snoop Control Unit The ARM Cortex-A57 processor is ARMs highest performing processor, designed for mobile and enterprise computing applications including compute intensive 64-bit applications such as high end computer, tablet and server products. The processor can be implemented individually or paired with the Cortex-A53 processor into an ARM big.little configuration that enables scalable performance and optimal energy-efficiency.