从 MPICH 切换到 OpenMPI

2023-12-25

我的 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?

我想确保所有需要改变的事情都是真的。 到目前为止,我正在考虑头文件、可执行文件、库。 我不知道哪些是必须更改的目录、链接等。

例如,here https://stackoverflow.com/questions/52016418/cmake-selecting-mpich-over-openmpi#comment91012586_52016418建议cmake -DMPI_CC_COMPILER=/.../mpicc。 评论中提到它有效。但:

  1. 我不确定它是否真的修复了所有标题等。

  2. 我需要一种方法:

    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

Related

  1. 使用 OpenMPI 替换 MPICH 安装 https://stackoverflow.com/questions/32568197/replace-mpich-installation-by-openmpi
  2. CMake:选择 mpich 而不是 openmpi https://stackoverflow.com/questions/52016418/cmake-selecting-mpich-over-openmpi
  3. https://unix.stackexchange.com/questions/413099/flip- Between-openmpi-and-mpich-as-default-using-linux-terminal https://unix.stackexchange.com/questions/413099/flip-between-openmpi-and-mpich-as-default-using-linux-terminal
  4. mpi 和 mpich2 文件夹之间的区别? https://stackoverflow.com/questions/29369208/difference-between-mpi-and-mpich2-folder
  5. CMake:选择 mpich 而不是 openmpi https://stackoverflow.com/questions/52016418/cmake-selecting-mpich-over-openmpi
  6. 从 MPICH 切换到 OpenMPI https://stackoverflow.com/questions/66535019/switch-from-mpich-to-openmpi
  7. This? https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=896189 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=896189
  8. This? https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=912437 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=912437
  9. https://unix.stackexchange.com/questions/81992/better-way-to-add-alternative-using-update-alternatives https://unix.stackexchange.com/questions/81992/better-way-to-add-alternative-using-update-alternatives
  10. https://askubuntu.com/questions/964600/how-to-add-slave-to-existing-update-alternatives-link-group https://askubuntu.com/questions/964600/how-to-add-slave-to-existing-update-alternatives-link-group

看来都是备择方案 https://linux.die.net/man/8/update-alternatives,除了一个(链接组 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

为什么不首先呢?我还是不知道。

我决定和reinstall,因为手动处理链接组可能会很混乱

$ 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 MPICH 切换到 OpenMPI 的相关文章

随机推荐

  • PDF 供下载,而非链接供查看/下载

    我试图做到这一点 以便当您单击 此处下载 时 pdf 文件将下载到用户的桌面 我该怎么做呢 Use the Content Disposition https en wikipedia org wiki List of HTTP heade
  • 将 PowerMock 与 Spock 结合使用

    我有一个带有一些静态方法的类 我需要模拟这些静态方法 我知道 PowerMock 可以做到这一点 但我找不到任何教程 材料来阐明 Spock PowerMock 集成 与 Junit 相比 我更喜欢 Spock 因此出现了难题 有没有办法让
  • Visual Studio 2010 包含目录路径

    我有一个 Visual Studio 解决方案 myvs sln 路径如下 c dir1 dir2 dir3 myvs myvs myvs sln 我安装了 boost 版本 xxxc dir1 dir2 dir3 boostxxx 我在项
  • 如何让 JQuery/Javascript 访问 extJS 生成的元素?

    我正在使用 extJS 构建一个简单的网站 我可以成功地将来自 JQuery 和 extJS 中的点击事件附加到我在 body 标记本身的 HTML 中创建的元素 但是 我附加到 extJS 生成的元素的事件要么没有效果 要么导致不生成 e
  • 如何检查和调整浏览器中的 :before 和 :after 伪元素?

    我使用 after 伪元素创建了一些相当复杂的 DOM 元素 并且我希望能够在 Chrome Inspector 或 Firebug 或等效工具中检查和调整它们 尽管这个功能被提到这篇 WebKit Safari 博客文章 http www
  • Linq to SQL DataContext:如何加载数据?

    我对 Linq to SQL 完全陌生 我正在创建一个与数据库密切配合的 Web 应用程序 我正在寻找最快且连接时间高效的模型 并相信 Linq to SQL 就是这样 我正在使用 C Net4 Visual Studio 2010 为了简
  • jQuery UI 对话框未位于屏幕中央

    我有一个 jQuery 对话框 该对话框位于屏幕中间 然而 它在垂直方向上似乎稍微偏离中心 这是代码 add box dialog autoOpen true width 300 modal true resizable false bgi
  • 如何检查对象中的数组是否全部为空?

    所以我需要传入一个对象 其中每个属性都是数组 该函数将使用每个数组中保存的信息 但我想通过检查每个数组是否为空 空来检查整个对象是否为空 不仅仅是没有属性 到目前为止我所拥有的 function isUnPopulatedObject ob
  • 动画:计时器与空闲

    有一个类似的线程 https stackoverflow com questions 622604 best approach for game animation其他地方 但它专注于游戏编程 我发现它与带有一些 额外糖分 的常规 GUI
  • Nuget 包已安装但引用未解析

    我有一个多项目解决方案 在多个项目中安装了 Prism Nuget 包 然后 我尝试使用 Nuget Package Manager UI 将 Prism Mef 扩展包添加到其中一个项目 我已经将其添加到其他项目之一 我第一次尝试添加软件
  • ng-switch-when 与 ng-repeat

    我的 HTML 代码是 tr td span Ordering Mode span onlineCredentials mode br span Intermedtiary Group span onlineCredentials name
  • 如何检查 CLLocationCooperative2D 是否在四个 CLLocationCooperative2D 正方形内?在 Objective C 中使用 Google 地图

    我想测试 CLLocationCooperative2D 是否位于由其他四个 CLLocationCooperative2D 创建的 Square 内 我有一个这样的结构 typedef struct CLLocationCoordinat
  • 如何更改请求的标头?

    是否可以更改标题Request https developer mozilla org en US docs Web API Request接收到的对象fetch https developer mozilla org en US docs
  • 如何在 Ruby 中生成 n 个唯一随机数的列表?

    这是我到目前为止所拥有的 myArray map rand max 然而 显然有时列表中的数字并不唯一 如何确保我的列表仅包含唯一的数字 而不必创建一个更大的列表 然后我只需从中选择 n 个唯一的数字 Edit 我真的很希望看到这个没有循环
  • 内部测试时 ITSAppUsesNonExemptEncryption 导出合规性?

    我在选择内部测试构建时收到此消息 它说有关设置ITSApp 使用非豁免加密在info plist中是什么意思 有必要吗 基本上
  • 无法查看 plunker 结果

    突然 当我从过去 4 天开始尝试运行时 我的一些笨蛋出现了以下错误 statusCode 404 error Not Found 请参考我的一个笨蛋http plnkr co edit wWJx3zU3Sm1cN9ZCtvoh p prev
  • 更新在 dynamodb 中添加属性的项目

    dynamodb 中不能动态添加属性吗 当我尝试时 我得到了这个错误 提供的关键元素与架构不匹配 设想 id 123 imageName elephant jpg 我想向上述数据添加一个属性 imagePath path to image
  • 如何记录所有传入数据包

    我尝试使用预路由规则将传入数据包重定向到内部虚拟 IP 地址 如何在传入数据包被重定向之前记录该数据包 iptables t nat A PREROUTING d 46 X XX XX s 78 XX XX XX p tcp dport 8
  • vscode launch.json 调试并打开特定url

    给定以下自动生成的 Visual Studio Code launch json 配置 我想启动浏览器localhost 5000 swagger当我调试时 但我尝试了六种不同的方法 但没有任何效果 它只是打开到localhost 5000
  • 从 MPICH 切换到 OpenMPI

    我的 Ubuntu 20 04 中有 mpich 和 openmpi dpkg l grep mpi grep lib ii libmpich dev amd64 3 3 2 2build1 amd64 Development files