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-07-01 05:00:49 Functions: 7 20061 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    20427087 :     ulong const * arg ) {                                                                                      \
     177    20427087 :   FD_COMPILER_MFENCE(); /* guarantees memory fence even if tpool_cnt==1 */                                     \
     178    20427087 :   long  block_thresh      = (BLOCK_THRESH);                                                                    \
     179    20427087 :   ulong reduce_align      = (REDUCE_ALIGN); reduce_align = fd_ulong_if( !!reduce_align, reduce_align, 128UL ); \
     180    20427087 :   ulong reduce_sz         = (REDUCE_SZ);                                                                       \
     181    20427087 :   long  reduce_cnt        = (REDUCE_CNT);                                                                      \
     182    20427087 :   ulong tpool_t1          =       arg[0];                                                                      \
     183    20427087 :   long  block_i0          = (long)arg[1];                                                                      \
     184    20427087 :   long  block_i1          = (long)arg[2];                                                                      \
     185    20427087 :   long  block_cnt;                                                                                             \
     186    20427087 :   ulong _reduce_top       = 0UL;                                                                               \
     187    20427087 :   ulong _reduce_footprint = fd_ulong_align_up( reduce_sz*(ulong)reduce_cnt, reduce_align );                    \
     188    20427087 :   struct { ulong t1; long i1; } _reduce_stack[ 11 ]; /* Assumes TILE_MAX<2048 (yes strictly less) */           \
     189    20427087 :   ulong _r1 = !reduce_cnt ? 0UL :                                                                              \
     190    20427087 :     fd_ulong_align_up( (ulong)__builtin_alloca( _reduce_footprint*11UL + reduce_align-1UL ), reduce_align );   \
     191    39658620 :   for(;;) {                                                                                                    \
     192    39658620 :     ulong tpool_cnt   = tpool_t1 - tpool_t0;                                                                   \
     193    39658620 :     /**/  block_cnt   = block_i1 - block_i0;                                                                   \
     194    39658620 :     if( FD_LIKELY( (tpool_cnt<=1UL) | (block_cnt<=block_thresh) ) ) break;                                     \
     195    39658620 :     ulong tpool_left  = fd_tpool_private_split( tpool_cnt );                                                   \
     196    19233591 :     ulong tpool_right = tpool_cnt - tpool_left;                                                                \
     197    19233591 :     ulong tpool_ts    = tpool_t0 + tpool_left;                                                                 \
     198    19233591 :     long  block_is    = block_i1 - (long)((tpool_right*(ulong)block_cnt)/tpool_cnt); /* No overfl */           \
     199    19233591 :     fd_tpool_private_worker_t * worker = fd_tpool_private_worker( tpool )[ tpool_ts ];                         \
     200    19233591 :     uint  seq0        = worker->seq0 + 1U;                                                                     \
     201    19233591 :     worker->arg_cnt   = (uint)arg_cnt;                                                                         \
     202    19233591 :     worker->task      = (ulong)(op);                                                                           \
     203    19233591 :     worker->arg[0]    =        tpool_t1;                                                                       \
     204    19233591 :     worker->arg[1]    = (ulong)block_is;                                                                       \
     205    19233591 :     worker->arg[2]    = (ulong)block_i1;                                                                       \
     206    19233591 :     if( reduce_cnt ) worker->arg[3] = _r1;                                                                     \
     207    46279252 :     for( ulong idx=reduce_cnt ? 4UL : 3UL; idx<arg_cnt; idx++ ) worker->arg[idx] = arg[idx];                   \
     208    19233591 :     FD_COMPILER_MFENCE();                                                                                      \
     209    19233591 :     worker->seq0      = seq0;                                                                                  \
     210    19233591 :     FD_COMPILER_MFENCE();                                                                                      \
     211    19233591 :     if( FD_UNLIKELY( tpool->opt & FD_TPOOL_OPT_SLEEP ) ) fd_tpool_private_wake( worker );                      \
     212    19233591 :     _reduce_stack[ _reduce_top ].t1 = tpool_t1;                                                                \
     213    19233591 :     _reduce_stack[ _reduce_top ].i1 = block_i1;                                                                \
     214    19233591 :     _reduce_top++;                                                                                             \
     215    19233591 :     _r1 += _reduce_footprint;                                                                                  \
     216    19233591 :     tpool_t1 = tpool_ts;                                                                                       \
     217    19233591 :     block_i1 = block_is;                                                                                       \
     218    19233591 :   }                                                                                                            \
     219    20427087 :   arg_cnt -= 3UL;                                                                                              \
     220    20427087 :   arg     += 3UL;                                                                                              \
     221    20427087 :   do
     222             : 
     223             : #define FD_MAP_END                                            \
     224    20427087 :   while(0);                                                   \
     225    41335174 :   while( _reduce_top ) {                                      \
     226    20908087 :     long  block_is  = block_i1; (void)block_is;               \
     227    20908087 :     ulong tpool_ts  = tpool_t1;                               \
     228    20908087 :     /**/  _r1      -= _reduce_footprint;                      \
     229    20908087 :     /**/  _reduce_top--;                                      \
     230    20908087 :     /**/  tpool_t1  = (ulong)_reduce_stack[ _reduce_top ].t1; \
     231    20908087 :     /**/  block_i1  =        _reduce_stack[ _reduce_top ].i1; \
     232    20908087 :     /**/  block_cnt = block_i1 - block_i0;                    \
     233    20908087 :     fd_tpool_wait( tpool, tpool_ts );                         \
     234    20908087 :     do
     235             : 
     236             : #define FD_REDUCE_END   \
     237    20908087 :     while(0);           \
     238    20908087 :   }                     \
     239    20427087 :   FD_COMPILER_MFENCE(); \
     240     5463041 : }
     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    10216278 : #define FD_FOR_ALL_BEGIN(op,BLOCK_THRESH) FD_MAP_REDUCE_BEGIN((op),(BLOCK_THRESH),1UL,0UL,0L)
     274    15922318 : #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