Quale dei 2 è più veloce (C++)?Confronto dell'accesso alla memoria
for(i=0; i<n; i++)
{
sum_a = sum_a + a[i];
sum_b = sum_b + b[i];
}
O
for(i=0; i<n; i++)
{
sum_a = sum_a + a[i];
}
for(i=0; i<n; i++)
{
sum_b = sum_b + b[i];
}
io sono un principiante in modo da non so se questo ha un senso, ma nella prima versione, serie 'a' si accede, quindi 'b', che potrebbe portare a molti switch di memoria, poiché gli array 'a' e 'b' si trovano in differenti posizioni di memoria. Ma nella seconda versione, si accede dapprima all'intero array 'a', quindi all'intero array 'b', che consente di accedere a posizioni di memoria continue anziché alternare i due array.
Questo fa alcuna differenza tra il tempo di esecuzione delle due versioni (anche molto trascurabile)?
Puoi testarlo e scoprirlo. Semplice matematica ti dirà che hai il doppio del numero di iterazioni nel secondo esempio. – NathanOliver
Ma lui ha un punto riguardo gli hit/miss della cache. – ABuckau
Non penso che ci sia una risposta corretta a causa di diverse architetture – MaciekGrynda