From acc456c1a9ecf8e1b8483de277e2b9c9bcc0992e Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Keck <Jean-Baptiste.Keck@imag.fr> Date: Sun, 19 Apr 2020 14:42:54 +0200 Subject: [PATCH] fix docker image --- ci/docker_images/ubuntu/bionic/Dockerfile | 99 ++++++++++++++++------- ci/scripts/build.sh | 0 ci/scripts/build_and_test.sh | 28 +++++++ ci/scripts/install.sh | 0 ci/scripts/version.sh | 0 ci/utils/build_docker_image.sh | 6 ++ ci/utils/pull_docker_image.sh | 4 + ci/utils/push_docker_image.sh | 5 ++ ci/utils/run_ci.sh | 24 ++++++ ci/utils/run_docker_image.sh | 4 + hysop/backend/device/opencl/opencl_env.py | 3 +- test_ci_docker.sh | 1 + 12 files changed, 145 insertions(+), 29 deletions(-) mode change 100644 => 100755 ci/scripts/build.sh create mode 100755 ci/scripts/build_and_test.sh mode change 100644 => 100755 ci/scripts/install.sh mode change 100644 => 100755 ci/scripts/version.sh create mode 100755 ci/utils/build_docker_image.sh create mode 100755 ci/utils/pull_docker_image.sh create mode 100755 ci/utils/push_docker_image.sh create mode 100755 ci/utils/run_ci.sh create mode 100755 ci/utils/run_docker_image.sh create mode 120000 test_ci_docker.sh diff --git a/ci/docker_images/ubuntu/bionic/Dockerfile b/ci/docker_images/ubuntu/bionic/Dockerfile index bbacf57fa..9c020ccee 100644 --- a/ci/docker_images/ubuntu/bionic/Dockerfile +++ b/ci/docker_images/ubuntu/bionic/Dockerfile @@ -12,7 +12,7 @@ RUN apt-get update RUN apt-get full-upgrade -y # get build tools and required libraries -RUN apt-get install -y expat unzip xz-utils automake libtool pkg-config cmake git vim ssh clang gcc gfortran cython swig lsb-core cpio libnuma1 libpciaccess0 libreadline-dev libboost-all-dev libblas-dev liblapack-dev libcgal-dev libatlas-base-dev libopenblas-dev libgfortran3 libgcc1 libopenmpi-dev libhdf5-openmpi-dev libfftw3-dev libfftw3-mpi-dev libgmp-dev libmpfr-dev libmpc-dev libsparsehash-dev libcairo-dev libcairomm-1.0-dev python python-dev python-pip python-tk opencl-headers ocl-icd-libopencl1 clinfo +RUN apt-get install -y expat unzip xz-utils automake libtool pkg-config cmake git vim ssh clang gcc gfortran cython swig lsb-core cpio libnuma1 libpciaccess0 libreadline-dev libboost-all-dev libblas-dev liblapack-dev libcgal-dev libatlas-base-dev libopenblas-dev libgfortran3 libgcc1 libopenmpi-dev libhdf5-openmpi-dev libfftw3-dev libfftw3-mpi-dev libgmp-dev libmpfr-dev libmpc-dev libsparsehash-dev libcairo-dev libcairomm-1.0-dev libflint-dev python python-dev python-pip python-tk opencl-headers # python packages using pip RUN pip install --upgrade pip @@ -43,23 +43,61 @@ RUN cd /tmp && \ cd - && \ rm -Rf /tmp/patchelf -# Intel OpenCl +# Intel OpenCl runtime +#RUN cd /tmp \ +#&& mkdir intel \ +#&& cd intel \ +#&& wget http://registrationcenter-download.intel.com/akdlm/irc_nas/vcp/15532/l_opencl_p_18.1.0.015.tgz \ +#&& tar -xvzf l_opencl_p_18.1.0.015.tgz \ +#&& cd l_opencl_p_18.1.0.015 \ +#&& sed -i "s/ACCEPT_EULA=decline/ACCEPT_EULA=accept/g" "silent.cfg" \ +#&& ./install.sh --silent ./silent.cfg \ +#&& cd /tmp \ +#&& rm -Rf /tmp/intel + +ENV LD_LIBRARY_PATH "/opt/intel/oclcpuexp/x64:${LD_LIBRARY_PATH}" +RUN mkdir -p /opt/intel/oclcpuexp && \ + wget https://github.com/intel/llvm/releases/download/2020-02/oclcpuexp-2020.10.3.0.04_rel.tar.gz && \ + tar -xvzf oclcpuexp-2020.10.3.0.04_rel.tar.gz && \ + mv x64/ /opt/intel/oclcpuexp/ && \ + mv clbltfnshared.rtl /opt/intel/oclcpuexp/ && \ + rm -rf x64 *.rtl oclcpuexp* && \ + wget https://github.com/oneapi-src/oneTBB/releases/download/v2020.2/tbb-2020.2-lin.tgz && \ + tar -xvzf tbb-2020.2-lin.tgz && \ + mv tbb/lib/intel64/gcc4.8/* /opt/intel/oclcpuexp/x64/ && \ + rm -f /usr/local/lib/libOpenCL.so && \ + rm -f /usr/local/lib/libOpenCL.so && \ + rm -f /usr/local/lib/libOpenCL.so.1 && \ + rm -f /usr/local/lib/libOpenCL.so.2.0 && \ + ln -s /opt/intel/oclcpuexp/x64/libOpenCL.so /usr/local/lib/libOpenCL.so && \ + ln -s /opt/intel/oclcpuexp/x64/libOpenCL.so.1 /usr/local/lib/libOpenCL.so.1 && \ + ln -s /opt/intel/oclcpuexp/x64/libOpenCL.so.2.0 /usr/local/lib/libOpenCL.so.2.0 && \ + mkdir -p /etc/OpenCL/vendors && \ + echo /opt/intel/oclcpuexp/x64/libintelocl.so > /etc/OpenCL/vendors/intel_expcpu.icd && \ + rm -rf /tmp/tbb* + +# clinfo 2.2.18 (2018) RUN cd /tmp && \ - mkdir intel && \ - cd intel && \ - wget http://registrationcenter-download.intel.com/akdlm/irc_nas/12556/opencl_runtime_16.1.2_x64_rh_6.4.0.37.tgz && \ - tar -xvzf opencl_runtime_16.1.2_x64_rh_6.4.0.37.tgz && \ - cd opencl_runtime_16.1.2_x64_rh_6.4.0.37 && \ - ls -la && \ - sed -i "s/ACCEPT_EULA=decline/ACCEPT_EULA=accept/g" "silent.cfg" && \ - ./install.sh --silent ./silent.cfg && \ - cd /tmp && \ - rm -Rf /tmp/intel -https://software.intel.com/en-us/articles/opencl-runtime-release-notes/#181 + wget https://github.com/Oblomov/clinfo/archive/2.2.18.04.06.tar.gz && \ + tar -xvzf *.tar.gz && \ + rm -f *.tar.gz && \ + cd clinfo-* && \ + make && \ + mv clinfo /usr/local/bin && \ + rm -rf /tmp/clinfo-* -# Fix OpenCl ICD -RUN ln -s /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/x86_64-linux-gnu/libOpenCL.so -RUN ldconfig +# clpeak 1.1.0 RC2 (2019) +RUN cd /tmp && \ + wget https://github.com/krrishnarraj/clpeak/archive/1.1.0-rc2.tar.gz && \ + tar -xvzf *.tar.gz && \ + rm -f *.tar.gz && \ + cd clpeak-* && \ + mkdir build && \ + cd build/ && \ + cmake .. && \ + make && \ + mv clpeak /usr/local/bin && \ + rm -rf /tmp/clpeak-* # pyopencl RUN cd /tmp && \ @@ -85,18 +123,6 @@ RUN cd /tmp && \ cd - && \ rm -Rf /tmp/Oclgrind -# clpeak -RUN cd /tmp && \ - git clone https://github.com/krrishnarraj/clpeak && \ - cd clpeak/ && \ - mkdir build && \ - cd build/ && \ - cmake .. && \ - make && \ - mv clpeak /usr/local/bin/ && \ - cd - && \ - rm -Rf /tmp/clpeak - # clFFT RUN cd /tmp && \ ln -s /usr/local/lib /usr/local/lib64 && \ @@ -151,6 +177,23 @@ RUN cd /tmp && \ cd /tmp && \ rm -Rf /tmp/memory-tempfile +# python flint +RUN cd /tmp \ + && wget https://github.com/fredrik-johansson/arb/archive/2.16.0.tar.gz \ + && tar -xvzf 2.16.0.tar.gz \ + && cd arb-2.16.0 \ + && ./configure \ + && make -j$(nproc) \ + && make install \ + && cd - \ + && rm -rf arb-2.16.0 +RUN cd /tmp \ + && git clone https://github.com/fredrik-johansson/python-flint \ + && cd python-flint \ + && pip install . \ + && cd - \ + && rm -rf python-flint + # ensure all libraries are known by the runtime linker RUN ldconfig diff --git a/ci/scripts/build.sh b/ci/scripts/build.sh old mode 100644 new mode 100755 diff --git a/ci/scripts/build_and_test.sh b/ci/scripts/build_and_test.sh new file mode 100755 index 000000000..44264d82b --- /dev/null +++ b/ci/scripts/build_and_test.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euf -o pipefail + +# /hysop should be mounted as read only by run_tests_in_docker.sh +if [[ ! -d '/hysop' ]]; then + echo "This script should not be called from host, but from within a docker image." + echo " => /hysop has not been mounted (see hysop/ci/utils/run_tests_in_docker.sh)." + exit 1 +fi + +CC=gcc-7 +CXX=g++-7 +FC=gfortran-7 + +HYSOP_DIR='/tmp/hysop' +HYSOP_BUILD_DIR="${HYSOP_DIR}/build" +HYSOP_INSTALL_DIR='/opt/hysop' + +cp -r /hysop "${HYSOP_DIR}" +rm -rf "${HYSOP_BUILD_DIR}" + +SCRIPT_DIR="${HYSOP_DIR}/ci/scripts" +cd "${HYSOP_DIR}" +${SCRIPT_DIR}/version.sh +${SCRIPT_DIR}/config.sh "${HYSOP_BUILD_DIR}" "${HYSOP_INSTALL_DIR}" "${CC}" "${CXX}" "${FC}" +${SCRIPT_DIR}/build.sh "${HYSOP_BUILD_DIR}" "${CC}" "${CXX}" "${FC}" +${SCRIPT_DIR}/install.sh "${HYSOP_BUILD_DIR}" "${HYSOP_INSTALL_DIR}" +${SCRIPT_DIR}/test.sh "${HYSOP_INSTALL_DIR}" "${HYSOP_DIR}/hysop" "/cache" diff --git a/ci/scripts/install.sh b/ci/scripts/install.sh old mode 100644 new mode 100755 diff --git a/ci/scripts/version.sh b/ci/scripts/version.sh old mode 100644 new mode 100755 diff --git a/ci/utils/build_docker_image.sh b/ci/utils/build_docker_image.sh new file mode 100755 index 000000000..37751890c --- /dev/null +++ b/ci/utils/build_docker_image.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euf -o pipefail +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +NTHREADS="$(python -c 'import psutil; print(psutil.cpu_count(logical=False))')" + +docker build --rm=true --build-arg "NTHREADS=$NTHREADS" "$@" -t 'keckj/hysop:bionic' -f "${SCRIPT_DIR}/../docker_images/ubuntu/bionic/Dockerfile" "${SCRIPT_DIR}/.." diff --git a/ci/utils/pull_docker_image.sh b/ci/utils/pull_docker_image.sh new file mode 100755 index 000000000..b0efca8ac --- /dev/null +++ b/ci/utils/pull_docker_image.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euf -o pipefail +docker logout +docker pull keckj/hysop:bionic diff --git a/ci/utils/push_docker_image.sh b/ci/utils/push_docker_image.sh new file mode 100755 index 000000000..b19592e57 --- /dev/null +++ b/ci/utils/push_docker_image.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euf -o pipefail +docker login +docker push keckj/hysop:bionic +docker logout diff --git a/ci/utils/run_ci.sh b/ci/utils/run_ci.sh new file mode 100755 index 000000000..927568a59 --- /dev/null +++ b/ci/utils/run_ci.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -feu -o pipefail +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +DOCKER_IMG='keckj/hysop:bionic' +CONTAINER_ID='hysop_build_and_test' +HYSOP_CACHE_DIR="${HOME}/.cache/hysop" + +if [[ ! -d "${HYSOP_CACHE_DIR}" ]]; then + mkdir -p "${HYSOP_CACHE_DIR}" +fi + +function remove_img() { + docker stop "${CONTAINER_ID}" || true + docker rm "${CONTAINER_ID}" || true +} +trap remove_img INT TERM EXIT KILL + +remove_img + +docker logout +docker pull "${DOCKER_IMG}" +docker create -v "${SCRIPT_DIR}/../..:/hysop:ro" -v "${HYSOP_CACHE_DIR}:/cache:ro" --name="${CONTAINER_ID}" -it "${DOCKER_IMG}" +docker start "${CONTAINER_ID}" +docker exec "${CONTAINER_ID}" /hysop/ci/scripts/build_and_test.sh diff --git a/ci/utils/run_docker_image.sh b/ci/utils/run_docker_image.sh new file mode 100755 index 000000000..ac6e49cfc --- /dev/null +++ b/ci/utils/run_docker_image.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -euf -o pipefail +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +docker run -it -v "${SCRIPT_DIR}/../..:/hysop:ro" keckj/hysop:bionic diff --git a/hysop/backend/device/opencl/opencl_env.py b/hysop/backend/device/opencl/opencl_env.py index ed84e0f68..f85f5a7e9 100644 --- a/hysop/backend/device/opencl/opencl_env.py +++ b/hysop/backend/device/opencl/opencl_env.py @@ -566,13 +566,14 @@ Dumped OpenCL Kernel '{}' if not os.path.exists(dump_folder) and (main_rank == 0): os.makedirs(dump_folder) - if DEBUG: + if DEBUG and True: # dump kernel source while in debug mode dump_file=dump_folder+'/rk{}_{}_dump.cl'.format( main_rank, kernel_name) print 'Dumping kernel src at \'{}\'.'.format(dump_file) with open(dump_file, 'w+') as f: f.write(gpu_src) + build_opts += ['-g', '-s {}'.format(dump_file)] s_build_opts = ' '.join(build_opts) if VERBOSE: diff --git a/test_ci_docker.sh b/test_ci_docker.sh new file mode 120000 index 000000000..eb7ab4bbb --- /dev/null +++ b/test_ci_docker.sh @@ -0,0 +1 @@ +ci/utils/run_ci.sh \ No newline at end of file -- GitLab