Merge letzte Seite
This commit is contained in:
parent
714abafb4e
commit
95168b4e8a
Binary file not shown.
@ -110,29 +110,29 @@
|
||||
\setlength{\postmulticols}{1pt}
|
||||
\setlength{\multicolsep}{1pt}
|
||||
\setlength{\columnsep}{2pt}
|
||||
|
||||
|
||||
\paragraph{CISC}
|
||||
\section{Prozessorarchitekturen}
|
||||
\paragraph{CISC} complex instruction set computer
|
||||
\begin{itemize*}
|
||||
\item Complex Instruction Set Computing
|
||||
\item Einfache und komplexe Befehle
|
||||
\item Heterogener Befehlssatz
|
||||
\item Verschiedene Taktzahl pro Befehl
|
||||
\item verschiedene Taktzahl pro Befehl
|
||||
\item Viele Befehlscode-Formate mit unterschiedlicher Länge
|
||||
\item Mikroprogrammwerk
|
||||
\item Vermischung von Verarbeitungs \& Speicherbefehlen
|
||||
\item schwierig, unter CPI = 2 zu kommen
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{RISC}
|
||||
\paragraph{RISC} reduced instruction set computer
|
||||
\begin{itemize*}
|
||||
\item Reduced Instruction Set Computing
|
||||
\item wenige, einfache Befehle
|
||||
\item Orthogonaler Befehlssatz
|
||||
\item Meist 1 Takt pro Befehl
|
||||
\item Wenige Befehlscode-Formate mit einheitlicher Länge
|
||||
\item orthogonaler Befehlssatz
|
||||
\item meist 1 Takt pro Befehl
|
||||
\item wenige Befehlscode-Formate mit einheitlicher Länge
|
||||
\item Direktverdrahtung
|
||||
\item Trennung von Verarbeitungs \& Speicherbefehlen
|
||||
\item Hohe Ausführungsgeschwindigkeit $(CPI \leq 1)$
|
||||
\item hohe Ausführungsgeschwindigkeit $(CPI \leq 1)$
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{MIPS}
|
||||
@ -415,16 +415,24 @@
|
||||
\item oder „Verbreiterung“ der Ausgabe-Logik (issue logic) zur Behandlung mehrerer Operationen parallel
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{ VLIW - Very Long Instruction Word}
|
||||
\paragraph{VLIW} Very Long Instruction Word
|
||||
\begin{itemize*}
|
||||
\item Befehlszuordnung und Konfliktvermeidung durch Compiler
|
||||
\item Compiler muss Zeitbedarf der Speicherzugriffe in Befehlsplanung einbeziehen
|
||||
\item Befehlsstrom mit Tupel von Befehlen
|
||||
\item nicht un-flexibel bei Reaktion auf Laufzeitereignisse
|
||||
\item VLIW hat festes Befehlsformat; höhere Codedichte
|
||||
\item Forwarding Hardware - nach dem EX werden Daten in Pufferregister gespeichert und können vom nächsten Befehl schon genutzt werden
|
||||
\item WB erfolgt erst darauf
|
||||
\item Datenabhängigkeitsproblem wird verringert
|
||||
\item MUX nutzt eher Pufferdaten als Registerdaten
|
||||
\item verschiedene parallele Ausführungseinheiten
|
||||
\item Verteilung von Maschinencode direkt vom Befehlswort im Speicher vorgegeben
|
||||
\item für jede Ausführungseinheit dezidierte Anweisungen
|
||||
\item keine Abhängigkeiten, geringere Komplexität in Hardware
|
||||
\item Meist für stark parallelisierbare Aufgaben verwendet
|
||||
\item Vorteile:
|
||||
\begin{itemize*}
|
||||
\item Die parallele Architektur des Prozessors kann schon während der der Programmerstellung zur Optimierung genutzt werden
|
||||
\item parallele Architektur des Prozessors kann während der Programmerstellung zur Optimierung genutzt werden
|
||||
\item Keine aufwendige Prozessorhardware zur Befehlsverteilung erforderlich
|
||||
\item Ausführungszeiten sind im wesentlichen bekannt
|
||||
\end{itemize*}
|
||||
@ -435,8 +443,7 @@
|
||||
\item Rekompilierung für den Prozessor erforderlich
|
||||
\item Größerer Speicherbedarf, wenn Code nicht parallelisiert werden kann
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
\end{itemize*}
|
||||
% !{VLIW Dynamisch; Quelle RA2 Vorlesung 2020/21](Assets/RA2_VLIW-dynamisch.png)
|
||||
|
||||
EPIC = Explicitely Parallel Instruction Computing = IA64
|
||||
@ -494,19 +501,37 @@
|
||||
Magnetbänder & 100 s & 5 TB
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
|
||||
Adresspipelining
|
||||
\section{Speicherarchitekturen}
|
||||
\paragraph{Adresspipelining}
|
||||
\begin{itemize*}
|
||||
% !{Pipelining; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Adresspipelining.png)
|
||||
\item Matrixaufbau eines Speichers
|
||||
\item Aufteilen der Speicheradresse in Zeilen- und Spaltenadresse
|
||||
\item Aufteilen des Speicherzugriffs in mehrere Phasen
|
||||
\item parallele gestaffelte Abarbeitung dieser Phasen für mehrere Speicherzugriffe
|
||||
\item Adresse auslesen/dekodieren; Daten mit Prozessor
|
||||
\end{itemize*}
|
||||
% !{Pipelining; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Adresspipelining.png)
|
||||
Lesezugriff auf Speicher
|
||||
\begin{itemize*}
|
||||
\item Matrixaufbau eines Speichers
|
||||
\item Aufteilen der Speicheradresse in Zeilen- und Spaltenadresse
|
||||
\item Dekodierung der Zeilenadresse bestimmt Select-Leitung
|
||||
\item Komplette Zeile wird in den Zeilenpuffer geschrieben
|
||||
\item Durch Dekodierung der Spaltenadresse wird das gewünscht Datenwort ausgewählt
|
||||
\item Blocktransfer (Burst): Auslesen des kompletten Zeilenpuffers durch automatisches Inkrementieren der Spaltenadresse
|
||||
\item Dekodierung der Spaltenadresse bestimmt Datenwort
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Speicher Interlacing}
|
||||
\begin{itemize*}
|
||||
\item Speicheraufteilung in mehrere physische Bände
|
||||
\item Adressen nicht kontinuierlich in den Bänden, sondern wechseln von Band zu Band
|
||||
\item nahezu gleichzeitiges Benutzen der Daten möglich (Daten-/Adressbus verhindern Parallelität)
|
||||
\end{itemize*}
|
||||
|
||||
\paragraph{Burst Mode} Blocktransfer
|
||||
\begin{itemize*}
|
||||
\item Auslesen des kompletten Zeilenpuffers durch automatisches Inkrementieren der Spaltenadresse
|
||||
\item Prozessor gibt eine Adresse, Speicher liefert n Datenworte (Adr, Adr+1,..., Adr+n-1)
|
||||
\item falls folgende Datenworte genutzt werden, war für n Datenworte nur 1 Speicherzugriff (Zeit) nötig
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Typischer DRAM-Speicher}
|
||||
@ -530,20 +555,31 @@
|
||||
|
||||
%Interleaving
|
||||
% !{Interleaving; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Interleaving.png)
|
||||
|
||||
\subsection{Caches}
|
||||
|
||||
\subsection{Cache Speicher}
|
||||
\begin{itemize*}
|
||||
\item Cache = schneller Speicher, der vor einen größeren, langsamen Speicher geschaltet wird
|
||||
\item kleiner, schneller Prozessornaher Speicher
|
||||
\item CPU weiß nicht dass Cache zwischengeschaltet ist
|
||||
\item es wird immer zuerst im Cache nachgeschaut, zum Adressvergleich (kostet Zeit)
|
||||
\item 90\% der Zeit verbringt ein Programm in 10\% des Codes
|
||||
\item Puffer zwischen Hauptspeicher und Prozessor
|
||||
\item Prüfung anhand der Adresse, ob benötigte Daten im Cache vorhanden sind („Treffer“; cache hit)
|
||||
\item Cache besteht aus Cache Tabelle
|
||||
\begin{description*}
|
||||
\item[voll assoziativ] Adressvergl. der kompletten Adresse
|
||||
\item jede beliebige Adressfolge im Cache möglich
|
||||
\item kann zu langsamen Adressvergleich führen
|
||||
\item[direct-mapped] Adressvergleich nur über Teiladresse - eine Tabelle im Cache
|
||||
\item[mehr-wege-assoziativ] mehrere Adressvergleiche parallel
|
||||
\end{description*}
|
||||
\item Schreibstategien
|
||||
\begin{description*}
|
||||
\item[Write Back] Cache sammelt Schreibvorgänge und aktualisiert nur im Cache. Nach einer entsprechenden Anweisung werden Daten in den hauptspeicher kopiert (aktualisiert)
|
||||
\item[Write Trough] Daten werden sowohl im Cache als auch im Hauptspeicher aktualisiert
|
||||
\end{description*}
|
||||
\item Speicherverwaltung mit memory management günstiger vor dem Cache
|
||||
\item Prüfung anhand der Adresse, ob benötigte Daten im Cache vorhanden sind (Treffer: cache hit)
|
||||
\item Falls nicht (cache miss): Zugriff auf den (Haupt-) Speicher, Eintrag in den Cache
|
||||
%\item Prinzip eines Cache (Hit) !{Cachehit; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Cachehit.png)
|
||||
\item Organisations: direkt, mengenassoziativ, vollassoziativ
|
||||
\item Welcher Speicherblock sollte bei einem Fehlzugriff ersetzt werden?
|
||||
\item Ersetzungsstrategie: Zufällig, FIFO, LRU
|
||||
\item Was passiert beim Schreiben von Daten in den Cache?
|
||||
\item Schreibstrategie: write-back, write-through
|
||||
\item Such-Einheit im Cache: Cache-Zeile (cache line)
|
||||
\item Blockgröße ist Anzahl der Worte, die im Fall eines cache misses aus Speicher nachgeladen werden
|
||||
\item Verbindung Speicher $\leftrightarrow$ Cache ist so entworfen, dass Speicher durch zusätzliches Lesen nicht langsamer wird
|
||||
@ -555,17 +591,14 @@
|
||||
\item Breite Speicher, die mehrere Worte parallel übertragen können
|
||||
\end{itemize*}
|
||||
%\item 2-Wege Cache (Datensicht) !{2 Wege Cache; Quelle RA2 Vorlesung 2020/21](Assets/RA2_2-wege-cache.png)
|
||||
\item Direkt abgebildet (Direct mapping): Für caching von Befehlen besonders sinnvoll, weil bei Befehlen Aliasing sehr unwahrscheinlich ist
|
||||
\item Satz-assoziativ abgebildet (Set-associative mapping): Sehr häufige Organisationsform, mit Set-Größe = 2/4/8
|
||||
\item Vollassoziativ abgebildet (Associative mapping): Wegen der Größe moderner Caches kommt diese Organisationsform kaum in Frage
|
||||
\item Ersetzungs-Strategien
|
||||
\begin{itemize*}
|
||||
\item Zufallsverfahren: Hier wird der zu ersetzende Block innerhalb des Satzes zufällig ausgewählt.
|
||||
\item FIFO-Verfahren: Beim FIFO-Verfahren (engl. First In, First Out) wird der älteste Block ersetzt, auch wenn auf diesem gerade erst noch zugegriffen wurde
|
||||
\item LRU-Verfahren (least recently used ) Block ersetzt, auf den am längsten nicht mehr zugegriffen wurde
|
||||
\item LFU-Verfahren (least frequently used ) am seltensten gelesene Block ersetzt
|
||||
\item CLOCK-Verfahren: alle Platzierungen im Kreis auf einem Ziffernblatt angeordnet. Ein Zeiger wird im Uhrzeigersinn weiterbewegt und zeigt den zu ersetzenden Eintrag an.
|
||||
\end{itemize*}
|
||||
\begin{description*}
|
||||
\item[Zufall] zu ersetzende Block zufällig ausgewählt
|
||||
\item[FIFO] älteste Block ersetzt
|
||||
\item[LRU] (least recently used ) Block ersetzt, auf den am längsten nicht mehr zugegriffen wurde
|
||||
\item[LFU] (least frequently used ) am seltensten gelesene Block ersetzt
|
||||
\item[CLOCK] alle Platzierungen im Kreis auf einem Ziffernblatt angeordnet. Ein Zeiger wird im Uhrzeigersinn weiterbewegt und zeigt den zu ersetzenden Eintrag an
|
||||
\end{description*}
|
||||
\end{itemize*}
|
||||
|
||||
Strategien zum Rückschreiben $\rightarrow$ (Haupt-) Speicher
|
||||
@ -581,24 +614,80 @@
|
||||
|
||||
Trefferquote $T=\frac{N_C}{N_G}$ mit $N_G$ Gesamtzahl der Zugriffe auf Speicher und $N_C$ Anzahl der Zugriffe mit Hit auf Cache
|
||||
|
||||
\subsection{ Digital-Signal-Prozessoren}
|
||||
Entwickelt für hohe Leistung, u.a. sich wiederholende, numerisch intensive Aufgaben.
|
||||
In einem Befehlszyklus kann man ausführen:
|
||||
\section{Spezialrechner}
|
||||
\subsection{Einchiprechner}
|
||||
\begin{itemize*}
|
||||
\item eine oder mehrere MAC-Operationen
|
||||
\item ein oder mehrere Speicherzugriffe
|
||||
\item spezielle Unterstützung für effiziente Schleifen
|
||||
\end{itemize*}
|
||||
Die Hardware enthält:
|
||||
\begin{itemize*}
|
||||
\item Eine oder mehrere MAC-Einheiten
|
||||
\item On-Chip- und Off-Chip-Speicher mit mehreren Ports
|
||||
\item Mehrere On-Chip-Busse
|
||||
\item Adressgenerierungseinheit, die auf DSP-Anwendungen zugeschnittene Adressierungsmodi unterstützt
|
||||
\item geringer Stromverbrauch, Wärme
|
||||
\item relativ geringer Befehlsdurchsatz
|
||||
\item einfacher Befehlssatz
|
||||
\item komplexer Rechner auf einem Chip (Ram/Rom intern)
|
||||
\item an Problem angepasst
|
||||
\item so Leistungsfähig wie nötig
|
||||
\item Anwendung: einfache Steuer-/Regelungsaufgaben
|
||||
\end{itemize*}
|
||||
|
||||
\section{ Multiprozessorarchitekturen}
|
||||
Klassifikation nach Flynn
|
||||
\subsection{Digital-Signal-Prozessoren}
|
||||
\begin{itemize*}
|
||||
\item hohe Leistung, u.a. sich wiederholende, numerisch intensive Aufgaben
|
||||
\item pro Befehlszyklus kann man ausführen
|
||||
\begin{itemize*}
|
||||
\item mehrere ALU Funktionen (+Shifter)
|
||||
\item eine/mehrere MAC-Operationen
|
||||
\item ein/mehrere Speicherzugriffe
|
||||
\item spezielle Unterstützung effiziente Schleifen
|
||||
\end{itemize*}
|
||||
\item Die Hardware enthält
|
||||
\begin{itemize*}
|
||||
\item Eine oder mehrere MAC-Einheiten
|
||||
\item On-Chip- und Off-Chip-Speicher mit mehreren Ports
|
||||
\item Mehrere On-Chip-Busse
|
||||
\item Adressgenerierungseinheit
|
||||
\item größerer ROM, RAM (mit Stack), Cache
|
||||
\item externes Interface für Speicher und E/A
|
||||
\item DMA-Coprozessor
|
||||
\item mehrere universelle parallele E/A-Ports
|
||||
\item AD-Wandler meist nicht on-chip
|
||||
\end{itemize*}
|
||||
\item DSP's benutzung häufig VLIW
|
||||
\item Anwendung: Signal-/Bildverarbeitung
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Pipeline Prozessoren}
|
||||
\begin{itemize*}
|
||||
\item Aufteilung eines Befehls in Teilbefehle
|
||||
\item parallele Abarbeitung verschiedener Teilbefehle von unerschiedlichen Befehlen möglich
|
||||
\item Probleme
|
||||
\begin{itemize*}
|
||||
\item bedingte Sprünge (unvorhergesehen)
|
||||
\item LSG: Pipeline um 2 Schritte verzögern
|
||||
\item LSG: Sprungzielspekulation
|
||||
\item Datenabhängigkeit
|
||||
\item LSG: Pipeline um 2 Schritte verzögern
|
||||
\item LSG: Out-of-Order Prinzip nutzen
|
||||
\item LSG: Forwarding Hardware
|
||||
\end{itemize*}
|
||||
\item Superpipelining - noch mehr Befehlsaufteilung
|
||||
\end{itemize*}
|
||||
|
||||
|
||||
\subsection{Skalare Prozessoren}
|
||||
\begin{itemize*}
|
||||
\item Mikroarchitektur
|
||||
\item Befehlszuordnung und Konfliktvermeidung geschieht durch Hardware
|
||||
\item Speicherzugriffe automatisch von Load/Store Einheit
|
||||
\item ein Befehlsstrom mit einfachem Befehl an Ausführungseinheit
|
||||
\item bessere Reaktion auf Laufzeitereignisse
|
||||
\item Spekulation möglich
|
||||
\item Superskalar ($\geq 2$ EX Einheiten)
|
||||
\begin{itemize*}
|
||||
\item Befehle in Befehlsfenster gespeichert
|
||||
\item Zuordnungseinheit wählt Befehl aus, die parallel verarbeitet werden können
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
|
||||
\section{Multiprozessorarchitekturen}
|
||||
Klassifikation nach Flynn (Instruction/Data)
|
||||
\begin{center}
|
||||
\begin{tabular}{ c | c | c}
|
||||
& Ein Datenstrom & mehrere Datenströme \\\hline
|
||||
@ -625,7 +714,39 @@
|
||||
|
||||
%Reales Shared Memory System
|
||||
% !{Shared Memory System; Quelle RA2 Vorlesung 2020/21](Assets/RA2_SharedMemorySystem.png)
|
||||
|
||||
\subsection{Kopplung}
|
||||
\begin{description*}
|
||||
\item[enge Kopplung] (shared memory)
|
||||
\begin{itemize*}
|
||||
\item parallelzugriff in Datenbreite des Prozessors
|
||||
\item schneller Datenaustausch (Proz-Speicher-Zugriffszeit)
|
||||
\item neu lokal benachbarte Rechner
|
||||
\item aus Sicht des Prozessors gemeinsamer Speicher
|
||||
\item Arbites - Zuteiler für Busanforderungen
|
||||
\end{itemize*}
|
||||
\item[lose Kopplung] (distributed memory)
|
||||
\begin{itemize*}
|
||||
\item meist seriell 1 bit breit
|
||||
\item langsamer da über Kommunikations-schnittstelle
|
||||
\item auch global verteilte Rechner
|
||||
\item verschiedene Speicher dem Prozessor bewusst
|
||||
\end{itemize*}
|
||||
\item[Kopplung] verändern
|
||||
\begin{itemize*}
|
||||
\item Wartezeit auf Speicher
|
||||
\item Kommunikationsaufwand
|
||||
\item Kommunikationsfähigkeit
|
||||
\item optimale Prozessor-/Speicher-/Kommunikationspfad anzahl $<\infty$
|
||||
\end{itemize*}
|
||||
\end{description*}
|
||||
|
||||
\subsection{Out-of-Order Architektur}
|
||||
\begin{itemize*}
|
||||
\item statt Pipeline bei Datenabhängigen Befehlen um 2 Schritte verzögern, datenunabhängige Befehle einschieben
|
||||
\item möglichst ständige Auslastung aller EX Einheiten
|
||||
\end{itemize*}
|
||||
|
||||
Cache(daten)-Kohärenz
|
||||
\begin{itemize*}
|
||||
\item Kohärenz: welcher Wert wird beim Lesen abgeliefert
|
||||
@ -695,188 +816,7 @@
|
||||
\item Directory-Protokolle skalieren daher auch für Netze ohne Broadcast-Fähigkeit
|
||||
\item Presence Flag Vector: Im Hauptspeicher abgelegter Bit-Vektor für jeden einzelnen Speicherblock (1 Bit pro Prozessor/Cache + Statusbits (dirty, modified))
|
||||
\item Problem: Wachstum des Speicherbedarfs linear mit Anzahl der Prozessoren
|
||||
\end{itemize*}
|
||||
|
||||
\newpage
|
||||
\section{Spezialrechner}
|
||||
\subsection{Einchiprechner}
|
||||
\begin{itemize*}
|
||||
\item geringer Stromverbrauch, Wärme
|
||||
\item relativ geringer Befehlsdurchsatz
|
||||
\item einfacher Befehlssatz
|
||||
\item komplexer Rechner auf einem Chip (Ram/Rom intern)
|
||||
\item an Problem angepasst
|
||||
\item so Leistungsfähig wie nötig
|
||||
\item Anwendung: einfache Steuer-/Regelungsaufgaben
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Digitale Signalprozessorren}
|
||||
\begin{itemize*}
|
||||
\item mehrere ALU Funktionen (+Shifter)
|
||||
\item größerer ROM, RAM (mit Stack), Cache
|
||||
\item externes Interface für Speicher und E/A
|
||||
\item DMA-Coprozessor
|
||||
\item mehrere universelle parallele E/A-Ports
|
||||
\item AD-Wandler meist nicht on-chip
|
||||
\item DSP's benutzung häufig VLIW
|
||||
\item Anwendung: Signal-/Bildverarbeitung
|
||||
\end{itemize*}
|
||||
|
||||
\section{Prozessorarchitekturen}
|
||||
\subsection{CISC - complex instruction set Computer}
|
||||
\begin{itemize*}
|
||||
\item einfache und komplexe Befehle
|
||||
\item heterogener Befehlssatz
|
||||
\item verschiedene Taktanzahl pro Befehl
|
||||
\item viele Befehlscodeformate mit unterschiedlicher Länge
|
||||
\item Mikroprogrammwerk - Makrobefehl durch Mikrobefehlsfolge
|
||||
\item vermischung von Verarbeitungs- und Speicherbefehlen
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{RISC - reduced instruction set computer}
|
||||
\begin{itemize*}
|
||||
\item nur einfache Befehle
|
||||
\item ortohonaler Befehlssatz
|
||||
\item meist 1 Takt pro Befehl
|
||||
\item wenige Befehlscodeformate mit einheitlicher Länge
|
||||
\item Direktverdrahtung
|
||||
\item Trennung von Verarbeitungs- und Speicherbefehlen
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Pipeline Prozessoren}
|
||||
\begin{itemize*}
|
||||
\item Aufteilung eines Befehls in Teilbefehle
|
||||
\item parallele Abarbeitung verschiedener Teilbefehle von unerschiedlichen Befehlen möglich
|
||||
\item Probleme
|
||||
\begin{itemize*}
|
||||
\item bedingte Sprünge (unvorhergesehen)
|
||||
\item LSG: Pipeline um 2 Schritte verzögern
|
||||
\item LSG: Sprungzielspekulation
|
||||
\item Datenabhängigkeit
|
||||
\item LSG: Pipeline um 2 Schritte verzögern
|
||||
\item LSG: Out-of-Order Prinzip nutzen
|
||||
\item LSG: Forwarding Hardware
|
||||
\end{itemize*}
|
||||
\item Superpipelining - noch mehr Befehlsaufteilung
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Out-of-Order Architektur}
|
||||
\begin{itemize*}
|
||||
\item statt Pipeline bei Datenabhängigen Befehlen um 2 Schritte verzögern, datenunabhängige Befehle einschieben
|
||||
\item möglichst ständige Auslastung aller EX Einheiten
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Skalare Prozessoren}
|
||||
\begin{itemize*}
|
||||
\item Mikroarchitektur
|
||||
\item Befehlszuordnung und Konfliktvermeidung geschieht durch Hardware
|
||||
\item Speicherzugriffe automatisch von Load/Store Einheit
|
||||
\item ein Befehlsstrom mit einfachem Befehl an Ausführungseinheit
|
||||
\item bessere Reaktion auf Laufzeitereignisse
|
||||
\item Spekulation möglich
|
||||
\item Superskalar ($\geq 2$ EX Einheiten)
|
||||
\begin{itemize*}
|
||||
\item Befehle in Befehlsfenster gespeichert
|
||||
\item Zuordnungseinheit wählt Befehl aus, die parallel verarbeitet werden können
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{VLIW Architektur (very long instruction word)}
|
||||
\begin{itemize*}
|
||||
\item Befehlszuordnung und Konfliktvermeidung geschieht durch Compiler
|
||||
\item Compiler muss Zeitbedarf der Speicherzugriffe in Befehlsplanung einbeziehen
|
||||
\item Befehlsstrom mit Tupel von Befehlen
|
||||
\item nicht un-flexibel bei Reaktion auf Laufzeitereignisse
|
||||
\item VLIW hat festes Befehlsformat; höhere Codedichte
|
||||
\item Vorteilhaft bei gut parallelisierbarem Code
|
||||
\item Forwarding Hardware - nach dem EX werden Daten in Pufferregister gespeichert und können vom nächsten Befehl schon genutzt werden
|
||||
\item WB erfolgt erst darauf
|
||||
\item Datenabhängigkeitsproblem wird verringert
|
||||
\item MUX nutzt eher Pufferdaten als Registerdaten
|
||||
\end{itemize*}
|
||||
|
||||
\section{Speicherarchitekturen}
|
||||
\subsection{Adresspipelining}
|
||||
\begin{itemize*}
|
||||
\item Aufteilen des Speicherzugriffs in mehrere Phasen
|
||||
\item parallele gestaffelte Abarbeitung dieser Phasen für mehrere Speicherzugriffe
|
||||
\item Adresse auslesen/dekodieren; Daten mit Prozessor
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Speicher Interlacing}
|
||||
\begin{itemize*}
|
||||
\item Speicheraufteilung in mehrere physische Bände
|
||||
\item Adressen nicht kontinuierlich in den Bänden, sondern wechseln von Band zu Band
|
||||
\item nahezu gleichzeitiges Benutzen der Daten möglich (Daten-/Adressbus verhindern Parallelität)
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Burst Mode}
|
||||
\begin{itemize*}
|
||||
\item Prozessor gibt eine Adresse, Speicher liefert n Datenworte (Adr, Adr+1,..., Adr+n-1)
|
||||
\item falls folgende Datenworte genutzt werden, war für n Datenworte nur 1 Speicherzugriff (Zeit) nötig
|
||||
\end{itemize*}
|
||||
|
||||
\subsection{Cache Speicher}
|
||||
\begin{itemize*}
|
||||
\item kleinder, schneller Prozessornaher Speicher
|
||||
\item CPU weiß nciht dass Cache zwischengeschaltet ist
|
||||
\item es wird immer zuerst im Cache nachgeschaut, zum Adressvergleich (kostet Zeit)
|
||||
\item Cache besteht aus Cache Tabelle
|
||||
\begin{itemize*}
|
||||
\item voll assoziativ - Adressvergl. der kompletten Adresse
|
||||
\item jede beliebige Adressfolge im Cache möglich
|
||||
\item kann zu langsamen Adressvergleich führen
|
||||
\item direct-mapped Adressvergleich nur über Teiladresse - eine Tabelle im Cache
|
||||
\item mehr-wege-assoziativ Cache - mehrere Adressvergleiche parallel
|
||||
\end{itemize*}
|
||||
\item Schreibstategien (bei prozessor WB)
|
||||
\begin{itemize*}
|
||||
\item Write Trough Daten werden sowohl im Cache als auch im Hauptspeicher aktualisiert
|
||||
\item Write Back: Cache sammelt Schreibvorgänge und aktualisiert nur im Cache. Nach einer entsprechenden Anweisung werden Daten in den hauptspeicher kopiert (aktualisiert)
|
||||
\end{itemize*}
|
||||
\item (über) Schreibstategien
|
||||
\begin{itemize*}
|
||||
\item nach Anlaufphase ist Cache immer vollständig gefüllt
|
||||
\item für neue Einträge Ersetzungsstrategien benötigt FIFO, least recetly used - durch Zusatzhardware
|
||||
\end{itemize*}
|
||||
\item Speicherverwaltung mit memory management günstiger vor dem Cache
|
||||
\end{itemize*}
|
||||
|
||||
\section{Parallele Rechnerarchitekturen}
|
||||
\subsection{Flynn}
|
||||
\begin{description*}
|
||||
\item[SISD] Single Instruction Single Data
|
||||
\item[SIMD] Single Instruction Multiple Data
|
||||
\item[MIMD] Multiple Instruction Multiple Data
|
||||
\item[MISD] Multiple Instruction Single Data
|
||||
\end{description*}
|
||||
|
||||
\subsection{MIMD Kopplung}
|
||||
\begin{description*}
|
||||
\item[enge K.] (shared memory)
|
||||
\begin{itemize*}
|
||||
\item parallelzugriff in Datenbreite des Prozessors
|
||||
\item schneller Datenaustausch (Proz-Speicher-Zugriffszeit)
|
||||
\item neu lokal benachbarte Rechner
|
||||
\item aus Sicht des Prozessors gemeinsamer Speicher
|
||||
\item Arbites - Zuteiler für Busanforderungen
|
||||
\end{itemize*}
|
||||
\item[lose K.] (distributed memory)
|
||||
\begin{itemize*}
|
||||
\item meist seriell 1 bit breit
|
||||
\item langsamer da über Kommunikations-schnittstelle
|
||||
\item auch global verteilte Rechner
|
||||
\item verschiedene Speicher dem Prozessor bewusst
|
||||
\end{itemize*}
|
||||
\item[Kopplung] verändern
|
||||
\begin{itemize*}
|
||||
\item Wartezeit auf Speicher
|
||||
\item Kommunikationsaufwand
|
||||
\item Kommunikationsfähigkeit
|
||||
\item optimale Prozessor-/Speicher-/Kommunikationspfad anzahl $<\infty$
|
||||
\end{itemize*}
|
||||
\end{description*}
|
||||
|
||||
\end{itemize*}
|
||||
|
||||
\end{multicols}
|
||||
\end{document}
|
Loading…
Reference in New Issue
Block a user