Auswirkungen auf die Leistung beim Durchlaufen von 8192 Elementen
Bestimmte Matrixoperationen weisen Leistungsanomalien auf, wenn die Matrixgröße, insbesondere die Anzahl der Zeilen, a ist Vielfaches von 2048 (z. B. 8192). Dieses als Super-Alignment bezeichnete Phänomen entsteht aufgrund spezifischer Speicherverwaltungspraktiken in modernen CPUs.
Der bereitgestellte Codeausschnitt veranschaulicht dieses Problem, bei dem eine Matrix res[][] aus einer Matrix img[ berechnet wird. ][]. Die Leistung für verschiedene Matrixgrößen, insbesondere 8191, 8192 und 8193, zeigt eine erhebliche Verlangsamung, wenn die Matrixgröße 8192 beträgt.
Super-Alignment-Effekte
Die Leistung Variationen ergeben sich aus dem ungleichmäßigen Zugriff auf den Speicher, der durch die verschachtelten Schleifen verursacht wird, die spaltenweise über die Matrix iterieren img[][]. Dieses nicht-sequentielle Zugriffsmuster führt zu Leistungseinbußen bei modernen CPUs, die mit sequenziellem Speicherzugriff effizienter arbeiten.
Lösung: Äußere Schleifen austauschen
Die Lösung liegt darin Neuordnung der verschachtelten Schleifen, wobei der zeilenweisen Iteration Vorrang vor der spaltenweisen Iteration eingeräumt wird. Dadurch wird der Speicherzugriff sequentiell, was die Leistung erheblich verbessert:
for(j=1;j<SIZE-1;j++) { for(i=1;i<SIZE-1;i++) { // Code to compute res[j][i] } }
Leistungsergebnisse
Die folgenden Leistungsergebnisse zeigen die durch den Austausch der äußeren Schleifen erzielte Verbesserung:
Matrix Size | Original Code (s) | Interchanged Loops (s) |
---|---|---|
8191 | 1.499 | 0.376 |
8192 | 2.122 | 0.357 |
8193 | 1.582 | 0.351 |
Diese Optimierung reduziert die Leistungslücke für Matrizen mit Dimensionen, die ein Vielfaches von 2048 sind, drastisch, was zu einer konsistenten Leistung über verschiedene Matrizen hinweg führt Matrixgrößen.
Das obige ist der detaillierte Inhalt vonWarum ist das Durchlaufen von 8192-Elementen so viel langsamer als 8191 oder 8193?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!