[Tech] Massima allocazione array

Tommaso Biancalani - Llewlyn tommaso.biancalani@gmail.com
Mer 2 Set 2009 15:24:28 CEST


Ehilà Franco,

Il giorno 02 settembre 2009 14.50, Franco Bagnoli
<franco.bagnoli@gmail.com>ha scritto:

> se vuoi usare una notazione tipo vet[i][j][k] basta allocare a mano i
> vettori di vettori
>
> int *** v;
> ...
> v=malloc(Ni*sizeof(int**));
> for (i=0; i<Ni; i++) {
>  v[i] = malloc(Nj*sizeof(int**));
>  for (j=0; j<Nj; i++) { {
>    v[i]j[j] = malloc(Nk*sizeof(int**));
>  }
> }
>
> purtroppo questa soluzione chiama la malloc ~righe volte e i tempi di
allocazione diventano veramente lunghi per grandi matrici (cosa che accade
sempre, dovendola usare ogniqualvolta la dimensione supera il massimo di
allocazione statica).


> Comunque la stragegia migliore dipende da come devi memorizzare questi
> dati: sono sparsi (molti zeri) ocompatti? sono sequenziali? perché
> puoi usare hash table, alberi, o memorizzare su disco (cosa che
> comunque fai senza controllo se superi la memoria fisica..)
>

sono serie temporali di concentrazioni di reagenti in soluzione. Voglio
ricavare uno spettro di potenza per vedere se c'è ordine temporale nel
sistema, per farlo devo fare una media tra tante simulazioni. L'idea quindi
sarebbe:

molecoline[TEMPO][NUM_SIMULAZ]

ma purtroppo la dimensione non va oltre 62 mega circa (è la quantità totale
che il processo mi occupa in memoria), nonostante ci sia RAM a sufficienza
(lo swap non viene toccato). Se lo alloco dinamicamente ho + spazio ma
sempre un limite superiore molto inferiore alle possibilità della macchina.
Volendo caco ogni singola simulazione su un file e la ripesco quando devo
mediare, ma mi dà fastidio farlo xchè non vedo xchè non debba tenere tutto
in ram che è + veloce.

Te come fai?

Ll.
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.linux.it/pipermail/flug-tech/attachments/20090902/36060423/attachment.htm>


Maggiori informazioni sulla lista flug-tech