Sono interessato all'esecuzione della stessa funzione che esegue alcune valutazioni di monte carlo con valori diversi degli argomenti sui kernel multipli in modo parallelo. Voglio anche assicurarmi che l'intera funzione venga eseguita sullo stesso kernel, senza che i calcoli all'interno della funzione vengano distribuiti attraverso i kernel. Ad esempio, supponiamo di avere una funzione (volutamente semplificato)Programmazione parallela in Mathematica
f[a_, b_] := Module[{}, RandomReal[{a, b}]]
In[1]:= LaunchKernels[]
Out[1]= {KernelObject[1, "local"], KernelObject[2, "local"],
KernelObject[3, "local"], KernelObject[4, "local"],
KernelObject[5, "local"], KernelObject[6, "local"],
KernelObject[7, "local"]}
SeedRandom[795132, Method -> "ParallelGenerator"];
m1 = 1; m2 = 2; m3 = 3; m4 = 4; m5 = 5; m6 = 6; m7 = 7; m8 = 8;
DistributeDefinitions[f, m1, m2, m3, m4, m5, m6, m7, m8];
Ora voglio eseguire f [m1, m2], f [m3, m4], f [M5, M6], f [m7, m8 ] f [m9, m10] su cinque diversi kernel senza trasferimento di informazioni attraverso questi kernel, cioè con un flusso separato di numeri casuali tra i diversi kernel.
Come si può farlo all'interno di Mathematica?
Avere ragazzi divertenti, sono seduto questo fuori. –
@ Mr.Wizard: Non è divertente quando non sei in giro con cui competere però :) –