Skip to content

Commit 1fa8e77

Browse files
Update alpaka nbody to C++20 and simplify
1 parent 1e2c4bc commit 1fa8e77

File tree

2 files changed

+9
-16
lines changed

2 files changed

+9
-16
lines changed

examples/alpaka/nbody/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ if (NOT TARGET llama::llama)
1515
endif()
1616
find_package(alpaka 1.0 REQUIRED)
1717
alpaka_add_executable(${PROJECT_NAME} nbody.cpp ../../common/Stopwatch.hpp)
18-
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17)
18+
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_20)
1919
target_link_libraries(${PROJECT_NAME} PRIVATE llama::llama fmt::fmt alpaka::alpaka xsimd)
2020

2121
if (MSVC)

examples/alpaka/nbody/nbody.cpp

+8-15
Original file line numberDiff line numberDiff line change
@@ -166,18 +166,7 @@ LLAMA_FN_HOST_ACC_INLINE void pPInteraction(const Acc& acc, ParticleRefI& pis, P
166166
template<int ThreadsPerBlock, int SharedElementsPerBlock, int ElementsPerThread, typename QuotedSMMapping>
167167
struct UpdateKernel
168168
{
169-
// TODO(bgruber): make this an IILE in C++20
170-
template<typename Mapping, typename Acc, std::size_t... Is>
171-
ALPAKA_FN_HOST_ACC auto makeSharedViewHelper(const Acc& acc, std::index_sequence<Is...>) const
172-
{
173-
return llama::View{
174-
Mapping{},
175-
llama::Array<std::byte*, sizeof...(Is)>{
176-
alpaka::declareSharedVar<std::byte[Mapping{}.blobSize(Is)], Is>(acc)...}};
177-
}
178-
179-
template<typename Acc, typename View>
180-
ALPAKA_FN_HOST_ACC void operator()(const Acc& acc, View particles) const
169+
ALPAKA_FN_HOST_ACC void operator()(const auto& acc, auto particles) const
181170
{
182171
auto sharedView = [&]
183172
{
@@ -191,7 +180,12 @@ struct UpdateKernel
191180
{
192181
using Mapping = typename QuotedSMMapping::
193182
template fn<llama::ArrayExtents<int, SharedElementsPerBlock>, SharedMemoryParticle>;
194-
return makeSharedViewHelper<Mapping>(acc, std::make_index_sequence<Mapping::blobCount>{});
183+
return [&]<std::size_t... Is>(std::index_sequence<Is...>)
184+
{
185+
return llama::View{
186+
Mapping{},
187+
llama::Array{alpaka::declareSharedVar<std::byte[Mapping{}.blobSize(Is)], Is>(acc)...}};
188+
}(std::make_index_sequence<Mapping::blobCount>{});
195189
}
196190
}();
197191

@@ -217,8 +211,7 @@ struct UpdateKernel
217211
template<int ElementsPerThread>
218212
struct MoveKernel
219213
{
220-
template<typename Acc, typename View>
221-
ALPAKA_FN_HOST_ACC void operator()(const Acc& acc, View particles) const
214+
ALPAKA_FN_HOST_ACC void operator()(const auto& acc, auto particles) const
222215
{
223216
const auto ti = alpaka::getIdx<alpaka::Grid, alpaka::Threads>(acc)[0];
224217
const auto i = ti * ElementsPerThread;

0 commit comments

Comments
 (0)