Speicherhierarchie und Leistung

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)?

struct P { float x, y, z, mass; };
struct P p[N];
for (i = 0; i < N; i++)
    sx += p[i].x;
  1. AWeil der Compiler bei einem Array von Strukturen keine Anweisungen erzeugen kann, die nur x lesen
  2. BWeil getrennte Arrays die Gleitkommaberechnung mit höherer Genauigkeit ausführen
  3. CWeil die x-Werte zusammenhängend liegen und sich in den geladenen Zeilen keine unnötigen Komponenten mehr befinden
Antwort und Erläuterung anzeigen

Antwort: C. Weil die x-Werte zusammenhängend liegen und sich in den geladenen Zeilen keine unnötigen Komponenten mehr befinden

Bei einem Array von Strukturen (AoS) liegen x, y, z und mass in Gruppen zu 16 Byte hintereinander, sodass selbst bei einer Verarbeitung, die nur x liest, drei Viertel einer 64-Byte-Zeile nicht benötigte Daten sind. Hat jede Komponente ein eigenes Array (SoA), liegen die x-Werte zusammenhängend, die geladenen Zeilen werden vollständig genutzt, und der Speicherverkehr sinkt auf etwa ein Viertel. Auch die Vektorisierung mit SIMD wird einfacher. Auch bei AoS lassen sich Anweisungen zum Lesen von x erzeugen, und eine Änderung der Array-Form ändert die Berechnungsgenauigkeit nicht.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Speicherhierarchie und Leistung

  1. Was ist der Hauptvorteil eines L1-Caches, der in einen Befehlscache (I-Cache) und einen Datencache (D-Cache) aufgeteilt ist?
  2. 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?
  3. Was ist der Hauptgrund, weshalb bei L1-Caches häufig das VIPT-Verfahren (virtuell indiziert, physisch getaggt) verwendet wird?
  4. Wie viele Zyklen beträgt die mittlere Speicherzugriffszeit bei einer Cache-Trefferzeit von 2 Zyklen, einer Miss-Rate von 4 % und einer Miss-Penalty von 150 Zyklen?
  5. Ein Prozessor hat bei idealem Cache eine mittlere CPI von 1,0, im Mittel 1,3 Speicherzugriffe pro Befehl, eine Miss-Rate von 2 % und eine Miss-Penalty von 100 Zyklen. Wie hoch ist die tatsächliche mittlere CPI?

Vergleiche zu diesem Thema