我有一个在Z820 Intel Xeon(R) CPU E5-2643 v2 @ 3.50GHz × 24上构建的64位Ubuntu 21.04的初始构建。操作系统是用默认设置安装的
MPICH安装:
对于特定的系统mpich版本3.4.2,通过以下步骤。
cd /home/rmpitest/Downloads
tar xfz mpich-3.4.2.tar.gz
cd /home/rmpitest/mpich-install
mkdir /tmp/rmpitest/mpich-3.4.2
cd /tmp/rmpitest/mpich-3.4.2
sudo apt-get install build-essential
/home/rmpitest/Downloads/mpich-3.4.2/configure -prefix=/home/rmpitest/mpich-install --with-device=ch4:ofi FFLAGS=-fallow-argument-mismatch --disable-fortran |& tee c.txt # I'm not sure why I had to disable Fortran but I don't think I need it.
make 2>&1 | tee m.txt
make install |& tee mi.txt
export PATH=/home/v22da/mpich-install/bin:$PATH
rmpitest@rmpitest-HP-Z820-Workstation:/tmp/rmpitest/mpich-3.4.2$ which mpicc
/home/rmpitest/mpich-install/bin/mpicc
rmpitest@rmpitest-HP-Z820-Workstation:/tmp/rmpitest/mpich-3.4.2$ which mpiexec
/home/rmpitest/mpich-install/bin/mpiexec
R安装:
sudo apt install r-base
download Rmpi
https://cran.r-project.org/src/contrib/Rmpi_0.6-9.1.tar.gz
sudo R CMD INSTALL Rmpi_0.6-9.1.tar.gz
# fails to find mpi.h
# so
sudo R CMD INSTALL ../Downloads/Rmpi_0.6-9.1.tar.gz --configure-args="--with-mpi=/home/rmpitest/mpich-install --with-Rmpi-type=MPICH"
结果:
Error: package or namespace load failed for ‘Rmpi’:
.onLoad failed in loadNamespace() for 'Rmpi', details:
call: dyn.load(file, DLLpath = DLLpath, ...)
error: unable to load shared object '/usr/local/lib/R/site-library/00LOCK-Rmpi/00new/Rmpi/libs/Rmpi.so':
libmpi.so.12: cannot open shared object file: No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/usr/local/lib/R/site-library/Rmpi’
这是一个简单的mpi安装,我可以想象这里是失败的吗?
我认为您的一些问题来自混合和匹配包管理器。我相信你现在可能已经解决了这个问题,但如果我是你,我会:
a)仅对Rmpi使用R的install.packages()
函数;它应该拉入依赖项
b)导出R_LIBS=~/somewhere/local
,这样你就不会弄脏系统包
c) MPI本身在单个计算机上有一点开销——您可能知道,它实际上是为集群设计的。doMPI
包为R的foreach () %dopar% {}
结构提供了一个后端,它可以瞬时工作,如果您在将其部署到集群上之前在本地机器上开发代码,那么在许多方面使用和安装library(parallel)
和/或library(foreach)
并使用dopar
函数是有意义的。您可能使用的集群可能有自己的方法来管理"库中的乐趣和游戏"。——例如模块加载——根据我的经验,改变调用哪个库是很容易的。您可能还需要集群上的本地R_LIBS
,因为您无法修改系统库(以避免破坏其他人的东西)。