Parallel processing ipythonjupyter中的Julia并行计算

Parallel processing ipythonjupyter中的Julia并行计算,parallel-processing,ipython-notebook,julia,jupyter,Parallel Processing,Ipython Notebook,Julia,Jupyter,我正在准备一个在Ipython的小演示,我想展示在Julia中执行并行操作是多么容易 这基本上是一个蒙特卡罗Pi计算 问题是我不能让它在IPython(Jupyter)笔记本中并行工作,它只使用一个 我从朱莉娅开始是:Julia-p4 如果我在REPL中定义函数并在那里运行它,它就可以正常工作 @everywhere function compute_pi(N::Int) """ Compute pi with a Monte Carlo simulation of N dart

我正在准备一个在Ipython的小演示,我想展示在Julia中执行并行操作是多么容易

这基本上是一个蒙特卡罗Pi计算

问题是我不能让它在IPython(Jupyter)笔记本中并行工作,它只使用一个

我从朱莉娅开始是:
Julia-p4

如果我在REPL中定义函数并在那里运行它,它就可以正常工作

@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

但当我这样做的时候:

 using IJulia
 notebook()
试着在笔记本内做同样的事情,它只使用一个核心:

In [5]:  @time parallel_pi_computation(int(10e8))
elapsed time: 10.277870808 seconds (219188 bytes allocated)

Out[5]:  3.141679988
那么,为什么Jupyter不使用所有的内核呢?我能做些什么使它工作


谢谢。

解决这个问题的一个方法是创建一个始终使用4个内核的内核。为此,需要一些手工工作。我假设您在unix计算机上

在文件夹
~/.ipython/kernels/julia-0.x
中,您将找到以下
kernel.json
文件:

{
  "display_name": "Julia 0.3.9",
  "argv": [
    "/usr/local/Cellar/julia/0.3.9_1/bin/julia",
    "-i",
    "-F",
    "/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}
{
  "display_name": "Julia 0.3.9 p4",
  "argv": [
    "/usr/local/Cellar/julia/0.3.9_1/bin/julia",
    "-p",
    "4",
    "-i",
    "-F",
    "/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}
如果复制整个文件夹
cp-r julia-0.x julia-0.x-p4
,并修改新复制的
kernel.json
文件:

{
  "display_name": "Julia 0.3.9",
  "argv": [
    "/usr/local/Cellar/julia/0.3.9_1/bin/julia",
    "-i",
    "-F",
    "/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}
{
  "display_name": "Julia 0.3.9 p4",
  "argv": [
    "/usr/local/Cellar/julia/0.3.9_1/bin/julia",
    "-p",
    "4",
    "-i",
    "-F",
    "/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}
对你来说,路径可能会有所不同。请注意,我只给内核起了一个新名称,并添加了命令行参数“-p4”

您应该会看到一个名为julia0.3.9p4的新内核,它应该始终使用4个内核


还请注意,当您更新
IJulia
时,此内核文件不会得到更新,因此每当您使用
addprocs(4)更新
julia
IJulia
时,必须手动更新它
作为笔记本电脑中的第一个命令,应该提供四个工作线程,用于从笔记本电脑中执行并行操作。

您是否尝试修改相应的
kernel.json
文件并在那里添加
-p
开关?如果笔记本电脑中首先发出
addprocs(4)
,会发生什么情况?@rickhg12hs,我认为这应该行得通,如果是的话,这是一个比我丑陋的内核文件破解更好的解决方案。@rickhg12hs谢谢。它工作得很好。我将把我的评论转换成一个答案,让其他人更容易找到它。谢谢你的答案。我没有尝试过这个,但我认为这可以找到一个更持久的解决方案@rickhg12hs解决方案目前运行良好。当我已经在Jupyter上进行Julia课程时。。。有没有命令可以告诉我已经启用了多少进程?@skan有一个
procs()
函数返回所有进程的ID。如果在使用
-p4
启动julia后调用它,将得到一个长度为5的数组:一个是主进程,另外四个是
-p
请求的工作进程。