出于教育目的,我想在运行 Ubuntu 18.04.4 TLS 的同一台计算机上设置多个 MPI 库,例如 OpenMPI、MPICH 和 Intel MPI 以及不同的后端编译器(gcc、clang、icc)。当我需要查看特定代码如何与一个 MPI 库/编译器或另一个一起工作时,最好的方法是什么,以便能够在它们之间轻松切换?
到目前为止,我只能通过 mpicc 的-cc
命令行参数 (MPICH) 或OMPI_CC
环境变量 (OpenMPI) 选择编译器。但是,例如,当我在 MPICH 之后安装 OpenMPI 时,MPICH 中的 mpicc 似乎被 OpenMPI 中的 mpicc 所取代,并且我基本上无法访问 MPICH:
$ sudo apt install mpich
$ mpicc -show
gcc -Wl,-Bsymbolic-functions -Wl,-z,relro -I/usr/include/mpich -L/usr/lib/x86_64-linux-gnu -lmpich
$ sudo apt install libopenmpi-dev
$ mpicc -show
gcc -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/opal/mca/event/libevent2022/libevent -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi/opal/mca/event/libevent2022/libevent/include -I/usr/lib/x86_64-linux-gnu/openmpi/include -pthread -L/usr//lib -L/usr/lib/x86_64-linux-gnu/openmpi/lib -lmpi
是否可以同时拥有两者并选择我当前想要使用的一个?
答案1
我会为此使用 docker 容器。它将为您提供:
- 具有所有类型的编译器和库组合的多个容器,同时确保每个容器中仅存在 1 个编译器和 1 个库。
- 一个真正“干净”的编码环境(如果您正在学习/教学,您不想使用带有太多额外“垃圾”的系统。它们只会让事情变得更加复杂)
- 在每种类型的计算机上看起来几乎完全相同的环境(如果您正在教学,您希望所有学生看到完全相同的东西)
创建一个Dockerfile
withubuntu:18.04
作为基本映像和 buildargs,如COMPILER
和MPILIB
。这样您就可以快速创建多个容器,这些容器都具有不同的编译器和 mpi 库组合。