diff --git a/examples/alpaka/nbody/CMakeLists.txt b/examples/alpaka/nbody/CMakeLists.txt index 85ea9ea1b2..6181dcad7d 100644 --- a/examples/alpaka/nbody/CMakeLists.txt +++ b/examples/alpaka/nbody/CMakeLists.txt @@ -15,7 +15,7 @@ if (NOT TARGET llama::llama) endif() find_package(alpaka 1.0 REQUIRED) alpaka_add_executable(${PROJECT_NAME} nbody.cpp ../../common/Stopwatch.hpp) -target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20) target_link_libraries(${PROJECT_NAME} PRIVATE llama::llama fmt::fmt alpaka::alpaka xsimd) if (MSVC) diff --git a/examples/alpaka/nbody/nbody.cpp b/examples/alpaka/nbody/nbody.cpp index 7b76638fdb..4f4cbc4f1c 100644 --- a/examples/alpaka/nbody/nbody.cpp +++ b/examples/alpaka/nbody/nbody.cpp @@ -166,18 +166,7 @@ LLAMA_FN_HOST_ACC_INLINE void pPInteraction(const Acc& acc, ParticleRefI& pis, P template struct UpdateKernel { - // TODO(bgruber): make this an IILE in C++20 - template - ALPAKA_FN_HOST_ACC auto makeSharedViewHelper(const Acc& acc, std::index_sequence) const - { - return llama::View{ - Mapping{}, - llama::Array{ - alpaka::declareSharedVar(acc)...}}; - } - - template - ALPAKA_FN_HOST_ACC void operator()(const Acc& acc, View particles) const + ALPAKA_FN_HOST_ACC void operator()(const auto& acc, auto particles) const { auto sharedView = [&] { @@ -191,7 +180,12 @@ struct UpdateKernel { using Mapping = typename QuotedSMMapping:: template fn, SharedMemoryParticle>; - return makeSharedViewHelper(acc, std::make_index_sequence{}); + return [&](std::index_sequence) + { + return llama::View{ + Mapping{}, + llama::Array{alpaka::declareSharedVar(acc)...}}; + }(std::make_index_sequence{}); } }(); @@ -217,8 +211,7 @@ struct UpdateKernel template struct MoveKernel { - template - ALPAKA_FN_HOST_ACC void operator()(const Acc& acc, View particles) const + ALPAKA_FN_HOST_ACC void operator()(const auto& acc, auto particles) const { const auto ti = alpaka::getIdx(acc)[0]; const auto i = ti * ElementsPerThread;