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
Received on Fri Jun 04 2010 - 23:53:03 CEST