added Images

This commit is contained in:
WieErWill 2021-03-31 11:19:12 +02:00
parent ab1ae3bdbf
commit f7feb93861
18 changed files with 76 additions and 63 deletions

BIN
Assets/RA2_ATiny.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

BIN
Assets/RA2_Aufbau.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
Assets/RA2_Cache-Index.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

BIN
Assets/RA2_Cache-Tags.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
Assets/RA2_Cache-Tags2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

BIN
Assets/RA2_Cache-line.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
Assets/RA2_DRAM.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
Assets/RA2_Pipeline.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
Assets/RA2_Pipelines.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
Assets/RA2_Vorhersagen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

View File

@ -141,11 +141,11 @@
\item 32-bit Architektur/64-bit Erweiterung \item 32-bit Architektur/64-bit Erweiterung
\end{itemize*} \end{itemize*}
\includegraphics[width=\textwidth/4]{Assets/RA2_Operanden.png} \begin{center}
\includegraphics[width=\textwidth/7]{Assets/RA2_Operanden.png}
\includegraphics[width=\textwidth/4]{Assets/RA2_pipelineCPU.png} \includegraphics[width=\textwidth/7]{Assets/RA2_pipelineCPU.png}
\includegraphics[width=\textwidth/4]{Assets/RA2_mehrzyklenCPU.png} \includegraphics[width=\textwidth/4]{Assets/RA2_mehrzyklenCPU.png}
\end{center}
Aufgaben der einzelnen Phasen Aufgaben der einzelnen Phasen
\begin{description*} \begin{description*}
@ -161,22 +161,22 @@
\item resource hazards: Ressourcenabhängigkeiten \item resource hazards: Ressourcenabhängigkeiten
\item data hazards: Datenabhängigkeiten \item data hazards: Datenabhängigkeiten
\begin{description*} \begin{description*}
\item[Antidatenabhängig] Befehl j beschreibt Speicherzelle, die von i noch gelesen werden: WAR \item[Antidatenabhängig] WAR (write after read)
\item[Ausgabeabhängig] Befehle i und j beschreiben die selbe Speicherzelle: WAW (write after write) \item[Ausgabeabhängig] WAW (write after write)
\item[Datenabhängigkeit] Operation hängt von vorhergehender Operation ab: RAW \item[Datenabhängigkeit] RAW (read after write)
\end{description*} \end{description*}
\item control hazards: Kontrollabhängigkeiten \item control hazards: Kontrollabhängigkeiten
\begin{itemize*} \begin{itemize*}
\item Gleichheit der Register wird in instruction decode-Stufe geprüft \item Gleichheit der Register in ID-Stufe prüfen
\item Sprungziel wird in separatem Adressaddierer in instruction decode-Stufe berechnet \item Sprungziel in separatem Adressaddierer in ID berechnet
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
\subsection{Sprungvorhersage} \subsection{Sprungvorhersage}
\paragraph{Einfache lokale Prädiktoren} \paragraph{Einfache lokale Prädiktoren}
\begin{itemize*} \begin{itemize*}
\item Vorhersage, ob bedingter Sprung genommen wird oder nicht \item Vorhersage: bedingter Sprung genommen oder nicht
\item Prädiktion allein anhand der Historie des betrachteten, aktuellen Sprungs \item Prädiktion anhand der Historie des betrachteten Sprungs
\item Historie eines Sprungs wird mit 1 bis n Bits gepuffert \item Historie eines Sprungs wird mit 1 bis n Bits gepuffert
\end{itemize*} \end{itemize*}
@ -189,20 +189,20 @@
\item Prädiktion: Sprung verhält sich wie beim letzten Mal \item Prädiktion: Sprung verhält sich wie beim letzten Mal
\item Nachfolgebefehle ab vorhergesagter Adresse holen \item Nachfolgebefehle ab vorhergesagter Adresse holen
\item Falls Prädiktion fehlerhaft: Prädiktionsbit invertieren \item Falls Prädiktion fehlerhaft: Prädiktionsbit invertieren
\item Alle Sprünge, deren Adressen im Indexteil übereinstimmen, werden derselben Zelle im branch prediction buffer zugeordnet \item Sprünge, gleicher Adressen im Indexteil, werden selber Zelle im branch prediction buffer zugeordnet
\item Einfachste Art von Puffer \item Einfachste Art von Puffer
\item Hat eine bestimmte Kapazität \item Hat eine bestimmte Kapazität
\item Kann nicht für alle Sprünge Einträge enthalten \item Kann nicht für alle Sprünge Einträge enthalten
\item Reduziert branch penalty nur, wenn branch delay länger als Berechnung der Zieladresse mit branch prediction buffer dauert \item Reduziert branch penalty, wenn branch delay $>$ Berechnung der Zieladresse mit branch p. buffer
\item Prädiktion kann fehlerhaft sein \item Prädiktion kann fehlerhaft sein
\item Prädiktion kann von anderem Sprungbefehl stammen \item Prädiktion kann von anderem Sprungbefehl stammen
\end{itemize*} \end{itemize*}
\paragraph{Einführung von Tag Bits} \paragraph{Einführung von Tag Bits}
\begin{itemize*} \begin{itemize*}
\item Sprünge, gleicher Adressen im Indexteil, in selber Zelle
\item Tag: gültiger Eintrag, falls Tag-Bits gleich sind \item Tag: gültiger Eintrag, falls Tag-Bits gleich sind
\item Alle Sprünge, deren Adressen im Indexteil übereinstimmen, werden derselben Zelle im branch prediction buffer zugeordnet. Überprüfung mittels tags, ob es der richtige Eintrag ist. \item Fehlerrate 1-Bit-P in Schleifenkonstrukten doppelt so hoch wie Anzahl ausgeführter Sprünge
\item Allgemein: Fehlerrate von 1-Bit Prädiktor ist für Sprünge in Schleifenkonstrukten doppelt so hoch wie die Anzahl ausgeführter Sprünge
\end{itemize*} \end{itemize*}
\paragraph{2 Bit Vorhersagen} \paragraph{2 Bit Vorhersagen}
@ -217,15 +217,15 @@
\item Verwendet n-Bit Zähler \item Verwendet n-Bit Zähler
\item Sättigungsarithmetik (kein wrap around bei Überlauf) \item Sättigungsarithmetik (kein wrap around bei Überlauf)
\item Kann Werte zwischen $0$ und $2^{n-1}$ annehmen \item Kann Werte zwischen $0$ und $2^{n-1}$ annehmen
\item Wenn Zähler größer als Hälfte des Maximums $(2^{n-1})$: Vorhersagen, dass Sprung ausgeführt wird; ansonsten vorhersagen, dass Sprung nicht genommen wird \item Wenn Zähler größer als Hälfte des Maximums $(2^{n-1})$: Vorhersagen, dass Sprung ausgeführt wird
\item Zähler wird bei ausgeführtem Sprung inkrementiert und bei nicht ausgeführtem dekrementiert \item Zähler bei ausgeführtem Sprung inkrementiert und bei nicht ausgeführtem dekrementiert
\item Praxis: 2-Bit Prädiktor ähnlich gut wie n-Bit Prädiktor \item Praxis: 2-Bit Prädiktor ähnlich gut wie n-Bit Prädiktor
\end{itemize*} \end{itemize*}
\paragraph{Korrelierende Prädikatoren} \paragraph{Korrelierende Prädikatoren}
\begin{itemize*} \begin{itemize*}
\item Betrachtet nur Verhalten eines Sprungs; rein lokal \item Betrachtet nur Verhalten eines Sprungs; rein lokal
\item Verbesserung durch Betrachtung des Verhaltens anderer Sprünge \item Verbesserung durch Betrachtung anderer Sprünge
\item erhält so korrelierenden/zweistufigen Prädiktor \item erhält so korrelierenden/zweistufigen Prädiktor
\item Prinzip: Aufgrund globaler Information wird einer von mehreren lokalen Prädiktoren ausgewählt \item Prinzip: Aufgrund globaler Information wird einer von mehreren lokalen Prädiktoren ausgewählt
\item Beziehen zur Vorhersage des Verhaltens Kontext-Information mit ein \item Beziehen zur Vorhersage des Verhaltens Kontext-Information mit ein
@ -254,8 +254,11 @@
\item Vorhersagepuffer adressiert via Konkatenation von unteren Adressbits der Sprungbefehlsadresse \item Vorhersagepuffer adressiert via Konkatenation von unteren Adressbits der Sprungbefehlsadresse
\end{itemize*} \end{itemize*}
\paragraph{High Performance Befehlsdekodierung} \begin{center}
\includegraphics[width=\textwidth/7]{Assets/RA2_Vorhersagen.png}
\end{center}
\paragraph{High Performance Befehlsdekodierung}
reine Vorhersage eines Sprungs i.d.R. nicht ausreichend reine Vorhersage eines Sprungs i.d.R. nicht ausreichend
\begin{itemize*} \begin{itemize*}
\item Befehlsstrom mit großer Bandbreite erforderlich \item Befehlsstrom mit großer Bandbreite erforderlich
@ -478,15 +481,7 @@
\item Häufig benötigte Speicherinhalte in kleinen Speichern \item Häufig benötigte Speicherinhalte in kleinen Speichern
\end{itemize*} \end{itemize*}
\begin{center} \begin{center}
\begin{tabular}{c | c | c} \includegraphics[width=\textwidth/4]{Assets/RA2_Speicherhierarchie.png}
Ebene & Latenz & Kapazität \\\hline
Register & 100 ps & 1 KB \\
Cache & 1 ns & 12 MB \\
Hauptspeicher/RAM & 10 ns & 8 GB \\
Festplatte & 10 ms & 1 TB \\
CD-ROM/DVD & 100 ms & 50 GB \\
Magnetbänder & 100 s & 5 TB
\end{tabular}
\end{center} \end{center}
\section{Speicherarchitekturen} \section{Speicherarchitekturen}
@ -555,7 +550,7 @@
\end{description*} \end{description*}
\item Schreibstategien \item Schreibstategien
\begin{description*} \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 Back] Cache sammelt Schreibvorgänge und aktualisiert Speicher nach Anweisung
\item[Copy Back] Rückschreiben erfolgt erst, wenn Cache-Zeile bei Miss verdrängt wird \item[Copy Back] Rückschreiben erfolgt erst, wenn Cache-Zeile bei Miss verdrängt wird
\item[Write Through] Daten werden sowohl im Cache als auch im Hauptspeicher aktualisiert \item[Write Through] Daten werden sowohl im Cache als auch im Hauptspeicher aktualisiert
% !{Write Trough vs Write Back; Quelle RA2 Vorlesung 2020/21](Assets/RA2_cache-write-trough-vs-back.png) % !{Write Trough vs Write Back; Quelle RA2 Vorlesung 2020/21](Assets/RA2_cache-write-trough-vs-back.png)
@ -627,13 +622,14 @@
\subsection{Pipeline Prozessoren} \subsection{Pipeline Prozessoren}
\begin{itemize*} \begin{itemize*}
\item Aufteilung eines Befehls in Teilbefehle \item Aufteilung eines Befehls in Teilbefehle
\item parallele Abarbeitung verschiedener Teilbefehle von unerschiedlichen Befehlen möglich \item parallele Abarbeitung verschiedener Teilbefehle
\item Probleme \item Problem: bedingte Sprünge (unvorhergesehen)
\begin{itemize*} \begin{itemize*}
\item bedingte Sprünge (unvorhergesehen)
\item LSG: Pipeline um 2 Schritte verzögern \item LSG: Pipeline um 2 Schritte verzögern
\item LSG: Sprungzielspekulation \item LSG: Sprungzielspekulation
\item Datenabhängigkeit \end{itemize*}
\item Problem: Datenabhängigkeit
\begin{itemize*}
\item LSG: Pipeline um 2 Schritte verzögern \item LSG: Pipeline um 2 Schritte verzögern
\item LSG: Out-of-Order Prinzip nutzen \item LSG: Out-of-Order Prinzip nutzen
\item LSG: Forwarding Hardware \item LSG: Forwarding Hardware
@ -646,7 +642,7 @@
\item Mikroarchitektur \item Mikroarchitektur
\item Befehlszuordnung und Konfliktvermeidung geschieht durch Hardware \item Befehlszuordnung und Konfliktvermeidung geschieht durch Hardware
\item Speicherzugriffe automatisch von Load/Store Einheit \item Speicherzugriffe automatisch von Load/Store Einheit
\item ein Befehlsstrom mit einfachem Befehl an Ausführungseinheit \item Befehlsstrom mit einfachem Befehl an EX-Einheit
\item bessere Reaktion auf Laufzeitereignisse \item bessere Reaktion auf Laufzeitereignisse
\item Spekulation möglich \item Spekulation möglich
\item Superskalar ($\geq 2$ EX Einheiten) \item Superskalar ($\geq 2$ EX Einheiten)
@ -656,8 +652,8 @@
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
\section{Multiprozessorarchitekturen} \paragraph{Multiprozessorarchitekturen}
Klassifikation nach Flynn (Instruction/Data) nach Flynn
\begin{center} \begin{center}
\begin{tabular}{ c | c | c} \begin{tabular}{ c | c | c}
& Ein Datenstrom & mehrere Datenströme \\\hline & Ein Datenstrom & mehrere Datenströme \\\hline
@ -665,15 +661,12 @@
mehrere Bs & MISD & MIMD mehrere Bs & MISD & MIMD
\end{tabular} \end{tabular}
\end{center} \end{center}
\begin{center}
% !{SISD; Quelle RA2 Vorlesung 2020/21](Assets/RA2_SISD.png) \includegraphics[width=\textwidth/13]{Assets/RA2_SISD.png}
% !{SIMD; Quelle RA2 Vorlesung 2020/21](Assets/RA2_SIMD.png) \includegraphics[width=\textwidth/13]{Assets/RA2_SIMD.png}
% !{MISD; Quelle RA2 Vorlesung 2020/21](Assets/RA2_MISD.png) \includegraphics[width=\textwidth/13]{Assets/RA2_MISD.png}
% !{MIMD; Quelle RA2 Vorlesung 2020/21](Assets/RA2_MIMD.png) \includegraphics[width=\textwidth/13]{Assets/RA2_MIMD.png}
\end{center}
% Speicherstrukturen: !{Speicherstrukturen; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Speicherstrukturen.png)
%Enge und lose Kopplung !{Enge und lose Kopplung; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Enge%20und%20lose%20Kopplung.png)
%Verbindungsnetzwerke %Verbindungsnetzwerke
% !{Verbindungsnetzwerke; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Verbindungsnetzwerke.png) % !{Verbindungsnetzwerke; Quelle RA2 Vorlesung 2020/21](Assets/RA2_Verbindungsnetzwerke.png)
@ -690,7 +683,7 @@
\item[enge Kopplung] (shared memory) \item[enge Kopplung] (shared memory)
\begin{itemize*} \begin{itemize*}
\item parallelzugriff in Datenbreite des Prozessors \item parallelzugriff in Datenbreite des Prozessors
\item schneller Datenaustausch (Proz-Speicher-Zugriffszeit) \item schneller Datenaustausch
\item neu lokal benachbarte Rechner \item neu lokal benachbarte Rechner
\item aus Sicht des Prozessors gemeinsamer Speicher \item aus Sicht des Prozessors gemeinsamer Speicher
\item Arbites - Zuteiler für Busanforderungen \item Arbites - Zuteiler für Busanforderungen
@ -707,9 +700,22 @@
\item Wartezeit auf Speicher \item Wartezeit auf Speicher
\item Kommunikationsaufwand \item Kommunikationsaufwand
\item Kommunikationsfähigkeit \item Kommunikationsfähigkeit
\item optimale Prozessor-/Speicher-/Kommunikationspfad anzahl $<\infty$
\end{itemize*} \end{itemize*}
\end{description*} \end{description*}
\begin{center}
\includegraphics[width=\textwidth/7]{Assets/RA2_Enge und lose Kopplung.png}
\includegraphics[width=\textwidth/7]{Assets/RA2_Speicherstrukturen.png}
\end{center}
\paragraph{Verbindungsnetzwerke}
\begin{description*}
\item[Linie] $KL_{max}=n-1$
\item[Ring] $KL_{max}=\frac{n}{2}$
\item[Torus 2D] $KL_{max}=\sqrt{n}-1$
\item[Torus 3D] $KL_{max}=\frac{3}{2}\sqrt[3]{n}-1$
\item[Hypercube] $iD=i$
\item[Gitter] $iD=i*\sqrt[i]{n}-1$
\end{description*}
\subsection{Out-of-Order Architektur} \subsection{Out-of-Order Architektur}
\begin{itemize*} \begin{itemize*}
@ -735,11 +741,13 @@
\paragraph{Snooping-Protokolle} \paragraph{Snooping-Protokolle}
\begin{itemize*} \begin{itemize*}
\item Die Caches aller Prozessoren beobachten alle Datenübertragungen von jedem Cache zum Hauptspeicher. \item Caches aller Prozessoren beobachten alle Daten- übertragungen von jedem Cache zum Hauptspeicher
\item Voraussetzung: broadcastfähiges Verbindungsnetzwerk \item Voraussetzung: broadcastfähiges Verbindungsnetzwerk
\item Write Invalidate: Das Verändern eines Blocks im Speicher führt zur Invalidierung aller Cache-Kopien mit der gleichen Adresse
\item Write Update / Write Broadcast: Das Verändern eines Blocks im Speicher führt zur Modifikation aller anderen Cache-Blöcke mit der gleichen Adresse
\end{itemize*} \end{itemize*}
\begin{description*}
\item[Write Invalidate] Verändern eines Blocks im Speicher führt zur Invalidierung aller Cache-Kopien mit der gleichen Adresse
\item[Write Update/Broadcast] Verändern eines Blocks im Speicher führt zur Modifikation aller anderen Cache-Blöcke mit der gleichen Adresse
\end{description*}
\paragraph{Copy-Back} \paragraph{Copy-Back}
\begin{itemize*} \begin{itemize*}
@ -749,20 +757,25 @@
\item Mischung zwischen Write-Through und Copy-Back \item Mischung zwischen Write-Through und Copy-Back
\end{itemize*} \end{itemize*}
\vfill
\paragraph{MESI} \paragraph{MESI}
\begin{description*} \begin{center}
\item[Modified] Cache-Block wurde lokal geändert, die Kopie im Hauptspeicher ist ungültig. Will ein anderer Prozessor im Hauptspeicher lesen, so muss der Cache-Block erst in den Hauptspeicher zurückgeschrieben werden \includegraphics[width=\textwidth/4]{Assets/RA2_MESI-Zustände.png}
\item[Exclusive] (unmodified): Dieser Cache ist der einzige, der den Cache-Block enthält, Wert im Hauptspeicher ist gültig. Liest ein anderer Prozessor im Hauptspeicher, so muss die Zeile als shared markiert werden. Wird das Datum im Hauptspeicher verändert, ist der Cache-Block auf invalid zu setzen \includegraphics[width=\textwidth/4]{Assets/RA2_MESI-Bedingungen.png}
\item[Shared] (unmodified): Mehrere Caches enthalten Daten. Da alle bisher nur gelesen haben, sind Daten im Hauptspeicher gültig. Schreibzugriffe auf einen shared Cache-Block müssen immer zu einer Bus-Operation führen, damit die Cache-Blocks der anderen Caches auf invalid gesetzt werden können \end{center}
\item[Invalid] Cache-Block ist nicht geladen bzw. veraltet/ungültig %\begin{description*}
\end{description*} % \item[Modified] Cache-Block wurde lokal geändert, die Kopie im Hauptspeicher ist ungültig. Will ein anderer Prozessor im Hauptspeicher lesen, so muss der Cache-Block erst in den Hauptspeicher zurückgeschrieben werden
% \item[Exclusive] (unmodified): Dieser Cache ist der einzige, der den Cache-Block enthält, Wert im Hauptspeicher ist gültig. Liest ein anderer Prozessor im Hauptspeicher, so muss die Zeile als shared markiert werden. Wird das Datum im Hauptspeicher verändert, ist der Cache-Block auf invalid zu setzen
% \item[Shared] (unmodified): Mehrere Caches enthalten Daten. Da alle bisher nur gelesen haben, sind Daten im Hauptspeicher gültig. Schreibzugriffe auf einen shared Cache-Block müssen immer zu einer Bus-Operation führen, damit die Cache-Blocks der anderen Caches auf invalid gesetzt werden können
% \item[Invalid] Cache-Block ist nicht geladen bzw. veraltet/ungültig
%\end{description*}
\paragraph{Bus-Operationen} \paragraph{Bus-Operationen}
\begin{itemize*} \begin{description*}
\item Bus Read: wenn ein Prozessor Wert eines Speicherblocks lesen will \item[Bus Read] Prozessor liest Wert eines Speicherblocks
\item Bus Read Exclusive: wenn ein Prozessor Wert eines Speicherblocks überschreiben will \item[Bus Read Exclusive] Prozessor überschreibt Wert eines Speicherblocks
\item Flush: wenn ein Prozessor $P_i$ einen Speicherblock alleinig in seinem Cache hat, ein anderer Prozessor $P_j$ aber lesend oder schreibend auf diesen Block zugreift. Bei einer Flush-Operation legt $P_i$ ebenfalls das Datum des Speicherblocks auf den Bus. \item[Flush] Prozessor $P_i$ hat Speicherblock alleinig in seinem Cache, ein anderer Prozessor $P_j$ aber lesend oder schreibend auf diesen Block zugreift
\end{itemize*} \end{description*}
\paragraph{Steuersignale} \paragraph{Steuersignale}
\begin{itemize*} \begin{itemize*}