[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