Speicherhierarchie und Leistung

Welche Aussage zur Frage, wie weit im Voraus Daten gelesen werden sollen (Prefetch-Distanz), ist richtig, wenn Software-Prefetch-Anweisungen eingefügt werden?

  1. AJe kürzer die Distanz, desto besser; am besten wird unmittelbar vor dem Lesen des nächsten Elements eingefügt
  2. BJe länger die Distanz, desto besser; am besten werden gleich zu Beginn alle in der Schleife verwendeten Daten gelesen
  3. CWeder zu kurz noch zu lang ist gut; sie wird aus Miss-Zeit und Zeit für einen Schleifendurchlauf bestimmt
Antwort und Erläuterung anzeigen

Antwort: C. Weder zu kurz noch zu lang ist gut; sie wird aus Miss-Zeit und Zeit für einen Schleifendurchlauf bestimmt

Prefetch ist sinnlos, wenn das Laden aus dem Speicher nicht abgeschlossen ist, bis die Daten gebraucht werden. Ist die Distanz zu kurz, kommen die Daten nicht rechtzeitig an; ist sie zu lang, werden die in den Cache gelangten Daten verdrängt, bevor sie genutzt werden, oder verschmutzen den Cache. Als Richtwert gilt, um so viele Durchläufe vorauszulesen, wie sich ergibt, wenn die Miss-Penalty durch die Ausführungszeit eines Schleifendurchlaufs geteilt wird. Wird nur unmittelbar davor eingefügt, lässt sich die Wartezeit nicht verbergen, und werden alle Daten gebündelt gelesen, passen sie nicht in den Cache.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Speicherhierarchie und Leistung

  1. In der obigen Schleife ist int 4 Byte groß und die Cache-Zeile 64 Byte; das Array liegt nicht im Cache, und sein Anfang ist an der Zeilengrenze ausgerichtet. Wie hoch ist die Miss-Rate beim Lesen des Arrays ohne Prefetch?
  2. Was ist der Hauptzweck von Loop Blocking (Tiling), das z. B. beim Matrixprodukt verwendet wird?
  3. Warum wird die oben gezeigte Summierung nur der x-Koordinaten tendenziell schneller, wenn sie auf eine Struktur von Arrays umgeschrieben wird (jede Komponente in einem eigenen Array)?
  4. Was ist der Hauptvorteil eines L1-Caches, der in einen Befehlscache (I-Cache) und einen Datencache (D-Cache) aufgeteilt ist?
  5. In einem System mit 4 KB Seitengröße und 64 Byte Zeilengröße soll der L1-Cache virtuell indiziert und physisch getaggt (VIPT) sein, wobei Index und Offset nur aus Bits innerhalb der Seite bestehen sollen. Wie groß darf der Cache bei 8-fach Satzassoziativität höchstens sein?

Vergleiche zu diesem Thema