← SEARCHABLE ARCHIVE
Computer Science · 2026-07-16

Von Neumann-Engpass und CPU-Cache

Warum wartet eine schnelle CPU auf Speicher?

INTERACTIVE READING MODE →

Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.

Egal wie schnell die CPU rechnen kann, sie kann nichts tun, wenn die zu berechnenden Anweisungen und Daten nicht eintreffen. Das Phänomen, bei dem die Übertragungsgeschwindigkeit zwischen CPU und Speicher die Gesamtleistung einschränkt, wird als Von-Neumann-Engpass bezeichnet.

CPU wartet auf Speicher

In der von Neumann-Architektur nutzen Anweisungen und Daten denselben Speicher und Bus.

CPU fordert Anweisungen an
        ↓
Ruft Anweisungen aus dem Speicher ab
        ↓
CPU fordert erforderliche Daten an
        ↓
Daten aus dem Speicher abrufen
        ↓
CPU rechnet

Im Vergleich zur Rechengeschwindigkeit der CPU ist der Zugriff auf den Hauptspeicher langsam. Wenn außerdem Befehle und Daten gemeinsam über einen einzigen Kanal übertragen werden, kann es vorkommen, dass einander darauf wartet, dass er an die Reihe kommt.

Der Cache reduziert dieses Warten

Moderne CPUs laden häufig verwendete Anweisungen und Daten vorab in den Cache-Speicher in der Nähe der CPU. Der L1-Cache ist klein, aber sehr schnell, und auf dem Weg zu L2 und L3 wird er allmählich langsamer, anstatt größer zu werden.

CPU → L1 Cache → L2 Cache → L3 Cache → Main Memory
schnell und klein, langsam und groß

Der Cache nutzt die Lokalität, was bedeutet, dass Programme wiederholt Daten in der Nähe verwenden.

  • Zeitliche Lokalität: Der Wert, den Sie gerade verwendet haben, wird wahrscheinlich bald wieder verwendet.
  • Räumliche Lokalität: Wenn Sie eine Adresse verwenden, besteht eine hohe Wahrscheinlichkeit, dass auch nahegelegene Adressen verwendet werden.

Der Grund, warum Code, der ein Array sequentiell von vorne liest, für den Cache vorteilhafter ist als Code, der es durch Herumspringen liest, liegt in der räumlichen Lokalität.

//Da aufeinanderfolgende Speicher der Reihe nach gelesen werden, ist der Cache einfach zu nutzen.
for (int i = 0; i < count; ++i)
{
    sum += values[i];
}

Befehlscache und Datencache

Moderne CPUs halten Anweisungen und Daten zusammen im Hauptspeicher, trennen jedoch den Anweisungscache und den Datencache im L1-Cache. Dadurch können das Abrufen des nächsten Befehls und der Zugriff auf die aktuellen Daten einigermaßen gleichzeitig erfolgen.

Aus diesem Grund wird sie auch als modifizierte Harvard-Struktur bezeichnet. Es nutzt eine Mischung aus den Stärken der Harvard-Struktur und der von Neumann-Struktur in den erforderlichen Schichten.

Letztendlich wird die Leistung eines Computers nicht allein durch die Anzahl der von der CPU durchgeführten Berechnungen bestimmt. Sie sollten auch darauf achten, wie zusammenhängend die Daten platziert werden, wie hoch die Cache-Trefferquote ist und wie lange die CPU auf Speicher wartet.