From 7d1d1d7a129c63bf91eea45691bb87312fdc87e8 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Keck <Jean-Baptiste.Keck@imag.fr> Date: Sun, 19 Apr 2020 22:28:05 +0200 Subject: [PATCH] fixed regression in advection autotuning, ci should work now --- ci/docker_images/ubuntu/bionic/Dockerfile | 20 +----------- ci/scripts/build_and_debug.sh | 32 +++++++++++++++++++ ci/utils/run_debug.sh | 26 +++++++++++++++ .../codegen/kernels/directional_advection.py | 19 ++++++++--- test_ci.sh | 10 +++--- test_examples.sh | 10 +++--- 6 files changed, 85 insertions(+), 32 deletions(-) create mode 100755 ci/scripts/build_and_debug.sh create mode 100755 ci/utils/run_debug.sh diff --git a/ci/docker_images/ubuntu/bionic/Dockerfile b/ci/docker_images/ubuntu/bionic/Dockerfile index 9c020ccee..3e615c27d 100644 --- a/ci/docker_images/ubuntu/bionic/Dockerfile +++ b/ci/docker_images/ubuntu/bionic/Dockerfile @@ -20,13 +20,6 @@ RUN pip install --upgrade numpy setuptools cffi wheel pytest RUN pip install --upgrade backports.weakref backports.tempfile scipy sympy matplotlib mpi4py gmpy2 psutil py-cpuinfo Mako subprocess32 editdistance portalocker colors.py tee primefac pycairo weave argparse_color_formatter networkx pyvis RUN CC=mpicc HDF5_MPI="ON" pip install --upgrade --no-binary=h5py h5py -# For documentation -# RUN pip install --upgrade sphinx sphinxcontrib-bibtex sphinx_bootstrap_theme strip-hints -# RUN cd /tmp git clone https://github.com/sphinx-contrib/doxylink.git cd doxylink/sphinxcontrib/doxylink && \ -# mv doxylink.py doxylink.py3 strip-hints doxylink.py3 > doxylink.py rm doxylink.py3 && \ -# mv parsing.py parsing.py3 strip-hints parsing.py3 > parsing.py rm parsing.py3 && \ -# cd ../.. python setup.py install - # llvm + numba + llvmlite (llvmlite 0.32 has a bug with llvm8) RUN apt-get install -y llvm-8-dev libclang-8-dev clang-8 ENV LLVM_CONFIG=llvm-config-8 @@ -43,18 +36,7 @@ RUN cd /tmp && \ cd - && \ rm -Rf /tmp/patchelf -# 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 - +# Intel experimental OpenCL platform with SYCL support (2020-02) 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 && \ diff --git a/ci/scripts/build_and_debug.sh b/ci/scripts/build_and_debug.sh new file mode 100755 index 000000000..c5a1e1501 --- /dev/null +++ b/ci/scripts/build_and_debug.sh @@ -0,0 +1,32 @@ +#!/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' + +cp -r /hysop "${HYSOP_DIR}" +rm -rf "${HYSOP_DIR}/build" + +cd "${HYSOP_DIR}" +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Debug .. +make -j8 +make install +cd - +rm -rf build + +apt-get update +apt-get install -y gdb python-dbg + +bash diff --git a/ci/utils/run_debug.sh b/ci/utils/run_debug.sh new file mode 100755 index 000000000..a2f85712c --- /dev/null +++ b/ci/utils/run_debug.sh @@ -0,0 +1,26 @@ + + +#!/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_debug' +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 -it "${CONTAINER_ID}" /hysop/ci/scripts/build_and_debug.sh diff --git a/hysop/backend/device/codegen/kernels/directional_advection.py b/hysop/backend/device/codegen/kernels/directional_advection.py index dcec71473..3c27a5bff 100644 --- a/hysop/backend/device/codegen/kernels/directional_advection.py +++ b/hysop/backend/device/codegen/kernels/directional_advection.py @@ -600,11 +600,20 @@ class DirectionalAdvectionKernelGenerator(KernelCodeGenerator): s.jumpline() if is_cached and not has_bilevel: - code='event_t event = async_work_group_copy({dst}, {src}, {ne}, {event});'.format( - dst=Vc, src=line_velocity, ne=V_cache_width, event=0) - s.append(code) - code = 'wait_group_events(1, &event);' - s.append(code) + if tuning_mode: + loop = 'int {i}={Lx}; {i}<{N}; {i}+={gsize}'.format( + i='idx', N=V_cache_width, + Lx=local_id[0], gsize=local_size[0]) + with s._for_(loop): + code='{dst}[{i}] = 0.5;'.format(i='idx', dst=Vc) + s.append(code) + s.barrier(_local=True) + else: + code='event_t event = async_work_group_copy({dst}, {src}, {ne}, {event});'.format( + dst=Vc, src=line_velocity, ne=V_cache_width, event=0) + s.append(code) + code = 'wait_group_events(1, &event);' + s.append(code) s.jumpline() elif has_bilevel and not velocity_cache_full_length: # We must load velocity cache line on the fly diff --git a/test_ci.sh b/test_ci.sh index 6d4c7e65d..8521dead6 100755 --- a/test_ci.sh +++ b/test_ci.sh @@ -1,12 +1,14 @@ #!/bin/bash -set -e +set -fe -o pipefail + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" if [ -z "$HYSOP_ROOT" ]; then - HYSOP_ROOT=$(pwd) + HYSOP_ROOT="${SCRIPT_DIR}" echo "Warning: HYSOP_ROOT has not been set." - echo "Setting HYSOP_ROOT to '$HYSOP_ROOT'" + echo "Setting HYSOP_ROOT to '${HYSOP_ROOT}'" fi -$HYSOP_ROOT/ci/scripts/test.sh $HYSOP_ROOT $HYSOP_ROOT/hysop +${HYSOP_ROOT}/ci/scripts/test.sh ${HYSOP_ROOT} ${HYSOP_ROOT}/hysop exit 0 diff --git a/test_examples.sh b/test_examples.sh index 3c99a0ce1..5162b3ca6 100755 --- a/test_examples.sh +++ b/test_examples.sh @@ -1,15 +1,17 @@ #!/bin/bash -set -e +set -fe -o pipefail + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" if [ -z "$HYSOP_ROOT" ]; then - HYSOP_ROOT=$(pwd) + HYSOP_ROOT="${SCRIPT_DIR}" echo "Warning: HYSOP_ROOT has not been set." - echo "Setting HYSOP_ROOT to '$HYSOP_ROOT'" + echo "Setting HYSOP_ROOT to '${HYSOP_ROOT}'" fi export DO_TESTS=false export DO_LONG_TESTS=false export DO_EXAMPLES=true -$HYSOP_ROOT/ci/scripts/test.sh $HYSOP_ROOT $HYSOP_ROOT/hysop +${HYSOP_ROOT}/ci/scripts/test.sh ${HYSOP_ROOT} ${HYSOP_ROOT}/hysop exit 0 -- GitLab