[Cython] CEP: prange for parallel loops
Sturla Molden
sturla at molden.no
Mon Apr 4 15:33:52 CEST 2011
Den 04.04.2011 15:04, skrev Stefan Behnel:
>
> What I would like to avoid is having to tell users "and now for
> something completely different". It looks like a loop, but then
> there's a whole page of new semantics for it. And this also cannot be
> used in plain Python code due to the differing scoping behaviour.
>
I've been working on something similar, which does not involve any
changes to Cython, and will work from Python as well. It's been
discussed before, basically it involves wrapping a loop in a closure,
and then normal Python scoping rules applies.
cdef int n
@parallel
def _parallel_loop(parallel_env):
cdef int i, s0, s1
for s0,s1 in parallel_env.range(n):
for i in range(s0,s1):
pass
I am not happy about the verbosity of the wrapper compared to
for i in prange(n):
pass
but this is the best I can do without changing the compiler. Notice e.g.
that the loop becomes two nested loops, which is required for efficient
work scheduling.
Progress is mainly limited by lack of time and personal need. If I ned
parallel computing I use Fortran or an optimized LAPACK library (e.g. ACML).
Sturla
More information about the cython-devel
mailing list