Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Title Page
Copyright
Contents
Vorwort zur englischsprachigen Originalausgabe
Zu diesem Buch
Das andere Buch
Änderungen für die 6. Auflage
Unterstützung für Lehrende
Abschließende Bemerkungen
Danksagungen für die 6. Auflage
1 Abstraktionen und Technologien
1.1 Einführung
Computerklassen und ihre Eigenschaften
Willkommen in der Post-PC-Ära
Was Sie in diesem Buch lernen können
1.2 Sieben große Ideen in der Computerarchitektur
Vereinfachung des Designs durch Abstraktion
Beschleunigen des häufigen Falls
Performanz durch Parallelität
Performanz durch Pipelining
Performanz durch Vorhersagen
Speicherhierarchie
Zuverlässigkeit durch Redundanz
1.3 Was sich hinter einem Programm verbirgt
Höhere Programmiersprachen und Maschinensprache
1.4 Unter der Haube
Hinter dem Spiegel
Touchscreen
Öffnen des Gehäuses
Ein sicherer Ort für Daten
Kommunikation mit anderen Computern
1.5 Prozessorherstellung und Speichertechnologien
Selbsttest
1.6 Leistung
Leistung definieren
Leistung messen
CPU-Leistung und ihre Parameter
Befehlsleistung
Die klassische Gleichung für die CPU-Leistung
1.7 Die Hürde des Stromverbrauchs
Beispiel: Relativer Stromverbrauch
1.8 Eine grundlegende Veränderung: Der Wechsel von Einzelprozessoren zu Multiprozessoren
Hardware-Software-Schnittstelle
1.9 Fallstudie: Benchmarking des Intel Core i7
SPEC-CPU-Benchmark
Eine Benchmark für die Energieeffizienz: SPECpower
1.10 Beschleunigung: Matrixmultiplikation in Python
1.11 Fallstricke und Trugschlüsse
Selbsttest
1.12 Schlussbetrachtungen
Grundwissen
Übersicht über dieses Buch
1.13 Historische Perspektiven und Literaturhinweise
1.14 Fragestellungen für das Selbststudium
Antworten
1.15 Aufgaben
Aufgabe 1.1
Aufgabe 1.2
Aufgabe 1.3
Aufgabe 1.4
Aufgabe 1.5
Aufgabe 1.6
Aufgabe 1.7
Aufgabe 1.8
Aufgabe 1.9
Aufgabe 1.10
Aufgabe 1.11
Aufgabe 1.12
Aufgabe 1.13
Aufgabe 1.14
Aufgabe 1.15
Aufgabe 1.16
Antworten zu den Selbsttests
2 Befehle: Die Sprache des Rechners
2.1 Einführung
2.2 Operationen der Rechnerhardware
Beispiel: Übersetzen von zwei C-Anweisungen nach MIPS
Beispiel: Übersetzen einer komplexen C-Zuweisung nach MIPS
Selbsttest
2.3 Operanden der Rechnerhardware
Beispiel: Übersetzung einer Zuweisung in C mithilfe von Registern
Speicheroperanden
Beispiel: Zuweisung mit einem Operanden im Speicher übersetzen
Hardware-Software-Schnittstelle
Hardware-Software-Schnittstelle
Beispiel: Übersetzen mit Lade- und Speicherbefehlen
Hardware-Software-Schnittstelle
Konstanten oder Direktoperanden
Selbsttest
2.4 Vorzeichenbehaftete und nicht vorzeichenbehaftete Zahlen
Hardware-Software-Schnittstelle
Beispiel: Umrechnung von Binärwerten in Dezimalwerte
Hardware-Software-Schnittstelle
Beispiel: Einfache Lösung für die Negation
Beispiel: Einfache Lösung für die Vorzeichenerweiterung
Zusammenfassung
Selbsttest
2.5 Darstellung von Befehlen im Rechner
Beispiel: MIPS-Assemblerbefehl in Maschinenbefehl übersetzen
Beispiel: Umrechnung von Binärzahlen in Hexadezimalzahlen
Die Felder im MIPS-Befehlsformat
Beispiel: MIPS-Assemblersprache in Maschinensprache übersetzen
Hardware-Software-Schnittstelle
Grundwissen
Selbsttest
2.6 Logische Operationen
Selbsttest
2.7 Befehle zum Treffen von Entscheidungen
Beispiel: if-then-else in bedingte Verzweigung übersetzen
Hardware-Software-Schnittstelle
Schleifen
Beispiel: Eine while-Schleife in C übersetzen
Hardware-Software-Schnittstelle
Hardware-Software-Schnittstelle
Hardware-Software-Schnittstelle
Beispiel: Vorzeichenbehafteter vs. vorzeichenloser Vergleich
Beispiel: Abkürzung für die Überprüfung von Grenzen
Die case-/switch-Anweisung
Hardware-Software-Schnittstelle
Selbsttest
2.8 Unterstützung von Prozeduren durch die Rechnerhardware
Verwendung weiterer Register
Geschachtelte Prozeduren
Speicherallokation für neue Daten im Keller
Speicherallokation für neue Daten auf der Halde
2.9 Kommunikation mit Menschen
Beispiel: ASCII und Binärzahlen
Beispiel: Prozedur zum Kopieren einer Zeichenfolge übersetzen
Zeichen und Zeichenketten in Java
Selbsttest
Grundwissen
2.10 Umgang mit 32-Bit-Direktoperanden und 32-Bit-Adressen
32 -Bit-Direktoperanden
Adressbildung bei Verzweigungen und Sprüngen
MIPS-Adressierungsarten – eine Übersicht
Decodieren der Maschinensprache
2.11 Parallelität und Befehle: Synchronisierung
Selbsttest
2.12 Übersetzen und Starten eines Programms
Compiler
Assembler
Binder
Lader
Dynamisch gebundene Bibliotheken (DLLs)
Starten eines Java-Programms
2.13 Zusammenfassung am Beispiel eines Sortierprogramms in C
Die Prozedur swap
Registerzuteilung für swap
Die Prozedur sort
2.14 Felder und Zeiger im Vergleich
Die Version von clear mit Feldern
Die Version von clear mit Zeigern
Vergleich der beiden Versionen von clear
2.15 Fortgeschrittener Stoff: C-Compiler und Java-Interpreter
2.16 Fallstudie: ARMv7-Befehle (32 Bit)
Adressierungsmodi
Vergleichen und bedingte Verzweigung
Spezielle Funktionen von ARM
2.17 Fallstudie: ARMv8-Befehle (64 Bit)
2.18 Fallstudie: RISC-V-Befehle
2.19 Fallstudie: x86-Befehle
Die Entwicklung des Intel x86
x86-Register und Datenadressierungsarten
x86-Integer-Operationen
x86-Befehlscodierung
x86 – Schlussbetrachtung
2.20 Beschleunigung: Matrixmultiplikation in C
2.21 Fallstricke und Trugschlüsse
2.22 Schlussbetrachtungen
2.23 Historische Perspektiven und Literaturhinweise
2.24 Fragestellungen für das Selbststudium
Antworten
2.25 Aufgaben
Aufgabe 2.1
Aufgabe 2.2
Aufgabe 2.3
Aufgabe 2.4
Aufgabe 2.5
Aufgabe 2.6
Aufgabe 2.7
Aufgabe 2.8
Aufgabe 2.9
Aufgabe 2.10
Aufgabe 2.11
Aufgabe 2.12
Aufgabe 2.13
Aufgabe 2.14
Aufgabe 2.15
Aufgabe 2.17
Aufgabe 2.18
Aufgabe 2.19
Aufgabe 2.21
Aufgabe 2.22
Aufgabe 2.23
Aufgabe 2.24
Aufgabe 2.25
Aufgabe 2.26
Aufgabe 2.27
Aufgabe 2.28
Aufgabe 2.29
Aufgabe 2.30
Aufgabe 2.31
Aufgabe 2.32
Aufgabe 2.33
Aufgabe 2.34
Aufgabe 2.35
Aufgabe 2.36
Aufgabe 2.37
Aufgabe 2.38
Aufgabe 2.39
Aufgabe 2.40
Aufgabe 2.41
Aufgabe 2.42
Antworten zu den Selbsttests
3 Rechnerarithmetik
3.1 Einführung
3.2 Addition und Subtraktion
Beispiel: Binäre Addition und Subtraktion
Hardware-Software-Schnittstelle
Zusammenfassung
Selbsttest
3.3 Multiplikation
Sequentielle Version des Multiplikationsalgorithmus und der Multiplikationshardware
Multiplikation mit Vorzeichen
Schnellere Multiplikation
Multiplikation bei MIPS
Zusammenfassung
3.4 Division
Ein Divisionsalgorithmus und eine Divisionshardware
Division für vorzeichenbehaftete Zahlen
Schnellere Division
Division bei MIPS
Zusammenfassung
3.5 Gleitkommaarithmetik
Gleitkommadarstellung
Addition von Gleitkommazahlen
Multiplikation von Gleitkommazahlen
Gleitkommabefehle im MIPS-Befehlssatz
Genaue Arithmetik
Zusammenfassung
3.6 Parallelität und Computerarithmetik: Subwort-Parallelität
3.7 Fallstudie: Streaming-SIMD-Erweiterungen und fortgeschrittene Vektorerweiterungen für x86
3.8 Beschleunigung: Subwort-Parallelität und Matrixmultiplikation
3.9 Fallstricke und Trugschlüsse
3.10 Schlussbetrachtungen
3.11 Historische Perspektiven und Literaturhinweise
3.12 Fragestellungen für das Selbststudium
Antworten
3.13 Aufgaben
Aufgabe 3.1
Aufgabe 3.2
Aufgabe 3.3
Aufgabe 3.4
Aufgabe 3.5
Aufgabe 3.6
Aufgabe 3.7
Aufgabe 3.8
Aufgabe 3.9
Aufgabe 3.10
Aufgabe 3.11
Aufgabe 3.12
Aufgabe 3.13
Aufgabe 3.14
Aufgabe 3.15
Aufgabe 3.16
Aufgabe 3.17
Aufgabe 3.18
Aufgabe 3.19
Aufgabe 3.20
Aufgabe 3.21
Aufgabe 3.22
Aufgabe 3.23
Aufgabe 3.24
Aufgabe 3.25
Aufgabe 3.26
Aufgabe 3.27
Aufgabe 3.28
Aufgabe 3.29
Aufgabe 3.30
Aufgabe 3.31
Aufgabe 3.32
Aufgabe 3.33
Aufgabe 3.34
Aufgabe 3.35
Aufgabe 3.36
Aufgabe 3.37
Aufgabe 3.38
Aufgabe 3.39
Aufgabe 3.40
Aufgabe 3.41
Aufgabe 3.42
Aufgabe 3.43
Aufgabe 3.44
Aufgabe 3.45
Aufgabe 3.46
Aufgabe 3.47
Antworten zu den Selbsttests
4 Der Prozessor
4.1 Einführung
Eine einfache MIPS-Implementierung
4.2 Konventionen für den Entwurf von Logikschaltungen
Taktverfahren
Selbsttest
4.3 Aufbau eines Datenpfades
Entwurf eines einfachen Datenpfads
4.4 Eine einfache Implementierungsmethode
Die ALU-Steuerung
Entwurf der Hauptsteuereinheit
Warum die Eintaktimplementierung nicht mehr verwendet wird
4.5 Eine Mehrtaktimplementierung
4.6 Übersicht über die Technik des Pipelinings
Beispiel: Vergleich der Leistung eines sequentiellen Systems und eines Systems mit Pipelining
Entwurf von Befehlssätzen für das Pipelining
Pipeline-Hemmnisse
Strukturkonflikt
Datenkonflikte
Beispiel: Forwarding mit zwei Befehlen
Beispiel: Umordnen von Code zum Vermeiden von Pipelineleerläufen
Steuerkonflikte
Beispiel: Leistung des Sprungbefehls mit Leerlauf
Zusammenfassung: Die Technik des Pipelinings
Selbsttest
Zur Programmperformanz
Grundwissen
4.7 Pipelining von Datenpfad und Steuerwerk
Grafische Darstellung von Pipelines
Pipelining der Steuerung
4.8 Datenkonflikte: Forwarding vs. Stalling
Beispiel: Erkennen von Abhängigkeiten
Pipelinehemmnisse durch Datenabhängigkeit und Pipelineverzögerungen
Grundwissen
4.9 Steuerkonflikte
Annahme, dass Sprünge nicht ausgeführt werden
Reduktion der Verzögerung durch Sprünge
Dynamische Sprungvorhersage
Pipeline – Eine Zusammenfassung
4.10 Ausnahmebehandlung
Die Ausnahmebehandlung in der MIPS-Architektur
Ausnahmen in einer Pipeline-Implementierung
4.11 Parallelität auf Befehlsebene
Das Prinzip der Spekulation
Statische Mehrfachzuordnung
Prozessoren mit dynamischer Mehrfachzuordnung
Energieeffizienz und fortgeschrittenes Pipelining
4.12 Fallstudie: Intel Core i7 6700 und ARM Cortex-A53
Der ARM Cortex-A53
Performanz der A53-Pipeline
Der Intel Core i7 6700
Die Performanz des Intel Core i7
4.13 Beschleunigung: Parallelität auf Befehlsebene und Matrixmultiplikation
Selbsttest
4.14 Fortgeschrittener Stoff: Einführung in den Schaltungsentwurf
4.15 Fallstricke und Trugschlüsse
4.16 Schlussbetrachtungen
4.17 Historische Perspektiven und Literaturhinweise
4.18 Fragestellungen für das Selbststudium
Antworten
4.19 Aufgaben
Aufgabe 4.1
Aufgabe 4.2
Aufgabe 4.3
Aufgabe 4.4
Aufgabe 4.5
Aufgabe 4.6
Aufgabe 4.7
Aufgabe 4.8
Aufgabe 4.9
Aufgabe 4.10
Aufgabe 4.11
Aufgabe 4.12
Aufgabe 4.13
Aufgabe 4.14
Aufgabe 4.15
Aufgabe 4.16
Aufgabe 4.17
Aufgabe 4.18
Aufgabe 4.19
Aufgabe 4.20
Aufgabe 4.21
Aufgabe 4.22
Aufgabe 4.23
Aufgabe 4.24
Aufgabe 4.25
Aufgabe 4.26
Aufgabe 4.27
Aufgabe 4.28
Aufgabe 4.29
Aufgabe 4.30
Aufgabe 4.31
Aufgabe 4.32
Aufgabe 4.33
Antworten zu den Selbsttests
5 Groß und schnell: Ausnutzung der Speicherhierarchie
5.1 Einführung
Grundwissen
Selbsttest
5.2 Speichertechnologien
SRAM-Technologie
DRAM-Technologie
Flash-Speicher
Festplattenspeicher
5.3 Grundlagen des Cachings
Grundwissen
Zugriff auf einen Cache
Beispiel: Anzahl der Bits in einem Cache
Beispiel: Abbildung einer Adresse auf einen Cache-Block, der mehrere Wörter umfasst
Behandlung von Cache-Fehlzugriffen
Behandlung von Schreiboperationen
Ein Beispiel-Cache: Der Intrinsity-FastMATH-Prozessor
Zusammenfassung
Selbsttest
5.4 Cache-Leistung messen und verbessern
Beispiel: Berechnung der Cache-Leistung
Beispiel: Berechnung der mittleren Speicherzugriffszeit (AMAT)
Reduzierung von Cache-Fehlzugriffen durch eine flexiblere Platzierung von Blöcken
Beispiel: Fehlzugriffe und Assoziativität in Caches
Einen Block im Cache finden
Auswahl, welcher Block ersetzt werden soll
Beispiel: Größe der Tags versus Satzassoziativität
Reduzierung des Fehlzugriffsaufwands durch Cache-Speicherhierarchien
Beispiel: Die Leistung von Cache-Speicherhierarchien
Zur Programmperformanz
Softwareoptimierung durch Blocking
Selbsttest
Zusammenfassung
5.5 Zuverlässige Speicherhierarchie
Definition von Ausfällen
Der Hamming-SEC/DED-Code
5.6 Virtuelle Maschinen
Hardware-Software-Schnittstelle
Anforderungen an einen VMM (Virtual Machine Monitor)
(Fehlende) ISA-Unterstützung für virtuelle Maschinen
Schutz und ISA
5.7 Virtueller Speicher
Eine Seite platzieren und wieder finden
Seitenfehler
Schreiboperationen
Beschleunigung der Adressübersetzung: Der TLB
Integration von virtuellem Speicher, TLBs und Caches
Implementierung von Schutzmechanismen mit einem virtuellen Speicher
Verarbeitung von TLB-Fehlzugriffen und Seitenfehlern
Zusammenfassung
5.8 Allgemeines Schema der Speicherhierarchien
Frage 1: Wo kann ein Block platziert werden?
Frage 2: Wie findet man einen Block?
Frage 3: Welcher Block soll bei einem Cache-Fehlzugriff ersetzt werden?
Frage 4: Was passiert bei einer Schreiboperation?
Die drei Cs: Ein intuitives Modell für ein Verständnis des Verhaltens von Speicherhierarchien
5.9 Steuerung eines einfachen Caches mit einem endlichen Automaten
Ein einfacher Cache
Endliche Automaten
FSM für eine einfache Cache-Steuerung
5.10 Parallelität und Speicherhierarchien: Cache-Kohärenz
Grundlegende Vorgehensweisen für das Erzwingen der Kohärenz
Snooping-Protokolle
5.11 Parallelität und Speicherhierarchie: RAID
5.12 Fortgeschrittener Stoff: Cache-Controller
5.13 Fallstudie: Speicherhierarchien des ARM Cortex-A53 und des Intel Core i7
Performanz der Speicherhierarchien des Cortex-A53 und des Core i7
5.14 Beschleunigung: Cache-Blocking und Matrixmultiplikation
5.15 Fallstricke und Trugschlüsse
5.16 Schlussbetrachtungen
5.17 Historische Perspektive und Literaturhinweise
5.18 Fragestellungen für das Selbststudium
Antworten
5.19 Aufgaben
Aufgabe 5.1
Aufgabe 5.2
Aufgabe 5.3
Aufgabe 5.4
Aufgabe 5.5
Aufgabe 5.6
Aufgabe 5.7
Aufgabe 5.8
Aufgabe 5.9
Aufgabe 5.10
Aufgabe 5.11
Aufgabe 5.12
Aufgabe 5.13
Aufgabe 5.14
Aufgabe 5.15
Aufgabe 5.16
Aufgabe 5.17
Aufgabe 5.18
Aufgabe 5.19
Aufgabe 5.20
Aufgabe 5.21
Aufgabe 5.22
Aufgabe 5.23
Aufgabe 5.24
Aufgabe 5.25
Aufgabe 5.26
Aufgabe 5.27
Aufgabe 5.28
Aufgabe 5.29
Antworten zu den Selbsttests
6 Parallele Prozessoren: Vom Client zur Cloud
6.1 Einführung
Selbsttest
6.2 Warum es schwierig ist, parallele Programme zu entwickeln
Beispiel: Das Beschleunigungsproblem
Beispiel: Beschleunigungsproblem – nächste Stufe
Beispiel: Herausforderung bei der Beschleunigung: Lastausgleich
Selbsttest
6.3 SISD, MIMD, SIMD, SPMD und Vektor
SIMD in x86: Multimedia-Erweiterungen
Vektor
Vektor im Vergleich zu Skalar
Vektor im Vergleich zu Multimedia-Erweiterungen
6.4 Hardwareseitiges Multithreading
Selbsttest
6.5 Multicores und andere Multiprozessoren mit gemeinsam genutztem Speicher
Beispiel: Einfaches paralleles Programm für einen gemeinsam genutzten Adressraum
Hardware-Software-Schnittstelle
Selbsttest
6.6 Grafikprozessoren (GPUs) – Einführung
Hardware-Software-Schnittstelle
NVIDIA GPU-Architektur – Einführung
NVIDIA GPU-Speicherstrukturen
GPUs ins rechte Licht gerückt
Selbsttest
6.7 Domänenspezifische Architekturen
Selbsttest
6.8 Cluster, Warehouse Scale Computer und andere Multiprozessoren mit Nachrichtenaustausch
Hardware-Software-Schnittstelle
Warehouse-Scale-Computer
Hardware-Software-Schnittstelle
Selbsttest
6.9 Einführung in Multiprozessor-Netztopologien
Netzwerktopologien implementieren
6.10 Kommunikation mit der Außenwelt: Cluster
6.11 Multiprozessor-Benchmarks und Performanzmodelle
Performanzmodelle
Das Roofline-Modell
Vergleich von zwei Opteron-Generationen
6.12 Google TPUv3-Supercomputer und NVIDIA Volta GPU-Cluster: Benchmarks
Tiefe neuronale Netze: Training vs. Inferenz
DSA-Supercomputernetz
DSA-Supercomputerknoten
DSA Arithmetik
TPUv3 DSA vs. Volta GPU
Leistung
6.13 Beschleunigung: Multiple Prozessoren und Matrixmultiplikation
6.14 Fallstricke und Trugschlüsse
6.15 Schlussbetrachtungen
6.16 Historische Perspektive und Literaturhinweise
6.17 Fragestellungen für das Selbststudium
Antworten
6.18 Aufgaben
Aufgabe 6.1
Aufgabe 6.2
Aufgabe 6.3
Aufgabe 6.4
Aufgabe 6.5
Aufgabe 6.6
Aufgabe 6.7
Aufgabe 6.8
Aufgabe 6.9
Aufgabe 6.10
Aufgabe 6.11
Aufgabe 6.12
Aufgabe 6.13
Aufgabe 6.14
Aufgabe 6.15
Aufgabe 6.16
Aufgabe 6.17
Aufgabe 6.18
Aufgabe 6.19
Aufgabe 6.20
Antworten zu den Selbsttests
Fachbegriffe Englisch — Deutsch
Englisch — Deutsch
Deutsch — Englisch
Stichwortverzeichnis
Back Matter
Notes
← Prev
Back
Next →
← Prev
Back
Next →