[Cython] Cython 0.15rc2 and parallelization issue
mark florisson
markflorisson88 at gmail.com
Wed Aug 3 14:23:07 CEST 2011
On 3 August 2011 14:18, Francesc Alted <faltet at pytables.org> wrote:
> Hi,
>
> I'm trying to take advantage of the exciting new parallelizing
> capabilities recently introduced in forthcoming 0.15 version, but I'm
> having a small difficulty. When I try to compile a small demo routing
> (attached), I'm getting this error:
>
> $ cython -a mandel.pyx
>
> Error compiling Cython file:
> ------------------------------------------------------------
> ...
> for pix in prange(num_pixels, nogil=True, schedule="dynamic"):
> x = pix % width
> y = pix // width
> cr = begin_r + (x * span_r / (width + 1.0))
> ci = begin_i + (y * span_i / (height + 1.0))
> n = MandelbrotCalculate(cr, ci, maxiter)
> ^
> ------------------------------------------------------------
>
> mandel.pyx:50:31: Calling gil-requiring function not allowed without gil
>
> While trying to figure out why MandelbrotCalculate does require GIL, I
> replaced the "for prange", by a trivial "for range", and the
> annotated HTML source reveals that the only line in (light) yellow in
> this function is
>
> return n
>
> which is translated as:
>
> /* "mandel.pyx":22
> * ti = 2*zr*zi + ci
> * zr, zi = tr, ti
> * return n # <<<<<<<<<<<<<<
> *
> * @cython.boundscheck(False)
> */
> __pyx_r = __pyx_v_n;
> goto __pyx_L0;
>
> __pyx_r = 0;
> __pyx_L0:;
> __Pyx_RefNannyFinishContext();
> return __pyx_r;
> }
>
> My guess is that this __Pyx_RefNannyFinishContext() call is preventing
> to call the routing from the parallel loop. Is that a bug, a
> limitation of current implementation or it is just that I'm missing
> something?
>
> Thanks,
>
> --
> Francesc Alted
>
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> http://mail.python.org/mailman/listinfo/cython-devel
>
>
Hey Francesc!
The problem is that you didn't declare MandelbrotCalculate 'nogil'.
You have to write
cdef long MandelbrotCalculate(double cr, double ci, long maxiter) nogil:
...
That's all, and it will compile :)
Cheers,
Mark
More information about the cython-devel
mailing list