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