Skip to content

Commit 25dcb6c

Browse files
committed
parallel loop split
1 parent 876ed64 commit 25dcb6c

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/num/multind.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,17 @@ static void md_loop_r(int D, const long dim[D], unsigned long flags, long pos[D]
216216
*
217217
*/
218218
void md_parallel_loop(int D, const long dim[static D], unsigned long flags, md_loop_fun_t fun)
219+
{
220+
NESTED(void, fun2, (unsigned long flags2, long *pos))
221+
{
222+
md_loop_r(D, dim, flags2, pos, fun);
223+
};
224+
225+
md_parallel_loop_split(D, dim, flags, fun2);
226+
}
227+
228+
229+
void md_parallel_loop_split(int D, const long dim[static D], unsigned long flags, md_loop_fun2_t fun)
219230
{
220231
flags &= md_nontriv_dims(D, dim);
221232

@@ -247,10 +258,11 @@ void md_parallel_loop(int D, const long dim[static D], unsigned long flags, md_l
247258
// Recover place in parallel iteration space
248259
long pos[D];
249260
md_unravel_index(D, pos, ~0UL, pdims, i);
250-
md_loop_r(D, dim, flags, pos, fun);
261+
fun(flags, pos);
251262
}
252263
}
253264

265+
254266
/**
255267
* Generic function which loops over all dimensions and calls a given
256268
* function passing the current indices as argument.

src/num/multind.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
typedef void CLOSURE_TYPE(md_nary_fun_t)(void* ptr[]);
2828
typedef void CLOSURE_TYPE(md_trafo_fun_t)(long N, long str, void* ptr);
2929
typedef void CLOSURE_TYPE(md_loop_fun_t)(const long* pos);
30+
typedef void CLOSURE_TYPE(md_loop_fun2_t)(unsigned long flags, long* pos);
3031

3132
extern void md_unravel_index(int D, long pos[__VLA(D)], unsigned long flags, const long dims[__VLA(D)], long index);
3233
extern long md_ravel_index(int D, const long pos[__VLA(D)], unsigned long flags, const long dims[__VLA(D)]);
@@ -35,6 +36,7 @@ extern void md_nary(int C, int D, const long dim[__VLA(D)], const long* str[__VL
3536

3637
extern void md_parallel_nary(int C, int D, const long dim[__VLA(D)], unsigned long flags, const long* str[__VLA(C)], void* ptr[__VLA(C)], md_nary_fun_t fun);
3738
extern void md_parallel_loop(int D, const long dim[__VLA(D)], unsigned long flags, md_loop_fun_t fun);
39+
extern void md_parallel_loop_split(int D, const long dim[__VLA(D)], unsigned long flags, md_loop_fun2_t fun);
3840

3941
extern void md_loop(int D, const long dim[__VLA(D)], md_loop_fun_t fun);
4042

0 commit comments

Comments
 (0)