Loading src/TNL/StaticFor.h +17 −19 Original line number Diff line number Diff line Loading @@ -11,18 +11,12 @@ #pragma once #include <utility> #include <type_traits> #include <TNL/Devices/CudaCallable.h> namespace TNL { template< typename IndexType, IndexType val > struct StaticForIndexTag { static constexpr IndexType value = val; using Decrement = StaticForIndexTag<IndexType, val - 1>; }; namespace detail { template< typename IndexType, typename Begin, Loading @@ -34,14 +28,16 @@ struct StaticForExecutor __cuda_callable__ static void exec( Args&&... args ) { StaticForExecutor< IndexType, Begin, typename N::Decrement, LoopBody >::exec( std::forward< Args >( args )... ); using Decrement = std::integral_constant< IndexType, N::value - 1 >; StaticForExecutor< IndexType, Begin, Decrement, LoopBody >::exec( std::forward< Args >( args )... ); LoopBody< Begin::value + N::value - 1 >::exec( std::forward< Args >( args )... ); } template< typename... Args > static void execHost( Args&&... args ) { StaticForExecutor< IndexType, Begin, typename N::Decrement, LoopBody >::execHost( std::forward< Args >( args )... ); using Decrement = std::integral_constant< IndexType, N::value - 1 >; StaticForExecutor< IndexType, Begin, Decrement, LoopBody >::execHost( std::forward< Args >( args )... ); LoopBody< Begin::value + N::value - 1 >::exec( std::forward< Args >( args )... ); } }; Loading @@ -51,7 +47,7 @@ template< typename IndexType, template< IndexType > class LoopBody > struct StaticForExecutor< IndexType, Begin, StaticForIndexTag< IndexType, 0 >, std::integral_constant< IndexType, 0 >, LoopBody > { template< typename... Args > Loading @@ -64,6 +60,8 @@ struct StaticForExecutor< IndexType, {} }; } // namespace detail template< typename IndexType, IndexType begin, IndexType end, Loading @@ -74,9 +72,9 @@ struct StaticFor __cuda_callable__ static void exec( Args&&... args ) { StaticForExecutor< IndexType, StaticForIndexTag< IndexType, begin >, StaticForIndexTag< IndexType, end - begin >, detail::StaticForExecutor< IndexType, std::integral_constant< IndexType, begin >, std::integral_constant< IndexType, end - begin >, LoopBody >::exec( std::forward< Args >( args )... ); } Loading @@ -84,9 +82,9 @@ struct StaticFor template< typename... Args > static void execHost( Args&&... args ) { StaticForExecutor< IndexType, StaticForIndexTag< IndexType, begin >, StaticForIndexTag< IndexType, end - begin >, detail::StaticForExecutor< IndexType, std::integral_constant< IndexType, begin >, std::integral_constant< IndexType, end - begin >, LoopBody >::execHost( std::forward< Args >( args )... ); } }; Loading Loading
src/TNL/StaticFor.h +17 −19 Original line number Diff line number Diff line Loading @@ -11,18 +11,12 @@ #pragma once #include <utility> #include <type_traits> #include <TNL/Devices/CudaCallable.h> namespace TNL { template< typename IndexType, IndexType val > struct StaticForIndexTag { static constexpr IndexType value = val; using Decrement = StaticForIndexTag<IndexType, val - 1>; }; namespace detail { template< typename IndexType, typename Begin, Loading @@ -34,14 +28,16 @@ struct StaticForExecutor __cuda_callable__ static void exec( Args&&... args ) { StaticForExecutor< IndexType, Begin, typename N::Decrement, LoopBody >::exec( std::forward< Args >( args )... ); using Decrement = std::integral_constant< IndexType, N::value - 1 >; StaticForExecutor< IndexType, Begin, Decrement, LoopBody >::exec( std::forward< Args >( args )... ); LoopBody< Begin::value + N::value - 1 >::exec( std::forward< Args >( args )... ); } template< typename... Args > static void execHost( Args&&... args ) { StaticForExecutor< IndexType, Begin, typename N::Decrement, LoopBody >::execHost( std::forward< Args >( args )... ); using Decrement = std::integral_constant< IndexType, N::value - 1 >; StaticForExecutor< IndexType, Begin, Decrement, LoopBody >::execHost( std::forward< Args >( args )... ); LoopBody< Begin::value + N::value - 1 >::exec( std::forward< Args >( args )... ); } }; Loading @@ -51,7 +47,7 @@ template< typename IndexType, template< IndexType > class LoopBody > struct StaticForExecutor< IndexType, Begin, StaticForIndexTag< IndexType, 0 >, std::integral_constant< IndexType, 0 >, LoopBody > { template< typename... Args > Loading @@ -64,6 +60,8 @@ struct StaticForExecutor< IndexType, {} }; } // namespace detail template< typename IndexType, IndexType begin, IndexType end, Loading @@ -74,9 +72,9 @@ struct StaticFor __cuda_callable__ static void exec( Args&&... args ) { StaticForExecutor< IndexType, StaticForIndexTag< IndexType, begin >, StaticForIndexTag< IndexType, end - begin >, detail::StaticForExecutor< IndexType, std::integral_constant< IndexType, begin >, std::integral_constant< IndexType, end - begin >, LoopBody >::exec( std::forward< Args >( args )... ); } Loading @@ -84,9 +82,9 @@ struct StaticFor template< typename... Args > static void execHost( Args&&... args ) { StaticForExecutor< IndexType, StaticForIndexTag< IndexType, begin >, StaticForIndexTag< IndexType, end - begin >, detail::StaticForExecutor< IndexType, std::integral_constant< IndexType, begin >, std::integral_constant< IndexType, end - begin >, LoopBody >::execHost( std::forward< Args >( args )... ); } }; Loading