| | #! /usr/bin/env bash |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| |
|
| | set -e |
| |
|
| | |
| | |
| | |
| | function append { |
| | tmp="${!1:+${!1} }${2}" |
| | eval "${1}=\${tmp}" |
| | } |
| |
|
| | |
| | |
| | function log() { |
| | printf "\n>>>> %s\n\n" "${*}" |
| | } |
| |
|
| | |
| | |
| | |
| | function print_with_trailing_blank_line { |
| | printf "%s\n\n" "${*}" |
| | } |
| |
|
| | |
| | |
| | function echo_and_run { |
| | echo "${1}: ${@:2}" |
| | ${@:2} |
| | } |
| |
|
| | |
| | |
| | |
| | function echo_and_run_timed { |
| | echo "${@:2}" |
| | TIMEFORMAT=$'\n'"${1} Time: %lR" |
| | time ${@:2} |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | function join_delimit { |
| | local IFS="${1}" |
| | shift |
| | echo "${*}" |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | set +e |
| | source /etc/cccl.bashrc |
| | set -e |
| |
|
| | |
| | if [[ "${CXX_TYPE}" == "nvcxx" ]]; then |
| | log "Disabling sccache (nvcxx not supported)" |
| | unset ENABLE_SCCACHE |
| | elif [[ "${BUILD_MODE}" == "pull-request" || "${BUILD_MODE}" == "branch" ]]; then |
| | |
| | export ENABLE_SCCACHE="gpuCI" |
| | |
| | export SCCACHE_S3_KEY_PREFIX=thrust-linux64 |
| | export SCCACHE_BUCKET=rapids-sccache-east |
| | export SCCACHE_REGION=us-east-2 |
| | export SCCACHE_IDLE_TIMEOUT=32768 |
| | else |
| | export ENABLE_SCCACHE="local" |
| | |
| | export SCCACHE_DIR="${WORKSPACE}/build-sccache" |
| | fi |
| |
|
| | |
| | if [[ -n "${ENABLE_SCCACHE}" ]]; then |
| | export CMAKE_CUDA_COMPILER_LAUNCHER="sccache" |
| | export CMAKE_CXX_COMPILER_LAUNCHER="sccache" |
| | export CMAKE_C_COMPILER_LAUNCHER="sccache" |
| | fi |
| |
|
| | |
| | export PATH=/usr/local/cuda/bin:${PATH} |
| |
|
| | |
| | export HOME=${WORKSPACE} |
| |
|
| | |
| | MEMMON_LOG=${WORKSPACE}/build/memmon_log |
| |
|
| | |
| | cd ${WORKSPACE} |
| | mkdir -p build |
| | cd build |
| |
|
| | |
| | rm -f .ninja_log |
| |
|
| | if [[ -z "${CMAKE_BUILD_TYPE}" ]]; then |
| | CMAKE_BUILD_TYPE="Release" |
| | fi |
| |
|
| | CMAKE_BUILD_FLAGS="--" |
| |
|
| | |
| | append CMAKE_FLAGS "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" |
| | append CMAKE_FLAGS "-DCMAKE_CUDA_COMPILER='${CUDACXX}'" |
| |
|
| | if [[ "${CXX_TYPE}" == "nvcxx" ]]; then |
| | |
| | |
| | |
| | append CMAKE_FLAGS "-DCMAKE_CUDA_COMPILER_FORCED=ON" |
| | append CMAKE_FLAGS "-DCMAKE_CUDA_COMPILER_ID=NVCXX" |
| | |
| | |
| | |
| | |
| | |
| | CUDA_VER=$(echo ${SDK_VER} | sed 's/.*\(cuda[0-9]\+\.[0-9]\+\)/\1/') |
| | append CMAKE_FLAGS "-DCMAKE_CUDA_FLAGS=-gpu=${CUDA_VER}" |
| | |
| | append CMAKE_BUILD_FLAGS "-k" |
| | else |
| | if [[ "${CXX_TYPE}" == "icc" ]]; then |
| | |
| | |
| | append CMAKE_FLAGS "-DCMAKE_CUDA_FLAGS=-allow-unsupported-compiler" |
| | fi |
| | |
| | append CMAKE_FLAGS "-DCMAKE_CXX_COMPILER='${CXX}'" |
| | append CMAKE_FLAGS "-G Ninja" |
| | |
| | append CMAKE_BUILD_FLAGS "-k0" |
| | fi |
| |
|
| | DETERMINE_PARALLELISM_FLAGS="" |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | if [[ -z "${MIN_MEMORY_PER_THREAD}" ]]; then |
| | if [[ "${CXX_TYPE}" == "nvcxx" ]]; then |
| | MIN_MEMORY_PER_THREAD=3.0 |
| | elif [[ "${CXX_TYPE}" == "icc" ]]; then |
| | MIN_MEMORY_PER_THREAD=2.5 |
| | else |
| | MIN_MEMORY_PER_THREAD=2.0 |
| | fi |
| | fi |
| | append DETERMINE_PARALLELISM_FLAGS "--min-memory-per-thread ${MIN_MEMORY_PER_THREAD}" |
| |
|
| | if [[ -n "${PARALLEL_LEVEL}" ]]; then |
| | append DETERMINE_PARALLELISM_FLAGS "-j ${PARALLEL_LEVEL}" |
| | fi |
| |
|
| | |
| | |
| | |
| | |
| | if [[ -z "${COVERAGE_PLAN}" ]]; then |
| | |
| | |
| | if [[ "${CXX_TYPE}" == "nvcxx" ]]; then |
| | |
| | COVERAGE_PLAN="Minimal" |
| | elif [[ "${BUILD_TYPE}" == "cpu" ]] && [[ "${BUILD_MODE}" == "branch" ]]; then |
| | |
| | COVERAGE_PLAN="Exhaustive" |
| | elif [[ "${BUILD_TYPE}" == "cpu" ]]; then |
| | |
| | COVERAGE_PLAN="Thorough" |
| | elif [[ "${BUILD_TYPE}" == "gpu" ]]; then |
| | |
| | COVERAGE_PLAN="Minimal" |
| | fi |
| | fi |
| |
|
| | case "${COVERAGE_PLAN}" in |
| | Exhaustive) |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_MULTICONFIG=ON" |
| | append CMAKE_FLAGS "-DTHRUST_IGNORE_DEPRECATED_CPP_11=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_DIALECT_ALL=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON" |
| | append CMAKE_FLAGS "-DTHRUST_INCLUDE_CUB_CMAKE=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_WORKLOAD=LARGE" |
| | ;; |
| | Thorough) |
| | |
| | |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_BENCHMARKS=ON" |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_MULTICONFIG=ON" |
| | append CMAKE_FLAGS "-DTHRUST_IGNORE_DEPRECATED_CPP_11=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_DIALECT_ALL=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_WORKLOAD=SMALL" |
| | append CMAKE_FLAGS "-DTHRUST_INCLUDE_CUB_CMAKE=ON" |
| | append CMAKE_FLAGS "-DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=ON" |
| | if [[ "${CXX_TYPE}" != "nvcxx" ]]; then |
| | |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_COMPUTE_50=ON" |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_COMPUTE_60=ON" |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_COMPUTE_70=ON" |
| | fi |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_COMPUTE_80=ON" |
| | ;; |
| | Minimal) |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_MULTICONFIG=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_DIALECT_LATEST=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=OFF" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=OFF" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON" |
| | append CMAKE_FLAGS "-DTHRUST_MULTICONFIG_WORKLOAD=SMALL" |
| | append CMAKE_FLAGS "-DTHRUST_INCLUDE_CUB_CMAKE=ON" |
| | append CMAKE_FLAGS "-DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=ON" |
| | if [[ "${BUILD_TYPE}" == "cpu" ]] && [[ "${CXX_TYPE}" == "nvcxx" ]]; then |
| | |
| | |
| | |
| | |
| | append CMAKE_FLAGS "-DTHRUST_ENABLE_COMPUTE_80=ON" |
| | fi |
| | ;; |
| | esac |
| |
|
| | if [[ -n "${@}" ]]; then |
| | append CMAKE_BUILD_FLAGS "${@}" |
| | fi |
| |
|
| | append CTEST_FLAGS "--output-on-failure" |
| |
|
| | CTEST_EXCLUSION_REGEXES=() |
| |
|
| | if [[ "${BUILD_TYPE}" == "cpu" ]]; then |
| | CTEST_EXCLUSION_REGEXES+=("^cub" "^thrust.*cuda") |
| | fi |
| |
|
| | if [[ -n "${CTEST_EXCLUSION_REGEXES[@]}" ]]; then |
| | CTEST_EXCLUSION_REGEX=$(join_delimit "|" "${CTEST_EXCLUSION_REGEXES[@]}") |
| | append CTEST_FLAGS "-E ${CTEST_EXCLUSION_REGEX}" |
| | fi |
| |
|
| | if [[ -n "${@}" ]]; then |
| | CTEST_INCLUSION_REGEX=$(join_delimit "|" "${@}") |
| | append CTEST_FLAGS "-R ^${CTEST_INCLUSION_REGEX[@]}$" |
| | fi |
| |
|
| | |
| | export COVERAGE_PLAN |
| | export CMAKE_FLAGS |
| | export CMAKE_BUILD_FLAGS |
| | export CTEST_FLAGS |
| |
|
| | |
| | |
| | |
| |
|
| | log "Determine system topology..." |
| |
|
| | |
| | |
| | source ${WORKSPACE}/ci/common/determine_build_parallelism.bash ${DETERMINE_PARALLELISM_FLAGS} |
| |
|
| | log "Get environment..." |
| |
|
| | env | sort |
| |
|
| | log "Check versions..." |
| |
|
| | |
| | |
| |
|
| | ${CXX} --version 2>&1 | sed -Ez '$ s/\n*$/\n/' |
| |
|
| | echo |
| |
|
| | ${CUDACXX} --version 2>&1 | sed -Ez '$ s/\n*$/\n/' |
| |
|
| | echo |
| |
|
| | cmake --version 2>&1 | sed -Ez '$ s/\n*$/\n/' |
| |
|
| | if [[ "${BUILD_TYPE}" == "gpu" ]]; then |
| | echo |
| | nvidia-smi 2>&1 | sed -Ez '$ s/\n*$/\n/' |
| | fi |
| |
|
| | if [[ -n "${ENABLE_SCCACHE}" ]]; then |
| | echo |
| | |
| | sccache --version |
| | sccache --zero-stats | grep location |
| | fi |
| |
|
| | |
| | |
| | |
| |
|
| | log "Configure Thrust and CUB..." |
| |
|
| | echo_and_run_timed "Configure" cmake .. --log-level=VERBOSE ${CMAKE_FLAGS} |
| | configure_status=$? |
| |
|
| | log "Build Thrust and CUB..." |
| |
|
| | |
| | |
| | set +e |
| |
|
| | |
| | python3 ${WORKSPACE}/ci/common/memmon.py \ |
| | --log-threshold 0.0 \ |
| | --fail-threshold ${MIN_MEMORY_PER_THREAD} \ |
| | --log-file ${MEMMON_LOG} \ |
| | & |
| | memmon_pid=$! |
| |
|
| | echo_and_run_timed "Build" cmake --build . ${CMAKE_BUILD_FLAGS} -j ${PARALLEL_LEVEL} |
| | build_status=$? |
| |
|
| | |
| | kill -s SIGINT ${memmon_pid} |
| |
|
| | |
| | set -e |
| |
|
| | |
| | |
| | |
| |
|
| | log "Test Thrust and CUB..." |
| |
|
| | ( |
| | |
| | |
| | set -o pipefail |
| | echo_and_run_timed "Test" ctest ${CTEST_FLAGS} | tee ctest_log |
| | ) |
| | test_status=$? |
| |
|
| | |
| | |
| | |
| |
|
| | if [[ -n "${ENABLE_SCCACHE}" ]]; then |
| | |
| | COMPILE_REQUESTS=$(sccache -s | grep "Compile requests \+ [0-9]\+$" | awk '{ print $NF }') |
| | CACHE_HITS=$(sccache -s | grep "Cache hits \+ [0-9]\+$" | awk '{ print $NF }') |
| | HIT_RATE=$(echo - | awk "{printf \"%.2f\n\", $CACHE_HITS / $COMPILE_REQUESTS * 100}") |
| | log "sccache stats (${HIT_RATE}% hit):" |
| | sccache -s |
| | fi |
| |
|
| | |
| | |
| | |
| |
|
| | if [[ -f ".ninja_log" ]]; then |
| | log "Checking slowest build steps:" |
| | echo_and_run "CompileTimeInfo" cmake -P ../cmake/PrintNinjaBuildTimes.cmake | head -n 23 |
| | fi |
| |
|
| | |
| | |
| | |
| |
|
| | if [[ -f "ctest_log" ]]; then |
| | log "Checking slowest test steps:" |
| | echo_and_run "TestTimeInfo" cmake -DLOGFILE=ctest_log -P ../cmake/PrintCTestRunTimes.cmake | head -n 20 |
| | fi |
| |
|
| | |
| | |
| | |
| |
|
| | memmon_status=0 |
| | if [[ -f "${MEMMON_LOG}" ]]; then |
| | log "Checking memmon logfile: ${MEMMON_LOG}" |
| |
|
| | if [[ -n "$(grep -E "^FAIL" ${MEMMON_LOG})" ]]; then |
| | log "error: Some build steps exceeded memory threshold (${MIN_MEMORY_PER_THREAD} GiB):" |
| | grep -E "^FAIL" ${MEMMON_LOG} |
| | memmon_status=1 |
| | else |
| | log "Top memory usage per build step (all less than limit of ${MIN_MEMORY_PER_THREAD} GiB):" |
| | if [[ -s ${MEMMON_LOG} ]]; then |
| | |
| | head -n5 ${MEMMON_LOG} |
| | else |
| | echo "None detected above logging threshold." |
| | fi |
| | fi |
| | fi |
| |
|
| | |
| | |
| | |
| |
|
| | log "Summary:" |
| | echo "Warnings:" |
| | |
| | echo "- Build Memory Check: ${memmon_status}" |
| | echo "Failures:" |
| | echo "- Configure Error Code: ${configure_status}" |
| | echo "- Build Error Code: ${build_status}" |
| | echo "- Test Error Code: ${test_status}" |
| |
|
| | if [[ "${configure_status}" != "0" ]] || \ |
| | [[ "${build_status}" != "0" ]] || \ |
| | [[ "${test_status}" != "0" ]]; then |
| | exit 1 |
| | fi |
| |
|