我想获得Julia中可用的核心数量。目前我正在做以下事情:
using PyCall
@pyimport psutil
nCores = psutil.cpu_count()
这会调用Python函数。但是,我想使用一些Julia程序。怎么办呢?
答案 0 :(得分:6)
我不是100%肯定这一点,但CPU_CORES
返回我机器上的(超线程)核心数(OSX 10.9.5和Julia 0.3.5),即使我开始朱莉娅处于串行模式。我使用nworkers()
和nprocs()
检查了可用内核的数量。在没有-p
标志的情况下启动Julia,这两者都返回1。
当我以julia -p 4
julia> nprocs()
5
julia> nworkers()
4
在这两种情况下,CPU_CORES
都会返回8.
答案 1 :(得分:4)
Sys.CPU_CORES
在Julia v1.1.0中未定义。但是,下面的工作可以完成。
length(Sys.cpu_info())
答案 2 :(得分:3)
在Julia的最新版本中,您可以使用Sys.CPU_CORES
(而不是Base.CPU_CORES
作为提及的答案)。测试0.6。
答案 3 :(得分:1)
我不认识Julia但是" psutil.cpu_count(logical = False)"在Python中为您提供物理CPU的数量(不计算超线程的CPU)。
答案 4 :(得分:1)
Sys.CPU_CORES
在Julia 1.0.0中未定义(至少在Macbook上运行-我认为这不会有所作为)。而是使用Sys.CPU_THREADS
。
答案 5 :(得分:0)
答案 6 :(得分:-1)
JoshAdel的答案是正确的:Base.CPU_CORES
保留可用内核的数量,包括虚拟内核。
我正在添加此答案以注意另一种选择:使用Hwloc包。从项目的描述,
这个Julia软件包包装了hwloc库。
Portable Hardware Locality(hwloc)软件包提供了一个 可移植的抽象(跨OS,版本,体系结构......) 现代架构的分层拓扑,包括NUMA存储器 节点,套接字,共享缓存,内核和同步多线程。 它还收集各种系统属性,如缓存和内存 信息以及I / O设备(如网络)的位置 接口,InfiniBand HCA或GPU。它主要旨在帮助 收集有关现代计算信息的应用程序 硬件,以便相应和有效地利用它。
同样从项目页面,获取物理核心数和{物理,虚拟}核心(即处理单元)的方式如下:
import Hwloc
topology = Hwloc.topology_load()
counts = Hwloc.histmap(topology)
ncores = counts[:Core]
npus = counts[:PU]
println("This machine has $ncores cores and $npus PUs (processing units)")
使用此软件包的好处在于它具有区分物理和虚拟核心的便携能力,这在Julia目前是不可用的。但是,有petition在语言库中包含此功能。