[Cython] OpenMP support
Matej Laitl
matej at laitl.cz
Fri Mar 11 11:42:26 CET 2011
> On a slightly higher level, are we just trying to use OpenMP from
> Cython, or are we trying to build it into the language? If the former,
> it may make sense to stick closer than one might otherwise be tempted
> in terms of API to the underlying C to leverage the existing
> documentation. A library with a more Pythonic interface could perhaps
> be written on top of that. Alternatively, if we're building it into
> Cython itself, I'd it might be worth modeling it after the
> multiprocessing module (though I understand it would be implemented
> with threads), which I think is a decent enough model for managing
> embarrassingly parallel operations. The above code is similar to that,
> though I'd prefer the for loop implicit rather than as part of the
> worker method (or at least as an argument). If we went this route,
> what are the advantages of using OpenMP over, say, pthreads in the
> background? (And could the latter be done with just a library + some
> fancy GIL specifications?) One thing that's nice about OpenMP as
> implemented in C is that the serial code looks almost exactly like the
> parallel code; the code at http://wiki.cython.org/enhancements/openmp
> has this property too.
+1.
I'm strongly for implementing thin and low-level support for OpenMP at the
first place instead of (ab?)using it to implement high-level threading API.
Also, code like that would have an advantage (significant for my project[1]) of
being compilable by older cython / interpretable by python with no cython at
all ("pure" pure-python mode):
#pragma omp parallel for private(var1) reduction(+:var2) schedule(guided)
for i in range(n):
do_work(i)
[1] http://github.com/strohel/PyBayes
Also, the implementation should be straightforward, I use to patch generated
.c manually and only python → c variable name translation is needed, + perhaps
taking care of temp variables that need to be thread-local.
My five cents,
Matěj Laitl
More information about the cython-devel
mailing list