교육 목적으로 Ubuntu 18.04.4 TLS를 실행하는 동일한 시스템에 다양한 백엔드 컴파일러(gcc, clang, icc)를 사용하여 OpenMPI, MPICH 및 Intel MPI와 같은 여러 MPI 라이브러리를 설정하고 싶습니다. 특정 코드가 하나의 MPI 라이브러리/컴파일러 또는 다른 MPI 라이브러리/컴파일러에서 어떻게 작동하는지 확인해야 할 때 이들 사이를 쉽게 전환할 수 있는 가장 좋은 방법은 무엇입니까?
지금까지는 mpicc의 -cc
명령줄 인수(MPICH) 또는 환경 변수(OpenMPI)를 통해서만 OMPI_CC
컴파일러를 선택할 수 있었습니다. 하지만 예를 들어 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
이를 위해 도커 컨테이너를 사용하겠습니다. 이는 다음을 제공합니다:
- 각 컨테이너에 1개의 컴파일러와 1개의 라이브러리만 존재하도록 보장하면서 모든 유형의 컴파일러와 라이브러리 조합을 포함하는 다중 컨테이너입니다.
- 진정한 "깨끗한" 코딩 환경(배우거나 가르치는 경우 추가 "정크"가 너무 많은 시스템을 사용하고 싶지 않습니다. 상황을 더 복잡하게 만들 뿐입니다)
- 환경은 모든 유형의 컴퓨터에서 거의 동일하게 보입니다. (가르치는 경우 모든 학생들이 똑같은 것을 보기를 원합니다.)
및 와 같은 기본 이미지와 buildargs를 Dockerfile
사용하여 생성합니다 . 이를 통해 컴파일러와 mpi 라이브러리의 다양한 조합을 사용하여 여러 컨테이너를 빠르게 생성할 수 있습니다.ubuntu:18.04
COMPILER
MPILIB