Commit 1a5b94beb249a5d73f68955befaa73fd592cb47a

Authored by Thiago Franco de Moraes
1 parent 480ea163
Exists in master

Using lock in cy_mesh

Showing 1 changed file with 11 additions and 4 deletions   Show diff stats
invesalius_cy/cy_mesh.pyx
... ... @@ -22,6 +22,7 @@ from libcpp.pair cimport pair
22 22 from libcpp cimport bool
23 23 from libcpp.deque cimport deque as cdeque
24 24 from cython.parallel import prange
  25 +cimport openmp
25 26  
26 27 from .cy_my_types cimport vertex_t, normal_t, vertex_id_t
27 28  
... ... @@ -193,6 +194,7 @@ cdef class Mesh:
193 194  
194 195 vip = &self.vertices[v_id, 0]
195 196 to_visit.push_back(v_id)
  197 + dmax = dmax * dmax
196 198 while(not to_visit.empty()):
197 199 v_id = to_visit.front()
198 200 to_visit.pop_front()
... ... @@ -212,9 +214,9 @@ cdef class Mesh:
212 214 if status_v.find(vj) == status_v.end():
213 215 status_v[vj] = True
214 216 vjp = &self.vertices[vj, 0]
215   - distance = sqrt((vip[0] - vjp[0]) * (vip[0] - vjp[0]) \
216   - + (vip[1] - vjp[1]) * (vip[1] - vjp[1]) \
217   - + (vip[2] - vjp[2]) * (vip[2] - vjp[2]))
  217 + distance = (vip[0] - vjp[0]) * (vip[0] - vjp[0]) \
  218 + + (vip[1] - vjp[1]) * (vip[1] - vjp[1]) \
  219 + + (vip[2] - vjp[2]) * (vip[2] - vjp[2])
218 220 if distance <= dmax:
219 221 near_vertices.push_back(vj)
220 222 to_visit.push_back(vj)
... ... @@ -248,7 +250,10 @@ cdef vector[weight_t]* calc_artifacts_weight(Mesh mesh, vector[vertex_id_t]&amp; ver
248 250 cdef vector[weight_t]* weights = new vector[weight_t](msize)
249 251 weights.assign(msize, bmin)
250 252  
251   - for i in prange(n_ids, nogil=True):
  253 + cdef openmp.omp_lock_t lock
  254 + openmp.omp_init_lock(&lock)
  255 +
  256 + for i in prange(n_ids):
252 257 vi_id = vertices_staircase[i]
253 258 deref(weights)[vi_id] = 1.0
254 259  
... ... @@ -266,7 +271,9 @@ cdef vector[weight_t]* calc_artifacts_weight(Mesh mesh, vector[vertex_id_t]&amp; ver
266 271 value = (1.0 - d/tmax) * (1.0 - bmin) + bmin
267 272  
268 273 if value > deref(weights)[vj_id]:
  274 + openmp.omp_set_lock(&lock)
269 275 deref(weights)[vj_id] = value
  276 + openmp.omp_unset_lock(&lock)
270 277  
271 278 del near_vertices
272 279  
... ...