我正在使用朱莉娅,并且想知道我何时做了以下事情:
julia> addprocs()
4-element Array{Int64,1}:
2
3
4
5
julia> workers()
4-element Array{Int64,1}:
2
3
4
5
julia> nprocs()
5
我以为我的MacBook只有4个核心?第五个来自哪里?
答案 0 :(得分:5)
nprocs()
不返回处理器数量 - 它是进程数。如帮助所述,addprocs()
相当于addprocs(Sys.CPU_CORES)
。也就是说,它增加了许多新工人。一般的想法是,除了将工作分配给所有工作人员(节点2-5)之外,您的主节点(节点1)不会做很多工作。
另请注意,您的CPU对您(以及Julia)有点捏造真相 - 您实际上只有两个物理内核。在很多情况下,对于计算量很大的代码,虚拟内核并不会为您做很多事情。
答案 1 :(得分:2)
如果您查看addprocs()
的帮助(按?
并写addprocs
),您会发现默认情况下会添加Sys.CPU_CORES
个进程数。
请注意,只有workers()
列出的工作人员才会用于执行计算,因此实际上您将使用4个核心,例如,您可以使用像这样检查:
julia> addprocs()
4-element Array{Int64,1}:
2
3
4
5
julia> workers()
4-element Array{Int64,1}:
2
3
4
5
julia> procs()
5-element Array{Int64,1}:
1
2
3
4
5
julia> pmap(i -> myid(), 1:16)
16-element Array{Int64,1}:
2
5
3
4
3
2
5
4
3
2
5
4
3
2
5
4
julia> @everywhere foo() = 2^(8*myid())
julia> @parallel (+) for i in 1:16
myid() > 1
end
16
在最后一个循环中,我们看到,对于myid()
的所有调用,它返回的值大于1
。
此外,如果您查看pmap
和@parallel
的帮助,它会在两种情况下都说明他们只使用工作人员执行计算。