Skip to content
Snippets Groups Projects
Commit c7b6be94 authored by olga's avatar olga
Browse files

CI orchestrator and container updates

parent f5f0ba5a
No related branches found
No related tags found
1 merge request!9CI orchestrator and container updates
......@@ -6,8 +6,7 @@ simpletrack:
stage: triggers
trigger:
include: lhc/simpletrack/.simpletrack-ci.yml
strategy: depend
only:
variables:
- $CI_COMMIT_REF_NAME == "master"
changes:
- lhc/simpletrack/*
- $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "qa"
......@@ -4,6 +4,9 @@ stages:
- test
- benchmark
##########################
## Templates ############
.job_template: &job_build
stage: build
image:
......@@ -14,55 +17,102 @@ stages:
before_script:
- 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`
- if [ "${CI_COMMMIT_REF_NAME}" == "qa" ]; then export HEP_TAG="qa"-$HEP_TAG; export HEP_LATEST="qa-latest"; else export HEP_LATEST="latest"; fi
only:
variables:
- $CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_REF_NAME == "qa"
changes:
- lhc/simpletrack/Dockerfile.*
- lhc/simpletrack/lhc-simpletrack.*
- lhc/simpletrack/.simpletrack-ci.yml
.job_template: &job_test
stage: test
environment:
name: test/$CI_COMMIT_REF_NAME
script: [ "echo test" ]
script:
- cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh -s
- ./lhc-simpletrack.sh -b "none"
only:
variables:
- $CI_COMMIT_REF_NAME == "qa"
.job_template: &job_benchmark
.job_template: &job_bench
stage: benchmark
environment:
name: test/$CI_COMMIT_REF_NAME
script: [ "echo test" ]
variables:
BENCHMARK: "all"
script:
- cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh -b "all"
only:
variables:
- $CI_COMMIT_REF_NAME == "qa"
parallel: 3
artifacts:
paths:
- jobs/
##########################
### Build ################
build:nvidia:
<<: *job_build
script:
- /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}/simpletrack/nvidia:$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/simpletrack/nvidia:$HEP_LATEST
build:intel:
<<: *job_build
script:
- /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}/simpletrack/intel:$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/simpletrack/intel:$HEP_LATEST
build:rocm:
<<: *job_build
script:
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/lhc/simpletrack/Dockerfile.rocm --destination $CI_REGISTRY_IMAGE/simpletrack/rocm:$HEP_TAG --destination $CI_REGISTRY_IMAGE/simpletrack/rocm:$HEP_LATEST
build:pocl:
<<: *job_build
script:
- /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}/simpletrack/pocl:$HEP_TAG --destination ${CI_REGISTRY_IMAGE}/simpletrack/pocl:$HEP_LATEST
##########################
### Test #################
test:intel:
<<: *job_test
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/simpletrack/intel:qa-latest
entrypoint: [""]
needs:
- job: build:intel
artifacts: false
test:pocl:
<<: *job_test
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/simpletrack/pocl:qa-latest
entrypoint: [""]
needs:
- job: build:pocl
artifacts: false
##########################
### Benchmark ############
bench:intel:
<<: *job_benchmark
<<: *job_bench
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/simpletrack/intel:qa-latest
entrypoint: [""]
needs:
- job: test:intel
artifacts: false
bench:pocl:
<<: *job_benchmark
<<: *job_bench
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/simpletrack/pocl:qa-latest
entrypoint: [""]
needs:
- job: test:pocl
artifacts: false
# 0.3.0 (June 28th 2020)
UPDATES:
* intel: NEO version updated to 20.25.17111 and oneAPI DPC++ to 2020.10.6.0.4 (June releases).
FEATURES:
* Switched to argument for benchmark setup instead of environment variables.
* ROCm container added
# 0.2.1 (June 25th 2020)
FIXES:
* ocl-icd-dev package explicitely installed now to avoid build failures.
# 0.2.0 (June 16th 2020)
FIXES:
......
FROM debian:latest
ENV PARTICLES 20000
ENV TURNS 15
ENV DEVICE "0.0"
ENV BENCHMARK ""
ENV INTEL_OCL_DIR "/opt/intel/oclcpuexp"
ENV INTEL_TBB_DIR "/opt/intel/tbb"
ENV INTEL_OCL_VER "2020.10.4.0.15"
ENV INTEL_TBB_VER "2020.2"
ENV INTEL_COMPUTE_URL "https://github.com/intel/compute-runtime/releases/download/20.22.16952"
ENV INTEL_NEO_DIR "/opt/intel/neo"
ENV INTEL_NEO_VER "20.22.16952"
RUN apt-get update && apt upgrade -y && apt-get -y install python3-pip clinfo wget git \
&& mkdir -p ${INTEL_OCL_DIR} ${INTEL_TBB_DIR} /etc/OpenCL/vendors \
&& cd ${INTEL_OCL_DIR} \
&& wget https://github.com/intel/llvm/releases/download/2020-05/oclcpuexp-${INTEL_OCL_VER}_rel.tar.gz \
ENV OCL_DIR "/opt/intel/oclcpuexp"
ENV TBB_DIR "/opt/intel/tbb"
ENV OCL_VER "2020.10.6.0.4"
ENV TBB_VER "2020.2"
ENV SRC_URL "https://github.com/intel/compute-runtime/releases/download"
ENV NEO_DIR "/opt/intel/neo"
ENV NEO_VER "20.25.17111"
RUN apt-get update && apt upgrade -y && apt-get -y install python3-pip ocl-icd-opencl-dev clinfo wget git \
&& mkdir -p ${OCL_DIR} ${TBB_DIR} /etc/OpenCL/vendors && cd ${OCL_DIR} \
&& wget https://github.com/intel/llvm/releases/download/2020-06/oclcpuexp-${OCL_VER}_rel.tar.gz \
&& tar zxvf oclcpuexp-*.tar.gz && rm oclcpuexp-*.tar.gz \
&& echo ${INTEL_OCL_DIR}/x64/libintelocl.so > /etc/OpenCL/vendors/intel_expcpu.icd \
&& cd ${INTEL_TBB_DIR} \
&& wget https://github.com/oneapi-src/oneTBB/releases/download/v2020.2/tbb-${INTEL_TBB_VER}-lin.tgz \
&& echo ${OCL_DIR}/x64/libintelocl.so > /etc/OpenCL/vendors/intel_expcpu.icd && cd ${TBB_DIR} \
&& wget https://github.com/oneapi-src/oneTBB/releases/download/v2020.2/tbb-${TBB_VER}-lin.tgz \
&& tar zxvf tbb*.tgz && rm tbb*.tgz \
&& cd ${INTEL_OCL_DIR}/x64 && ln -s ${INTEL_TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbb.so . \
&& ln -s ${INTEL_TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbbmalloc.so . \
&& ln -s ${INTEL_TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbb.so.2 . \
&& ln -s ${INTEL_TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbbmalloc.so.2 . \
&& echo ${INTEL_OCL_DIR}/x64 > /etc/ld.so.conf.d/libintelopenclexp.conf \
&& cd ${OCL_DIR}/x64 && ln -s ${TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbb.so . \
&& ln -s ${TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbbmalloc.so . \
&& ln -s ${TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbb.so.2 . \
&& ln -s ${TBB_DIR}/tbb/lib/intel64/gcc4.8/libtbbmalloc.so.2 . \
&& echo ${OCL_DIR}/x64 > /etc/ld.so.conf.d/libintelopenclexp.conf \
&& ldconfig -f /etc/ld.so.conf.d/libintelopenclexp.conf
RUN mkdir -p ${INTEL_NEO_DIR} && cd ${INTEL_NEO_DIR} \
&& wget ${INTEL_COMPUTE_URL}/intel-gmmlib_20.1.1_amd64.deb && dpkg -i intel-gmmlib_20.1.1_amd64.deb && rm *.deb \
&& wget ${INTEL_COMPUTE_URL}/intel-igc-core_1.0.4062_amd64.deb && dpkg -i intel-igc-core_1.0.4062_amd64.deb && rm *.deb \
&& wget ${INTEL_COMPUTE_URL}/intel-igc-opencl_1.0.4062_amd64.deb && dpkg -i intel-igc-opencl_1.0.4062_amd64.deb && rm *.deb \
&& wget ${INTEL_COMPUTE_URL}/intel-opencl_${INTEL_NEO_VER}_amd64.deb && dpkg -i intel-opencl_${INTEL_NEO_VER}_amd64.deb && rm *.deb
RUN mkdir -p ${NEO_DIR} && cd ${NEO_DIR} \
&& wget ${SRC_URL}/${NEO_VER}/intel-gmmlib_20.1.1_amd64.deb \
&& wget ${SRC_URL}/${NEO_VER}/intel-igc-core_1.0.4155_amd64.deb \
&& wget ${SRC_URL}/${NEO_VER}/intel-igc-opencl_1.0.4155_amd64.deb \
&& wget ${SRC_URL}/${NEO_VER}/intel-opencl_${NEO_VER}_amd64.deb \
&& wget ${SRC_URL}/${NEO_VER}/ww25.sum && sha256sum --ignore-missing -c ww25.sum \
&& dpkg -i *.deb && rm *.deb ww25.sum
RUN mkdir /.cache && chmod -R 777 /.cache \
&& git clone https://github.com/rdemaria/simpletrack \
......@@ -42,4 +37,4 @@ RUN mkdir /.cache && chmod -R 777 /.cache \
COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh" ]
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh \"$@\"", "--" ]
FROM gitlab-registry.cern.ch/linuxsupport/cc7-base:latest
ENV PARTICLES 20000
ENV TURNS 15
ENV DEVICE "0.0"
ENV BENCHMARK ""
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
......@@ -13,11 +8,11 @@ RUN distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& yum install -y epel-release && yum install -y ocl-icd clinfo nvidia-container-runtime \
&& mkdir -p /etc/OpenCL/vendors && echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
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 gcc-c++ ocl-icd-devel && pip3 install pybind11 mako pyopencl \
&& mkdir /.cache && chmod -R 777 /.cache \
&& git clone https://github.com/rdemaria/simpletrack \
&& cd simpletrack && pip3 install -e .
COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh" ]
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh \"$@\"", "--" ]
......@@ -4,11 +4,6 @@ ARG LLVM_VERSION=7
ENV OCL_ICD_VENDORS "/pocl/build/ocl-vendors"
ENV POCL_BUILDING "1"
ENV PARTICLES 20000
ENV TURNS 15
ENV DEVICE "0.0"
ENV BENCHMARK ""
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
......@@ -22,4 +17,4 @@ RUN mkdir /.cache && chmod -R 777 /.cache/ \
COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc/ && ./lhc-simpletrack.sh" ]
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc/ && ./lhc-simpletrack.sh \"$@\"", "--" ]
FROM debian:latest
RUN apt -y update && apt -y dist-upgrade && apt install -y libnuma-dev ocl-icd-opencl-dev clinfo python3-pip gnupg wget git \
&& wget -q -O - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | apt-key add - \
&& echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main' | tee /etc/apt/sources.list.d/rocm.list \
&& apt update && apt install -y rocm-dkms \
&& echo 'ADD_EXTRA_GROUPS=1' | tee -a /etc/adduser.conf \
&& echo 'EXTRA_GROUPS=video' | tee -a /etc/adduser.conf
RUN mkdir /.cache && chmod -R 777 /.cache \
&& git clone https://github.com/rdemaria/simpletrack \
&& cd simpletrack && pip3 install pyopencl && pip3 install -e .
COPY lhc/simpletrack/lhc-simpletrack.sh /simpletrack/examples/lhc/lhc-simpletrack.sh
ENTRYPOINT [ "/bin/bash", "-c", "cd /simpletrack/examples/lhc && ./lhc-simpletrack.sh \"$@\"", "--" ]
# Overview
Docker images containing Simpletrack benchmark built for a selection of GPU/CPU targets:
Docker images containing OpenCL-oriented Simpletrack benchmark built for a selection of GPU and CPU platforms:
- __Intel__: contains [GPU NEO runtime](https://github.com/intel/compute-runtime) and OneAPI version i.e. DPC++ and SYCL support contains only the [OpenCL CPU runtimes](https://software.intel.com/content/www/us/en/develop/articles/opencl-drivers.html).
- __Nvidia__: contains OpenCL runtime from [this](https://nvidia.github.io/nvidia-container-runtime/) repository.
- __ROCm__: AMD Radeon Open Ecosystem platform runtimes installed using [these](https://rocmdocs.amd.com/en/latest/) instructions.
- __Nvidia__: contains OpenCL runtime built using [this](https://nvidia.github.io/nvidia-container-runtime/) repository.
- __POCL__: Portable Computing Language implementation built with this [repo](https://github.com/pocl/pocl)
| | __intel__ | __nvidia__ | __pocl__ |
|--------------|:-------:|:-------:|:------:|
| __GPU__ | :heavy_check_mark: | :heavy_check_mark: | |
| __CPU__ | :heavy_check_mark: | | :heavy_check_mark: |
| | __intel__ | __rocm__ | __nvidia__ | __pocl__ |
|--------------|:-----------:|:-----------:|:--------:|:----------:|
| __GPU__ | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | |
| __CPU__ | :heavy_check_mark: | :white_check_mark: | | :heavy_check_mark: |
# Usage
## Benchmark Setup
Default entrypoint accepts the following environment for benchmark execution:
| Variable | Default | Description |
|---------------|----------|---------------------|
| __PARTICLES__ | 20000 | Number of particles |
| __TURNS__ | 15 | Number of turns |
| __DEVICE__ | "0.0" | Platform ID |
| __BENCHMARK__ | "" | Enable specific benchmark mode with "all", "device" |
The following Docker examples demonstrate how to customise running setup. The benchmark mode allows to generate logs and output files in a default location (/simpletrack/examples/lhc/jobs or $CI_PROJECT_DIR) for either a single or all available devices.
Default entrypoint provides the following options that can be used, for example:
```
~$ docker run --rm -e PARTICLES=100 -e TURNS=5 -e DEVICE="1.0" <image:tag>
~$ docker run --rm -e DEVICE="1.0" -e BENCHMARK="device" <image:tag>
~$ docker run --rm -e BENCHMARK="all" <image:tag>
```
## Target Platform
~$ docker run --rm gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/simpletrack/intel:latest -h
To discover and target available platform pass the desired DEVICE environment variable into the container, for example:
Usage: ./lhc-simpletrack.sh <options>
Options:
-p, --particles Number of particles. Default: 20000
-t, --turns Number of turns. Default: 15
-d, --device Specify the device to run on. Default: 0.0
-b, --benchmark Benchmark modes: all or device. Default: device
-s, --show List all available devices and exit
```
~$ docker run --rm --device /dev/dri:/dev/dri --entrypoint="/bin/bash" \
gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest \
-c "cd /simpletrack/examples/lhc && python3 benchmark_opencl.py --show"
Platform : Intel(R) OpenCL HD Graphics
Device '0.0': Intel(R) Gen9 HD Graphics NEO
Platform : Intel(R) OpenCL
Device '1.0': Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
To run the container for 1000 particles, 5 particles for device "1.0": ```~$ docker run --rm <image:tag> -p 1000 -t 5 -d "1.0"```
Use the benchmark option "all" to execute runs on all available devices: ```~$ docker run --rm <image:tag> -b "all"```
~$ docker run --rm --device /dev/dri:/dev/dri -e DEVICE "0.0" gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest
The benchmark mode allows to generate logs and output files in a default location (/simpletrack/examples/lhc/jobs or $CI_PROJECT_DIR) for either a single or all available devices.
29820 particles*turns/seconds, 20000 particles, 15 turns, device '0.0', Intel(R) Gen9 HD Graphics NEO
~$ docker run --rm --device /dev/dri:/dev/dri -e DEVICE "1.0" gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest
## Target Platform
5856 particles*turns/seconds, 20000 particles, 15 turns, device '1.0', Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
```
To discover and target available platform pass the desired DEVICE ...
For a full list of available platforms use _clinfo_ tool as follows:
## Docker GPU Passthrough
```
~$ docker run --rm --entrypoint "/usr/bin/clinfo" gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest
```
To passthrough the device to the container, use the following options:
## Docker Passthrough
| Target | Passthrough option |
|:------------|:-------------------|
| __Nvidia__ | ```--gpus all``` |
| __AMD__ | ```--device /dev/kfd --device /dev/dri``` |
| __Intel__ | ```--device /dev/dri``` |
To enable GPU passthrough use "--gpus all" or "--device /dev/dri:/dev/dri" for Nvidia and Intel targets as follows:
```
~$ docker run --rm --gpus all gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:nvidia-latest
~$ docker run --rm --device /dev/dri:/dev/dri gitlab-registry.cern.ch/hep-benchmarks/hep-workloads-gpu/lhc/simpletrack:intel-latest
```
#!/bin/bash
########################
function get_clinfo() { echo "$CLINFO_OUT" | grep -e "$1" | sed -r 's/\S+ \S+ \s+//1'; }
########################
set -e
########################
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)"
PARTICLES=20000
TURNS=15
DEVICE="0.0"
BENCHMARK="device"
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
}
#################
get_info() { echo "$1" | grep "$2" | cut -d":" -f2 | head -n $3 | tail -1 | xargs; }
#################
#########################
function get_devices() {
#########################
#################
get_devices() {
#################
info="$(python3 benchmark_opencl.py -s)"
devices=`echo "$info" | grep "Device" | cut -d"'" -f2`
for dev_id in $(seq 1 $(echo "$devices" | wc -l))
do
id=`echo "$info" | grep "Device" | cut -d"'" -f2 | head -n $dev_id | tail -1 | xargs`
platform=`echo "$info" | grep "Device" | cut -d":" -f2 | head -n $dev_id | tail -1 | xargs`
name=`echo "$info" | grep "Platform" | cut -d":" -f2 | head -n $dev_id | tail -1 | xargs`
echo "\"device_id\":\"$id\",\"name\":\"$name\",\"platform\":\"$platform\""
echo "\"device_id\":\"$(echo "$info" | grep "Device" | cut -d"'" -f2 | head -n $dev_id | tail -1 | xargs)\",\"name\":\"$(get_info "$info" "Device" "$dev_id")\",\"platform\":\"$(get_info "$info" "Platform" "$dev_id")\""
done
}
#########################
function log() {
#########################
#################
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 ;;
......@@ -49,9 +34,28 @@ function log() {
esac
}
##########################
function run_benchmark() {
##########################
#################
parse_args() {
#################
while [ $# -gt 0 ]
do
case $1 in
--help|-help|-h)
echo -e "Usage: $0 <options>\n\nOptions:\n\t-p, --particles\t\tNumber of particles. Default: $PARTICLES\n\t-t, --turns\t\tNumber of turns. Default: $TURNS\n\t-d, --device\t\tSpecify the device to run on. Default: $DEVICE\n\t-b, --benchmark\t\tBenchmark modes: all or device. Default: $BENCHMARK\n\t-s, --show\t\tList all available devices and exit\n"; exit 0;;
--particles|-p) shift 1 ; PARTICLES=$1 ;;
--turns|-t) shift 1 ; TURNS=$1 ;;
--device|-d) shift 1 ; DEVICE=$1 ;;
--benchmark|-b) shift 1 ; BENCHMARK=$1 ;;
--show|-s) python3 benchmark_opencl.py -s ; exit 0 ;;
*) log error "Invalid argument: $*. Please use: $0 --help for the list of available options"
esac
shift 1
done
}
#################
run_benchmark() {
#################
OUT=$(python3 benchmark_opencl.py -p $PARTICLES -t $TURNS -d $1 2>&1 | tee -a $WORK_DIR/out.log)
RESULT=`echo "$OUT" | grep 'particles\*turns/seconds'`
......@@ -59,36 +63,28 @@ function run_benchmark() {
else echo $(echo $RESULT | cut -d' ' -f1 | xargs); fi
}
##########################
function get_json() {
##########################
#################
get_json() {
#################
dev_line=`echo "$DEVICES" | grep "\"device_id\":\"$1\""`
echo "{\"copies\":\"1\",\"threads_per_copy\":\"$TURNS\",\"events_per_thread\":\"$PARTICLES\",\"wl-scores\":{\"simpletrack\":\"$2\"},\"device\":{$dev_line}}"
}
##########################
function get_yaml() {
##########################
dev_line=`echo "$DEVICES" | grep "\"device_id\":\"$1\""`
echo -e "- wl-scores: $2\n id: \"$1\"\n name: \"$(echo "$dev_line" | grep "device_id\":\"$1" | cut -d"\"" -f8)\"\n platform: \"$(echo "$dev_line" | grep "device_id\":\"$1" | cut -d"\"" -f12)\""
}
###################################
####### Main ######################
if [ ! "$CI_PROJECT_DIR" == "" ]; then WORK_DIR=$CI_PROJECT_DIR/jobs;
else WORK_DIR=`pwd`/jobs; fi
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
parse_args $*
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
echo -e "args:\n number_of_particles: (p,$PARTICLES)\n number_of_turns: (t,$TURNS)\ndevice:" > $WORK_DIR/summary.yaml
DEVICES="$(get_devices | tee $WORK_DIR/devices.log)"
log silent "Devices found:\n$DEVICES"
......@@ -97,13 +93,11 @@ case $BENCHMARK in
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;
get_yaml $dev $OUT >> $WORK_DIR/summary.yaml;
done ; cat $WORK_DIR/summary.yaml;;
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 ;
get_yaml $DEVICE $OUT >> $WORK_DIR/summary.yaml ; cat $WORK_DIR/summary.yaml ;;
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
......
......@@ -3,5 +3,5 @@ HEPWL_BMKOPTS="-p 20000 -t 15 -d \"0.0\""
HEPWL_BMKDIR=
HEPWL_BMKDESCRIPTION="Simpletrack OpenCL WIP of SixTrack"
HEPWL_DOCKERIMAGENAME=lhc/simpletrack
HEPWL_DOCKERIMAGETAG=0.2.0
HEPWL_DOCKERIMAGETAG=0.3.0
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