2014-12-26 8 views
5

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.

risposta

7

I dati vengono spostati da @spawnat ma non sono associati a variabili con lo stesso nome del nome sul nodo master. Invece i dati vengono salvati nello Dict abbastanza nascosto chiamato Base.PGRP sui lavoratori. Per accedere ai valori, si dovrà fetch la RemoteRef s che nel tuo caso sarebbe qualcosa di simile

result = @parallel (vcat) for i in 1:length(genes) EM(fetch(genes[i]), fetch(gene_dict[i]), fetch(transcript_dict[i])) end

+0

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

+0

Non vedo perché dovrebbe fare la differenza. Cosa succede se si esegue lo script con 'include (" stript.jl ")' da una sessione interattiva di julia? –

+0

funziona anche così – bdeonovic

Problemi correlati