[Cython] prange CEP updated
Dag Sverre Seljebotn
d.s.seljebotn at astro.uio.no
Thu Apr 14 20:29:54 CEST 2011
On 04/13/2011 11:13 PM, mark florisson wrote:
>
> Although there is omp_get_max_threads():
>
> "The omp_get_max_threads routine returns an upper bound on the number
> of threads that could be used to form a new team if a parallel region
> without a num_threads clause were encountered after execution returns
> from this routine."
>
> So we could have threadsvailable() evaluate to that if encountered
> outside a parallel region. Inside, it would evaluate to
> omp_get_num_threads(). At worst, people would over-allocate a bit.
Well, over-allocating could well mean 1 GB, which could well mean
getting an unecesarry MemoryError (or, like in my case, if I'm not
careful to set ulimit, getting a SIGKILL sent to you 2 minutes after the
fact by the cluster patrol process...)
But even ignoring this, we also have to plan for people misusing the
feature. If we put it in there, somebody somewhere *will* write code
like this:
nthreads = threadsavailable()
with parallel:
for i in prange(nthreads):
for j in range(100*i, 100*(i+1)): [...]
(Yes, they shouldn't. Yes, they will.)
Combined with a race condition that will only very seldomly trigger,
this starts to sound like a very bad idea indeed.
So I agree with you that we should just leave it for now, and do
single/barrier later.
DS
More information about the cython-devel
mailing list