|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
matrici enormi...
Ciao,
sono sempre qua con le mie matrici.... Mi nasce un dubbio... Se tratto matrici enormi, supponiamo 100kx100k reali (float o meglio double) è ovvio che un paio di c@zzi li avrò... Se programmo in fortran, posso dire di allocare e disallocare memoria, ma serve a poco. Il C forse è migliore, forse Visual C++ è ancora meglio con la classe __gc.... ma avrò sempre e cmq c@zzi... Avete idee in merito? Come funzionano i programmi di simulazione fluidodinamica che fanno un casino di conti? O forse non usano contemporaneamente, come serve a me, 1e+8 ... 1e+10 float o double? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Mmmm, si ma tu cosa vuoi usare?
Hai fatto il discorso dell'allocare/liberare memoria... Vuoi farlo con matlab? Mi sembra di ricordare che con Matlab per liberare la memoria occupata da una variabile si usi il comando "clear"...ma è + di un anno che non lo tocco quindi potrei sbagliarmi. Per allocare invece non c'è problema, lo fa in automatico quando definisci la variabile... Per quanto riguarda le dimensioni...100k*100k = 10M Se double occupa diciamo 4 byte, allora saranno 40 i Mb riservati per tale matrice... nemmeno tanti se consideriamo quanta ram monta in generale un pc oggi. Poi considera anche la memoria di massa alla quale il s.o. va ad attingere e quindi non dovresti avere problemi particolari a gestire tali matrici se non per l'aumento del tempo di esecuzione: accedere a disco è infinitamente + lento... Swap swap swap swap swap ![]()
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
no,no,scusa... non mi sono spiegato... intendevo matrici di 100000 righe x 100000 colonne di float o double... Fa circa 10 MILIARDI di float allocati contemporaneamente...
![]() ![]() ![]() Con matlab non ci penso neanche ad avventurarmi... Diciamo che posso usare o fortran o C o C++ o Visual C++ .NET.... Cerco un metodo che sia lento ma che mi consenta di fare i calcoli su un pc con, diciamo, 1 Gb di RAM... Idee? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2002
Messaggi: 487
|
Dipende dai calcoli che ci devi fare, ma in generale potresti applicare una suddivisione della matrice...ad esempio matrice 6x6:
1 0 1 0 0 1 1 1 1 1 1 0 1 0 0 0 0 1 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 1 1 1 a = 1 0 1 1 b = 1 0 1 1 c = e così via a sottomatrici di 2x2 alla fine avresti una matrice 3x3 a b c d e f g h i Per operazioni quali addizioni e moltiplicazioni puoi prendere le sotto matrici ed elaborarle in modo da dover lavorare con matrici di dimensioni più ridotte. Quindi puoi utilizzare il disco rigido come memoria dove salvare dati temporanei e dati finali mentre la ram per effettuare i calcoli con le sottomatrici di dimensioni più contenute. Aloha!
__________________
AcM Racing :: Nulla è impossibile per chi non deve farlo |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
proverò a vedere.... effettivamente quella delle sottomatrici non l'avevo pensata; mentre avevo già pensato a scrivere i dati su file... sarà un casino lento ma.... se non ci sono alternative...
Perchè non ci sono, vero? ![]() |
![]() |
![]() |
![]() |
#6 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
in 3D ogni nodo "vede" quelli vicini (per i volumi finiti ogni nodo vede i sei Est, Ovest, Nord, Sud, Top, Bottom)
==> matrici sparse (per i volumi finiti sistemi di equazioni lineari eptadiagonali) ==> algoritmi per matrici sparse a propagazione (per vol.finiti p.es. algoritmo di Thomas a direzioni alternate) questo riduce di molto il numero dei coefficienti da memorizzare (non N² ma per.es. 7*N) poi certo a un certo punto si deve swappare su HD ma mooooolto più i là di quanto verrebbe da pensare: vedi algoritmi multigrid. Il testo introduttivo per eccellenza è: S.V.Patankar – Numerical Heat Transfer and Fluid Flow – McGraw Hill Patankar e Spalding sono gli autori del metodo di integrazione ai volumi finiti di Navier-Stokes, Fourier, Fick implementato in Fluent ... |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jun 2002
Città: Firenze
Messaggi: 630
|
Quote:
Il float occupa 4 byte, il double 8 byte, fanno in totale 80GB per una matrice, ben oltre le capacita delle macchine "comuni". Non puoi allocare 80GB ... semplicemente perché in Windows 32-bit (parlo di 2k/XP) un processo può vedere al massimo 4GB di memoria di indirizzamento virtuale. Potresti lavorare su disco, però un disco da 80GB per ogni matrice non è molto comodo, neanche con le sotto-matrici.
__________________
---> Lombardp CSS Certified Expert (Master Level) at Experts-Exchange Proud user of LITHIUM forum : CPU technology Webmaster of SEVEN-SEGMENTS : Elettronica per modellismo |
|
![]() |
![]() |
![]() |
#8 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
con l'algoritmo di Patankar-Spalding si possono effettuare calcoli di 50*50*25 = 62500 nodi con solo 640 kB di RAM (era il limite del vecchio DOS)
Ora ti puoi sbizzarrire, e con i metodi multigrid arrivare un bel pezzo in là prima di swappare su HD. Naturalmente le matrici vanno swappate in formato binario. |
![]() |
![]() |
![]() |
#9 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Naturalmente ti consiglio vivamente il Fortran90/95 come linguaggio che ti permette sintetiche scritture per le operazioni termine a termine tra matrici, per l'estrazione di matrici da matrici con criteri assolutamente arbitrari ecc.
|
![]() |
![]() |
![]() |
#10 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
tieni conto inoltre che i metodi a volumi finiti nella loro versione multigrid, pur derivando dalla discretizzazione e linearizzazione di equazioni differenziali alle derivate parziali, sono metodi intrinsecamente integrali e paralleli e si prestano quindi all'elaborazione contemporanea su cluster di computer.
e questo sposta ancora più in là lo swapping intensivo su HD. |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
scusa se insisto... ma visto che sei ferrato...
![]() ![]() non devo fare calcoli fluido/termodinamici, anzi tutt'altro. Le matrici che devo trattare non sono sparse, non sono diagonali, non sono simmetriche... insomma non sono un ç@§§0!!! Questi metodi di cui mi parli vanno bene cmq? ![]() Altra domanda... dici che il C non va bene? Gestisce meglio la memoria il Fortran del C? grazie ancora... ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
#13 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
ferrato sarai tu visto che sei meccanico, io sono gasato (ing. chimico)
![]() ![]() ![]() sei sicuro che non siano sparse ? da quale problema fisico derivano ? comunque un problema con n nodi con n² coefficienti <> 0 è quasi sicuramente mal posto, probabilmente con soluzioni instabili, probabilmente caotiche. poi ci sono alcune cosine che bisogna sapere prima di avventurarsi, per esempio: stabilità delle soluzioni iterative per matrici a diagonale dominante buon condizionamento di una matrice .... |
![]() |
![]() |
![]() |
#14 |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
senno' al caos (eventuale) del sistema fisico descritto aggiungi il caos (garantito) delle soluzioni numeriche ottenute (ma buone per il gioco del lotto)
![]() |
![]() |
![]() |
![]() |
#15 | |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
![]() così ti puoi fare le previsioni del tempo dalla tua stanzetta a quella dela tua ragazza (80 anni) per non far prendere freddo al vettorino ![]() |
|
![]() |
![]() |
![]() |
#16 | |
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
Quote:
|
|
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
scusa ma il mio acer ha deciso di prendersela con me oggi...
![]() ![]() Sto facendo delle analisi non fisiche: sono nuovi algoritmi decisionali che sto studiando... Sono robusti, testati e testati ma producono un sacco di informazioni (allo scopo di produrre una scelta appunto!) Ogni singolo misero e miserabile numerino è importante e maledettamente diverso da zero... |
![]() |
![]() |
![]() |
#18 | |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
Quote:
Gasato = ti scureggia il cervello? ![]() ![]() ![]() PS Quella di 80 anni mi ha lasciato... non le stavo dietro!!! ![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Comunque dove li allochi 80 Gb ? Secondo me non puoi lavorare su tutta la matrice contemporaneamente...
Io ti consiglio di fare una bel livello di astrazione che ti bufferizza varie aree delle matrici intorno ad ogni valore richiesto...poi il resto della matrice va su file... Inoltre conoscendo a priori l'algoritmo puoi fare una bufferizzazione ad hoc che ti limita l'accesso al disco... Ultima modifica di cionci : 06-11-2003 alle 17:00. |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: May 2002
Città: udine
Messaggi: 546
|
...spiegati un po' meglio... bufferizzare le matrici?
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:07.