sto preparando una piccola presentazione in ipython dove voglio mostrare come sia facile fare il funzionamento in parallelo di Julia.Julia calcolo parallelo in IPython Jupyter
E 'fondamentalmente un calcolo Monte Carlo Pi described here
Il problema è che non riesco a farlo funzionare in parallelo all'interno di un notebook IPython (Jupyter), utilizza una sola.
ho iniziato Julia: julia -p 4
Se io definisco le funzioni all'interno del REPL e corro lì funziona bene.
@everywhere function compute_pi(N::Int)
"""
Compute pi with a Monte Carlo simulation of N darts thrown in [-1,1]^2
Returns estimate of pi
"""
n_landed_in_circle = 0
for i = 1:N
x = rand() * 2 - 1 # uniformly distributed number on x-axis
y = rand() * 2 - 1 # uniformly distributed number on y-axis
r2 = x*x + y*y # radius squared, in radial coordinates
if r2 < 1.0
n_landed_in_circle += 1
end
end
return n_landed_in_circle/N * 4.0
end
function parallel_pi_computation(N::Int; ncores::Int=4)
"""
Compute pi in parallel, over ncores cores, with a Monte Carlo simulation throwing N total darts
"""
# compute sum of pi's estimated among all cores in parallel
sum_of_pis = @parallel (+) for i=1:ncores
compute_pi(int(N/ncores))
end
return sum_of_pis/ncores # average value
end
julia> @time parallel_pi_computation(int(1e9))
elapsed time: 2.702617652 seconds (93400 bytes allocated)
3.1416044160000003
Ma quando lo faccio:
using IJulia
notebook()
e cercare di fare la stessa cosa dentro il Notebook utilizza solo 1 nucleo:
In [5]: @time parallel_pi_computation(int(10e8))
elapsed time: 10.277870808 seconds (219188 bytes allocated)
Out[5]: 3.141679988
Quindi, perché Jupyter non utilizza tutti i core? Cosa posso fare per farlo funzionare?
Grazie.
Avete provato a modificare il file 'kernel.json' corrispondente e aggiungere l'opzione' -p' lì? – cel
Cosa succede se 'addprocs (4)' viene rilasciato per primo all'interno del notebook? – rickhg12hs
@ rickhg12hs, penso che questo dovrebbe funzionare e, in tal caso, questa è una soluzione molto più bella rispetto al mio brutto file di hacking del kernel. – cel