@@ -34,62 +34,137 @@ cd ${WORKSPACE}
3434mkdir -p build
3535cd build
3636
37+ if [[ -z " ${CMAKE_BUILD_TYPE} " ]]; then
38+ CMAKE_BUILD_TYPE=" Release"
39+ fi
40+
41+ CMAKE_BUILD_FLAGS=" --"
42+
3743# The Docker image sets up `${CXX}` and `${CUDACXX}`.
38- CMAKE_FLAGS=" -G Ninja -DCMAKE_CXX_COMPILER='${CXX} ' -DCMAKE_CUDA_COMPILER='${CUDACXX} '"
39-
40- if [ " ${BUILD_MODE} " == " branch" ]; then
41- # Post-commit build.
42- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_INCLUDE_CUB_CMAKE=ON"
43- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_MULTICONFIG=ON"
44- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
45- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
46- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
47- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
48- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
49- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
50- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
51- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
52- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_WORKLOAD=LARGE"
44+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} "
45+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_COMPILER='${CUDACXX} '"
46+
47+ if [[ " ${CXX_TYPE} " == " nvcxx" ]]; then
48+ # gpuCI overrides ${PATH}, so we need to reload the nvhpc module.
49+ source /usr/share/lmod/lmod/init/bash
50+ module load nvhpc
51+ # NVC++ isn't properly detected by CMake, so we have to tell CMake to ignore
52+ # detection and explicit provide the compiler ID. Ninja currently isn't
53+ # supported, so we just use makefiles.
54+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_COMPILER_FORCED=ON"
55+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_COMPILER_ID=NVCXX"
56+ # Don't stop on build failures.
57+ CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS: +${CMAKE_BUILD_FLAGS} } -k"
58+ # NVC++ currently uses a lot of memory.
59+ PARALLEL_LEVEL=1
5360else
54- # Pre-commit build.
55- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_DISABLE_ARCH_BY_DEFAULT=ON"
56- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_50=ON"
57- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_60=ON"
58- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_70=ON"
59- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_80=ON"
60- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_INCLUDE_CUB_CMAKE=ON"
61- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_MULTICONFIG=ON"
62- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
63- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
64- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
65- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
66- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
67- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
68- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
69- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
70- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_WORKLOAD=SMALL"
61+ if [[ " ${CXX_TYPE} " == " icc" ]]; then
62+ # Only the latest version of the Intel C++ compiler, which NVCC doesn't
63+ # officially support yet, is freely available.
64+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_FLAGS=-allow-unsupported-compiler"
65+ fi
66+ # We're using NVCC so we need to set the host compiler.
67+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CXX_COMPILER='${CXX} '"
68+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -G Ninja"
69+ # Don't stop on build failures.
70+ CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS: +${CMAKE_BUILD_FLAGS} } -k0"
7171fi
7272
73- CMAKE_BUILD_FLAGS=" -j${PARALLEL_LEVEL} "
73+ if [[ -n " ${PARALLEL_LEVEL} " ]]; then
74+ DETERMINE_PARALLELISM_FLAGS=" -j ${PARALLEL_LEVEL} "
75+ fi
7476
75- if [ ! -z " ${@ } " ]; then
76- CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS} -- ${@ } "
77+ # COVERAGE_PLAN options:
78+ # * Exhaustive
79+ # * Thorough
80+ # * Minimal
81+ if [[ -z " ${COVERAGE_PLAN} " ]]; then
82+ if [[ " ${BUILD_TYPE} " == " cpu" ]] && [[ " ${BUILD_MODE} " == " branch" ]]; then
83+ # Post-commit CPU CI builds.
84+ COVERAGE_PLAN=" Exhaustive"
85+ elif [[ " ${BUILD_TYPE} " == " cpu" ]]; then
86+ # Pre-commit CPU CI builds.
87+ COVERAGE_PLAN=" Thorough"
88+ elif [[ " ${BUILD_TYPE} " == " gpu" ]]; then
89+ # Pre- and post-commit GPU CI builds.
90+ COVERAGE_PLAN=" Minimal"
91+ fi
7792fi
7893
79- CTEST_FLAGS=" "
94+ case " ${COVERAGE_PLAN} " in
95+ Exhaustive)
96+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_INCLUDE_CUB_CMAKE=ON"
97+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_MULTICONFIG=ON"
98+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
99+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
100+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
101+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
102+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
103+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
104+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
105+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
106+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_WORKLOAD=LARGE"
107+ ;;
108+ Thorough)
109+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_INCLUDE_CUB_CMAKE=ON"
110+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_MULTICONFIG=ON"
111+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
112+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
113+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
114+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
115+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
116+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
117+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
118+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
119+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_WORKLOAD=SMALL"
120+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=ON"
121+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_50=ON"
122+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_60=ON"
123+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_70=ON"
124+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_80=ON"
125+ ;;
126+ Minimal)
127+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_INCLUDE_CUB_CMAKE=ON"
128+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCUB_ENABLE_THOROUGH_TESTING=OFF"
129+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCUB_ENABLE_BENCHMARK_TESTING=OFF"
130+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCUB_ENABLE_MINIMAL_TESTING=ON"
131+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_HOST_SYSTEM=CPP"
132+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_DEVICE_SYSTEM=CUDA"
133+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_CPP_DIALECT=14"
134+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=ON"
135+ ;;
136+ esac
137+
138+ if [[ -n " ${@ } " ]]; then
139+ CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS: +${CMAKE_BUILD_FLAGS} }${@ } "
140+ fi
80141
81- if [ " ${BUILD_TYPE} " == " cpu" ]; then
82- CTEST_FLAGS=" ${CTEST_FLAGS} -E ^cub|^thrust.*cuda"
142+ CTEST_FLAGS=" ${CTEST_FLAGS: +${CTEST_FLAGS} } --output-on-failure"
143+
144+ if [[ " ${BUILD_TYPE} " == " cpu" ]]; then
145+ CTEST_FLAGS=" ${CTEST_FLAGS: +${CTEST_FLAGS} } -E ^cub|^thrust.*cuda"
83146fi
84147
85- if [ ! -z " ${@ } " ]; then
86- CTEST_FLAGS=" ${CTEST_FLAGS} -R ^${@ } $"
148+ if [[ -n " ${@ } " ] ]; then
149+ CTEST_FLAGS=" ${CTEST_FLAGS: + ${CTEST_FLAGS} } -R ^${@ } $"
87150fi
88151
152+ # Export variables so they'll show up in the logs when we report the environment.
153+ export COVERAGE_PLAN
154+ export CMAKE_FLAGS
155+ export CMAKE_BUILD_FLAGS
156+ export CTEST_FLAGS
157+
89158# ###############################################################################
90159# ENVIRONMENT - Configure and print out information about the environment.
91160# ###############################################################################
92161
162+ logger " Determine system topology..."
163+
164+ # Set `${PARALLEL_LEVEL}` if it is unset; otherwise, this just reports the
165+ # system topology.
166+ source ${WORKSPACE} /ci/common/determine_build_parallelism.bash ${DETERMINE_PARALLELISM_FLAGS}
167+
93168logger " Get environment..."
94169env
95170
@@ -102,15 +177,20 @@ ${CUDACXX} --version
102177# ###############################################################################
103178
104179logger " Configure Thrust and CUB..."
180+ echo cmake .. ${CMAKE_FLAGS}
105181cmake .. ${CMAKE_FLAGS}
106182
107183logger " Build Thrust and CUB..."
108- cmake --build . ${CMAKE_BUILD_FLAGS}
184+ # ${PARALLEL_LEVEL} needs to be passed after we run
185+ # determine_build_parallelism.bash, so it can't be part of ${CMAKE_BUILD_FLAGS}.
186+ echo cmake --build . ${CMAKE_BUILD_FLAGS} -j ${PARALLEL_LEVEL}
187+ cmake --build . ${CMAKE_BUILD_FLAGS} -j ${PARALLEL_LEVEL}
109188
110189# ###############################################################################
111190# TEST - Run Thrust and CUB examples and tests.
112191# ###############################################################################
113192
114193logger " Test Thrust and CUB..."
194+ echo ctest ${CTEST_FLAGS}
115195ctest ${CTEST_FLAGS}
116196
0 commit comments