Rechnen oder Daten bewegen: was bremst?
Ein Auftrag ist rechenbegrenzt, wenn die Rechnungen länger dauern als das Bewegen der Daten. Er ist speicherbegrenzt, wenn es umgekehrt ist. Der Engpass ist die Seite, die länger braucht.
Davon hängt ab, ob eine schnellere Recheneinheit überhaupt hilft. Hier rechnen Sie aus, welche Seite bremst.
Am Ende dieser Lektion
Notiz
Ich kann entscheiden, ob ein Auftrag durch das Rechnen oder durch den Speicher begrenzt ist.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Bandbreite | wie viele Bytes je Sekunde bewegt werden | 500 Gigabyte je Sekunde |
| Rechenrate | wie viele Rechnungen je Sekunde geschafft werden | |
| Rechenbegrenzt | die Rechnungen brauchen länger als die Daten | |
| Speicherbegrenzt | die Daten brauchen länger als die Rechnungen | |
| Speicherzeile | ein fester Block von Bytes, der auf einmal geholt wird |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Im Lab wird nichts gemessen
Wichtig
Das Lab-Skript rechnet mit einem erfundenen Gerät: 500 Gigabyte je Sekunde und 10 Billionen Rechnungen je Sekunde. Es hat keine GPU und stoppt keine Zeit. Es setzt feste Zahlen in Formeln ein.
Zwei Zeiten, und die längere bremst
Die Zeit für die Daten ist die Zahl der Bytes geteilt durch die Bandbreite. Die Zeit für die Rechnungen ist ihre Zahl geteilt durch die Rechenrate.
Der Engpass ist die größere von beiden. Eine schnellere Rechenrate hilft nur, wenn die Rechnungen der Engpass sind.
Zwei Aufträge auf demselben erfundenen Gerät
| Auftrag | Bytes bewegt | Rechnungen | Zeit Daten (µs) | Zeit Rechnen (µs) | Begrenzt durch |
|---|---|---|---|---|---|
| Vektoraddition, 10 Millionen | 120.000.000 | 10.000.000 | 240 | 1 | Speicher |
| Matrixprodukt, 1000 mal 1000 | 12.000.000 | 2.000.000.000 | 24 | 200 | Rechnen |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Den Engpass ausrechnen
# Ein erfundenes Geraet: 200 Gigabyte je Sekunde, 6 Billionen Rechnungen je Sekunde.
bandbreite = 200 * 10**9
rate = 6 * 10**12
# Zwei Felder lesen, eins schreiben: eine Million Zahlen zu je 4 Bytes.
bytes_bewegt = 3 * 1000000 * 4
rechnungen = 1000000
zeit_daten = bytes_bewegt / bandbreite * 10**6
zeit_rechnen = rechnungen / rate * 10**6
print("Mikrosekunden fuer die Daten:", round(zeit_daten, 2))
print("Mikrosekunden fuer die Rechnungen:", round(zeit_rechnen, 2))
if zeit_daten > zeit_rechnen:
print("Begrenzt durch: Speicher")
else:
print("Begrenzt durch: Rechnen")
# Setzen Sie rechnungen auf 1000000000 und starten Sie erneut.
Das Lab rechnet dieselben zwei Aufträge
Das Skript transfer.py rechnet für beide Aufträge. Es gibt aus, wie viele Bytes bewegt und wie viele Rechnungen gemacht werden. Dazu kommen beide Zeiten in Mikrosekunden und die Zeile „limited by“.
Die Wörter sind englisch: „memory“ heißt Speicher, „compute“ Rechnen. Die Zahlen stehen in der Tabelle oben.
Der Engpass zweier Aufträge
docker exec jupyter python3 steps/transfer.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Nebeneinander liegende Daten kommen mit einem Griff
Der Speicher liefert nicht ein Byte, sondern eine ganze Speicherzeile. Lesen acht Threads acht Zahlen, die nebeneinander liegen, genügt eine Zeile.
Liegen die Zahlen weit auseinander, holt jeder Thread eine eigene Zeile. Das kostet das Achtfache an Datenverkehr.
Acht Threads, Zeilen zu 32 Bytes
| Zugriff | Adressen | Zeilen geholt |
|---|---|---|
| Jeder Thread das nächste Element | 0, 4, 8, 12, 16, 20, 24, 28 | 1 |
| Jeder Thread jedes achte Element | 0, 32, 64, 96, 128, 160, 192, 224 | 8 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Zeilen bei zwei Zugriffsarten
docker exec jupyter python3 steps/coalesce.pyHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele denken, eine schnellere Recheneinheit beschleunige jeden Auftrag. Ist der Auftrag speicherbegrenzt, ändert sie fast nichts. Rechnen Sie zuerst beide Zeiten aus. Ist die für die Daten länger, hilft nur weniger Verkehr oder mehr Bandbreite.
Weiterführend
Ein Gerät schafft 500 Gigabyte und 10 Billionen Rechnungen je Sekunde. Wie viele Rechnungen je Byte muss ein Auftrag mindestens haben, damit er nicht mehr speicherbegrenzt ist?
Teilen Sie die Rechenrate durch die Bandbreite und vergleichen Sie mit den zwei Aufträgen oben.