Heim >Backend-Entwicklung >C++ >Warum ist das Durchlaufen von 8192-Elementen so viel langsamer als 8191 oder 8193?

Warum ist das Durchlaufen von 8192-Elementen so viel langsamer als 8191 oder 8193?

Susan Sarandon
Susan SarandonOriginal
2024-12-11 08:56:10817Durchsuche

Why is Looping Over 8192 Elements So Much Slower Than 8191 or 8193?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn