[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29476] branches/render25/source/blender/ blenkernel/intern: Render Branch: enabled openmp multithreading for multires/subsurf again,

Brecht Van Lommel brecht at blender.org
Tue Jun 15 20:44:47 CEST 2010


Revision: 29476
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29476
Author:   blendix
Date:     2010-06-15 20:44:47 +0200 (Tue, 15 Jun 2010)

Log Message:
-----------
Render Branch: enabled openmp multithreading for multires/subsurf again,
but only if there are >= 1 million faces estimated in the resulting mesh.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/intern/CCGSubSurf.c
    branches/render25/source/blender/blenkernel/intern/CCGSubSurf.h
    branches/render25/source/blender/blenkernel/intern/multires.c

Modified: branches/render25/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/CCGSubSurf.c	2010-06-15 18:22:28 UTC (rev 29475)
+++ branches/render25/source/blender/blenkernel/intern/CCGSubSurf.c	2010-06-15 18:44:47 UTC (rev 29476)
@@ -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) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
 	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) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
 	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) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
 	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) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
 	{
 		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) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
 	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) if(numEffectedF*edgeSize*edgeSize*4 >= CCG_OMP_LIMIT)
 	for (i=0; i<numEffectedF; i++) {
 		CCGFace *f = effectedF[i];
 		int S, x;

Modified: branches/render25/source/blender/blenkernel/intern/CCGSubSurf.h
===================================================================
--- branches/render25/source/blender/blenkernel/intern/CCGSubSurf.h	2010-06-15 18:22:28 UTC (rev 29475)
+++ branches/render25/source/blender/blenkernel/intern/CCGSubSurf.h	2010-06-15 18:44:47 UTC (rev 29476)
@@ -39,6 +39,10 @@
 
 /***/
 
+#define CCG_OMP_LIMIT	1000000
+
+/***/
+
 typedef struct _CCGSubSurf CCGSubSurf;
 
 CCGSubSurf*	ccgSubSurf_new	(CCGMeshIFC *ifc, int subdivisionLevels, CCGAllocatorIFC *allocatorIFC, CCGAllocatorHDL allocator);

Modified: branches/render25/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/multires.c	2010-06-15 18:22:28 UTC (rev 29475)
+++ branches/render25/source/blender/blenkernel/intern/multires.c	2010-06-15 18:44:47 UTC (rev 29476)
@@ -560,7 +560,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) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT)
 	for(i = 0; i < me->totface; ++i) {
 		const int numVerts = mface[i].v4 ? 4 : 3;
 		MDisps *mdisp = &mdisps[i];
@@ -568,7 +568,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);
 		}





More information about the Bf-blender-cvs mailing list