Newsgroup: it.scienza.fisica
Titolo: Far andare veloce i monte carlo di tutti i giorni

I metodi MonteCarlo sono oggi uno strumento insostituibile in diverse
branche della fisica poichč consentono di simulare soluzioni di
equazioni ai processi stocastici ed alle derivate parziali. Quando un
MonteCarlo č veramente cazzuto, di solito si lancia sui clusteroni
(i.e. tanti computer connessi che agiscono virtualmente come uno) per
cui ci si affida a stili di programmazione e strumenti appositi, come
openMP e SPRNG.
Ci  sono anche perň i "monte carlo di tutti i giorni": programmini
cosě semplici che non si ha voglia di fare richiesta all'univ x
qualche ora di clusterone, ma i cui output saranno (sperabilmente) un
articolo pubblicato. Questi programmetti si lanciano di solito sui
propri portatili o su macchine "stand-alone" e sono (almeno x me) la
stramaggioranza dei casi. Ecco sto cercando di farmi un'idea delle
dritte che aumentano sensibilmente le prestazioni, lasciando stare
"implementare algoritmi efficienti" che richiedere inesorabilmente
l'andare caso x caso.
MI chiedevo in particolare se voi parallelizzate il generatore di
numeri casuali, notoriamente una delle cose che consuma + tempo.
Diciamo che lanciate il montecarlo sul vs portatile, che suppongo
essere DualCore. Usate entrambe i core? Avete mai pensato di mandare
il generatore dei numeri casuali su un core e l'elaborazione del mc su
un altro? Secondo me sarebbe una buona regola da adottare sempre, mi
stavo appunto chiedendo il modo migliore x farlo. Per esempio lanciare
due thread, oppure due processi.  Un'altra idea era implementare il
generatore sulla scheda grafica (chi ha nvidia puň usare CUDA).
Tra l'altro, che algoritmo usate x generare numeri casuali? Io ho
usato la ran1() del Numerical Recipies e adesso sono passato al
Mersenne Twister, la cui versione figa trovate qua
http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/SFMT/index.html
ciao,
tommaso

 generatore sulla scheda grafica (chi ha nvidia può usare CUDA).


 Tra l'altro, che algoritmo usate x generare numeri casuali?
Mersenne Twister anche io.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


Sicuramente non sono il primo che ci pensa ma hai provato
a usare l'estrapolazione di Richardson? Si potrebbe ogni N
numeri generati mettere da parte la coppia N e il valore
d'interesse, poi estrapolare con quelli. Magari così
facendo non occorrono infittimenti da capogiro. Capisco
che è un'idea banale e se è valida è certamente standard,
ma non mi viene in mente niente altro.
ciao
Apx
-- 
Dice il saggio: se sei molto più alto della
tua ragazza, non approfittarne quando sbadiglia.

 time-consuming?
Naturalmente no. Dipende dal tipo di MC.  In un tipico 
Metropolis-Hastings MC in meccanica statistica la parte  pi�  time 
consuming �  il calcolo dell' energia. Dopo di che, anche il pi� 
"costoso" dei generatori va benissimo perch�  inifluente sui tempi di 
calcolo.
Giorgio

 generatore sulla scheda grafica (chi ha nvidia pu� usare CUDA).
Cosa che va molto di moda :)  ma pu� essere un casotto programmare in
CUDA... l'ultima versione, unita all'ultima architettura ("Fermi")
risolve parecchi problemi in molti casi, ma non � una cosa
semplice&veloce...
Pleg