Sfondo: Per alcuni amici di un'istituzione accademica locale, ho scritto un programma Java che simula la crescita del cristallo in una matrice microcellulare come un programma simultaneo che implementa 100.000 iterazioni di MonteCarlo, ciascuna iterazione comprende 14.240 ^ 2 passaggi. Implementato dapprima in 2 dimensioni, è in grado di supportare una matrice di dimensioni fino a 14.240x14.240, ogni cella è un byte e strutture dati associate per supportare algoritmi per il calcolo di aree dei grani ecc.
Il programma è stato scritto come 4 thread simultanei che utilizzano la CPU quad core (100%) con ogni thread che esegue 1/4 del numero di passaggi e che i thread si "ricombinano" alla fine delle prove 14.240 ^ 2/4, e iniziano la prossima iterazione, dove biforco nuovi thread. L'accesso alla matrice comune ecc. È controllato usando la synchronize
parola chiave e 4 thread sono controllati per chiudersi usando un semaforo.
Inoltre, ho creato l'hardware per loro - processore Intel Core i5 2500K, con 16 GB di RAM, doppio partizionamento in Windows (per il loro uso) e Linux - per i miei test.
Problema: questi amici ora vogliono che provi ad aiutare a scrivere una versione tridimensionale e sono disposti a concedere una dimensione di matrice 10.000x10.000x10.000.
La mia idea: chiaramente una sola macchina non sarà in grado di gestirla. È possibile utilizzare un gruppo di due o tre di queste macchine? In tal caso, qualcuno può guidarmi verso un open source, un metaware gratuito o un'implementazione Java in grado di eseguire JVM su questi nodi e quindi eseguire questo programma?
Su una singola macchina sono in grado di ritoccare solo una matrice 400x400x400. Sono disposto a riscrivere il codice in modo che ciascun quadrante della matrice venga elaborato su un cluster diverso, con ogni quadrante di prova ma ho bisogno di sapere come eseguire il programma contemporaneamente in macchine diverse e come sincronizzare i calcoli.
Sono grato per qualsiasi suggerimento o idea.