<html><body>
<p>6 new commits in yt:</p>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/0078c0e0d9ed/">https://bitbucket.org/yt_analysis/yt/commits/0078c0e0d9ed/</a> Changeset:   0078c0e0d9ed Branch:      yt User:        ngoldbaum Date:        2016-03-29 16:06:56+00:00 Summary:     Handle KeyboardInterrupt in volume rendering cython loop Affected #:  1 file</p>
<p>diff -r b6dad5b69998cff732a5c3ea7847a4b01092ffc8 -r 0078c0e0d9eda590e64c382421064f29fea0124d yt/utilities/lib/grid_traversal.pyx --- a/yt/utilities/lib/grid_traversal.pyx +++ b/yt/utilities/lib/grid_traversal.pyx @@ -31,6 +31,8 @@</p>
<pre>from cython.parallel import prange, parallel, threadid
from vec3_ops cimport dot, subtract, L2_norm, fma
</pre>
<p>+from cpython.exc cimport PyErr_CheckSignals +</p>
<pre>DEF Nch = 4

cdef class PartitionedGrid:</pre>
<p>@@ -476,6 +478,8 @@</p>
<pre>max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
walk_volume(vc, v_pos, v_dir, self.sampler,
            (<void *> idata), NULL, max_t)</pre>
<p>+                with gil: +                    PyErr_CheckSignals()</p>
<pre>    for i in range(Nch):
        im.image[vi, vj, i] = idata.rgba[i]
free(idata)</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/6ed945328a03/">https://bitbucket.org/yt_analysis/yt/commits/6ed945328a03/</a> Changeset:   6ed945328a03 Branch:      yt User:        atmyers Date:        2016-03-29 19:31:18+00:00 Summary:     only check for error signals every so often in the ray walking loop. Affected #:  1 file</p>
<p>diff -r 0078c0e0d9eda590e64c382421064f29fea0124d -r 6ed945328a03731b810d8d4c24a5372fa2832011 yt/utilities/lib/grid_traversal.pyx --- a/yt/utilities/lib/grid_traversal.pyx +++ b/yt/utilities/lib/grid_traversal.pyx @@ -16,6 +16,7 @@</p>
<pre>import numpy as np
cimport numpy as np
cimport cython</pre>
<p>+cimport openmp</p>
<pre>#cimport healpix_interface
cdef extern from "limits.h":
    cdef int SHRT_MAX</pre>
<p>@@ -460,14 +461,17 @@</p>
<pre>size = nx * ny
cdef ImageAccumulator *idata
cdef np.float64_t width[3]</pre>
<p>+        cdef int chunksize = 100 +        cdef int threads</p>
<pre>         for i in range(3):
width[i] = self.width[i]
         with nogil, parallel(num_threads = num_threads):</pre>
<p>+            threads = openmp.omp_get_num_threads()</p>
<pre>idata = <ImageAccumulator *> malloc(sizeof(ImageAccumulator))
idata.supp_data = self.supp_data
v_pos = <np.float64_t *> malloc(3 * sizeof(np.float64_t))
v_dir = <np.float64_t *> malloc(3 * sizeof(np.float64_t))</pre>
<ul><li><p>for j in prange(size, schedule="static", chunksize=100):</p></li></ul>
<p>+            for j in prange(size, schedule="static", chunksize=chunksize):</p>
<pre>vj = j % ny
vi = (j - vj) / ny + iter[0]
vj = vj + iter[2]</pre>
<p>@@ -478,8 +482,9 @@</p>
<pre>max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
walk_volume(vc, v_pos, v_dir, self.sampler,
            (<void *> idata), NULL, max_t)</pre>
<ul><li><p>with gil:</p></li>
<li><p>PyErr_CheckSignals()</p></li></ul>
<p>+                if j % (threads*chunksize) == 0: +                    with gil: +                        PyErr_CheckSignals()</p>
<pre>    for i in range(Nch):
        im.image[vi, vj, i] = idata.rgba[i]
free(idata)</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/0082760bdf0c/">https://bitbucket.org/yt_analysis/yt/commits/0082760bdf0c/</a> Changeset:   0082760bdf0c Branch:      yt User:        ngoldbaum Date:        2016-03-29 20:07:28+00:00 Summary:     Remove dependency on openmp Affected #:  1 file</p>
<p>diff -r 6ed945328a03731b810d8d4c24a5372fa2832011 -r 0082760bdf0cff3a03788dcc2950d249a51918a0 yt/utilities/lib/grid_traversal.pyx --- a/yt/utilities/lib/grid_traversal.pyx +++ b/yt/utilities/lib/grid_traversal.pyx @@ -16,7 +16,6 @@</p>
<pre>import numpy as np
cimport numpy as np
cimport cython</pre>
<p>-cimport openmp</p>
<pre>#cimport healpix_interface
cdef extern from "limits.h":
    cdef int SHRT_MAX</pre>
<p>@@ -462,11 +461,9 @@</p>
<pre>cdef ImageAccumulator *idata
cdef np.float64_t width[3]
cdef int chunksize = 100</pre>
<ul><li><p>cdef int threads for i in range(3):</p>
<pre>width[i] = self.width[i]</pre>
<p>with nogil, parallel(num_threads = num_threads):</p></li>
<li><p>threads = openmp.omp_get_num_threads() idata = <ImageAccumulator *> malloc(sizeof(ImageAccumulator)) idata.supp_data = self.supp_data v_pos = <np.float64_t *> malloc(3 * sizeof(np.float64_t))</p></li></ul>
<p>@@ -482,7 +479,7 @@</p>
<pre>max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
walk_volume(vc, v_pos, v_dir, self.sampler,
            (<void *> idata), NULL, max_t)</pre>
<ul><li><p>if j % (threads*chunksize) == 0:</p></li></ul>
<p>+                if (j % chunksize) == 0:</p>
<pre>    with gil:
        PyErr_CheckSignals()
for i in range(Nch):</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/315fa3d6c5ab/">https://bitbucket.org/yt_analysis/yt/commits/315fa3d6c5ab/</a> Changeset:   315fa3d6c5ab Branch:      yt User:        ngoldbaum Date:        2016-03-29 20:10:30+00:00 Summary:     10*chunksize seems to be a good compromise on OSX Affected #:  1 file</p>
<p>diff -r 0082760bdf0cff3a03788dcc2950d249a51918a0 -r 315fa3d6c5abd1446f6ecf5991dc9499a5f4f1f6 yt/utilities/lib/grid_traversal.pyx --- a/yt/utilities/lib/grid_traversal.pyx +++ b/yt/utilities/lib/grid_traversal.pyx @@ -479,7 +479,7 @@</p>
<pre>max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
walk_volume(vc, v_pos, v_dir, self.sampler,
            (<void *> idata), NULL, max_t)</pre>
<ul><li><p>if (j % chunksize) == 0:</p></li></ul>
<p>+                if (j % 10*chunksize) == 0:</p>
<pre>    with gil:
        PyErr_CheckSignals()
for i in range(Nch):</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/ba7e9b3b3fa4/">https://bitbucket.org/yt_analysis/yt/commits/ba7e9b3b3fa4/</a> Changeset:   ba7e9b3b3fa4 Branch:      yt User:        ngoldbaum Date:        2016-03-29 20:12:45+00:00 Summary:     Add another set of brackets to make order of operations clearer. Affected #:  1 file</p>
<p>diff -r 315fa3d6c5abd1446f6ecf5991dc9499a5f4f1f6 -r ba7e9b3b3fa44dba50e9627fd328878f9703e203 yt/utilities/lib/grid_traversal.pyx --- a/yt/utilities/lib/grid_traversal.pyx +++ b/yt/utilities/lib/grid_traversal.pyx @@ -479,7 +479,7 @@</p>
<pre>max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
walk_volume(vc, v_pos, v_dir, self.sampler,
            (<void *> idata), NULL, max_t)</pre>
<ul><li><p>if (j % 10*chunksize) == 0:</p></li></ul>
<p>+                if (j % (10*chunksize)) == 0:</p>
<pre>    with gil:
        PyErr_CheckSignals()
for i in range(Nch):</pre>
<p><a href="https://bitbucket.org/yt_analysis/yt/commits/d923aa143295/">https://bitbucket.org/yt_analysis/yt/commits/d923aa143295/</a> Changeset:   d923aa143295 Branch:      yt User:        atmyers Date:        2016-03-30 22:16:08+00:00 Summary:     Merged in ngoldbaum/yt (pull request #2094)</p>
<p>Handle KeyboardInterrupt in volume rendering cython loop Affected #:  1 file</p>
<p>diff -r e376760e7ac426c9e47ff916655e60bc7ec78a2d -r d923aa143295f0ef48f3e9c87e70b1f21b82d530 yt/utilities/lib/grid_traversal.pyx --- a/yt/utilities/lib/grid_traversal.pyx +++ b/yt/utilities/lib/grid_traversal.pyx @@ -31,6 +31,8 @@</p>
<pre>from cython.parallel import prange, parallel, threadid
from vec3_ops cimport dot, subtract, L2_norm, fma
</pre>
<p>+from cpython.exc cimport PyErr_CheckSignals +</p>
<pre>DEF Nch = 4

cdef class PartitionedGrid:</pre>
<p>@@ -458,6 +460,7 @@</p>
<pre>size = nx * ny
cdef ImageAccumulator *idata
cdef np.float64_t width[3]</pre>
<p>+        cdef int chunksize = 100</p>
<pre>         for i in range(3):
width[i] = self.width[i]
         with nogil, parallel(num_threads = num_threads):</pre>
<p>@@ -465,7 +468,7 @@</p>
<pre>idata.supp_data = self.supp_data
v_pos = <np.float64_t *> malloc(3 * sizeof(np.float64_t))
v_dir = <np.float64_t *> malloc(3 * sizeof(np.float64_t))</pre>
<ul><li><p>for j in prange(size, schedule="static", chunksize=100):</p></li></ul>
<p>+            for j in prange(size, schedule="static", chunksize=chunksize):</p>
<pre>vj = j % ny
vi = (j - vj) / ny + iter[0]
vj = vj + iter[2]</pre>
<p>@@ -476,6 +479,9 @@</p>
<pre>max_t = fclip(im.zbuffer[vi, vj], 0.0, 1.0)
walk_volume(vc, v_pos, v_dir, self.sampler,
            (<void *> idata), NULL, max_t)</pre>
<p>+                if (j % (10*chunksize)) == 0: +                    with gil: +                        PyErr_CheckSignals()</p>
<pre>    for i in range(Nch):
        im.image[vi, vj, i] = idata.rgba[i]
free(idata)</pre>
<p>Repository URL: <a href="https://bitbucket.org/yt_analysis/yt/">https://bitbucket.org/yt_analysis/yt/</a></p>
<p>—</p>
<p>This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email.</p>

<img src="http://link.bitbucket.org/wf/open?upn=ll4ctv0L-2ByeRZFC1LslHcg6aJmnQ70VruLbmeLQr27Dkpczu1Qr0-2BIH5VhNaD-2B3-2BCrWkxblBdHpvkxwSQm6LgocfB1EQs0S6bBsPVv5md6n-2FH-2F93uvYDj9espkGJjZI-2FSchnXym-2FQtu5ocxjTD-2B8UkFZnwzWCN-2BGXlFq7L4YNLpiX9Cf7-2BUYmf3EcvbcEzwmfgvg9UXQ0vKrAZ8M0yz-2B9J-2BQTnwnEi-2FNK4mhNqb-2Fzmc-3D" alt="" width="1" height="1" border="0" style="height:1px !important;width:1px !important;border-width:0 !important;margin-top:0 !important;margin-bottom:0 !important;margin-right:0 !important;margin-left:0 !important;padding-top:0 !important;padding-bottom:0 !important;padding-right:0 !important;padding-left:0 !important;"/>
</body></html>