[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53889] trunk/blender/source/blender: use openmp sections for felling origindex arrays

Campbell Barton ideasman42 at gmail.com
Fri Jan 18 07:26:07 CET 2013


Revision: 53889
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53889
Author:   campbellbarton
Date:     2013-01-18 06:26:06 +0000 (Fri, 18 Jan 2013)
Log Message:
-----------
use openmp sections for felling origindex arrays

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/modifiers/intern/MOD_build.c
    trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c
    trunk/blender/source/blender/modifiers/intern/MOD_screw.c

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2013-01-18 02:22:51 UTC (rev 53888)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2013-01-18 06:26:06 UTC (rev 53889)
@@ -95,6 +95,8 @@
 struct ListBase;
 struct PBVH;
 
+#define DM_OMP_LIMIT 0  /* setting zero so we can catch bugs in OpenMP/BMesh */
+
 /* number of sub-elements each mesh element has (for interpolation) */
 #define SUB_ELEMS_VERT 0
 #define SUB_ELEMS_EDGE 2

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-01-18 02:22:51 UTC (rev 53888)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-01-18 06:26:06 UTC (rev 53889)
@@ -1584,9 +1584,15 @@
 					DM_add_edge_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
 					DM_add_poly_layer(dm, CD_ORIGINDEX, CD_CALLOC, NULL);
 
-					range_vn_i(DM_get_vert_data_layer(dm, CD_ORIGINDEX), dm->numVertData, 0);
-					range_vn_i(DM_get_edge_data_layer(dm, CD_ORIGINDEX), dm->numEdgeData, 0);
-					range_vn_i(DM_get_poly_data_layer(dm, CD_ORIGINDEX), dm->numPolyData, 0);
+#pragma omp parallel sections if (dm->numVertData + dm->numEdgeData + dm->numPolyData >= DM_OMP_LIMIT)
+					{
+#pragma omp section
+						{ range_vn_i(DM_get_vert_data_layer(dm, CD_ORIGINDEX), dm->numVertData, 0); }
+#pragma omp section
+						{ range_vn_i(DM_get_edge_data_layer(dm, CD_ORIGINDEX), dm->numEdgeData, 0); }
+#pragma omp section
+						{ range_vn_i(DM_get_poly_data_layer(dm, CD_ORIGINDEX), dm->numPolyData, 0); }
+					}
 				}
 			}
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_build.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_build.c	2013-01-18 02:22:51 UTC (rev 53888)
+++ trunk/blender/source/blender/modifiers/intern/MOD_build.c	2013-01-18 06:26:06 UTC (rev 53889)
@@ -37,6 +37,7 @@
 
 #include "BLI_utildefines.h"
 #include "BLI_rand.h"
+#include "BLI_math_vector.h"
 #include "BLI_ghash.h"
 
 #include "DNA_scene_types.h"
@@ -104,13 +105,20 @@
 	MVert *mvert_src = dm->getVertArray(dm);
 
 
-	vertMap = MEM_callocN(sizeof(*vertMap) * numVert_src, "build modifier vertMap");
-	for (i = 0; i < numVert_src; i++) vertMap[i] = i;
-	edgeMap = MEM_callocN(sizeof(*edgeMap) * numEdge_src, "build modifier edgeMap");
-	for (i = 0; i < numEdge_src; i++) edgeMap[i] = i;
-	faceMap = MEM_callocN(sizeof(*faceMap) * numPoly_src, "build modifier faceMap");
-	for (i = 0; i < numPoly_src; i++) faceMap[i] = i;
+	vertMap = MEM_mallocN(sizeof(*vertMap) * numVert_src, "build modifier vertMap");
+	edgeMap = MEM_mallocN(sizeof(*edgeMap) * numEdge_src, "build modifier edgeMap");
+	faceMap = MEM_mallocN(sizeof(*faceMap) * numPoly_src, "build modifier faceMap");
 
+#pragma omp parallel sections if (numVert_src + numEdge_src + numPoly_src >= DM_OMP_LIMIT)
+	{
+#pragma omp section
+		{ range_vn_i(vertMap, numVert_src, 0); }
+#pragma omp section
+		{ range_vn_i(edgeMap, numEdge_src, 0); }
+#pragma omp section
+		{ range_vn_i(faceMap, numPoly_src, 0); }
+	}
+
 	frac = (BKE_scene_frame_get(md->scene) - bmd->start) / bmd->length;
 	CLAMP(frac, 0.0f, 1.0f);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c	2013-01-18 02:22:51 UTC (rev 53888)
+++ trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c	2013-01-18 06:26:06 UTC (rev 53889)
@@ -521,11 +521,10 @@
 
 static void validate_solution(LaplacianSystem * sys, short flag, float lambda, float lambda_border)
 {
-	int i, idv1, idv2;
+	int i;
 	float lam;
-	float leni, lene;
 	float vini, vend;
-	float *vi1, *vi2, ve1[3], ve2[3];
+
 	if (flag & MOD_LAPLACIANSMOOTH_PRESERVE_VOLUME) {
 		vini = compute_volume(sys->vertexCos, sys->mfaces, sys->numFaces);
 	}

Modified: trunk/blender/source/blender/modifiers/intern/MOD_screw.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_screw.c	2013-01-18 02:22:51 UTC (rev 53888)
+++ trunk/blender/source/blender/modifiers/intern/MOD_screw.c	2013-01-18 06:26:06 UTC (rev 53889)
@@ -314,11 +314,7 @@
 		CustomData_add_layer(&result->polyData, CD_ORIGINDEX, CD_CALLOC, NULL, maxPolys);
 	}
 
-#if 0 // trunk
-	origindex = result->getPolyDataArray(result, CD_ORIGINDEX);
-#else // bmesh
 	origindex = CustomData_get_layer(&result->polyData, CD_ORIGINDEX);
-#endif
 
 	DM_copy_vert_data(dm, result, 0, 0, totvert); /* copy first otherwise this overwrites our own vertex normals */
 	




More information about the Bf-blender-cvs mailing list