- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 Ubuntu 20.04 中同时安装了 mpich 和 openmpi。
$ dpkg -l | grep mpi | grep lib
...
ii libmpich-dev:amd64 3.3.2-2build1 amd64 Development files for MPICH
ii libmpich12:amd64 3.3.2-2build1 amd64 Shared libraries for MPICH
...
ii libopenmpi-dev:amd64 4.0.3-0ubuntu1 amd64 high performance message passing library -- header files
ii libopenmpi3:amd64 4.0.3-0ubuntu1 amd64 high performance message passing library -- shared library
...
ii openmpi-bin 4.0.3-0ubuntu1 amd64 high performance message passing library -- binaries
ii openmpi-common 4.0.3-0ubuntu1 all high performance message passing library -- common files
..
$ dpkg -l | grep mpich
...
ii mpich 3.3.2-2build1 amd64 Implementation of the MPI Message Passing Interface standard
默认的(可能是因为它是后来安装的)似乎是 mpich。
我如何更改为 openmpi?
我想确保需要更改的所有内容都是真实的。到目前为止,我正在考虑 header 、可执行文件和库。我不知道哪些是必须更改的所有目录,链接等。
例如,here建议 cmake -DMPI_CC_COMPILER=/.../mpicc
。评论中提到它有效。但是:
我不确定它是否真的修复了所有 header 等。
我需要一个方法:
2.1。适用于系统中的所有用户
2.2。不需要那些宏
2.3。也适用于 cmake
至于2.3,我现在尝试配置petsc
$ ./configure --with-cc=mpicc --with-fc=mpif90 -with-cxx=mpicxx --with- make-np=10 --with-shared-libraries --download-f2cblaslapack --download-mumps --download-scalapack --with-debugging=0 COPTFLAGS="-O -O3 -march=native -mtune=native" FOPTF LAGS="-O -O3 -march=native -mtune=native" CXXOPTFLAGS="-O -O3 -march=native -mtune=native"
我得到了
Your libraries are from MPICH but it appears your mpiexec is from OpenMPI
可以使用 update-alternatives
解决这个问题吗?
我发现了这个,这让我觉得它可以,但在我的系统中它没有正确配置:
$ type mpiexec
mpiexec is hashed (/usr/bin/mpiexec)
$ ll /usr/bin/mpiexec
lrwxrwxrwx 1 root root 25 Jan 21 11:11 /usr/bin/mpiexec -> /etc/alternatives/mpiexec
$ ll /etc/alternatives/mpiexec
lrwxrwxrwx 1 root root 24 Jan 21 11:11 /etc/alternatives/mpiexec -> /usr/bin/mpiexec.openmpi
$ ll /usr/bin/mpiexec.openmpi
lrwxrwxrwx 1 root root 7 Apr 15 2020 /usr/bin/mpiexec.openmpi -> orterun
$ type mpirun
mpirun is /usr/bin/mpirun
$ ll /usr/bin/mpirun
lrwxrwxrwx 1 root root 24 Jan 21 11:11 /usr/bin/mpirun -> /etc/alternatives/mpirun
$ ll /etc/alternatives/mpirun
lrwxrwxrwx 1 root root 23 Jan 21 11:11 /etc/alternatives/mpirun -> /usr/bin/mpirun.openmpi
$ ll /usr/bin/mpirun.openmpi
lrwxrwxrwx 1 root root 7 Apr 15 2020 /usr/bin/mpirun.openmpi -> orterun
$ type mpicc
mpicc is hashed (/usr/bin/mpicc)
$ ll /usr/bin/mpicc
lrwxrwxrwx 1 root root 21 Feb 25 18:54 /usr/bin/mpicc -> /etc/alternatives/mpi
$ ll /etc/alternatives/mpi
lrwxrwxrwx 1 root root 20 Feb 25 18:54 /etc/alternatives/mpi -> /usr/bin/mpicc.mpich
相关
最佳答案
好像都是alternatives , 除了一个 (link group mpi
), 已经设置为 openmpi
$ update-alternatives --get-selections | grep mpi
h5pcc auto /usr/bin/h5pcc.openmpi
mpi auto /usr/bin/mpicc.mpich
mpi-x86_64-linux-gnu auto /usr/lib/x86_64-linux-gnu/openmpi/include
mpirun auto /usr/bin/mpirun.openmpi
正确设置链接组mpi
(并避免容易出错的单个链接操作)
sudo apt-get install --reinstall openmpi-bin
(拥有 mpicc.openmpi
的包)。这显然解决了一切。到目前为止它工作正常。
“历史”注释:我发现(奇怪的是)mpicc.openmpi
不在 update-alternatives
中,与其他 3 个链接组不同
$ update-alternatives --list mpirun
/usr/bin/mpirun.mpich
/usr/bin/mpirun.openmpi
$ update-alternatives --list h5pcc
/usr/bin/h5pcc.mpich
/usr/bin/h5pcc.openmpi
$ update-alternatives --list mpi-x86_64-linux-gnu
/usr/include/x86_64-linux-gnu/mpich
/usr/lib/x86_64-linux-gnu/openmpi/include
$ update-alternatives --list mpi
/usr/bin/mpicc.mpich
即使它安装在我的系统中
$ ll /usr/bin/mpicc*
lrwxrwxrwx 1 root root 21 Feb 25 18:54 /usr/bin/mpicc -> /etc/alternatives/mpi
-rwxr-xr-x 1 root root 11K Mar 22 2020 /usr/bin/mpicc.mpich
lrwxrwxrwx 1 root root 12 Apr 15 2020 /usr/bin/mpicc.openmpi -> opal_wrapper
为什么不放在首位呢?我还是不知道。
我决定使用重新安装
,因为手动处理链接组可能会很麻烦
$ update-alternatives --query mpi
Name: mpi
Link: /usr/bin/mpicc
Slaves:
mpiCC /usr/bin/mpiCC
mpiCC.1.gz /usr/share/man/man1/mpiCC.1.gz
mpic++ /usr/bin/mpic++
mpic++.1.gz /usr/share/man/man1/mpic++.1.gz
mpicc.1.gz /usr/share/man/man1/mpicc.1.gz
mpicxx /usr/bin/mpicxx
mpicxx.1.gz /usr/share/man/man1/mpicxx.1.gz
mpif77 /usr/bin/mpif77
mpif77.1.gz /usr/share/man/man1/mpif77.1.gz
mpif90 /usr/bin/mpif90
mpif90.1.gz /usr/share/man/man1/mpif90.1.gz
mpifort /usr/bin/mpifort
mpifort.1.gz /usr/share/man/man1/mpifort.1.gz
Status: auto
Best: /usr/bin/mpicc.mpich
Value: /usr/bin/mpicc.mpich
Alternative: /usr/bin/mpicc.mpich
Priority: 40
Slaves:
mpiCC /usr/bin/mpicxx.mpich
mpiCC.1.gz /usr/share/man/man1/mpicxx.mpich.1.gz
mpic++ /usr/bin/mpicxx.mpich
mpic++.1.gz /usr/share/man/man1/mpicxx.mpich.1.gz
mpicc.1.gz /usr/share/man/man1/mpicc.mpich.1.gz
mpicxx /usr/bin/mpicxx.mpich
mpicxx.1.gz /usr/share/man/man1/mpicxx.mpich.1.gz
mpif77 /usr/bin/mpifort.mpich
mpif77.1.gz /usr/share/man/man1/mpif77.mpich.1.gz
mpif90 /usr/bin/mpifort.mpich
mpif90.1.gz /usr/share/man/man1/mpif90.mpich.1.gz
mpifort /usr/bin/mpifort.mpich
mpifort.1.gz /usr/share/man/man1/mpifort.mpich.1.gz
关于mpi - 从 MPICH 切换到 OpenMPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66535019/
我有一组需要在集群中执行的计算操作(可能像 512 MPI 进程)。现在,我让集群上的根节点打开一个套接字并在计算操作之间将数据传输到我的本地计算机,但我想知道是否可以只创建两个 MPI 组,其中一个
我的 Linux 机器上有一个可执行文件,我知道它是使用 OpenMPI 或 MPICH 库编译的。 问题:如何确定是哪一个? 最佳答案 以下诊断过程假设 MPICH/MPICH2 和 Open MP
我有一个为 gcc 编写的用于并行计算的 C 代码,我想在集群上编译它,这显然是通过 mpicc opal_wrapper -rwxr-xr-x /usr/bin/opal_wrapper 如果我能
我正在具有OpenMPI的服务器上编译我的代码,但是我需要知道我使用的版本,以便阅读正确的文档。我可以打印中的常量来显示当前版本吗? 最佳答案 使用OpenMPI,最简单的方法是运行ompi_info
例如,我使用mpirun -n 4 启动4个进程。进程 0 接收来自进程 1、进程 2 和进程 3 的消息。进程1按照message0, message1, message2的顺序发送消息。当进程0收
在阻塞和非阻塞操作(在 OpenMPI 中)的上下文中,我对同步的概念有点混淆 - 从这里开始: link 1 :MPI_Isend是 不一定异步(所以它可以同步?) link 2 :MPI_Isen
有人可以详细说明 MPI 的 OpenMPI 和 MPICH 实现之间的区别吗? 两者中哪一个是更好的实现? 最佳答案 目的 首先,重要的是要认识到 MPICH 和 Open-MPI 的不同之处,即它
我正在用 C 语言学习 OpenMPI。我在用这个程序做矩阵乘法时遇到了一些麻烦,结果是错误的。程序编译通过了,但是我觉得我的矩阵乘法算法哪里有问题。 我解决这个问题的方法是使用 MPI_Scatte
在MPI中,启动后是否可以添加新节点?例如,我有 2 台计算机已经在运行并行 MPI 应用程序。我在第三台计算机上启动此应用程序的另一个实例,并将其添加到现有的通信器中。所有计算机都在本地网络中。 最
我已成功在服务器和我的计算机之间设置无密码 ssh。有一个简单的openMPI程序,在单机上运行良好。但是,不幸的是,当我在集群上尝试此操作时,我既没有收到密码提示(因为我已经设置了 ssh 授权),
我一直在使用 OpenMPI,但在需要从我的过程中获得排名时,我没有得到预期的行为。 我有一个简单的 C 程序,应该打印每个进程的排名: minimal.c: #include #include "
我正在尝试并行化 BMP 图像的灰度过滤器,当尝试从像素数组发送数据时,我的函数卡住了。 #include #include #include #include #include "mpi.h
我希望使用此代码执行以下操作: 将文件读入缓冲区(效果很好!)(并且不希望更改我读取文件的方式或存储文件的方式)。 使用MPI_Scatter跨多个“节点”发送该缓冲区,因此每个节点都可以计算空白的次
我正在努力了解 OpenMPI 中的信号处理。我读到“Open MPI 会将 SIGUSR1 和 SIGUSR2 从 mpiexec 转发到其他进程”。我的问题是默认安装时启用此功能。 场景是一个 M
几天以来,我一直在努力解决这个问题。我有一个混合 OpenMPI + Pthreads 程序。这意味着,程序在多台机器上运行,每台机器运行一组 pthreads。 为了简化问题,让我们假设有 3 台机
我有一些使用 OpenMPI 的 *.cpp 文件。我还有 *.h 文件,其中包含指定给我的函数(其中一些)和它们的实现: void Show(std::string s); void ShowLin
目前,我有一个很好的 c++ 图算法,它是用链表或链表数组的自定义结构定义编写的(我应该将其转换为模板定义,但目前不是)。这个算法很容易分发,我想测试一下。但是,除了了解一些基本的 MPI 示例之外,
我包含一个静态头文件 utils.h 和一个函数 linspace。我的main.cpp文件如下: #include #include #include using namespace std;
我目前正在构建一个小型实用程序库,作为一个较大项目的一部分。OpenMPI 有一个记录良好的 API 库,但当涉及到节点之间的低级通信时,我有点困惑。我知道在编写你的算法时,你将它分布在所有预期进行计
你好:我正在为我设置一个 OpenMPI 环境,我在其中设置了三个使用无密码身份验证等的虚拟机。我有一个简单的“Hello World”样式程序已成功编译/链接: #include #include
我是一名优秀的程序员,十分优秀!