(Moving discussion from http://markflorisson.wordpress.com/, where Mark said:)

"""
Started a new branch https://github.com/markflorisson88/cython/tree/openmp .

Now the question is whether sharing attributes should be propagated outwards. e.g. if you do

for i in prange(m):
    for j in prange(n):
        sum += i * j

then ‘sum’ is a reduction for the inner parallel loop, but not for the outer one. So the user would currently have to rewrite this to

for i in prange(m):
    for j in prange(n):
        sum += i * j
    sum += 0

which seems a bit silly . Of course, we could just disable nested parallelism, or tell the users to use a prange and a ‘for from’ in such cases.
"""

Dag: Interesting. The first one is definitely the behaviour we want, as long as it doesn't cause unintended consequences.

I don't really think it will -- the important thing is that that the order of loop iteration evaluation must be unimportant. And that is still true (for the outer loop, as well as for the inner) in your first example.

Question: When you have nested pranges, what will happen is that two nested OpenMP parallel blocks are used, right? And do you know if there is complete freedom/"reentrancy" in that variables that are thread-private in an outer parallel block and be shared in an inner one, and vice versa?

If so I'd think that this algorithm should work and feel natural:

- In each prange, for the purposes of variable private/shared/reduction inference, consider all internal "prange" just as if they had been "range"; no special treatment.

 - Recurse to children pranges.

DS
_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to