From 7e390180cd2c9b20c5774afdb8ca1d57efa348f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ne=C4=8Dada?= Date: Sun, 26 Jul 2020 13:11:41 +0300 Subject: [PATCH] Fix prange race conditions. --- qpms/qpms_c.pyx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/qpms/qpms_c.pyx b/qpms/qpms_c.pyx index 4733667..8206696 100644 --- a/qpms/qpms_c.pyx +++ b/qpms/qpms_c.pyx @@ -1093,10 +1093,10 @@ cdef class _ScatteringSystemAtOmegaK: cdef np.ndarray[double,ndim=2] evalpos_a = evalpos.reshape(-1,3) cdef np.ndarray[complex, ndim=3] results = np.empty((evalpos_a.shape[0], fecv_size, 3), dtype=complex) cdef ccart3_t *res - res = malloc(fecv_size*sizeof(ccart3_t)) cdef cart3_t pos cdef Py_ssize_t i, j with nogil, wraparound(False), parallel(): + res = malloc(fecv_size*sizeof(ccart3_t)) for i in prange(evalpos_a.shape[0]): pos.x = evalpos_a[i,0] pos.y = evalpos_a[i,1] @@ -1106,7 +1106,7 @@ cdef class _ScatteringSystemAtOmegaK: results[i,j,0] = res[j].x results[i,j,1] = res[j].y results[i,j,2] = res[j].z - free(res) + free(res) return results.reshape(evalpos.shape[:-1] + (self.fecv_size, 3)) property fecv_size: @@ -1326,10 +1326,10 @@ cdef class _ScatteringSystemAtOmega: cdef np.ndarray[double,ndim=2] evalpos_a = evalpos.reshape(-1,3) cdef np.ndarray[complex, ndim=3] results = np.empty((evalpos_a.shape[0], basissize, 3), dtype=complex) cdef ccart3_t *res - res = malloc(basissize*sizeof(ccart3_t)) cdef cart3_t pos cdef Py_ssize_t i, j with nogil, wraparound(False), parallel(): + res = malloc(basissize*sizeof(ccart3_t)) # thread-local for i in prange(evalpos_a.shape[0]): pos.x = evalpos_a[i,0] pos.y = evalpos_a[i,1] @@ -1342,7 +1342,7 @@ cdef class _ScatteringSystemAtOmega: results[i,j,0] = res[j].x results[i,j,1] = res[j].y results[i,j,2] = res[j].z - free(res) + free(res) return results.reshape(evalpos.shape[:-1] + (basissize, 3)) def bspec_pi(self, pi):