def test_ldconfig(self): """ldconfig option""" ompi = openmpi(ldconfig=True, version='3.1.2') self.assertEqual( str(ompi), r'''# OpenMPI version 3.1.2 RUN apt-get update -y && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ bzip2 \ file \ hwloc \ libnuma-dev \ make \ openssh-client \ perl \ tar \ wget && \ rm -rf /var/lib/apt/lists/* RUN mkdir -p /var/tmp && wget -q -nc --no-check-certificate -P /var/tmp https://www.open-mpi.org/software/ompi/v3.1/downloads/openmpi-3.1.2.tar.bz2 && \ mkdir -p /var/tmp && tar -x -f /var/tmp/openmpi-3.1.2.tar.bz2 -C /var/tmp -j && \ cd /var/tmp/openmpi-3.1.2 && ./configure --prefix=/usr/local/openmpi --disable-getpwuid --enable-orterun-prefix-by-default --with-cuda --with-verbs && \ make -j$(nproc) && \ make -j$(nproc) install && \ echo "/usr/local/openmpi/lib" >> /etc/ld.so.conf.d/hpccm.conf && ldconfig && \ rm -rf /var/tmp/openmpi-3.1.2 /var/tmp/openmpi-3.1.2.tar.bz2 ENV PATH=/usr/local/openmpi/bin:$PATH''')
def test_defaults_ubuntu(self): """Default openmpi building block""" ompi = openmpi() self.assertEqual( str(ompi), r'''# OpenMPI version 4.0.5 RUN apt-get update -y && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ bzip2 \ file \ hwloc \ libnuma-dev \ make \ openssh-client \ perl \ tar \ wget && \ rm -rf /var/lib/apt/lists/* RUN mkdir -p /var/tmp && wget -q -nc --no-check-certificate -P /var/tmp https://www.open-mpi.org/software/ompi/v4.0/downloads/openmpi-4.0.5.tar.bz2 && \ mkdir -p /var/tmp && tar -x -f /var/tmp/openmpi-4.0.5.tar.bz2 -C /var/tmp -j && \ cd /var/tmp/openmpi-4.0.5 && ./configure --prefix=/usr/local/openmpi --disable-getpwuid --enable-orterun-prefix-by-default --with-cuda --with-verbs && \ make -j$(nproc) && \ make -j$(nproc) install && \ rm -rf /var/tmp/openmpi-4.0.5 /var/tmp/openmpi-4.0.5.tar.bz2 ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \ PATH=/usr/local/openmpi/bin:$PATH''')
def test_cuda_path(self): """git repository value""" ompi = openmpi(branch='v4.0.x', repository='https://github.com/open-mpi-fork/ompi.git', cuda='/usr/local/cuda2') self.assertEqual( str(ompi), r'''# OpenMPI https://github.com/open-mpi-fork/ompi.git v4.0.x RUN apt-get update -y && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ autoconf \ automake \ bzip2 \ ca-certificates \ file \ git \ hwloc \ libnuma-dev \ libtool \ make \ openssh-client \ perl \ tar \ wget && \ rm -rf /var/lib/apt/lists/* RUN mkdir -p /var/tmp && cd /var/tmp && git clone --depth=1 --branch v4.0.x --recursive https://github.com/open-mpi-fork/ompi.git ompi && cd - && \ cd /var/tmp/ompi && \ ./autogen.pl && \ cd /var/tmp/ompi && ./configure --prefix=/usr/local/openmpi --disable-getpwuid --enable-orterun-prefix-by-default --with-cuda=/usr/local/cuda2 --with-verbs && \ make -j$(nproc) && \ make -j$(nproc) install && \ rm -rf /var/tmp/ompi ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \ PATH=/usr/local/openmpi/bin:$PATH''')
def test_nvhpc(self): """HPC SDK toolchain""" compiler = nvhpc(eula=True) ompi = openmpi(toolchain=compiler.toolchain, version='4.0.4') self.assertEqual( str(ompi), r'''# OpenMPI version 4.0.4 RUN apt-get update -y && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ bzip2 \ file \ hwloc \ libnuma-dev \ make \ openssh-client \ perl \ tar \ wget && \ rm -rf /var/lib/apt/lists/* RUN mkdir -p /var/tmp && wget -q -nc --no-check-certificate -P /var/tmp https://www.open-mpi.org/software/ompi/v4.0/downloads/openmpi-4.0.4.tar.bz2 && \ mkdir -p /var/tmp && tar -x -f /var/tmp/openmpi-4.0.4.tar.bz2 -C /var/tmp -j && \ cd /var/tmp/openmpi-4.0.4 && CC=nvc CFLAGS=-O1 CXX=nvc++ F77=nvfortran F90=nvfortran FC=nvfortran FCFLAGS='-fpic -DPIC' ./configure --prefix=/usr/local/openmpi --disable-getpwuid --enable-orterun-prefix-by-default --with-cuda --with-verbs && \ make -j$(nproc) && \ make -j$(nproc) install && \ rm -rf /var/tmp/openmpi-4.0.4 /var/tmp/openmpi-4.0.4.tar.bz2 ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \ PATH=/usr/local/openmpi/bin:$PATH''')
def test_toolchain(self): """Toolchain""" ompi = openmpi() tc = ompi.toolchain self.assertEqual(tc.CC, 'mpicc') self.assertEqual(tc.CXX, 'mpicxx') self.assertEqual(tc.FC, 'mpifort') self.assertEqual(tc.F77, 'mpif77') self.assertEqual(tc.F90, 'mpif90')
def test_runtime(self): """Runtime""" ompi = openmpi() r = ompi.runtime() self.assertEqual( r, r'''# OpenMPI RUN apt-get update -y && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ hwloc \ openssh-client && \ rm -rf /var/lib/apt/lists/* COPY --from=0 /usr/local/openmpi /usr/local/openmpi ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \ PATH=/usr/local/openmpi/bin:$PATH''')
def test_defaults_centos(self): """Default openmpi building block""" ompi = openmpi() self.assertEqual( str(ompi), r'''# OpenMPI version 4.0.5 RUN yum install -y \ bzip2 \ file \ hwloc \ make \ numactl-devel \ openssh-clients \ perl \ tar \ wget && \ rm -rf /var/cache/yum/* RUN mkdir -p /var/tmp && wget -q -nc --no-check-certificate -P /var/tmp https://www.open-mpi.org/software/ompi/v4.0/downloads/openmpi-4.0.5.tar.bz2 && \ mkdir -p /var/tmp && tar -x -f /var/tmp/openmpi-4.0.5.tar.bz2 -C /var/tmp -j && \ cd /var/tmp/openmpi-4.0.5 && ./configure --prefix=/usr/local/openmpi --disable-getpwuid --enable-orterun-prefix-by-default --with-cuda --with-verbs && \ make -j$(nproc) && \ make -j$(nproc) install && \ rm -rf /var/tmp/openmpi-4.0.5 /var/tmp/openmpi-4.0.5.tar.bz2 ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \ PATH=/usr/local/openmpi/bin:$PATH''')
def test_directory(self): """Directory in local build context""" ompi = openmpi(directory='openmpi-3.0.0') self.assertEqual( str(ompi), r'''# OpenMPI RUN apt-get update -y && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ bzip2 \ file \ hwloc \ libnuma-dev \ make \ openssh-client \ perl \ tar \ wget && \ rm -rf /var/lib/apt/lists/* COPY openmpi-3.0.0 /var/tmp/openmpi-3.0.0 RUN cd /var/tmp/openmpi-3.0.0 && ./configure --prefix=/usr/local/openmpi --disable-getpwuid --enable-orterun-prefix-by-default --with-cuda --with-verbs && \ make -j$(nproc) && \ make -j$(nproc) install && \ rm -rf /var/tmp/openmpi-3.0.0 ENV LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH \ PATH=/usr/local/openmpi/bin:$PATH''')