From 1d8e799ffc4b35b9b1d18f66d70c3d29fec12055 Mon Sep 17 00:00:00 2001 From: Ben Cumming <bcumming@cscs.ch> Date: Wed, 19 May 2021 15:09:55 +0200 Subject: [PATCH] Add Fujitsu ARM-SVE CI test (#1512) Add a CI test for ARM-SVE - compiles and runs the unit tests with vectorization enabled for the `armv8.2-a+sv` architecture - uses a dedicated gitlab runner on ault.cscs.ch Fixes #1498 --- ci/gitlab-cscs.yml | 81 ++++++++++++++++++++++++++++--------- ci/test-ault-fujitsu.sh | 24 +++++++++++ cmake/CompilerOptions.cmake | 12 +++--- 3 files changed, 92 insertions(+), 25 deletions(-) create mode 100755 ci/test-ault-fujitsu.sh diff --git a/ci/gitlab-cscs.yml b/ci/gitlab-cscs.yml index e8d46151..39392368 100644 --- a/ci/gitlab-cscs.yml +++ b/ci/gitlab-cscs.yml @@ -1,5 +1,3 @@ -include: - - remote: 'https://gitlab.com/cscs-ci/recipes/-/raw/master/templates/v2/.cscs.yml' stages: - build @@ -8,6 +6,54 @@ stages: - upload_reports - cleanup +# instead of including parameters from here: +# https://gitlab.com/cscs-ci/recipes/-/raw/master/templates/v2/.cscs.yml +# hard code them here, to make it easier to also use runners on other systems +## Piz Daint slurm stuff + +.daint: + tags: + - daint-container + variables: + CRAY_CUDA_MPS: 1 + USE_MPI: 'YES' + DISABLE_AFTER_SCRIPT: 'YES' + PULL_IMAGE: 'NO' + SLURM_CONSTRAINT: gpu + SLURM_JOB_NUM_NODES: 2 + SLURM_PARTITION: normal + SLURM_TIMELIMIT: '15:00' + SLURM_EXCLUSIVE: '' # make sure resources are not shared + +.daint_alloc: + extends: .daint + variables: + ONLY_ALLOCATE: 1 + GIT_STRATEGY: none + script: nothing + +.daint_dealloc: + extends: .daint + variables: + ONLY_DEALLOCATE: 1 + GIT_STRATEGY: none + script: nothing + when: always + +## Kubernetes for building docker images +.dind: + variables: + DOCKER_DRIVER: overlay2 + DOCKER_HOST: tcp://localhost:2375 + DOCKER_TLS_CERTDIR: "" + DOCKER_BUILDKIT: 1 + BUILDKIT_PROGRESS: plain + image: docker:19.03.12 + tags: + - kubernetes + services: + - docker:19.03.12-dind + # Builds a docker image on kubernetes .build_docker_images: extends: .dind @@ -22,7 +68,7 @@ stages: - docker build -f $DEPLOY_DOCKERFILE --network=host --build-arg BUILD_ENV=$BUILD_IMAGE -t $DEPLOY_IMAGE . - docker push $DEPLOY_IMAGE -build release: +build_release: extends: .build_docker_images variables: BUILD_DOCKERFILE: ci/release/build.Dockerfile @@ -39,20 +85,8 @@ notify_github_start: script: ./ci/set_github_status.sh pending -# Some variables used for running on daint -variables: - CRAY_CUDA_MPS: 1 - USE_MPI: 'YES' - DISABLE_AFTER_SCRIPT: 'YES' - PULL_IMAGE: 'NO' - SLURM_CONSTRAINT: gpu - SLURM_JOB_NUM_NODES: 2 - SLURM_PARTITION: normal - SLURM_TIMELIMIT: '15:00' - SLURM_EXCLUSIVE: '' # make sure resources are not shared - ### Release tests ### -allocate release: +allocate_release: stage: allocate image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA only: ['master', 'staging', 'trying'] @@ -61,7 +95,7 @@ allocate release: PULL_IMAGE: 'YES' ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID -single node release: +single_node_release: extends: .daint image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA only: ['master', 'staging', 'trying'] @@ -75,7 +109,7 @@ single node release: SLURM_NTASKS: 1 ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID -multi node release: +multi_node_release: extends: .daint image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA only: ['master', 'staging', 'trying'] @@ -87,7 +121,16 @@ multi node release: SLURM_NTASKS: 2 ALLOCATION_NAME: arbor-ci-release-$CI_PIPELINE_ID -deallocate release: +test_ault_fujitsu: + needs: [] + tags: + - arm-a64fx + stage: test + script: + - chmod +x ci/test-ault-fujitsu.sh + - srun --partition=a64fx -c48 ci/test-ault-fujitsu.sh "$(pwd)" + +deallocate_release: only: ['master', 'staging', 'trying'] image: $CSCS_REGISTRY_IMAGE/release/deploy:$CI_COMMIT_SHA stage: cleanup diff --git a/ci/test-ault-fujitsu.sh b/ci/test-ault-fujitsu.sh new file mode 100755 index 00000000..cdfb081c --- /dev/null +++ b/ci/test-ault-fujitsu.sh @@ -0,0 +1,24 @@ +#! /bin/bash + +base_path="$1" +host="$(hostname)" +echo "=== path: $base_path" +echo "=== host: $host" + +echo "=== loading environment" +source /users/bcumming/a64fx/env.sh +spack load git gcc@11.1.0 cmake ninja + +build_path="$base_path/build" +echo "=== building: $build_path" +mkdir "$build_path" +cd "$build_path" +echo "=== CC=gcc CXX=g++ cmake .. -DARB_USE_BUNDLED_LIBS=on -DARB_ARCH=armv8.2-a+sve -DARB_VECTORIZE=on -G Ninja" +CC=gcc CXX=g++ cmake .. -DARB_USE_BUNDLED_LIBS=on -DARB_ARCH=armv8.2-a+sve -DARB_VECTORIZE=on -G Ninja +ninja -j48 unit + +bin_path="$build_path/bin" +echo "=== running unit tests: $bin_path/unit" +cd "$bin_path" +./unit + diff --git a/cmake/CompilerOptions.cmake b/cmake/CompilerOptions.cmake index d91786e6..08672685 100644 --- a/cmake/CompilerOptions.cmake +++ b/cmake/CompilerOptions.cmake @@ -6,12 +6,6 @@ include(CMakePushCheckState) set(CXXOPT_DEBUG "-g") set(CXXOPT_CXX11 "-std=c++11") -if(CMAKE_CXX_COMPILER_ID MATCHES "XL") - # CMake, bless its soul, likes to insert this unsupported flag. Hilarity ensues. - string(REPLACE "-qhalt=e" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") -endif() - - if(${ARBDEV_COLOR}) set(colorflags $<IF:$<CXX_COMPILER_ID:Clang>,-fcolor-diagnostics,> @@ -83,6 +77,12 @@ set(CXXOPT_WALL $<IF:$<CXX_COMPILER_ID:GNU>,-Wno-maybe-uninitialized,> + # * Disable comments that point out that an ABI bug has been patched, which + # could lead to bugs when linking against code compiled an older compiler, + # because there is nothing to fix on our side. + + $<IF:$<CXX_COMPILER_ID:GNU>,-Wno-psabi,> + # Intel: # # Disable warning for unused template parameter -- GitLab