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__)
|