[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29139] trunk/blender/source/blender: Workaround #20467: disabled OpenMP multithreading on subsurf/multires/ sculpt

Brecht Van Lommel brecht at blender.org
Tue Jun 1 21:01:54 CEST 2010


Revision: 29139
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29139
Author:   blendix
Date:     2010-06-01 21:01:54 +0200 (Tue, 01 Jun 2010)

Log Message:
-----------
Workaround #20467: disabled OpenMP multithreading on subsurf/multires/sculpt
for now, it's too fine grained and so becomes a performance bottleneck on some
platforms, while only providing a modest speedup on others. Couldn't find a
simple enough solution to solve this, so for now no multithreading here.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c

Modified: trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2010-06-01 18:40:42 UTC (rev 29138)
+++ trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2010-06-01 19:01:54 UTC (rev 29139)
@@ -1159,7 +1159,7 @@
 	int normalDataOffset = ss->normalDataOffset;
 	int vertDataSize = ss->meshIFC.vertDataSize;
 
-	#pragma omp parallel for private(ptrIdx) schedule(static)
+	//#pragma omp parallel for private(ptrIdx) schedule(static)
 	for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
 		CCGFace *f = (CCGFace*) effectedF[ptrIdx];
 		int S, x, y;
@@ -1285,7 +1285,7 @@
 		}
 	}
 
-	#pragma omp parallel for private(ptrIdx) schedule(static)
+	//#pragma omp parallel for private(ptrIdx) schedule(static)
 	for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
 		CCGFace *f = (CCGFace*) effectedF[ptrIdx];
 		int S, x, y;
@@ -1351,7 +1351,7 @@
 	int vertDataSize = ss->meshIFC.vertDataSize;
 	void *q = ss->q, *r = ss->r;
 
-	#pragma omp parallel for private(ptrIdx) schedule(static)
+	//#pragma omp parallel for private(ptrIdx) schedule(static)
 	for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
 		CCGFace *f = (CCGFace*) effectedF[ptrIdx];
 		int S, x, y;
@@ -1685,17 +1685,17 @@
 		}
 	}
 
-	#pragma omp parallel private(ptrIdx)
+	//#pragma omp parallel private(ptrIdx)
 	{
 		void *q, *r;
 
-		#pragma omp critical
+		//#pragma omp critical
 		{
 			q = MEM_mallocN(ss->meshIFC.vertDataSize, "CCGSubsurf q");
 			r = MEM_mallocN(ss->meshIFC.vertDataSize, "CCGSubsurf r");
 		}
 
-		#pragma omp for schedule(static)
+		//#pragma omp for schedule(static)
 		for (ptrIdx=0; ptrIdx<numEffectedF; ptrIdx++) {
 			CCGFace *f = (CCGFace*) effectedF[ptrIdx];
 			int S, x, y;
@@ -1779,7 +1779,7 @@
 			}
 		}
 
-		#pragma omp critical
+		//#pragma omp critical
 		{
 			MEM_freeN(q);
 			MEM_freeN(r);
@@ -1791,14 +1791,14 @@
 	gridSize = 1 + (1<<((nextLvl)-1));
 	cornerIdx = gridSize-1;
 
-	#pragma omp parallel for private(i) schedule(static)
+	//#pragma omp parallel for private(i) schedule(static)
 	for (i=0; i<numEffectedE; i++) {
 		CCGEdge *e = effectedE[i];
 		VertDataCopy(EDGE_getCo(e, nextLvl, 0), VERT_getCo(e->v0, nextLvl));
 		VertDataCopy(EDGE_getCo(e, nextLvl, edgeSize-1), VERT_getCo(e->v1, nextLvl));
 	}
 
-	#pragma omp parallel for private(i) schedule(static)
+	//#pragma omp parallel for private(i) schedule(static)
 	for (i=0; i<numEffectedF; i++) {
 		CCGFace *f = effectedF[i];
 		int S, x;

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c	2010-06-01 18:40:42 UTC (rev 29138)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c	2010-06-01 19:01:54 UTC (rev 29139)
@@ -552,7 +552,7 @@
 	dGridSize = multires_side_tot[totlvl];
 	dSkip = (dGridSize-1)/(gridSize-1);
 
-	#pragma omp parallel for private(i) schedule(static)
+	//#pragma omp parallel for private(i) schedule(static)
 	for(i = 0; i < me->totface; ++i) {
 		const int numVerts = mface[i].v4 ? 4 : 3;
 		MDisps *mdisp = &mdisps[i];
@@ -560,7 +560,7 @@
 
 		/* when adding new faces in edit mode, need to allocate disps */
 		if(!mdisp->disps)
-		#pragma omp critical
+		//#pragma omp critical
 		{
 			multires_reallocate_mdisps(me, mdisps, totlvl);
 		}

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2010-06-01 18:40:42 UTC (rev 29138)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2010-06-01 19:01:54 UTC (rev 29139)
@@ -772,7 +772,7 @@
 	copy_v3_v3(out_dir, cache->view_normal_symmetry);
 
 	/* threaded loop over nodes */
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -809,7 +809,7 @@
 			BLI_pbvh_vertex_iter_end;
 		}
 
-		#pragma omp critical
+		//#pragma omp critical
 		{
 			/* we sum per node and add together later for threads */
 			add_v3_v3(out, nout);
@@ -847,7 +847,7 @@
 	offset[2]= area_normal[2]*ss->cache->radius*ss->cache->scale[2]*bstrength;
 
 	/* threaded loop over nodes */
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -961,7 +961,7 @@
 	BLI_pbvh_node_get_grids(ss->pbvh, node, &grid_indices, &totgrid,
 		NULL, &gridsize, &griddata, &gridadj);
 
-	#pragma omp critical
+	//#pragma omp critical
 	tmpgrid= MEM_mallocN(sizeof(float)*3*gridsize*gridsize, "tmpgrid");
 
 	for(i = 0; i < totgrid; ++i) {
@@ -1020,7 +1020,7 @@
 		}
 	}
 
-	#pragma omp critical
+	//#pragma omp critical
 	MEM_freeN(tmpgrid);
 }
 
@@ -1029,7 +1029,7 @@
 	int iteration, n;
 
 	for(iteration = 0; iteration < 2; ++iteration) {
-		#pragma omp parallel for private(n) schedule(static)
+		//#pragma omp parallel for private(n) schedule(static)
 		for(n=0; n<totnode; n++) {
 			sculpt_undo_push_node(ss, nodes[n]);
 
@@ -1052,7 +1052,7 @@
 	float bstrength= ss->cache->bstrength;
 	int n;
 
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -1086,7 +1086,7 @@
 	
 	copy_v3_v3(grab_delta, ss->cache->grab_delta_symmetry);
 
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -1129,7 +1129,7 @@
 	offset[1]= ss->cache->scale[1]*area_normal[1];
 	offset[2]= ss->cache->scale[2]*area_normal[2];
 
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -1186,7 +1186,7 @@
 	float bstrength= ss->cache->bstrength;
 	int n;
 
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -1229,7 +1229,7 @@
 		outer_dist[i]= -1.0f;
 	}
 		
-	#pragma omp parallel for private(n) schedule(static)
+	//#pragma omp parallel for private(n) schedule(static)
 	for(n=0; n<totnode; n++) {
 		PBVHVertexIter vd;
 		SculptBrushTest test;
@@ -1951,7 +1951,7 @@
 
 		BLI_pbvh_search_gather(ss->pbvh, NULL, NULL, &nodes, &totnode);
 
-		#pragma omp parallel for private(n) schedule(static)
+		//#pragma omp parallel for private(n) schedule(static)
 		for(n=0; n<totnode; n++) {
 			SculptUndoNode *unode;
 			





More information about the Bf-blender-cvs mailing list