Skip to content
Snippets Groups Projects

Tutorials

Merged Tomáš Oberhuber requested to merge tutorials into develop
1 file
+ 28
4
Compare changes
  • Side-by-side
  • Inline
@@ -15,10 +15,28 @@
namespace TNL {
namespace Algorithms {
// Manual unrolling does not make sense for loops with a large iterations
// count. For a very large iterations count it would trigger the compiler's
// limit on recursive template instantiation. Also note that the compiler
// will (at least partially) unroll loops with static bounds anyway.
/***
* \brief StaticFor is a wrapper for common for-loop with explicit unrolling.
*
* StaticFor can be used only for for-loops bounds of which are known at the
* compile time. StaticFor performs explicit loop unrolling for better performance.
* This, however, does not make sense for loops with a large iterations
* count. For a very large iterations count it could trigger the compiler's
* limit on recursive template instantiation. Also note that the compiler
* will (at least partially) unroll loops with static bounds anyway. For theses
* reasons, the explicit loop unrolling can be controlled by the third template
* parameter.
*
* \tparam Begin the loop will iterate over indexes [Begin,End)
* \tparam End the loop will iterate over indexes [Begin,End)
* \tparam unrolled controls the explicit loop unrolling. If it is true, the
* unrolling is performed.
*
* \par Example
* \include Algorithms/StaticForExample.cpp
* \par Output
* \include StaticForExample.out
*/
template< int Begin, int End, bool unrolled = (End - Begin <= 8) >
struct StaticFor;
@@ -27,6 +45,12 @@ struct StaticFor< Begin, End, true >
{
static_assert( Begin < End, "Wrong index interval for StaticFor. Begin must be less than end." );
/**
* \brief Static method for execution od the StaticFor.
*
* @param f is a (lambda) function to be performed in each iteration.
* @param args are auxiliary data to be passed to the function f.
*/
template< typename Function, typename... Args >
__cuda_callable__
static void exec( const Function& f, Args&&... args )
Loading