LCOV - code coverage report
Current view: top level - util/tpool - fd_map_reduce.h (source / functions) Hit Total Coverage
Test: cov.lcov Lines: 100 180 55.6 %
Date: 2025-08-05 05:04:49 Functions: 7 20628 0.1 %

          Line data    Source code
       1             : /* DO NOT INCLUDE DIRECTLY, USE fd_tpool.h */
       2             : 
       3             : /* FD_MAP_REDUCE supports writing CUDA-ish kernels.  These have faster
       4             :    dispatch than CUDA (or other threading libraries) and they don't
       5             :    require any data choreography to shuffle data between the CPU and
       6             :    GPU.  An ultra high performance deterministic parallelized tree
       7             :    dispatch is used for good scaling, cache temporal locality and cache
       8             :    spatial locality.  Example usage:
       9             : 
      10             :      In a header file:
      11             : 
      12             :        // my_hist_op uses the caller and tpool threads
      13             :        // (tpool_t0,tpool_t1) to compute:
      14             :        //
      15             :        //   long h[4];
      16             :        //   for( long j=0L; j<4L; j++ ) h[j] = 0L;
      17             :        //   for( long i=i0; i<i1; i++ ) {
      18             :        //     long j = my_map_op( x[i] );
      19             :        //     h[j]++;
      20             :        //   }
      21             :        //
      22             :        // where x is a pointer to a my_ele_t array.  Tpool threads
      23             :        // (tpool_t0,tpool_t1) are assumed to be idle and i1-i0 is
      24             :        // assumed to be in [0,LONG_MAX/FD_TILE_MAX]
      25             : 
      26             :        FD_MAP_REDUCE_PROTO( my_hist_op );
      27             : 
      28             :      In a source file that uses my_hist_op:
      29             : 
      30             :        long h[4]; // should have appropriate alignment
      31             : 
      32             :        FD_MAP_REDUCE( my_hist_op, tpool,t0,t1, i0,i1, h, x );
      33             : 
      34             :      In the source file that implements my_hist_op:
      35             : 
      36             :        FD_MAP_REDUCE_BEGIN( my_hist_op, 1L, 0UL, sizeof(long), 4L ) {
      37             : 
      38             :          ... At this point:
      39             : 
      40             :              - The long range [block_i0,block_i1) give the elements for
      41             :                this thread to process.  Other threads will process other
      42             :                approximately equally sized disjoint ranges in parallel.
      43             :                The long block_cnt gives block_i1 - block_i0.  The long
      44             :                block_thresh gives the parameter used to optimize thread
      45             :                dispatch (1L in this example).  Element ranges with more
      46             :                than this number of elements are considered worth
      47             :                processing with more than one thread if available.
      48             :                block_thresh should be at least 1 and can be a run time
      49             :                evaluated expression.  This can also be used to make sure
      50             :                different kernel dispatches consistently partition
      51             :                elements such that there is good cache reuse between
      52             :                different thread parallel kernels.
      53             : 
      54             :              - tpool is a handle of this thread's tpool and ulong
      55             :                range [tpool_t0,tpool_t1) give the threads available to
      56             :                process this block.  This thread should be considered
      57             :                tpool_t0 and threads (tpool_t0,tpool_t1) are idle.  Even
      58             :                if (tpool_t0,tpool_t1) is not empty, it is almost
      59             :                certainly optimal to just have this thread process all
      60             :                elements in the block single threaded.  That is, when
      61             :                processing many elements (i.e. >> block_thresh*(t1-t0)),
      62             :                (tpool_t0,tpool_t1) will be empty but, when processing a
      63             :                small numbers of elements, FD_MAP_REDUCE already
      64             :                concluded there were too few elements to dispatch to
      65             :                (tpool_t0,tpool_t1).
      66             : 
      67             :              - The ulong arg_cnt gives the number of arguments passed by
      68             :                the caller (2 in this example).  arg_cnt is in [0,26].
      69             : 
      70             :              - ulongs arg[i] for i in [1,arg_cnt) give all but the first
      71             :                user arguments passed to FD_MAP_REDUCE (cast to a ulong)
      72             :                in order.  If reduce_cnt==0 and arg_cnt>0, arg[0] gives
      73             :                the initial user argument passed to FD_MAP_REDUCE (cast
      74             :                to a ulong).
      75             : 
      76             :              - If reduce_cnt>0 (as it is in this example), arg[0] gives
      77             :                the unique uninitialized scratch region where this thread
      78             :                should save its local reduction.  This region will have
      79             :                an alignment of reduce_align byte where reduce_align is
      80             :                an integer power of 2.  In this example, the ulong
      81             :                reduce_align / ulong reduce_sz / long reduce_cnt were
      82             :                specified via the 0UL / sizeof(long) / 4L above.  A zero
      83             :                value for reduce_align indicates to use a HPC thread
      84             :                friendly default of 128.  Note that the combination of
      85             :                arg_cnt==0 and reduce_cnt>0 is a little silly but will
      86             :                still work.
      87             : 
      88             :              - The names _reduce_top, _reduce_footprint, _reduce_stack,
      89             :                _r1 are reserved.
      90             : 
      91             :              IMPORTANT SAFETY TIP!  REDUCE_ALIGN / REDUCE_CNT /
      92             :              REDUCE_SZ SHOULD BE ALLOCA FRIENDLY AMOUNTS (<<~1 MIB
      93             :              TYPICALLY).  DO NOT ASSUME THE REDUCTION REGION HAS A SIZE
      94             :              OF _REDUCE_FOOTPRINT (THE OUTPUT REGION PASSED BY THE USER
      95             :              MIGHT ONLY HAVE A SIZE OF REDUCE_CNT*REDUCE_SZ EVEN IF IT
      96             :              HAS THE CORRECT ALIGNMENT).
      97             : 
      98             :              IMPORTANT SAFETY TIP!  DO NOT RETURN FROM THIS BLOCK.  IF
      99             :              ENDING A BLOCK EARLY, USE BREAK.
     100             : 
     101             :              IMPORTANT SAFETY TIP!  DO NOT MODIFY BLOCK_I1 OR TPOOL_T1,
     102             :              IN THIS BLOCK.  IT WILL CONFUSE THE REDUCTION.
     103             : 
     104             :          long           * restrict h = (long           *)arg[0];
     105             :          my_ele_t const * restrict x = (my_ele_t const *)arg[1];
     106             : 
     107             :          for( long j=0L; j<4L; j++ ) h[j] = 0UL;
     108             : 
     109             :          for( long i=block_i0; i<block_i1; i++ ) {
     110             :            long j = my_map_op( x[i] );
     111             :            h[j]++;
     112             :          }
     113             : 
     114             :        } FD_MAP_END {
     115             : 
     116             :          ... At this point, the environment is as described above with
     117             :              the following differences:
     118             : 
     119             :              - There is at least one thread in the ulong range
     120             :                [tpool_t0,tpool_ts) and one thread in the ulong range
     121             :                [tpool_ts,tpool_t1).  This should be considered thread t0
     122             :                and threads (tpool_t0,tpool_t1) are idle.
     123             : 
     124             :              - On entry, arg[0] points to the partial reduction (cast to
     125             :                a ulong) computed for elements in the long range
     126             :                [block_i0,block_is).  This was computed by threads
     127             :                [tpool_t0,tpool_ts).  Similarly, _r1 points to the
     128             :                partial reduction (cast to a ulong) for elements in the
     129             :                long range [block_is,block_i1).  This was computed by
     130             :                threads [tpool_ts,tpool_t1).  These regions have the
     131             :                alignment and footprint specified for the FD_MAP_REDUCE.
     132             : 
     133             :              - On exit, the contents in _r1 should have been reduced
     134             :                into the contents of arg[0] such that arg[0] contains to
     135             :                the partial reduction of the elements in
     136             :                [block_i0,block_i1).  Threads [tpool_t0,tpool_t1) are
     137             :                available to compute this reduction.  _r1 should not be
     138             :                modified but the contents in _r1 are free to clobber.
     139             : 
     140             :              IMPORTANT SAFETY TIP!  While this reduction is often
     141             :              theoretically parallelizable and threads
     142             :              (tpool_t0,tpool_t1) are available here for this,
     143             :              parallelization of this is usually counterproductive if the
     144             :              amount to reduce is small, the reduction operation is cheap
     145             :              and/or the arrays to reduce have poor spatial locality due
     146             :              to the mapping phase above.
     147             : 
     148             :          long       * restrict h0 = (long       *)arg[0];
     149             :          long const * restrict h1 = (long const *)_r1;
     150             : 
     151             :          for( long j=0L; j<4L; j++ ) h0[j] += h1[j];
     152             : 
     153             :        } FD_REDUCE_END
     154             : 
     155             :   FD_MAP_REDUCE operations act as a compiler memory fence. */
     156             : 
     157             : #define FD_MAP_REDUCE_PROTO(op) \
     158             : void                            \
     159             : op( fd_tpool_t *  tpool,        \
     160             :     ulong         tpool_t0,     \
     161             :     ulong         arg_cnt,      \
     162             :     ulong const * arg )
     163             : 
     164             : /* Note: we don't use fd_alloca here because of current compiler
     165             :    limitations where gcc doesn't recognize reduce_align is a compile
     166             :    time constant (fd_alloc turns into __built_alloca_with_align under
     167             :    the hood and that builtin requires align to be compile time ... which
     168             :    is fine ... when the compiler can recognize it.  Use of dynamic
     169             :    allocation on the stack does imply this requires FD_HAS_ALLOCA. */
     170             : 
     171             : #define FD_MAP_REDUCE_BEGIN(op,BLOCK_THRESH,REDUCE_ALIGN,REDUCE_SZ,REDUCE_CNT)                                 \
     172             : void                                                                                                           \
     173             : op( fd_tpool_t *  tpool,                                                                                       \
     174             :     ulong         tpool_t0,                                                                                    \
     175             :     ulong         arg_cnt,  /* at least 3 */                                                                   \
     176    28358095 :     ulong const * arg ) {                                                                                      \
     177    28358095 :   FD_COMPILER_MFENCE(); /* guarantees memory fence even if tpool_cnt==1 */                                     \
     178    28358095 :   long  block_thresh      = (BLOCK_THRESH);                                                                    \
     179    28358095 :   ulong reduce_align      = (REDUCE_ALIGN); reduce_align = fd_ulong_if( !!reduce_align, reduce_align, 128UL ); \
     180    28358095 :   ulong reduce_sz         = (REDUCE_SZ);                                                                       \
     181    28358095 :   long  reduce_cnt        = (REDUCE_CNT);                                                                      \
     182    28358095 :   ulong tpool_t1          =       arg[0];                                                                      \
     183    28358095 :   long  block_i0          = (long)arg[1];                                                                      \
     184    28358095 :   long  block_i1          = (long)arg[2];                                                                      \
     185    28358095 :   long  block_cnt;                                                                                             \
     186    28358095 :   ulong _reduce_top       = 0UL;                                                                               \
     187    28358095 :   ulong _reduce_footprint = fd_ulong_align_up( reduce_sz*(ulong)reduce_cnt, reduce_align );                    \
     188    28358095 :   struct { ulong t1; long i1; } _reduce_stack[ 11 ]; /* Assumes TILE_MAX<2048 (yes strictly less) */           \
     189    28358095 :   ulong _r1 = !reduce_cnt ? 0UL :                                                                              \
     190    28358095 :     fd_ulong_align_up( (ulong)__builtin_alloca( _reduce_footprint*11UL + reduce_align-1UL ), reduce_align );   \
     191    45445398 :   for(;;) {                                                                                                    \
     192    45445398 :     ulong tpool_cnt   = tpool_t1 - tpool_t0;                                                                   \
     193    45445398 :     /**/  block_cnt   = block_i1 - block_i0;                                                                   \
     194    45445398 :     if( FD_LIKELY( (tpool_cnt<=1UL) | (block_cnt<=block_thresh) ) ) break;                                     \
     195    45445398 :     ulong tpool_left  = fd_tpool_private_split( tpool_cnt );                                                   \
     196    20577293 :     ulong tpool_right = tpool_cnt - tpool_left;                                                                \
     197    20577293 :     ulong tpool_ts    = tpool_t0 + tpool_left;                                                                 \
     198    20577293 :     long  block_is    = block_i1 - (long)((tpool_right*(ulong)block_cnt)/tpool_cnt); /* No overfl */           \
     199    20577293 :     fd_tpool_private_worker_t * worker = fd_tpool_private_worker( tpool )[ tpool_ts ];                         \
     200    20577293 :     uint  seq0        = worker->seq0 + 1U;                                                                     \
     201    20577293 :     worker->arg_cnt   = (uint)arg_cnt;                                                                         \
     202    20577293 :     worker->task      = (ulong)(op);                                                                           \
     203    20577293 :     worker->arg[0]    =        tpool_t1;                                                                       \
     204    20577293 :     worker->arg[1]    = (ulong)block_is;                                                                       \
     205    20577293 :     worker->arg[2]    = (ulong)block_i1;                                                                       \
     206    20577293 :     if( reduce_cnt ) worker->arg[3] = _r1;                                                                     \
     207    47523051 :     for( ulong idx=reduce_cnt ? 4UL : 3UL; idx<arg_cnt; idx++ ) worker->arg[idx] = arg[idx];                   \
     208    20577293 :     FD_COMPILER_MFENCE();                                                                                      \
     209    20577293 :     worker->seq0      = seq0;                                                                                  \
     210    20577293 :     FD_COMPILER_MFENCE();                                                                                      \
     211    20577293 :     if( FD_UNLIKELY( tpool->opt & FD_TPOOL_OPT_SLEEP ) ) fd_tpool_private_wake( worker );                      \
     212    20577293 :     _reduce_stack[ _reduce_top ].t1 = tpool_t1;                                                                \
     213    20577293 :     _reduce_stack[ _reduce_top ].i1 = block_i1;                                                                \
     214    20577293 :     _reduce_top++;                                                                                             \
     215    20577293 :     _r1 += _reduce_footprint;                                                                                  \
     216    20577293 :     tpool_t1 = tpool_ts;                                                                                       \
     217    20577293 :     block_i1 = block_is;                                                                                       \
     218    20577293 :   }                                                                                                            \
     219    28358095 :   arg_cnt -= 3UL;                                                                                              \
     220    28358095 :   arg     += 3UL;                                                                                              \
     221    28358095 :   do
     222             : 
     223             : #define FD_MAP_END                                            \
     224    28358095 :   while(0);                                                   \
     225    47839702 :   while( _reduce_top ) {                                      \
     226    19481607 :     long  block_is  = block_i1; (void)block_is;               \
     227    19481607 :     ulong tpool_ts  = tpool_t1;                               \
     228    19481607 :     /**/  _r1      -= _reduce_footprint;                      \
     229    19481607 :     /**/  _reduce_top--;                                      \
     230    19481607 :     /**/  tpool_t1  = (ulong)_reduce_stack[ _reduce_top ].t1; \
     231    19481607 :     /**/  block_i1  =        _reduce_stack[ _reduce_top ].i1; \
     232    19481607 :     /**/  block_cnt = block_i1 - block_i0;                    \
     233    19481607 :     fd_tpool_wait( tpool, tpool_ts );                         \
     234    19481607 :     do
     235             : 
     236             : #define FD_REDUCE_END   \
     237    19481607 :     while(0);           \
     238    19481607 :   }                     \
     239    28358095 :   FD_COMPILER_MFENCE(); \
     240     7345578 : }
     241             : 
     242             : /* FD_FOR_ALL is a special case of FD_MAP_REDUCE when no reduction is
     243             :    required (i.e. reduce_align=1, reduce_sz=0, reduce_cnt=0).  Example:
     244             : 
     245             :        // my_vec_op uses the caller and tpool threads
     246             :        // (tpool_t0,tpool_t1) to compute:
     247             :        //
     248             :        //   for( long i=i0; i<i1; i++ ) z[i] = my_scalar_op( x[i], y[i] );
     249             :        //
     250             :        // where x, y and z are pointers to non-overlapping my_ele_t
     251             :        // arrays.  Threads (tpool_t0,tpool_t1) are assumed to be idle
     252             :        // and (block_i1-block_i0) in [0,LONG_MAX / FD_TILE_MAX].
     253             : 
     254             :        FD_FOR_ALL_PROTO( my_vec_op );
     255             : 
     256             :      In a source file that uses my_vec_op:
     257             : 
     258             :        FD_FOR_ALL( my_vec_op, tpool, t0,t1, i0,i1, x,y,z );
     259             : 
     260             :      In the source file that implements my_vec_op:
     261             : 
     262             :        FD_FOR_ALL_BEGIN( my_vec_op, 1024L ) {
     263             : 
     264             :          my_ele_t const * restrict x = (my_ele_t const *)arg[0];
     265             :          my_ele_t const * restrict y = (my_ele_t const *)arg[1];
     266             :          my_ele_t       * restrict z = (my_ele_t       *)arg[2];
     267             : 
     268             :          for( long i=block_i0; i<block_i1; i++ ) z[i] = my_scalar_op( x[i], y[i] );
     269             : 
     270             :        } FD_FOR_ALL_END */
     271             : 
     272             : #define FD_FOR_ALL_PROTO                  FD_MAP_REDUCE_PROTO
     273    14147430 : #define FD_FOR_ALL_BEGIN(op,BLOCK_THRESH) FD_MAP_REDUCE_BEGIN((op),(BLOCK_THRESH),1UL,0UL,0L)
     274    17193545 : #define FD_FOR_ALL_END                    FD_MAP_END {} FD_REDUCE_END
     275     4200048 : #define FD_FOR_ALL                        FD_MAP_REDUCE
     276             : 
     277             : /* THIS CODE IS AUTOGENERATED; DO NOT INCLUDE DIRECTLY */
     278             : 
     279             : static inline void
     280     2197440 : fd_map_reduce_private_0( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1 ) {
     281     2197440 :   ulong arg[3]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1;
     282     2197440 :   task( tpool, t0, 3UL, arg );
     283     2197440 : }
     284             : 
     285     2197440 : #define FD_MAP_REDUCE_PRIVATE_0(task,tpool,t0,t1,i0,i1) fd_map_reduce_private_0( (task), (tpool), (t0), (t1), (i0), (i1) )
     286             : 
     287             : static inline void
     288     2197440 : fd_map_reduce_private_1( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0 ) {
     289     2197440 :   ulong arg[4]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0;
     290     2197440 :   task( tpool, t0, 4UL, arg );
     291     2197440 : }
     292             : 
     293     2197440 : #define FD_MAP_REDUCE_PRIVATE_1(task,tpool,t0,t1,i0,i1,a0) fd_map_reduce_private_1( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0) )
     294             : 
     295             : static inline void
     296      600000 : fd_map_reduce_private_2( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1 ) {
     297      600000 :   ulong arg[5]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1;
     298      600000 :   task( tpool, t0, 5UL, arg );
     299      600000 : }
     300             : 
     301      600000 : #define FD_MAP_REDUCE_PRIVATE_2(task,tpool,t0,t1,i0,i1,a0,a1) fd_map_reduce_private_2( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1) )
     302             : 
     303             : static inline void
     304      600000 : fd_map_reduce_private_3( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2 ) {
     305      600000 :   ulong arg[6]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2;
     306      600000 :   task( tpool, t0, 6UL, arg );
     307      600000 : }
     308             : 
     309      600000 : #define FD_MAP_REDUCE_PRIVATE_3(task,tpool,t0,t1,i0,i1,a0,a1,a2) fd_map_reduce_private_3( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2) )
     310             : 
     311             : static inline void
     312      600000 : fd_map_reduce_private_4( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3 ) {
     313      600000 :   ulong arg[7]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3;
     314      600000 :   task( tpool, t0, 7UL, arg );
     315      600000 : }
     316             : 
     317      600000 : #define FD_MAP_REDUCE_PRIVATE_4(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3) fd_map_reduce_private_4( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3) )
     318             : 
     319             : static inline void
     320      600000 : fd_map_reduce_private_5( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4 ) {
     321      600000 :   ulong arg[8]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4;
     322      600000 :   task( tpool, t0, 8UL, arg );
     323      600000 : }
     324             : 
     325      600000 : #define FD_MAP_REDUCE_PRIVATE_5(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4) fd_map_reduce_private_5( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4) )
     326             : 
     327             : static inline void
     328      600000 : fd_map_reduce_private_6( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5 ) {
     329      600000 :   ulong arg[9]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5;
     330      600000 :   task( tpool, t0, 9UL, arg );
     331      600000 : }
     332             : 
     333      600000 : #define FD_MAP_REDUCE_PRIVATE_6(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5) fd_map_reduce_private_6( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5) )
     334             : 
     335             : static inline void
     336           0 : fd_map_reduce_private_7( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6 ) {
     337           0 :   ulong arg[10]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6;
     338           0 :   task( tpool, t0, 10UL, arg );
     339           0 : }
     340             : 
     341             : #define FD_MAP_REDUCE_PRIVATE_7(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6) fd_map_reduce_private_7( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6) )
     342             : 
     343             : static inline void
     344           0 : fd_map_reduce_private_8( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7 ) {
     345           0 :   ulong arg[11]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7;
     346           0 :   task( tpool, t0, 11UL, arg );
     347           0 : }
     348             : 
     349             : #define FD_MAP_REDUCE_PRIVATE_8(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7) fd_map_reduce_private_8( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7) )
     350             : 
     351             : static inline void
     352           0 : fd_map_reduce_private_9( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8 ) {
     353           0 :   ulong arg[12]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8;
     354           0 :   task( tpool, t0, 12UL, arg );
     355           0 : }
     356             : 
     357             : #define FD_MAP_REDUCE_PRIVATE_9(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8) fd_map_reduce_private_9( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8) )
     358             : 
     359             : static inline void
     360           0 : fd_map_reduce_private_10( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9 ) {
     361           0 :   ulong arg[13]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9;
     362           0 :   task( tpool, t0, 13UL, arg );
     363           0 : }
     364             : 
     365             : #define FD_MAP_REDUCE_PRIVATE_10(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9) fd_map_reduce_private_10( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9) )
     366             : 
     367             : static inline void
     368           0 : fd_map_reduce_private_11( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10 ) {
     369           0 :   ulong arg[14]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10;
     370           0 :   task( tpool, t0, 14UL, arg );
     371           0 : }
     372             : 
     373             : #define FD_MAP_REDUCE_PRIVATE_11(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) fd_map_reduce_private_11( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10) )
     374             : 
     375             : static inline void
     376           0 : fd_map_reduce_private_12( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11 ) {
     377           0 :   ulong arg[15]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11;
     378           0 :   task( tpool, t0, 15UL, arg );
     379           0 : }
     380             : 
     381             : #define FD_MAP_REDUCE_PRIVATE_12(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) fd_map_reduce_private_12( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11) )
     382             : 
     383             : static inline void
     384           0 : fd_map_reduce_private_13( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12 ) {
     385           0 :   ulong arg[16]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12;
     386           0 :   task( tpool, t0, 16UL, arg );
     387           0 : }
     388             : 
     389             : #define FD_MAP_REDUCE_PRIVATE_13(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) fd_map_reduce_private_13( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12) )
     390             : 
     391             : static inline void
     392           0 : fd_map_reduce_private_14( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13 ) {
     393           0 :   ulong arg[17]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13;
     394           0 :   task( tpool, t0, 17UL, arg );
     395           0 : }
     396             : 
     397             : #define FD_MAP_REDUCE_PRIVATE_14(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13) fd_map_reduce_private_14( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13) )
     398             : 
     399             : static inline void
     400           0 : fd_map_reduce_private_15( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14 ) {
     401           0 :   ulong arg[18]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14;
     402           0 :   task( tpool, t0, 18UL, arg );
     403           0 : }
     404             : 
     405             : #define FD_MAP_REDUCE_PRIVATE_15(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14) fd_map_reduce_private_15( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14) )
     406             : 
     407             : static inline void
     408           0 : fd_map_reduce_private_16( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15 ) {
     409           0 :   ulong arg[19]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15;
     410           0 :   task( tpool, t0, 19UL, arg );
     411           0 : }
     412             : 
     413             : #define FD_MAP_REDUCE_PRIVATE_16(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) fd_map_reduce_private_16( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15) )
     414             : 
     415             : static inline void
     416           0 : fd_map_reduce_private_17( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16 ) {
     417           0 :   ulong arg[20]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16;
     418           0 :   task( tpool, t0, 20UL, arg );
     419           0 : }
     420             : 
     421             : #define FD_MAP_REDUCE_PRIVATE_17(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16) fd_map_reduce_private_17( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16) )
     422             : 
     423             : static inline void
     424           0 : fd_map_reduce_private_18( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17 ) {
     425           0 :   ulong arg[21]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17;
     426           0 :   task( tpool, t0, 21UL, arg );
     427           0 : }
     428             : 
     429             : #define FD_MAP_REDUCE_PRIVATE_18(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17) fd_map_reduce_private_18( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17) )
     430             : 
     431             : static inline void
     432           0 : fd_map_reduce_private_19( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18 ) {
     433           0 :   ulong arg[22]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18;
     434           0 :   task( tpool, t0, 22UL, arg );
     435           0 : }
     436             : 
     437             : #define FD_MAP_REDUCE_PRIVATE_19(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18) fd_map_reduce_private_19( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18) )
     438             : 
     439             : static inline void
     440           0 : fd_map_reduce_private_20( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19 ) {
     441           0 :   ulong arg[23]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19;
     442           0 :   task( tpool, t0, 23UL, arg );
     443           0 : }
     444             : 
     445             : #define FD_MAP_REDUCE_PRIVATE_20(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19) fd_map_reduce_private_20( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19) )
     446             : 
     447             : static inline void
     448           0 : fd_map_reduce_private_21( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19, ulong a20 ) {
     449           0 :   ulong arg[24]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19; arg[23] = a20;
     450           0 :   task( tpool, t0, 24UL, arg );
     451           0 : }
     452             : 
     453             : #define FD_MAP_REDUCE_PRIVATE_21(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20) fd_map_reduce_private_21( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19), (ulong)(a20) )
     454             : 
     455             : static inline void
     456           0 : fd_map_reduce_private_22( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19, ulong a20, ulong a21 ) {
     457           0 :   ulong arg[25]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19; arg[23] = a20; arg[24] = a21;
     458           0 :   task( tpool, t0, 25UL, arg );
     459           0 : }
     460             : 
     461             : #define FD_MAP_REDUCE_PRIVATE_22(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21) fd_map_reduce_private_22( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19), (ulong)(a20), (ulong)(a21) )
     462             : 
     463             : static inline void
     464           0 : fd_map_reduce_private_23( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19, ulong a20, ulong a21, ulong a22 ) {
     465           0 :   ulong arg[26]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19; arg[23] = a20; arg[24] = a21; arg[25] = a22;
     466           0 :   task( tpool, t0, 26UL, arg );
     467           0 : }
     468             : 
     469             : #define FD_MAP_REDUCE_PRIVATE_23(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22) fd_map_reduce_private_23( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19), (ulong)(a20), (ulong)(a21), (ulong)(a22) )
     470             : 
     471             : static inline void
     472           0 : fd_map_reduce_private_24( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19, ulong a20, ulong a21, ulong a22, ulong a23 ) {
     473           0 :   ulong arg[27]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19; arg[23] = a20; arg[24] = a21; arg[25] = a22; arg[26] = a23;
     474           0 :   task( tpool, t0, 27UL, arg );
     475           0 : }
     476             : 
     477             : #define FD_MAP_REDUCE_PRIVATE_24(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23) fd_map_reduce_private_24( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19), (ulong)(a20), (ulong)(a21), (ulong)(a22), (ulong)(a23) )
     478             : 
     479             : static inline void
     480           0 : fd_map_reduce_private_25( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19, ulong a20, ulong a21, ulong a22, ulong a23, ulong a24 ) {
     481           0 :   ulong arg[28]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19; arg[23] = a20; arg[24] = a21; arg[25] = a22; arg[26] = a23; arg[27] = a24;
     482           0 :   task( tpool, t0, 28UL, arg );
     483           0 : }
     484             : 
     485             : #define FD_MAP_REDUCE_PRIVATE_25(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24) fd_map_reduce_private_25( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19), (ulong)(a20), (ulong)(a21), (ulong)(a22), (ulong)(a23), (ulong)(a24) )
     486             : 
     487             : static inline void
     488           0 : fd_map_reduce_private_26( fd_tpool_task_v2_t task, fd_tpool_t * tpool, ulong t0, ulong t1, long i0, long i1, ulong a0, ulong a1, ulong a2, ulong a3, ulong a4, ulong a5, ulong a6, ulong a7, ulong a8, ulong a9, ulong a10, ulong a11, ulong a12, ulong a13, ulong a14, ulong a15, ulong a16, ulong a17, ulong a18, ulong a19, ulong a20, ulong a21, ulong a22, ulong a23, ulong a24, ulong a25 ) {
     489           0 :   ulong arg[29]; arg[0] = t1; arg[1] = (ulong)i0; arg[2] = (ulong)i1; arg[3] = a0; arg[4] = a1; arg[5] = a2; arg[6] = a3; arg[7] = a4; arg[8] = a5; arg[9] = a6; arg[10] = a7; arg[11] = a8; arg[12] = a9; arg[13] = a10; arg[14] = a11; arg[15] = a12; arg[16] = a13; arg[17] = a14; arg[18] = a15; arg[19] = a16; arg[20] = a17; arg[21] = a18; arg[22] = a19; arg[23] = a20; arg[24] = a21; arg[25] = a22; arg[26] = a23; arg[27] = a24; arg[28] = a25;
     490           0 :   task( tpool, t0, 29UL, arg );
     491           0 : }
     492             : 
     493             : #define FD_MAP_REDUCE_PRIVATE_26(task,tpool,t0,t1,i0,i1,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25) fd_map_reduce_private_26( (task), (tpool), (t0), (t1), (i0), (i1), (ulong)(a0), (ulong)(a1), (ulong)(a2), (ulong)(a3), (ulong)(a4), (ulong)(a5), (ulong)(a6), (ulong)(a7), (ulong)(a8), (ulong)(a9), (ulong)(a10), (ulong)(a11), (ulong)(a12), (ulong)(a13), (ulong)(a14), (ulong)(a15), (ulong)(a16), (ulong)(a17), (ulong)(a18), (ulong)(a19), (ulong)(a20), (ulong)(a21), (ulong)(a22), (ulong)(a23), (ulong)(a24), (ulong)(a25) )
     494             : 
     495             : #define FD_MAP_REDUCE_PRIVATE_F(...) too_few_arguments_passed_to_FD_MAP_REDUCE
     496     4200096 : #define FD_MAP_REDUCE(...)          FD_EXPAND_THEN_CONCAT2(FD_MAP_REDUCE_PRIVATE_,FD_VA_ARGS_SELECT(__VA_ARGS__,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,F,F,F,F,F))(__VA_ARGS__)

Generated by: LCOV version 1.14