Skip to content

Commit 87fb7ef

Browse files
committed
Merge branch 'thrust-for-each' into 'master'
Thrust for each See merge request correaa/boost-multi!1761
2 parents 49508b9 + 784b352 commit 87fb7ef

9 files changed

Lines changed: 245 additions & 94 deletions

File tree

.clang-format

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ AlignConsecutiveDeclarations:
1414
Enabled: true
1515
AcrossEmptyLines: false
1616
AcrossComments: false
17-
AlignFunctionDeclarations: true
1817
AlignConsecutiveMacros: None
1918
AlignOperands: AlignAfterOperator
2019
AllowAllArgumentsOnNextLine: false

.gitlab-ci-correaa.yml

Lines changed: 23 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ variables:
3131
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1
3232
APT_CACHE_DIR: "$CI_PROJECT_DIR/.apt-cache"
3333
APT_CONFIG: "$CI_PROJECT_DIR/.apt.conf"
34+
CMAKE_BUILD_PARALLEL_LEVEL: "6"
35+
CTEST_PARALLEL_LEVEL: "4"
3436

3537
before_script:
3638
- mkdir -p $APT_CACHE_DIR/partial
@@ -125,7 +127,7 @@ arm64:
125127
- c++ --version
126128
- cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON
127129
- cmake --build .
128-
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest -j 2 --output-on-failure
130+
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
129131
needs: ["g++"]
130132

131133
c++-macos-shell:
@@ -198,7 +200,7 @@ g++ cppcheck cpplint memcheck lto:
198200
- cmake --build . --parallel 2 || cmake --build . --verbose
199201
- export OMPI_ALLOW_RUN_AS_ROOT=1
200202
- export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
201-
- (ctest -j 2 --output-on-failure --overwrite MemoryCheckCommandOptions=" --trace-children=yes --leak-check=full --track-origins=yes --show-leak-kinds=all --gen-suppressions=all --error-exitcode=1" --overwrite MemoryCheckSuppressionFile=$PWD/../.valgrind-suppressions -T memcheck) || (cat /builds/correaa/boost-multi/build/Testing/Temporary/MemoryChecker.*.log && exit 666)
203+
- (ctest --output-on-failure --overwrite MemoryCheckCommandOptions=" --trace-children=yes --leak-check=full --track-origins=yes --show-leak-kinds=all --gen-suppressions=all --error-exitcode=1" --overwrite MemoryCheckSuppressionFile=$PWD/../.valgrind-suppressions -T memcheck) || (cat /builds/correaa/boost-multi/build/Testing/Temporary/MemoryChecker.*.log && exit 666)
202204
needs: ["g++"]
203205

204206
g++-9-bullseye:
@@ -220,8 +222,8 @@ g++-9-bullseye:
220222
- g++ --version
221223
- g++-9 --version
222224
- CXX=g++-9 cmake -S . -B build/ -DCMAKE_BUILD_TYPE=Debug -DDISABLE_MPI=ON
223-
- cmake --build build/ --parallel 2 || cmake --build . --verbose
224-
- cmake --build build/ --target test # - ctest -j 2 --output-on-failure
225+
- cmake --build build/ || cmake --build . --parallel 1 --verbose
226+
- cmake --build build/ --target test # - ctest --output-on-failure
225227
needs: ["g++"]
226228

227229
g++-unstable c++23 par: # debian-unstable: default is gcc 15.2.0 as of Jan 2026
@@ -240,26 +242,10 @@ g++-unstable c++23 par: # debian-unstable: default is gcc 15.2.0 as of Jan 2026
240242
- mkdir build && cd build
241243
- g++ --version
242244
- CXX=g++ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_FLAGS="-fimplicit-constexpr" -DDISABLE_MPI=1
243-
- cmake --build . --parallel 2 || cmake --build . --verbose
245+
- cmake --build . || cmake --build . --parallel 1 --verbose
244246
- OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 ctest --output-on-failure
245247
needs: ["g++-testing c++20"]
246248

247-
# clang++:
248-
# stage: basic
249-
# tags:
250-
# - non-shared
251-
# - docker
252-
# interruptible: false
253-
# script:
254-
# - apt-get clean
255-
# - apt-get -qq update
256-
# - apt-get -qq install --no-install-recommends -y --quiet ca-certificates clang cmake git python3 make libboost-timer-dev libboost-serialization-dev libblas-dev libfftw3-dev liblapack-dev pkg-config
257-
# - mkdir build && cd build
258-
# - clang++ --version
259-
# - CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-D_GLIBCXX_ASSERTIONS -D_GLIBCXX_DEBUG=1"
260-
# - cmake --build . --parallel 2 || cmake --build . --parallel 1 --verbose
261-
# - ctest --parallel 2 || ctest --verbose --rerun-failed --output-on-failure
262-
263249
clang++ ubsan: # more UB is detected on Release
264250
stage: build
265251
tags:
@@ -276,8 +262,8 @@ clang++ ubsan: # more UB is detected on Release
276262
- mkdir build && cd build
277263
- clang++ --version
278264
- CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-g -fsanitize=undefined -fsanitize=signed-integer-overflow -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=undefined -DUBSAN=1" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=undefined"
279-
- cmake --build . --parallel 4 || cmake --build . --parallel 1 --verbose
280-
- ctest -j 2 --output-on-failure
265+
- cmake --build . || cmake --build . --parallel 1 --verbose
266+
- ctest --output-on-failure
281267
needs: ["clang++"]
282268

283269
clang++-18 mull-18: # mull-18 crashes
@@ -306,35 +292,12 @@ clang++-18 mull-18: # mull-18 crashes
306292
- file `which mull-runner-18`
307293
- mull-runner-18 --version
308294
- CXX=clang++-18 cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-O3 -DNDEBUG -fpass-plugin=/usr/lib/mull-ir-frontend-18 -g -grecord-command-line"
309-
- cmake --build . --parallel 8 || cmake --build . --parallel 1 --verbose
295+
- cmake --build . || cmake --build . --parallel 1 --verbose
310296
- ctest
311297
- cd test
312298
- ls *.x | xargs -n 1 sh -c 'echo $0 && ((mull-runner-18 --timeout 30000 --ld-search-path=/usr/lib/x86_64-linux-gnu $0 -test-program=ctest -- -j2 --stop-on-failure) || exit 255)'
313299
needs: ["clang++", "g++"]
314300

315-
# clang++-latest libc++ format: # Aug2025 clang 19
316-
# stage: build
317-
# image: debian:latest
318-
# tags:
319-
# - non-shared
320-
# - docker
321-
# interruptible: true
322-
# only:
323-
# refs:
324-
# - master
325-
# script:
326-
# - apt-get -qq update
327-
# - apt-get -qq install --no-install-recommends -y --quiet ca-certificates git clang clang-format cmake make libboost-timer-dev libboost-serialization-dev libblas-dev libc++-dev libc++abi-dev libfftw3-dev liblapack-dev pkg-config tar wget
328-
# - mkdir build && cd build
329-
# - clang++ --version
330-
# - CXX=clang++ cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-stdlib=libc++ -DBOOST_NO_CXX98_FUNCTION_BASE -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG"
331-
# - cmake --build .
332-
# - ctest -j 2 --output-on-failure
333-
# - cd ..
334-
# - clang-format --version
335-
# - clang-format --dry-run -Werror test/*.cpp include/**/*.hpp || echo "errors in formatting"
336-
# needs: ["clang++"]
337-
338301
clang++-16 c++20:
339302
stage: build
340303
image: ubuntu:24.04 # debian:latest
@@ -353,7 +316,7 @@ clang++-16 c++20:
353316
- clang++-16 --version
354317
- CXX=clang++-16 cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=20
355318
- cmake --build .
356-
- ctest -j 2 --output-on-failure
319+
- ctest --output-on-failure
357320
needs: ["clang++"]
358321

359322
visual-studio-windows:
@@ -562,7 +525,7 @@ clang++-m32:
562525
- c++ --version
563526
- CXX=clang++ cmake .. -DCMAKE_CXX_FLAGS="-m32" -DCMAKE_BUILD_TYPE=Debug
564527
- cmake --build .
565-
- ctest -j 2 --output-on-failure
528+
- ctest--output-on-failure
566529
needs: ["clang++"]
567530

568531
clang++-latest tidy iwyu everything:
@@ -582,7 +545,7 @@ clang++-latest tidy iwyu everything:
582545
- clang-format --version
583546
- CXX=clang++ CXX_FLAGS="-Weverything" cmake .. -DCMAKE_CXX_STANDARD=20 -DCMAKE_BUILD_TYPE=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DCMAKE_CXX_CLANG_TIDY=clang-tidy -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="iwyu;-Xiwyu;--mapping_file=$PWD/../.iwyu-test.imp;-Xiwyu;--no_fwd_decls;-Xiwyu;--error"
584547
- cmake --build . --parallel 2 || cmake --build . --verbose
585-
- ctest -j 2 --output-on-failure
548+
- ctest --output-on-failure
586549
needs: ["clang++"]
587550

588551
g++-testing c++20:
@@ -623,7 +586,7 @@ clang++-oldstable-cmake4:
623586
- clang++-13 --version
624587
- CXX=clang++-13 cmake .. -DCMAKE_BUILD_TYPE=Release
625588
- cmake --build . --parallel 2 || cmake --build . --verbose
626-
- ctest -j 2 --output-on-failure
589+
- ctest --output-on-failure
627590
needs: ["clang++"]
628591

629592
oneapi:
@@ -799,7 +762,7 @@ cuda-11.6.1:
799762
- /usr/local/cuda/bin/nvcc --version
800763
- CUDACXX=/usr/local/cuda/bin/nvcc cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES=61
801764
- cmake --build . --parallel 2 || cmake --build . --verbose
802-
- ctest -j 2 --output-on-failure
765+
- ctest --output-on-failure
803766
needs: ["cuda"]
804767

805768
culang++-16 cuda-11.4.3:
@@ -827,7 +790,7 @@ culang++-16 cuda-11.4.3:
827790
- clang++-16 --version
828791
- cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_CUDA=1 -DCMAKE_CUDA_COMPILER=clang++-16 -DCMAKE_CXX_COMPILER=clang++-16
829792
- cmake --build . --parallel 2 || cmake --build . --verbose
830-
- ctest -j 2 --output-on-failure
793+
- ctest --output-on-failure
831794
needs: ["cuda", "clang++"]
832795

833796
cuda-12.6.3:
@@ -933,35 +896,9 @@ culang++-20 cuda-12.6.3 tidy: # https://catalog.ngc.nvidia.com/orgs/nvidia/cont
933896
- clang-tidy-20 --version
934897
- cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_FLAGS="-Wno-unknown-cuda-version" -DCMAKE_CXX_CLANG_TIDY=clang-tidy-20 -DENABLE_CUDA=1 -DCMAKE_CUDA_COMPILER=clang++-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCMAKE_CUDA_ARCHITECTURES=native # =75 # =80
935898
- cmake --build . --parallel 2 || cmake --build . --verbose
936-
- ctest -j 2 --output-on-failure
899+
- ctest --output-on-failure
937900
needs: ["cuda", "clang++"]
938901

939-
# doesn't work yet with Clang 21.1.8
940-
# culang++-21 cuda-13.0.1 tidy: # https://catalog.ngc.nvidia.com/orgs/nvidia/containers/cuda/tags
941-
# stage: build
942-
# image: nvcr.io/nvidia/cuda:13.1.0-devel-ubuntu24.04 # nvcr.io/nvidia/cuda:12.6.3-devel-ubuntu24.04
943-
# allow_failure: false
944-
# tags:
945-
# - non-shared
946-
# - nvidia-gpu
947-
# - high-bandwidth
948-
# interruptible: true
949-
# script:
950-
# - nvidia-smi
951-
# - apt-get -qq update
952-
# - apt-get install --no-install-recommends -y cmake wget pkg-config make libboost-serialization-dev libboost-timer-dev libblas-dev libfftw3-dev
953-
# - apt-get install --no-install-recommends -y lsb-release software-properties-common
954-
# - wget https://apt.llvm.org/llvm.sh
955-
# - chmod u+x llvm.sh
956-
# - ./llvm.sh 21
957-
# - apt-get install --no-install-recommends -y clang-21 clang-tidy-21
958-
# - mkdir build && cd build
959-
# - clang++-21 --version
960-
# - clang-tidy-21 --version
961-
# - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_FLAGS="-Wno-unknown-cuda-version" -DCMAKE_CXX_CLANG_TIDY=clang-tidy-21 -DENABLE_CUDA=1 -DCMAKE_CUDA_COMPILER=clang++-21 -DCMAKE_CXX_COMPILER=clang++-21 -DCMAKE_CUDA_ARCHITECTURES=native # =75 # =80
962-
# - cmake --build . --parallel 2 || cmake --build . --verbose
963-
# - ctest -j 2 --output-on-failure
964-
# needs: ["cuda", "clang++"]
965902

966903
rocm:
967904
stage: build
@@ -1070,7 +1007,7 @@ circle:
10701007
- mkdir build && cd build
10711008
- CXX=`pwd`/../build_latest/circle cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_CIRCLE=1
10721009
- cmake --build . --parallel 4 || make VERBOSE=1
1073-
- ctest -j 2 --output-on-failure
1010+
- ctest --output-on-failure
10741011

10751012
circle-202:
10761013
stage: build
@@ -1092,7 +1029,7 @@ circle-202:
10921029
- mkdir build && cd build
10931030
- CXX=`pwd`/../build_latest/circle cmake .. -DCMAKE_BUILD_TYPE=Debug -DENABLE_CIRCLE=1
10941031
- cmake --build . --parallel 4 || make VERBOSE=1
1095-
- ctest -j 2 --output-on-failure
1032+
- ctest --output-on-failure
10961033
needs: ["circle"]
10971034

10981035
circle-latest c++20:
@@ -1125,7 +1062,7 @@ circle-latest c++20:
11251062
- export CMAKE_CXX_COMPILER_LAUNCHER=strace
11261063
- CXX=`pwd`/../build_latest/circle cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_EXTENSIONS=OFF -DCMAKE_CXX_STANDARD=20 -DENABLE_CIRCLE=1
11271064
- cmake --build . --parallel 2 || make VERBOSE=1
1128-
- ctest -j 2 --output-on-failure
1065+
- ctest --output-on-failure
11291066
needs: ["circle"]
11301067

11311068
inq:
@@ -1153,7 +1090,7 @@ inq:
11531090
- export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
11541091
- export OMPI_MCA_btl_vader_single_copy_mechanism=none
11551092
- export OMPI_MCA_rmaps_base_oversubscribe=1
1156-
- ctest -j 2 --output-on-failure --timeout 600
1093+
- ctest --output-on-failure --timeout 600
11571094
- INQ_EXEC_ENV="mpirun --oversubscribe -n 4" ctest --output-on-failure --timeout 600
11581095
needs: ["g++"]
11591096

@@ -1185,7 +1122,7 @@ inq-debug:
11851122
- export OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1
11861123
- export OMPI_MCA_btl_vader_single_copy_mechanism=none
11871124
- export OMPI_MCA_rmaps_base_oversubscribe=1
1188-
- ctest -j 2 --output-on-failure --timeout 600
1125+
- ctest --output-on-failure --timeout 600
11891126
- INQ_EXEC_ENV="mpirun --oversubscribe -n 4" ctest --output-on-failure --timeout 600
11901127
needs: ["g++"]
11911128

@@ -1223,7 +1160,7 @@ inq cuda:
12231160
- export OMPI_MCA_btl_vader_single_copy_mechanism=none
12241161
- export OMPI_MCA_rmaps_base_oversubscribe=1
12251162
# - ctest -j 4 --output-on-failure --timeout 2400
1226-
- INQ_EXEC_ENV="mpirun --oversubscribe -n 4" ctest --output-on-failure -j 2 --timeout 2400
1163+
- INQ_EXEC_ENV="mpirun --oversubscribe -n 4" ctest --output-on-failure --timeout 2400
12271164
timeout: 2 hours 30 minutes
12281165
needs: ["inq", "g++"] # "cuda", "inq"]
12291166

include/boost/multi/adaptors/thrust.hpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
#ifndef BOOST_MULTI_ADAPTORS_THRUST_HPP
66
#define BOOST_MULTI_ADAPTORS_THRUST_HPP
7-
#pragma once
7+
// #pragma once
8+
9+
#include <exception>
810

911
#include "boost/multi/array.hpp"
1012

@@ -117,11 +119,19 @@ struct allocator_traits<::thrust::mr::stateless_resource_allocator<TT, ::thrust:
117119
using device_index = int;
118120
static auto get_current_device_() -> device_index {
119121
int device; // NOLINT(cppcoreguidelines-init-variables) delayed init
122+
#ifdef __GNUC__
123+
#pragma GCC diagnostic push
124+
#pragma GCC diagnostic ignored "-Wswitch-enum"
125+
#endif
120126
switch(HICUP_(GetDevice)(&device)) {
121127
case HICUP_(Success): break;
122128
case HICUP_(ErrorInvalidValue): assert(0); // NOLINT(bugprone-branch-clone)
129+
// ... 125 cases not handled
123130
default: assert(0);
124131
}
132+
#ifdef __GNUC__
133+
#pragma GCC diagnostic pop
134+
#endif
125135
return device;
126136
}
127137
static void prefetch_to_device_(const_void_pointer ptr, size_type byte_count, device_index dev) {
@@ -166,6 +176,8 @@ class result_helper{
166176

167177
public:
168178
using type = decltype(_(priority<4>{}, std::declval<FF>()));
179+
result_helper() = default;
180+
void dummy() const {}
169181
};
170182

171183
template<class F, class R = void>
@@ -230,7 +242,6 @@ class device_restriction_iterator {
230242
using difference_type = std::ptrdiff_t;
231243
using value_type = int;
232244
// std::conditional_t<(D != 1), restriction<D - 1, bind_front_t<Proj>>, decltype(apply_(std::declval<Proj>(), std::declval<typename extensions_t<D>::element>()))>
233-
;
234245

235246
using pointer = void;
236247

include/boost/multi/adaptors/thrust/test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ set(TEST_SRCS
3434
by_key.cu
3535
device_function.cu
3636
diffusion3d_kernel.cu
37+
for_each.cu
3738
memory_resource.cu
3839
neighbor_list.cu
3940
restriction.cu

0 commit comments

Comments
 (0)