[Cython] cython.parallel tasks, single, master, critical, barriers

Dag Sverre Seljebotn d.s.seljebotn at astro.uio.no
Sun Oct 9 14:18:08 CEST 2011


On 10/09/2011 02:11 PM, mark florisson wrote:
> Hey,
>
> So far people have been enthusiastic about the cython.parallel features,
> I think we should introduce some new features. I propose the following,

Great!!

I only have time for a very short feedback now, perhaps more will follow.

> assume parallel has been imported from cython:
>
> with parallel.master():
>      this is executed in the master thread in a parallel (non-prange)
> section
>
> with parallel.single():
>     same as master, except any thread may do the execution
>
> An optional keyword argument 'nowait' specifies whether there will be a
> barrier at the end. The default is to wait.
>
> with parallel.task():
>      create a task to be executed by some thread in the team
>      once a thread takes up the task it shall only be executed by that
> thread and no other thread (so the task will be tied to the thread)
>
>      C variables will be firstprivate
>      Python objects will be shared
>
> parallel.taskwait() # wait on any direct descendent tasks to finish

Regarding tasks, I think this is mapping OpenMP too close to Python. 
Closures are excellent for the notion of a task, so I think something 
based on the futures API would work better. I realize that makes the 
mapping to OpenMP and implementation a bit more difficult, but I think 
it is worth it in the long run.

>
> with parallel.critical():
>      this section of code is mutually exclusive with other critical sections
>      optional keyword argument 'name' specifies a name for the critical
> section,
>      which means all sections with that name will exclude each other,
> but not
>      critical sections with different names
>
>      Note: all threads that encounter the section will execute it, just
> not at the same time
>
> with parallel.barrier():
>      all threads wait until everyone has reached the barrier
>      either no one or everyone should encounter the barrier
>      shared variables are flushed
>
> Unfortunately, gcc again manages to horribly break master and single
> constructs in loops (versions 4.2 throughout 4.6), so I suppose I'll
> first file a bug report. Other (better) compilers like Portland (and I'm
> sure Intel) work fine. I suppose a warning in the documentation will
> suffice there.
>
> If we at some point implement vector/SIMD operations we could also try
> out the Fortran openmp workshare construct.

I'm starting to learn myself OpenCL as part of a course. It's very neat 
for some kinds of parallelism. What I'm saying is that at least of the 
case of SIMD, we should not lock ourselves to Fortran+OpenMP thinking 
too early, but also look forward to coming architectures (e.g., AMD's 
GPU-and-CPU on same die design).

Dag Sverre


More information about the cython-devel mailing list