[Tech] Matrici sparse [domanda semidifficile]
Szymon Stefanek
pragma@firenze.linux.it
Mer 21 Lug 2004 14:54:18 CEST
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Monday 19 July 2004 23:28, Leonardo Boselli wrote:
> Avrei quindi array[7][16384] con dimensione quindi ben più ragionevoli.
> ma con un passaggio in più. ( array[mmu[blocco]][posizione] )
> Dal punto di vista prestazionali come si comporta la MMU del sistema se
> facessi l'array da 1 GB di cui uso solo 7 blocchi da ?? come fa ad
> accorgersene che il grosso dell'array non viene mai usato ?
> come prestaziobni quale è il sistema migliore ?
Questione interessante.
Ho fatto queste due prove:
char garbage[16000][16000][4];
int main(char * argc,char ** argv)
{
garbage[15999][15999][3] = 0;
sleep(10000);
}
e
char garbage[16000][16000][4];
int main(char * argc,char ** argv)
{
int i,j,k;
for(i=0;i<16000;i++)
for(j=0;j<16000;j++)
for(k=0;k<4;k++)
garbage[i][j][k] = 0;
sleep(10000);
}
Ho poi monitorato /proc/meminfo nei tre casi: sistema scarico,
esecuzione del primo programma ed esecuzione del secondo.
Di seguito riporto i valori che cambiano in modo significativo.
(Nota: la terza colonna è ottenuta dopo una trentina di secondi
di esecuzione del secondo programma: probabilmente non aveva finito
di scorrere l'intero blocco di memoria).
Campo: Scarico 1°prog 2°prog
MemFree: 421752 kB 441384 kB 3344 kB
Active: 45816 kB 35168 kB 334692 kB
Inactive: 33992 kB 24688 kB 162324 kB
LowFree: 421752 kB 441384 kB 3344 kB
SwapFree: 634696 kB 624468 kB 20124 kB
Mapped: 42668 kB 27348 kB 470952 kB
Committed_AS: 186448 kB 1234284 kB 1234728 kB
Nel caso di un accesso singolo all'array l'unico valore che
cambia veramente è Committed_AS: il sistema riserva logicamente il blocco
di memoria ma fisicamente non alloca le pagine finchè non si verifica
effettivamente un page fault.
Se invece si accede all'intero array allora tutti questi valori cominciano a
cambiare in modo progressivo (e il sistema pian piano si siede).
Non ho idea, però, se ci sia un calo effettivo nelle prestazioni della mmu
(nel senso dei tempi di risposta).
Questo test, poi, vale nel caso di array allocati staticamente. Sarebbe utile
fare lo stesso esperimento usando malloc()...
- --
Szymon Stefanek
- ------------------------------------------------------------------------------
- -
- - Will design spacecraft for food.
- -
- ------------------------------------------------------------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFA/meERu+qkQYW8QERApepAKC2qH3wKKAwet3aX4FDtXiWmXkDRACgt9DH
1P0SiodPwdLXWdrK7QLg13Q=
=YzXA
-----END PGP SIGNATURE-----
Maggiori informazioni sulla lista
flug-tech