[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53903] trunk/blender/source/blender/bmesh /intern/bmesh_mesh_conv.c: use openmp for building bmesh arrays, also replace calloc with malloc.
Sergey Sharybin
sergey.vfx at gmail.com
Sat Jan 19 18:37:45 CET 2013
I'm also kind of skeptical about such kind of speed enhancements. This
really should be done on object level, which is a part of depsgraph recode
(which i hope will happen :) and once threading is done on object leve;,
there should be no threading on DM level.
Unless it doesn't take time on figuring out where arrays could be filled in
simultaneously would just leave things as is: we'll need to re-benchmark
code once depsgraph is multithreaded anyway :)
On Sat, Jan 19, 2013 at 8:21 AM, Campbell Barton <ideasman42 at gmail.com>wrote:
> Revision: 53903
>
> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53903
> Author: campbellbarton
> Date: 2013-01-19 02:21:53 +0000 (Sat, 19 Jan 2013)
> Log Message:
> -----------
> use openmp for building bmesh arrays, also replace calloc with malloc.
>
> Modified Paths:
> --------------
> trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
>
> Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c
> ===================================================================
> --- trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c 2013-01-19
> 02:01:18 UTC (rev 53902)
> +++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh_conv.c 2013-01-19
> 02:21:53 UTC (rev 53903)
> @@ -416,22 +416,20 @@
>
> if (me->mselect && me->totselect != 0) {
>
> - BMVert **vert_array = MEM_callocN(sizeof(BMVert *) *
> bm->totvert,
> - "Selection Conversion
> Vertex Pointer Array");
> - BMEdge **edge_array = MEM_callocN(sizeof(BMEdge *) *
> bm->totedge,
> - "Selection Conversion
> Edge Pointer Array");
> - BMFace **face_array = MEM_callocN(sizeof(BMFace *) *
> bm->totface,
> - "Selection Conversion
> Face Pointer Array");
> -
> - BMIter iter;
> - BMVert *vert;
> - BMEdge *edge;
> - BMFace *face;
> + BMVert **vert_array = MEM_mallocN(sizeof(BMVert *) *
> bm->totvert, "VSelConv");
> + BMEdge **edge_array = MEM_mallocN(sizeof(BMEdge *) *
> bm->totedge, "ESelConv");
> + BMFace **face_array = MEM_mallocN(sizeof(BMFace *) *
> bm->totface, "FSelConv");
> MSelect *msel;
>
> - BM_ITER_MESH_INDEX (vert, &iter, bm, BM_VERTS_OF_MESH, i)
> { vert_array[i] = vert; }
> - BM_ITER_MESH_INDEX (edge, &iter, bm, BM_EDGES_OF_MESH, i)
> { edge_array[i] = edge; }
> - BM_ITER_MESH_INDEX (face, &iter, bm, BM_FACES_OF_MESH, i)
> { face_array[i] = face; }
> +#pragma omp parallel sections if (bm->totvert + bm->totedge + bm->totface
> >= BM_OMP_LIMIT)
> + {
> +#pragma omp section
> + { BM_iter_as_array(bm, BM_VERTS_OF_MESH, NULL,
> (void **)vert_array, bm->totvert); }
> +#pragma omp section
> + { BM_iter_as_array(bm, BM_EDGES_OF_MESH, NULL,
> (void **)edge_array, bm->totedge); }
> +#pragma omp section
> + { BM_iter_as_array(bm, BM_FACES_OF_MESH, NULL,
> (void **)face_array, bm->totface); }
> + }
>
> for (i = 0, msel = me->mselect; i < me->totselect; i++,
> msel++) {
> switch (msel->type) {
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
--
With best regards, Sergey Sharybin
More information about the Bf-committers
mailing list