处理器数量 - MacBook Pro 2013年末i5

时间:2018-02-23 19:31:03

标签: julia

我正在使用朱莉娅,并且想知道我何时做了以下事情:

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个核心?第五个来自哪里?

2 个答案:

答案 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的帮助,它会在两种情况下都说明他们只使用工作人员执行计算。