C ++ čas spuštění kódu závisí na kódu structre

hlasů
0

Přišel jsem v celé této velké youtube tutoriálu a v jednom ze snímků jsem viděl něco, co jsem nerozuměl. Proč se tohle děje? Souvisí to kompilátor?

Verze # 1 vypadá takto:

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];

a trvá asi 239.4ms spustit.

Verze # 2 vypadá takto:

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];

a trvá asi 79.5ms spustit. Proč se tohle děje?

Položena 20/10/2018 v 12:50
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
5

Druhý příklad demonstruje lepší lokalitu dat, protože přistupuje prvky ve stejném řádku. V podstatě se provádí sekvenční čtení paměti, zatímco první příklad přeskočí sizeof(float) * Nbajtů na každé iteraci uvedení zvýšený důraz na CPU cache / paměti.

Odpovězeno 20/10/2018 v 12:57
zdroj uživatelem

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