Den 08.03.2011 18:50, skrev Stefan Behnel:
Note that the queue is only needed to tell the thread what to work on. A lot of things can be shared over the closure. So the queue may not even be required in many cases.
Instead of putting a "#pragma omp parallel for" over the for loop, we put the for-loop inside a closure. That is about the same amount of extra code, positioned similarly in the code, achieving the same thing.
Private variables are passed as calling arguments to the closure, shared variables are shared over the closure. That is Python syntax, so we don't need specifiers for 'private' and 'shared' like OpenMP.
We still need sychonization and scheduling primitives similar to those in OpenMP. For example a special 'range' function that will share the workload of a for loop. But this is not a major programming task.
What I am trying to say is that the major argument for OpenMP in C and Fortran is lack of closures. That does not apply to Cython anymore (as I happily learned today). That is why I think this is a library and not a compiler issue.
I'll make an example on the wiki when I get som spare time. Possibly with an OpenMP example to show the similarty. One really has to look at it side-by-side to see that it's the same.
The same arguments holds for Apple's GCD as well. GCD makes the closure semantics explicit by an extension to objective-C.
We need to discourage Java inspired inheritance from threading.Thread, and encourage closures instead. And some very clear examples :-)
Sturla _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel