MEMORIA

 

 I sistemi operativi Microsoft a 32 bit non consentono la piena gestione della memoria fisica (RAM) da parte dei processi in atto sul computer. Invece, il sistema operativo riserva a ciascuno una parte di memoria RAM che dipende da molti fattori: la memoria fisica totale disponibile; il numero ed il tipo dei processi in atto al momento della esecuzione del nuovo processo; le richieste in termini di memoria RAM del nuovo processo; il sistema operativo (W95, W98, WNT, W2000); il tipo e la natura delle operazioni richieste, la priorità assegnata al processo, eccetera, eccetera.

 Non è possibile fornire una descrizione esatta di come il s.o. si comporti nelle varie situazioni, mentre è possibile indicare delle linee guida.

 In generale, i solutori hanno tutti bisogno di molta memoria RAM fresca e disponibile. Scopo del solutore è quello di tenere in memoria la maggior parte possibile della matrice di rigidezza ( o più in generale delle matrici di lavoro), senza dover ricorrere al disco rigido (disk swap). Per prima cosa, si può valutare lo spazio in byte occupato dalla intera matrice di rigidezza, mediante la seguente operazione:

S=ndof * avb * 8

Dove ndof è il numero di gradi di libertà, avb e la banda media (average bandwidth), 8 è il numero di byte per ogni numero reale (doppia precisione).

 L'ideale sarebbe che ci fosse uno spazio di RAM M pari o superiore a S. In tal caso la matrice può non essere divisa in blocchi, e la sua triangolarizzazione può essere eseguita senza swap su disco.

 Se il problema è molto grande, è facile che la matrice non stia nella memoria disponibile. In questo caso i solutori la dividono in pezzi, ciascuno dei quali occupa un numero di byte pari a quelli disponibili.

 Finchè il numero di blocchi è pari a qualche unità, o una o due decine, il problema è ancora risolto in modo relativamente efficiente (ma 20 blocchi non sono 3), se il numero di blocchi è molto alto (da 20 in su), si è in presenza di un problema di dimensioni molto superiori a quelle normalmente affrontabili con quell'hardware: i tempi di risoluzione crescono a dismisura, e si è di fronte ad una soluzione non ottimale.

 Poichè in genere la banda media è al di sotto (spesso molto al di sotto) del 10% dell'ordine del problema, si hanno qui alcuni esempi, che mediamente sovrastimano l'occupazione:

 

NUMERO DI DOF

MB NECESSARI PER K (avb=5%)

MB NECESSARI PER K (avb=10%)

1000

0.4

0.8

5000

10

20

10000

40

80

50000

1000

2000

 

 E' dunque della fondamentale importanza capire come si può intervenire su S e su M, la quantità di memoria RAM effettivamente allocata e disponibile dal programma.

 Per ridurre S è opportuno rinumerare in modo da ridurre al minimo la banda media (average bandwidth).

 Per aumentare M si hanno a disposizione varie possibilità.

 In primo luogo si tenga presente che, a parità di ogni altra considerazione, W95 e W98 lasciano libera meno memoria di WNT. Si danno casi in cui W98 su computer con 64Mb di RAM e nessun processo apparentemente attivo lasci come memoria libera poche centinaia di KB: assurdo, ma sperimentalmente verificato.

 La memoria libera (in specie sotto W95 e W98) è influenzata dalla presenza nella esecuzione automatica di applicazioni tipo Office o la barra di Office. In generale, l'esecuzione automatica dovrebbe includere il solo antivirus. Si consiglia pertanto di rimuovere ogni altra cosa, non strettamente necessaria.

 Se si deve eseguire un solving su un modello molto grande converrà chiudere le applicazioni non strettamente indispensabili: garantire il multitasking priva di memoria utile per il solving.

 Infine, si potrà agire sul programma in modo da decidere esattamente quanta memoria allocare (ciò si fa con il dialogo Memoria da allocare): prima di eseguire un solving è possibile decidere quanta memoria far allocare al solutore.