Voglio eseguire un ciclo parallelo. Ho bisogno che ognuno dei miei processi abbia accesso a 2 grandi dizionari, gene_dict
e transcript_dict
. Questo è quello che ho provato primaJulia: Parallelo per loop con spostamento di dati di grandi dimensioni
@everywhere(function EM ... end)
generefs = [ @spawnat i genes for i in 2:nprocs()]
dict1refs = [ @spawnat i gene_dict for i in 2:nprocs()]
dict2refs = [ @spawnat i transcript_dict for i in 2:nprocs()]
result = @parallel (vcat) for i in 1:length(genes)
EM(genes[i], gene_dict, transcript_dict)
end
ma ottengo il seguente errore su tutti i processi (non solo su 5):
exception on 5: ERROR: genes not defined
in anonymous at no file:1514
in anonymous at multi.jl:1364
in anonymous at multi.jl:820
in run_work_thunk at multi.jl:593
in run_work_thunk at multi.jl:602
in anonymous at task.jl:6
UndefVarError(:genes)
ho pensato @spawnat
sarebbe spostare i tre strutture di dati che ho bisogno di tutti i processi. Il mio primo pensiero è forse che questa mossa impiega un po 'di tempo e il ciclo per il ciclo parallelo cerca di essere eseguito prima che il trasferimento dei dati sia completato.
La soluzione ha funzionato grande quando lavoravo in una sessione julia interattivo. Ma quando ho provato a chiamare il mio script julia da console ho ancora l'errore che ho citato. Hai idea del perché questo sarebbe il caso? – bdeonovic
Non vedo perché dovrebbe fare la differenza. Cosa succede se si esegue lo script con 'include (" stript.jl ")' da una sessione interattiva di julia? –
funziona anche così – bdeonovic