Speicherhierarchie und Leistung
Was ist der Hauptzweck von Loop Blocking (Tiling), das z. B. beim Matrixprodukt verwendet wird?
- AIn kleinen Blöcken zu rechnen, die in den Cache passen, und so die Wiederverwendung von Daten zu erhöhen
- BDie Zahl der Schleifendurchläufe zu verringern und weniger Sprunganweisungen am Schleifenende auszuführen
- CDie Gesamtmenge des verwendeten Speichers zu halbieren, ohne die Berechnungsreihenfolge zu ändern
Antwort und Erläuterung anzeigen
Antwort: A. In kleinen Blöcken zu rechnen, die in den Cache passen, und so die Wiederverwendung von Daten zu erhöhen
Wird ein Produkt großer Matrizen unverändert berechnet, werden einmal geladene Elemente aus dem Cache verdrängt, bevor sie erneut verwendet werden, und müssen wiederholt aus dem Hauptspeicher nachgeladen werden. Beim Loop Blocking wird die Matrix in kleine Blöcke zerlegt, die in den Cache passen, und innerhalb der Blöcke gerechnet; so werden geladene Daten mehrfach wiederverwendet und Kapazitäts-Misses stark verringert. Sprunganweisungen zu verringern ist der Zweck von Loop Unrolling, und die Gesamtmenge des verwendeten Speichers ändert sich nicht.