C ++ Code Ausführungszeit ist abhängig von Code structre

stimmen
0

Ich kam in diesem großen youtube Tutorial und in eines des Dia sah ich etwas , das ich nicht verstand. Warum passiert dies? Ist dieser Compiler verwandt?

Version # 1 sieht wie folgt aus:

const int N = 5000;
float a [N*N];

for (int x=0; x<n; ++x)
     for(int y=0; y<N; ++y)
          sum+=a[x+y*N];

und dauert etwa 239.4ms auszuführen.

Und Version # 2 sieht wie folgt aus:

const int N = 5000;
float a [N*N];

for (int y=0; y<n; ++y)
     for(int x=0; x<N; ++x)
          sum+=a[x+y*N];

und dauert etwa 79.5ms auszuführen. Warum passiert dies?

Veröffentlicht am 20/10/2018 um 12:50
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
5

Das zweite Beispiel zeigt eine bessere Datenlokalität , da es Elemente in der gleichen Zeile zugreift. Im Wesentlichen führt es Sequentieller Speicher lesen, während das erste Beispiel springt über sizeof(float) * NBytes bei jeder Iteration setzt eine zusätzliche Belastung auf die CPU - Cache / Speicher.

Beantwortet am 20/10/2018 um 12:57
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more