Mehr Recheneinheiten machen nicht alles schneller
Paralleles Rechnen heißt, eine Aufgabe in Teile zu zerlegen, die gleichzeitig laufen. Der Speed-up sagt, wievielmal schneller die Aufgabe damit fertig ist.
Ein Stadtwerk rechnet jeden Monat 100.000 Rechnungen ab. Acht Recheneinheiten klingen nach achtfacher Geschwindigkeit, doch das stimmt fast nie. Hier lernen Sie, den echten Speed-up vorher auszurechnen.
Am Ende dieser Lektion
Notiz
Ich kann den Speed-up berechnen, den mehr Recheneinheiten bei einem Auftrag bringen.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Parallel | mehrere Teile eines Auftrags laufen gleichzeitig | |
| Recheneinheit | ein Prozess oder Thread, der einen Teil der Arbeit macht | |
| Serieller Anteil | der Teil, der nur nacheinander laufen kann | |
| Speed-up | wievielmal schneller der Auftrag ist als mit einer Einheit | 2,5 |
| Obergrenze | der höchste Speed-up, den es gibt |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Im Lab gibt es keine GPU
Wichtig
Eine GPU (Grafikprozessor) ist ein Chip mit tausenden kleinen Recheneinheiten. Das Lab hat keinen. Es zeigt Ihnen mit Python das Modell, auf dem eine GPU beruht. Die Skripte geben englische Wörter aus, die Zahlen sind überall gleich.
Jeder Auftrag hat seriellen und parallelen Teil
Ein Teil der Arbeit lässt sich aufteilen: Jede Rechnung kann für sich berechnet werden. Das ist der parallele Teil.
Ein anderer Teil geht nur nacheinander: Die Kundendatei muss erst einmal geladen sein. Das ist der serielle Anteil. Mehr Recheneinheiten verkürzen nur den parallelen Teil.
Ein Auftrag mit 100 Schritten, davon 20 seriell
| Recheneinheiten | Serieller Teil | Paralleler Teil | Schritte insgesamt | Speed-up |
|---|---|---|---|---|
| 1 | 20 | 80 | 100 | 1,0 |
| 2 | 20 | 40 | 60 | 1,67 |
| 4 | 20 | 20 | 40 | 2,5 |
| 8 | 20 | 10 | 30 | 3,33 |
| 16 | 20 | 5 | 25 | 4,0 |
| 80 | 20 | 1 | 21 | 4,76 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Speed-up ist alte Dauer geteilt durch neue
Die neue Dauer ist der serielle Anteil plus der parallele Teil, geteilt durch die Zahl der Einheiten. Der Speed-up ist die Dauer mit einer Einheit, geteilt durch diese neue Dauer.
Diese Regel heißt Amdahlsches Gesetz. Der Code rechnet die Tabelle nach.
Die Tabelle in Python
# Ein Auftrag: 100 Schritte, davon 20 nur nacheinander.
gesamt = 100
seriell = 20
parallel = gesamt - seriell
for einheiten in [1, 2, 4, 8, 16]:
dauer = seriell + parallel / einheiten
speedup = gesamt / dauer
print(einheiten, "Einheiten:", dauer, "Schritte, Speed-up", round(speedup, 2))
# Setzen Sie seriell auf 50 und starten Sie erneut.
Das Lab rechnet dieselbe Regel für drei Anteile
Das Skript amdahl.py im Lab rechnet den Speed-up für 10, 25 und 50 Prozent serielle Arbeit und für 1, 2, 4 und 8 Einheiten. Es misst keine Zeit, es setzt Zahlen in die Regel ein.
Die Kopfzeile und die Wörter „percent“ und „workers“ sind englisch. Die Zahlen lesen Sie wie in der Tabelle oben.
Die Speed-up-Tabelle des Labs
docker exec jupyter python3 steps/amdahl.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Der serielle Anteil setzt eine Obergrenze
Selbst mit unendlich vielen Einheiten bleibt der serielle Anteil. Die Obergrenze ist deshalb 1 geteilt durch diesen Anteil.
Bei 20 Prozent seriell ist sie 5. Bei 10 Prozent ist sie 10. Der Auftrag aus der Tabelle erreicht mit 80 Einheiten erst 4,76 von höchstens 5.
Ein häufiger Fehler
Warnung
Viele denken, acht Einheiten machten einen Auftrag achtmal schneller. Das gilt nur, wenn nichts seriell ist. Sobald ein Teil nacheinander laufen muss, bleibt der Speed-up darunter. Fragen Sie zuerst: Wie groß ist der serielle Anteil?
Weiterführend
Ein Auftrag hat 40 Prozent seriellen Anteil. Wie hoch ist die Obergrenze? Und wie viele Einheiten braucht er, um die Hälfte davon zu erreichen?
Rechnen Sie es in der Tabelle von Hand durch und prüfen Sie es mit dem Code oben.