# Rechnersysteme Intro
## Rechnerarchitektur
![image_495.png](image_495.png)
- **Interne Funktionsweise**
  - Architektur eines Rechners
  - Design von Maschinenbefehlen → ISA
- **Programmierung in Maschinensprache**
  - Befehle
    - arithmetic / logic
    - Vergleich
    - Flags
    - Bedingungen
    - Sprünge
    - Speicherzugriff über Adressen
  - Verwendung eines Compilers
  - Umsetzung von Hochsprachenkonstrukten in Assembler

## Entwicklung von Mikroprozessoren
### Einfache In-Order-CPU mit kurzer Pipeline
![image_496.png](image_496.png)
- Grundprinzipien:
  - Minimaler Hardware-Aufwand
  - Höhere Dichte
  - Höhere Frequenz

### Out-of-Order superskalare CPU mit vielfältigen Optimierungen
![image_497.png](image_497.png)
- Grundprinzipien:
  - Pipelining (Fließband)
  - Parallelisierung
  - Prinzip der Lokalität

### Erhöhung der Performance durch Superskalarität
![image_498.png](image_498.png)


## Speicherhierarchie
![image_499.png](image_499.png)
### Prinzip der Lokalität
#### Temporäre Lokalität
- Tendenz zur Wiederverwendung zuvor genutzter Datenelemente
  - bspw. Instruktionen einer Schleife

#### Räumliche Lokalität
- Tendenz auf Datenelemente zuzugreifen, die in der Nähe von bereits Zugegriffenen liegen
  - bspw. sequenzielle Instruktionen, Felder

### Cache
- Pufferspeicher, die Lokalität ausnutzen
- zeitlich/räumlich lokale Daten werden im SRAM vorgehalten


## Performance
- Zielsetzung
  - Architekturvergleich von CPU & Speicherarchitektur
  - Identifikation ovn Einflussfaktoren auf Performance

**IPC = instructions per cycle**
- Durchsatz
- Arbeitsmenge pro Zeiteinheit

**CPI = cycles per instructions = 1/IPC**
- Latenz
- Zeit pro Befehl


CPU-Zeit = Rechenzeit für n Instruktionen (_messbar_)

$t_{cycle} = frac{1}{f}$

$$
t_{CPU} = n_{instr} * t_{instr}
= n_{instr} * CPI * t_{cycle}
= \frac{n_{instr}*t_{cycle}}{IPC}
$$

$IPC = \frac{n_{instr}}{f*t_{CPU}}$

### Einfluss von Unterbrechungen
- Idealsituation: $CPI = IPC = 1$
  - Einzelne Pipeline
  - Keine Hazards
  - Speicherzugriff: Hit im 1st Level Cache
- Tatsächliche Situation
  - ![image_500.png](image_500.png)


### Performance-Vergleich & Speedup
- Vergleich
  - $\frac{performance_A}{performance_B}=\frac{t_{cpuA}}{t_{cpu_B}}$
- Speedup
  - $\frac{t_{cpuOrig}}{t_{cpuEnhanced}}

#### Speedup durch Multicore
![image_501.png](image_501.png)

