Sto provando a fare delle analisi statistiche usando Julia. Il codice è costituito dai file script.jl
(ad esempio l'inizializzazione dei dati) e algorithm.jl
.Gestione dei dati in loop parallelo in Julia
Il numero di simulazioni è ampio (almeno 100.000), quindi ha senso utilizzare l'elaborazione parallela.
Il codice sotto è solo alcuni pseudocodice per illustrare la mia domanda -
function script(simulations::Int64)
# initialise input data
...
# initialise other variables for statistical analysis using zeros()
...
require("algorithm.jl")
@parallel for z = 1:simulations
while true
choices = algorithm(data);
if length(choices) == 0
break
else
# process choices and pick one (which alters the data)
...
end
end
end
# display results of statistical analysis
...
end
e
function algorithm(data)
# actual algorithm
...
return choices;
end
Come esempio, vorrei sapere quanti scelte ci sono in media, qual è il scelta più comune, e così via. A tal fine ho bisogno di salvare alcuni dati da choices
(nel la for-loop) alle variabili di analisi statistica (inizializzati prima il ciclo for) e visualizzare i risultati (dopo il per-loop).
Ho letto di utilizzare @spawn
e fetch()
e funzioni come pmap()
ma non sono sicuro di come procedere. L'uso delle variabili all'interno del ciclo for non funziona in quanto ogni proc ottiene la propria copia, quindi i valori delle variabili di analisi statistica dopo il ciclo for saranno solo zero.
[Edit] In Julia io uso include("script.jl")
e script(100000)
per eseguire le simulazioni, non ci sono problemi quando si utilizza un singolo proc. Tuttavia, quando si utilizzano più proc (ad esempio usando addprocs(3)
) tutte le variabili statistiche sono zeri dopo il ciclo for - che è prevedibile.
La funzione 'algoritmo' restituisce sempre identiche' scelte' per l'input 'dati' identico? – rickhg12hs
@ rickhg12hs Sì, lo fa. – Ailurus
Quindi, dato il tuo pseudo-codice, non solo il primo ciclo ('z = 1') processerebbe' scelte'? – rickhg12hs