Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让mpirun识别每个节点上的所有核心_R_Parallel Processing_Openmpi_Dompi - Fatal编程技术网

让mpirun识别每个节点上的所有核心

让mpirun识别每个节点上的所有核心,r,parallel-processing,openmpi,dompi,R,Parallel Processing,Openmpi,Dompi,我为MPI设置了两个节点,aml1(主节点)和aml2(工作节点)。我正在尝试将mpirun与R脚本一起使用,并使用Rmpi和doMPI库。两台机器的规格相同: On RHEL 7.3 # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 32 On-line CPU(s) lis

我为MPI设置了两个节点,aml1(主节点)和aml2(工作节点)。我正在尝试将mpirun与R脚本一起使用,并使用Rmpi和doMPI库。两台机器的规格相同:

On RHEL 7.3
# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                32
On-line CPU(s) list:   0-31
Thread(s) per core:    2
Core(s) per socket:    8
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 45
Model name:            Intel(R) Xeon(R) CPU E5-2690 0 @ 2.90GHz
Stepping:              7
CPU MHz:               2900.000
BogoMIPS:              5790.14
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              20480K
NUMA node0 CPU(s):     0-7,16-23
NUMA node1 CPU(s):     8-15,24-31

我正在使用OpenMPI 1.10.5,我可以看到进程在aml1和aml2上运行。但是,当我增加从mpirun生成的工作线程的数量时,我看不到我的测试脚本运行得更快,因此我看不到计算时间的任何减少。这使我假设mpirun没有正确地检测有多少内核可用,或者我在hostfile或rankfile中错误地分配了它

如果我将主机文件或rankfile更改为不同的插槽值:

$ cat hosts
aml1 slots=4 max_slots=8  #I can change this to 10 slots
aml2 slots=4

$ cat rankfile
rank 0=aml1 slot=0:0   
rank 1=aml1 slot=0:1
rank 2=aml1 slot=0:2
rank 3=aml1 slot=0:3
rank 4=aml2 slot=0:6
rank 5=aml2 slot=0:7    #I can add more ranks
然后我跑:

$ mpirun -np 1 --hostfile hosts --rankfile rankfile R --slave -f example7.R

$ cat example7.R
library(doMPI)
cl <- startMPIcluster(verbose=TRUE)
registerDoMPI(cl)

system.time(x <- foreach(seed=c(7, 11, 13), .combine="cbind") %dopar% {
 set.seed(seed)
 rnorm(90000000)
 })

closeCluster(cl)
mpi.quit(save="no")
我也尝试过使用tm配置选项设置Torque和构建openmpi,但我对此有不同的问题。我相信我不需要使用扭矩来完成我想做的事情,但是如果我不正确,请确认

我想做的是用Rmpi和doMPI运行一个R脚本。R脚本本身应该只运行一次,并将一段代码生成到集群中。我想最大化两个节点上可用的核心(aml、aml2)

感谢社区的任何帮助

更新1 这里有更多的细节: 我运行以下操作,更改每次运行的主机文件:

$ mpirun -np 1 --hostfile hosts [using --map-by slot or node] R --slave -f example7.R
+----------------+-----------------+-----------------+
|                | //--map-by node | //--map-by slot |
+----------------+-----------------+-----------------+
| slots per host | time            | time            |
| 2              | 24.1            | 24.109          |
| 4              | 18              | 12.605          |
| 4              | 18.131          | 12.051          |
| 6              | 18.809          | 12.682          |
| 6              | 19.027          | 12.69           |
| 8              | 18.982          | 12.82           |
| 8              | 18.627          | 12.76           |
+----------------+-----------------+-----------------+

我应该减少时间吗?或者这是最好的吗?我觉得我应该能够将每台主机的插槽数增加到30个,以获得最佳性能,但每台主机的插槽数峰值约为4个。

我想我找到了自己问题的答案

因为我是新手,所以我假设Torque会自动使用机器/节点上可用的所有“核心”。因为我有32个内核,所以我希望每个节点产生32个工作线程。但实际上,有16个物理核,这16个核中的每一个都有超线程,这使得机器上可以使用16x2核。据我所知,Torque为每个处理器(或本例中的物理内核)启动一个进程。所以我不应该期望每个节点产生32个工作线程

我回顾了有关NUMA支持的更多信息,根据,RHEL通常要求在构建之前安装numactl-devel包以支持内存关联。所以我对每个节点都这样做了,实际上我能够通过Torque运行一个R脚本,定义8个核心,或者每个节点16个核心。现在计算时间非常相似。如果我将每个节点的核心数增加到18/20,那么性能就会像预期的那样下降

以下是我的。分别为Torque和Open MPI配置选项:

./configure --enable-cgroups --with-hwloc-path=/usr/local --enable-autorun --prefix=/var/spool/torque 


./configure --prefix=/var/nfsshare/openmpi1.10.5-tm-3 --with-tm=/var/spool/torque/
./configure --enable-cgroups --with-hwloc-path=/usr/local --enable-autorun --prefix=/var/spool/torque 


./configure --prefix=/var/nfsshare/openmpi1.10.5-tm-3 --with-tm=/var/spool/torque/