Skip to content
Snippets Groups Projects
Commit 6eb47984 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Writing documentation for StaticFor.

parent 06a9d8bd
No related branches found
No related tags found
1 merge request!44Tutorials
......@@ -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 )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment