Skip to content
Snippets Groups Projects
Commit 319e492d authored by Olga Vladimirovna Datskova's avatar Olga Vladimirovna Datskova
Browse files

Merge branch 'simpletrack-driver' into 'master'

Adding an orchestrator for simpletrack including CI benchmark mode tests

See merge request !6
parents 10df8f7c 5f757e59
No related branches found
No related tags found
1 merge request!6Adding an orchestrator for simpletrack including CI benchmark mode tests
Pipeline #1721297 passed
Pipeline: hep-workloads-GPU

#1721298

    ...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
    stages: stages:
    - build - build
    - test - test
    - benchmark
    .job_template: &job_build .job_template: &job_build
    stage: build stage: build
    ...@@ -14,52 +15,54 @@ stages: ...@@ -14,52 +15,54 @@ stages:
    - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
    - export HEP_TAG=`grep HEPWL_DOCKERIMAGETAG lhc/simpletrack/lhc-simpletrack.spec | cut -d "=" -f 2` - export HEP_TAG=`grep HEPWL_DOCKERIMAGETAG lhc/simpletrack/lhc-simpletrack.spec | cut -d "=" -f 2`
    nvidia: .job_template: &job_test
    stage: test
    environment:
    name: test/$CI_COMMIT_REF_NAME
    script: [ "echo test" ]
    .job_template: &job_benchmark
    stage: benchmark
    environment:
    name: test/$CI_COMMIT_REF_NAME
    script: [ "echo test" ]
    variables:
    BENCHMARK: "device"
    artifacts:
    paths:
    - jobs/
    build:nvidia:
    <<: *job_build <<: *job_build
    script: script:
    - mkdir public && wget http://img.shields.io/badge/${HEP_TAG}-Failed-red?style=flat-square -O public/build_simpletrack_nvidia.svg
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.nvidia --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:nvidia-$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:nvidia-latest - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.nvidia --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:nvidia-$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:nvidia-latest
    - wget http://img.shields.io/badge/${HEP_TAG}-Done-green?style=flat-square -O public/build_simpletrack_nvidia.svg
    artifacts:
    paths:
    - public/build_simpletrack_nvidia.svg
    intel: build:intel:
    <<: *job_build <<: *job_build
    script: script:
    - mkdir public && wget http://img.shields.io/badge/${HEP_TAG}-Failed-red?style=flat-square -O public/build_simpletrack_intel.svg
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.intel --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:intel-$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:intel-latest - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.intel --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:intel-$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:intel-latest
    - wget http://img.shields.io/badge/${HEP_TAG}-Done-green?style=flat-square -O public/build_simpletrack_intel.svg
    artifacts:
    paths:
    - public/build_simpletrack_intel.svg
    pocl: build:pocl:
    <<: *job_build <<: *job_build
    script: script:
    - mkdir public && wget http://img.shields.io/badge/${HEP_TAG}-Failed-red?style=flat-square -O public/build_simpletrack_pocl.svg
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.pocl --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:pocl-$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:pocl-latest - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.pocl --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:pocl-$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/lhc/simpletrack:pocl-latest
    - wget http://img.shields.io/badge/${HEP_TAG}-Done-green?style=flat-square -O public/build_simpletrack_pocl.svg
    artifacts:
    paths:
    - public/build_simpletrack_pocl.svg
    intel-test: test:intel:
    stage: test <<: *job_test
    image: image:
    name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest
    entrypoint: [""]
    environment:
    name: test/$CI_COMMIT_REF_NAME
    script:
    - cd /simpletrack/examples/lhc && python3 benchmark_opencl.py -s && python3 benchmark_opencl.py -p 100 -t 5
    pocl-test: test:pocl:
    stage: test <<: *job_test
    image:
    name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:pocl-latest
    bench:intel:
    <<: *job_benchmark
    image:
    name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest
    bench:pocl:
    <<: *job_benchmark
    image: image:
    name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:pocl-latest name: gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:pocl-latest
    entrypoint: [""]
    environment:
    name: test/$CI_COMMIT_REF_NAME
    script:
    - cd /simpletrack/examples/lhc && python3 benchmark_opencl.py -s && python3 benchmark_opencl.py -p 100 -t 5
    # 0.2.0 (June 16th 2020)
    FEATURES:
    * Added "benchmark" mode to run and generate json output for the runs.
    # 0.1.0 (June 13th 2020) # 0.1.0 (June 13th 2020)
    FEATURES: FEATURES:
    ......
    ...@@ -3,6 +3,7 @@ FROM debian:latest ...@@ -3,6 +3,7 @@ FROM debian:latest
    ENV PARTICLES 20000 ENV PARTICLES 20000
    ENV TURNS 15 ENV TURNS 15
    ENV DEVICE "0.0" ENV DEVICE "0.0"
    ENV BENCHMARK ""
    ENV INTEL_OCL_DIR "/opt/intel/oclcpuexp" ENV INTEL_OCL_DIR "/opt/intel/oclcpuexp"
    ENV INTEL_TBB_DIR "/opt/intel/tbb" ENV INTEL_TBB_DIR "/opt/intel/tbb"
    ...@@ -37,6 +38,8 @@ RUN mkdir -p ${INTEL_NEO_DIR} && cd ${INTEL_NEO_DIR} \ ...@@ -37,6 +38,8 @@ RUN mkdir -p ${INTEL_NEO_DIR} && cd ${INTEL_NEO_DIR} \
    RUN mkdir /.cache && chmod -R 777 /.cache \ RUN mkdir /.cache && chmod -R 777 /.cache \
    && git clone https://github.com/rdemaria/simpletrack \ && git clone https://github.com/rdemaria/simpletrack \
    && cd simpletrack && pip3 install pyopencl && pip3 install -e . && cd simpletrack && pip3 install pyopencl && pip3 install -e .
    ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && python3 benchmark_opencl.py -p $PARTICLES -t $TURNS -d $DEVICE" ] COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
    ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh" ]
    ...@@ -3,6 +3,7 @@ FROM gitlab-registry.cern.ch/linuxsupport/cc7-base:latest ...@@ -3,6 +3,7 @@ FROM gitlab-registry.cern.ch/linuxsupport/cc7-base:latest
    ENV PARTICLES 20000 ENV PARTICLES 20000
    ENV TURNS 15 ENV TURNS 15
    ENV DEVICE "0.0" ENV DEVICE "0.0"
    ENV BENCHMARK ""
    ENV NVIDIA_VISIBLE_DEVICES all ENV NVIDIA_VISIBLE_DEVICES all
    ENV NVIDIA_DRIVER_CAPABILITIES compute,utility ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
    ...@@ -15,6 +16,8 @@ RUN distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ ...@@ -15,6 +16,8 @@ RUN distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
    RUN yum install -y python3 python3-devel python3-pip git gcc && pip3 install pyopencl \ RUN yum install -y python3 python3-devel python3-pip git gcc && pip3 install pyopencl \
    && mkdir /.cache && chmod -R 777 /.cache \ && mkdir /.cache && chmod -R 777 /.cache \
    && git clone https://github.com/rdemaria/simpletrack \ && git clone https://github.com/rdemaria/simpletrack \
    && cd simpletrack && pip3 install -e . && cd simpletrack && pip3 install -e .
    ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && python3 benchmark_opencl.py -p $PARTICLES -t $TURNS -d $DEVICE" ] COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
    ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh" ]
    FROM debian:latest FROM debian:latest
    ARG LLVM_VERSION=7 ARG LLVM_VERSION=7
    ENV OCL_ICD_VENDORS=/pocl/build/ocl-vendors ENV OCL_ICD_VENDORS "/pocl/build/ocl-vendors"
    ENV POCL_BUILDING=1 ENV POCL_BUILDING "1"
    ENV PARTICLES 20000 ENV PARTICLES 20000
    ENV TURNS 15 ENV TURNS 15
    ENV DEVICE "0.0" ENV DEVICE "0.0"
    ENV BENCHMARK ""
    RUN apt update && apt upgrade -y \ RUN apt update && apt upgrade -y \
    && apt-get install -y build-essential ocl-icd-libopencl1 cmake git gcc g++ libhwloc5 pkg-config python3-pip libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} llvm-${LLVM_VERSION}-dev make ninja-build ocl-icd-libopencl1 ocl-icd-dev ocl-icd-opencl-dev libhwloc-dev zlib1g zlib1g-dev clinfo && apt-get install -y build-essential ocl-icd-libopencl1 cmake git gcc g++ libhwloc5 pkg-config python3-pip libclang-${LLVM_VERSION}-dev clang-${LLVM_VERSION} llvm-${LLVM_VERSION}-dev make ninja-build ocl-icd-libopencl1 ocl-icd-dev ocl-icd-opencl-dev libhwloc-dev zlib1g zlib1g-dev clinfo
    ...@@ -19,4 +20,6 @@ RUN mkdir /.cache && chmod -R 777 /.cache/ \ ...@@ -19,4 +20,6 @@ RUN mkdir /.cache && chmod -R 777 /.cache/ \
    && git clone https://github.com/rdemaria/simpletrack.git \ && git clone https://github.com/rdemaria/simpletrack.git \
    && cd simpletrack && pip3 install pyopencl && pip3 install -e . && cd simpletrack && pip3 install pyopencl && pip3 install -e .
    ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc/ && python3 benchmark_opencl.py -p $PARTICLES -t $TURNS -d $DEVICE" ] COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
    ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc/ && ./lhc-simpletrack.sh" ]
    ...@@ -10,7 +10,6 @@ Docker images containing Simpletrack benchmark built a selection of GPU/CPU targ ...@@ -10,7 +10,6 @@ Docker images containing Simpletrack benchmark built a selection of GPU/CPU targ
    |--------------|:-------:|:-------:|:------:| |--------------|:-------:|:-------:|:------:|
    | __GPU__ | :heavy_check_mark: | :heavy_check_mark: | | | __GPU__ | :heavy_check_mark: | :heavy_check_mark: | |
    | __CPU__ | :heavy_check_mark: | | :heavy_check_mark: | | __CPU__ | :heavy_check_mark: | | :heavy_check_mark: |
    | Latest build | [![intel build](https://gitlab.cern.ch/hep-benchmarks/hep-workloads-gpu/-/jobs/artifacts/master/raw/public/build_simpletrack_intel.svg?job=intel)](https://gitlab.cern.ch/hep-benchmarks/hep-workloads-gpu/-/commits/master) | [![nvidia build](https://gitlab.cern.ch/hep-benchmarks/hep-workloads-gpu/-/jobs/artifacts/master/raw/public/build_simpletrack_nvidia.svg?job=nvidia)](https://gitlab.cern.ch/hep-benchmarks/hep-workloads-gpu/-/commits/master) | [![pocl build](https://gitlab.cern.ch/hep-benchmarks/hep-workloads-gpu/-/jobs/artifacts/master/raw/public/build_simpletrack_pocl.svg?job=pocl)](https://gitlab.cern.ch/hep-benchmarks/hep-workloads-gpu/-/commits/master) |
    # Usage # Usage
    ...@@ -18,11 +17,12 @@ Docker images containing Simpletrack benchmark built a selection of GPU/CPU targ ...@@ -18,11 +17,12 @@ Docker images containing Simpletrack benchmark built a selection of GPU/CPU targ
    Default entrypoint accepts the following environment for benchmark execution: Default entrypoint accepts the following environment for benchmark execution:
    | | Default | Description | | Variable | Default | Description |
    |-----------|----------|---------------------| |---------------|----------|---------------------|
    | PARTICLES | 20000 | Number of particles | | __PARTICLES__ | 20000 | Number of particles |
    | TURNS | 15 | Number of turns | | __TURNS__ | 15 | Number of turns |
    | DEVICE | "0.0" | Platform ID | | __DEVICE__ | "0.0" | Platform ID |
    | __BENCHMARK__ | "" | Enable specific benchmark mode with "all", "device" |
    Docker example: Docker example:
    ......
    #!/bin/bash
    ########################
    function get_clinfo() { echo "$CLINFO_OUT" | grep -e "$1" | sed -r 's/\S+ \S+ \s+//1'; }
    ########################
    ########################
    function gen_devices() {
    ########################
    PLATFORMS="$(clinfo -l | grep "Platform" | cut -d"#" -f2 | cut -d":" -f1)"
    DEVICES="$(clinfo -l | grep "Device" | cut -d"#" -f2 | cut -d":" -f1)"
    for dev_id in $(seq 1 $(echo "$DEVICES" | wc -l))
    do
    id=`echo "$PLATFORMS" | head -n $dev_id | tail -1`.`echo "$DEVICES" | head -n $dev_id | tail -1`
    dtype=`get_clinfo 'Device Type' | head -n $dev_id | tail -1 | xargs`
    name=`get_clinfo 'Device Name' | head -n $dev_id | tail -1 | xargs`
    dev_ver=`get_clinfo 'Device Version' | head -n $dev_id | tail -1 | xargs`
    dri_ver=`get_clinfo 'Driver Version' | head -n $dev_id | tail -1 | xargs`
    max_units=`get_clinfo 'Max compute units' | awk '{print $2}' | head -n $dev_id | tail -1 | xargs`
    echo "\"device_id\":\"$id\",\"device_type\":\"$dtype\",\"device_name\":\"$name\",\"device_version\":\"$dev_ver\",\"driver_version\":\"$dri_ver\",\"max_units\":\"$max_units\""
    done
    }
    #########################
    function log() {
    #########################
    case $1 in
    error) shift 1; echo -e "\e[31m>>> ERROR:\e[0m $*\n" | tee -a $WORK_DIR/out.log ; exit 2 ;;
    info) shift 1; echo -e "\e[34m$*\e[0m\n" | tee -a $WORK_DIR/out.log ;;
    silent) shift 1; echo "$*" >> $WORK_DIR/out.log ;;
    *) echo "$*" | tee -a $WORK_DIR/out.log ;
    esac
    }
    ##########################
    function run_benchmark() {
    ##########################
    OUT=$(python3 benchmark_opencl.py -p $PARTICLES -t $TURNS -d $1 2>&1 | tee $WORK_DIR/out.log)
    RESULT=`echo "$OUT" | grep 'particles\*turns/seconds'`
    if [ "$RESULT" == "" ]; then log error "Failed to parse the output. Failed run?";
    else echo $(echo $RESULT | cut -d' ' -f1 | xargs); fi
    }
    ##########################
    function get_json() {
    ##########################
    dev_line=`echo "$DEVICES" | grep "\"device_id\":\"$1\""`
    echo "{\"copies\":\"1\",\"threads_per_copy\":\"$TURNS\",\"events_per_thread\":\"$PARTICLES\",\"wl-scores\":{\"sim\":\"$2\"},\"device\":{$dev_line}}"
    }
    ###################################
    ####### Main ######################
    if [ ! "$CI_PROJECT_DIR" == "" ]; then WORK_DIR=$CI_PROJECT_DIR/jobs;
    else WORK_DIR=`pwd`/jobs; fi
    if [ ! -d $WORK_DIR ]; then mkdir -p $WORK_DIR; fi
    if [ -f $WORK_DIR/out.log ]; then rm $WORK_DIR/out.log; fi
    CLINFO_OUT=`echo "$(clinfo | tee $WORK_DIR/clinfo.log)"`
    if [ `echo $CLINFO_OUT | grep 'Number of platforms' | awk '{print $4}'` -eq 0 ]; then
    log error "No platforms found. Exiting.."; fi
    DEVICES="$(gen_devices | tee $WORK_DIR/devices.log)"
    log silent "Devices found:\n$DEVICES"
    case $BENCHMARK in
    all) list=( `echo "$DEVICES" | cut -d"\"" -f4 | xargs` );
    log info "Running benchmark for ${#list[@]} device(s)";
    for dev in "${list[@]}"
    do
    OUT=$(run_benchmark $dev); get_json $dev $OUT | tee -a $WORK_DIR/summary.json
    done ;;
    device) log info "Running benchmark for $DEVICE device";
    OUT=$(run_benchmark $DEVICE); get_json $DEVICE $OUT | tee -a $WORK_DIR/summary.json ;;
    *) python3 benchmark_opencl.py -p $PARTICLES -t $TURNS -d $DEVICE 2>&1 | tee -a $WORK_DIR/out.log;
    esac
    log info "\nFinished running simpletrack"
    ...@@ -3,5 +3,5 @@ HEPWL_BMKOPTS="-p 20000 -t 15 -d \"0.0\"" ...@@ -3,5 +3,5 @@ HEPWL_BMKOPTS="-p 20000 -t 15 -d \"0.0\""
    HEPWL_BMKDIR= HEPWL_BMKDIR=
    HEPWL_BMKDESCRIPTION="Simpletrack OpenCL WIP of SixTrack" HEPWL_BMKDESCRIPTION="Simpletrack OpenCL WIP of SixTrack"
    HEPWL_DOCKERIMAGENAME=lhc/simpletrack HEPWL_DOCKERIMAGENAME=lhc/simpletrack
    HEPWL_DOCKERIMAGETAG=0.1.0 HEPWL_DOCKERIMAGETAG=0.2.0
    HEPWL_CVMFSREPOS= HEPWL_CVMFSREPOS=
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment