Skip to content

Commit

Permalink
Merge pull request #159 from ROCmSoftwarePlatform/develop_stream_2020…
Browse files Browse the repository at this point in the history
…-05-05

Speed up unit tests by using CTest resource allocation
  • Loading branch information
saadrahim committed May 25, 2020
2 parents 1db8deb + 624355d commit 9fb86a3
Show file tree
Hide file tree
Showing 41 changed files with 848 additions and 94 deletions.
67 changes: 57 additions & 10 deletions .gitlab-ci-gputest.yml
Original file line number Diff line number Diff line change
@@ -1,24 +1,71 @@
.test:cmake-latest:
stage: test
needs:
- build:cmake-latest
extends:
- .deps:cmake-latest

test:vega20:
extends: .test
dependencies:
- build:rocm
extends: .test:cmake-latest
tags:
- vega20
- rocm
variables:
PARALLEL_JOBS: 2
TEST_GFX_IPS_REGEX: gfx906
script:
- cd $BUILD_LATEST_DIR
- $SUDO_CMD $CMAKE_LATEST_PATH/bin/cmake
-D CMAKE_PREFIX_PATH=/opt/rocm
-P $CI_PROJECT_DIR/cmake/GenerateResourceSpec.cmake
- $SUDO_CMD $CMAKE_LATEST_PATH/bin/ctest
--output-on-failure
--repeat-until-fail 2
--tests-regex "hip|$TEST_GFX_IPS_REGEX"
--resource-spec-file ./resources.json
--parallel $PARALLEL_JOBS

test:s9300:
extends: .test
dependencies:
- build:rocm
extends: .test:cmake-latest
needs:
- build:cmake-latest
tags:
- s9300
- rocm
variables:
PARALLEL_JOBS: 6
TEST_GFX_IPS_REGEX: gfx803
script:
- cd $BUILD_LATEST_DIR
- $SUDO_CMD $CMAKE_LATEST_PATH/bin/cmake
-D CMAKE_PREFIX_PATH=/opt/rocm
-P $CI_PROJECT_DIR/cmake/GenerateResourceSpec.cmake
- $SUDO_CMD $CMAKE_LATEST_PATH/bin/ctest
--output-on-failure
--repeat-until-fail 2
--tests-regex "hip|$TEST_GFX_IPS_REGEX"
--resource-spec-file ./resources.json
--parallel $PARALLEL_JOBS
allow_failure: true

test:mi25:
extends: .test
dependencies:
- build:rocm
extends: .test:cmake-latest
needs:
- build:cmake-latest
tags:
- mi25
- rocm
- rocm
variables:
PARALLEL_JOBS: 2
TEST_GFX_IPS_REGEX: gfx900
script:
- cd $BUILD_LATEST_DIR
- $SUDO_CMD $CMAKE_LATEST_PATH/bin/cmake
-D CMAKE_PREFIX_PATH=/opt/rocm
-P $CI_PROJECT_DIR/cmake/GenerateResourceSpec.cmake
- $SUDO_CMD $CMAKE_LATEST_PATH/bin/ctest
--output-on-failure
--repeat-until-fail 2
--tests-regex "hip|$TEST_GFX_IPS_REGEX"
--resource-spec-file ./resources.json
--parallel $PARALLEL_JOBS
231 changes: 156 additions & 75 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,97 +22,178 @@

image: rocm/rocm-terminal:latest

stages:
- build:cmake_latest # Tests if builds succeed (CMake)
- build:cmake_minimum # Tests if builds succeed (CMake)
- test # Tests if unit tests are passing (CTest)

variables:
SUDO_CMD: "" # Must be "sudo" on images which don't use root user
DEPS_DIR: "$CI_PROJECT_DIR/__dependencies"
CMAKE_URL: "https://cmake.org/files/v3.5/cmake-3.5.1-Linux-x86_64.tar.gz"
# General build flags
CXXFLAGS: ""
CMAKE_OPTIONS: ""
# Local build options
LOCAL_CXXFLAGS: ""
LOCAL_CMAKE_OPTIONS: ""
# Tested CMake versions
CMAKE_MINIMUM_VERSION: 3.5.2
CMAKE_LATEST_VERSION: 3.17.0
# Cluster config

# Image-specific helper
SUDO_CMD: "sudo -E" # Must be "sudo" on images which don't use root user
# Helper variables
DEPS_DIR: $CI_PROJECT_DIR/deps
BUILD_DIR: $CI_PROJECT_DIR/build
CMAKE_MINIMUM_URL: "https://cmake.org/files/v3.5/cmake-3.5.1-Linux-x86_64.tar.gz"
CMAKE_MINIMUM_PATH: "$CI_PROJECT_DIR/deps/cmake-3.5.2"
CMAKE_LATEST_URL: "https://cmake.org/files/v3.16/cmake-3.16.0-Linux-x86_64.tar.gz"
CMAKE_LATEST_PATH: "$CI_PROJECT_DIR/deps/cmake-3.17.0"
BUILD_MINIMUM_DIR: $CI_PROJECT_DIR/build/cmake-3.5.2
BUILD_LATEST_DIR: $CI_PROJECT_DIR/build/cmake-3.17.0
PACKAGE_DIR: $CI_PROJECT_DIR/build/package

.deps:cmake-minimum:
stage: build:cmake_minimum
before_script:
- $SUDO_CMD apt update -qq
# | Used in the script | Build tools | Fetch from https:// | rocminfo calls lsmod
- $SUDO_CMD apt install -y -qq wget tar xz-utils bzip2 libnuma-dev libunwind-dev git build-essential pkg-config ninja-build ca-certificates kmod
# Fetch CMake only if the cache has not been restored
- if [ ! -d $CMAKE_MINIMUM_PATH ]; then mkdir -p $CMAKE_MINIMUM_PATH; wget --no-check-certificate --quiet -O - $CMAKE_MINIMUM_URL | tar --strip-components=1 -xz -C $CMAKE_MINIMUM_PATH
- fi
- export PATH=$CMAKE_MINIMUM_PATH/bin:$PATH
# Debug printing of environment for context when errors occur
- hipconfig
cache:
key: $CMAKE_MINIMUM_VERSION
paths:
- $CMAKE_MINIMUM_PATH

before_script:
- $SUDO_CMD apt-get update -qq
- $SUDO_CMD apt-get install -y -qq libnuma-dev libunwind-dev git wget tar xz-utils bzip2 build-essential pkg-config ca-certificates
- hipconfig
# cmake
- mkdir -p $DEPS_DIR/cmake
- wget --no-check-certificate --quiet -O - $CMAKE_URL | tar --strip-components=1 -xz -C $DEPS_DIR/cmake
- export PATH=$DEPS_DIR/cmake/bin:$PATH
# Combine global build options with local options
- export CXXFLAGS=$CXXFLAGS" "$LOCAL_CXXFLAGS
- export CMAKE_OPTIONS=$CXXFLAGS" "$LOCAL_CMAKE_OPTIONS
.deps:cmake-latest:
stage: build:cmake_latest
before_script:
- $SUDO_CMD apt update -qq
# | Used in the script | Build tools | Fetch from https:// | rocminfo calls lsmod
- $SUDO_CMD apt install -y -qq wget tar xz-utils bzip2 libnuma-dev libunwind-dev git build-essential pkg-config ninja-build ca-certificates kmod
# Fetch CMake only if the cache has not been restored
- if [ ! -d $CMAKE_LATEST_PATH ]; then mkdir -p $CMAKE_LATEST_PATH; wget --no-check-certificate --quiet -O - $CMAKE_LATEST_URL | tar --strip-components=1 -xz -C $CMAKE_LATEST_PATH;
- fi;
- export PATH=$CMAKE_LATEST_PATH/bin:$PATH
# Debug printing of environment for context when errors occur
- hipconfig
cache:
key: $CMAKE_LATEST_VERSION
paths:
- $CMAKE_LATEST_PATH

.build:
stage: build
variables:
SUDO_CMD: "sudo -E"
build:cmake-latest:
extends:
- .deps:cmake-latest
script:
- mkdir -p $BUILD_LATEST_DIR
- cd $BUILD_LATEST_DIR
- cmake
-G Ninja
-D CMAKE_CXX_COMPILER=hcc
-D CMAKE_BUILD_TYPE=Release
-D BUILD_TEST=ON
-D BUILD_EXAMPLE=ON
-D BUILD_BENCHMARK=ON
-D AMDGPU_TEST_TARGETS="gfx803;gfx900;gfx906"
-S $CI_PROJECT_DIR
-B $BUILD_LATEST_DIR
- cmake
--build $BUILD_LATEST_DIR
artifacts:
paths:
- build/library/
- build/test/test_*
- build/test/rocprim/test_*
- build/test/CTestTestfile.cmake
- build/test/rocprim/CTestTestfile.cmake
- build/gtest/
- build/CMakeCache.txt
- build/CTestTestfile.cmake
- build/rocprim*.deb
- build/rocprim*.zip
- $BUILD_LATEST_DIR/test/test_*
- $BUILD_LATEST_DIR/test/rocprim/test_*
- $BUILD_LATEST_DIR/test/CTestTestfile.cmake
- $BUILD_LATEST_DIR/test/rocprim/CTestTestfile.cmake
- $BUILD_LATEST_DIR/gtest/
- $BUILD_LATEST_DIR/CMakeCache.txt
- $BUILD_LATEST_DIR/CTestTestfile.cmake
expire_in: 2 weeks

build:rocm:
extends: .build
tags:
- rocm
script:
- mkdir build
- cd build
- CXX=hcc cmake -DBUILD_TEST=ON -DBUILD_EXAMPLE=ON -DBUILD_BENCHMARK=ON ../.
- make -j16
- make package

.test:
stage: test
variables:
SUDO_CMD: "sudo -E"
build:cmake-minimum:
extends:
- .deps:cmake-minimum
needs:
- job: build:cmake-latest
artifacts: false
script:
- cd build
- $SUDO_CMD ctest --output-on-failure --repeat-until-fail 2

include: '.gitlab-ci-gputest.yml'
- mkdir -p $BUILD_MINIMUM_DIR
- cd $BUILD_MINIMUM_DIR
- cmake
-G Ninja
-D CMAKE_CXX_COMPILER=hcc
-D CMAKE_BUILD_TYPE=Release
-D BUILD_TEST=ON
-D BUILD_EXAMPLE=ON
-D BUILD_BENCHMARK=ON
-B $BUILD_MINIMUM_DIR
../../.
- cmake
--build ./
artifacts:
paths:
- $BUILD_MINIMUM_DIR/test/test_*
- $BUILD_MINIMUM_DIR/test/rocprim/test_*
- $BUILD_MINIMUM_DIR/test/CTestTestfile.cmake
- $BUILD_MINIMUM_DIR/test/rocprim/CTestTestfile.cmake
- $BUILD_MINIMUM_DIR/gtest/
- $BUILD_MINIMUM_DIR/CMakeCache.txt
- $BUILD_MINIMUM_DIR/CTestTestfile.cmake
expire_in: 2 weeks

test:rocm_package:
stage: test
build:package:
extends:
- .deps:cmake-minimum
tags:
- rocm
variables:
SUDO_CMD: "sudo -E"
dependencies:
- build:rocm
script:
- cd build
- $SUDO_CMD dpkg -i rocprim-*.deb
- mkdir ../package_test && cd ../package_test
- CXX=hcc cmake ../test/extra/.
- make VERBOSE=1
- mkdir -p $PACKAGE_DIR
- cd $PACKAGE_DIR
- cmake
-G Ninja
-D CMAKE_CXX_COMPILER=hcc
-D CMAKE_BUILD_TYPE=Release
-B $PACKAGE_DIR
$CI_PROJECT_DIR
- $SUDO_CMD cmake
--build $PACKAGE_DIR
--target install
- $SUDO_CMD cpack
-G "DEB;ZIP"
- mkdir -p ../package_test && cd ../package_test
- cmake
-G Ninja
-D CMAKE_CXX_COMPILER=hcc
-D CMAKE_BUILD_TYPE=Release
$CI_PROJECT_DIR/test/extra
- cmake
--build .
- $SUDO_CMD ./test_rocprim_package
- $SUDO_CMD ctest --output-on-failure --repeat-until-fail 2
- $SUDO_CMD dpkg -r rocprim
artifacts:
paths:
- $PACKAGE_DIR/rocprim*.deb
- $PACKAGE_DIR/rocprim*.zip
expire_in: 2 weeks

include: '.gitlab-ci-gputest.yml'

test:rocm_install:
test:deb:
stage: test
needs:
- build:package
tags:
- rocm
variables:
SUDO_CMD: "sudo -E"
extends:
- .deps:cmake-minimum
script:
- mkdir build_only_install
- cd build_only_install
- CXX=hcc cmake -DONLY_INSTALL=ON ../.
- $SUDO_CMD make install
- mkdir ../install_test && cd ../install_test
- CXX=hcc cmake ../test/extra/.
- make VERBOSE=1
- $SUDO_CMD dpkg -i $PACKAGE_DIR/rocprim-*.deb
- mkdir -p package_test && cd package_test
- cmake
-G Ninja
-D CMAKE_CXX_COMPILER=hcc
-D CMAKE_BUILD_TYPE=Release
$CI_PROJECT_DIR/test/extra
- cmake
--build .
- $SUDO_CMD ctest --output-on-failure --repeat-until-fail 2
- $SUDO_CMD dpkg -r rocprim
5 changes: 3 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ else()
endif()

# Build options
option(BUILD_TEST "Build tests (requires googletest)" ON)
option(BUILD_TEST "Build tests (requires googletest)" OFF)
option(BUILD_BENCHMARK "Build benchmarks" OFF)
option(BUILD_EXAMPLE "Build examples" OFF)
# Disables building tests, benchmarks, examples
Expand All @@ -70,7 +70,8 @@ option(ONLY_INSTALL "Only install" OFF)
include(cmake/Dependencies.cmake)

# AMD targets
set(AMDGPU_TARGETS gfx803;gfx900;gfx906;gfx908 CACHE STRING "List of specific machine types for library to target")
set(AMDGPU_TARGETS gfx803;gfx900;gfx906;gfx908 CACHE STRING "List of specific device types to build for")
set(AMDGPU_TEST_TARGETS "" CACHE STRING "List of specific device types to test for") # Leave empty for default system device

# Setup VERSION
set(VERSION_STRING "2.10.1")
Expand Down
Loading

0 comments on commit 9fb86a3

Please sign in to comment.