[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