[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60398] trunk/blender/intern/elbeem/intern : Elbeem: Use pragma directive instead of overriding number of omp threads

Sergey Sharybin sergey.vfx at gmail.com
Fri Sep 27 20:55:15 CEST 2013


Revision: 60398
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60398
Author:   nazgul
Date:     2013-09-27 18:55:15 +0000 (Fri, 27 Sep 2013)
Log Message:
-----------
Elbeem: Use pragma directive instead of overriding number of omp threads

Global OpenMP threads override is not a good idea because this would affect
all possible OpenMP blocks running at the same time as simulation.

And that was actually a big on restoring number of threads: code needed to
store current number of threads, not maximal one.

Modified Paths:
--------------
    trunk/blender/intern/elbeem/intern/simulation_object.cpp
    trunk/blender/intern/elbeem/intern/solver_interface.cpp
    trunk/blender/intern/elbeem/intern/solver_interface.h
    trunk/blender/intern/elbeem/intern/solver_main.cpp

Modified: trunk/blender/intern/elbeem/intern/simulation_object.cpp
===================================================================
--- trunk/blender/intern/elbeem/intern/simulation_object.cpp	2013-09-27 16:58:34 UTC (rev 60397)
+++ trunk/blender/intern/elbeem/intern/simulation_object.cpp	2013-09-27 18:55:15 UTC (rev 60398)
@@ -32,10 +32,6 @@
 //! lbm factory functions
 LbmSolverInterface* createSolver();
 
-#if PARALLEL==1
-static int omp_threadcache;
-#endif
-
 /******************************************************************************
  * Constructor
  *****************************************************************************/
@@ -71,10 +67,6 @@
   	if(mpParam)          delete mpParam;
 	if(mpParts)          delete mpParts;
 	debMsgStd("SimulationObject",DM_MSG,"El'Beem Done!\n",10);
-#if (PARALLEL == 1)
-	omp_set_num_threads(omp_threadcache);
-	printf("Resetting omp_threads to cached value %d \n", omp_threadcache);
-#endif
 }
 
 
@@ -185,9 +177,7 @@
 		mpLbm->setSmoothing(1.0 * mpElbeemSettings->surfaceSmoothing, 1.0 * mpElbeemSettings->surfaceSmoothing);
 		mpLbm->setIsoSubdivs(mpElbeemSettings->surfaceSubdivs);
 #if PARALLEL==1
-		omp_threadcache = omp_get_max_threads();
-		omp_set_num_threads(mpElbeemSettings->threads);
-		printf("Setting omp_threads to usersetting %d \n", mpElbeemSettings->threads);
+		mpLbm->setNumOMPThreads(mpElbeemSettings->threads);
 #endif
 		mpLbm->setSizeX(mpElbeemSettings->resolutionxyz);
 		mpLbm->setSizeY(mpElbeemSettings->resolutionxyz);

Modified: trunk/blender/intern/elbeem/intern/solver_interface.cpp
===================================================================
--- trunk/blender/intern/elbeem/intern/solver_interface.cpp	2013-09-27 16:58:34 UTC (rev 60397)
+++ trunk/blender/intern/elbeem/intern/solver_interface.cpp	2013-09-27 18:55:15 UTC (rev 60398)
@@ -64,7 +64,10 @@
 	mCppfStage(0),
 	mDumpRawText(false),
 	mDumpRawBinary(false),
-	mDumpRawBinaryZip(true)
+	mDumpRawBinaryZip(true),
+#if PARALLEL==1
+	mNumOMPThreads(1)
+#endif  // PARALLEL==1
 {
 #if ELBEEM_PLUGIN==1
 	if(gDebugLevel<=1) setSilent(true);
@@ -670,6 +673,12 @@
 	mMarkedCells.clear();
 }
 
+#if PARALLEL==1
+void LbmSolverInterface::setNumOMPThreads(int num_threads) {
+	mNumOMPThreads = num_threads;
+}
+#endif  // PARALLEL==1
+
 /*******************************************************************************/
 /*! string helper functions */
 /*******************************************************************************/

Modified: trunk/blender/intern/elbeem/intern/solver_interface.h
===================================================================
--- trunk/blender/intern/elbeem/intern/solver_interface.h	2013-09-27 16:58:34 UTC (rev 60397)
+++ trunk/blender/intern/elbeem/intern/solver_interface.h	2013-09-27 18:55:15 UTC (rev 60398)
@@ -452,7 +452,9 @@
 		CellIdentifierInterface* markedAdvanceCell();
 		void markedClearList();
 
-
+#if PARALLEL==1
+		void setNumOMPThreads(int num_threads);
+#endif  // PARALLEL==1
 	protected:
 
 		/*! abort simulation on error... */
@@ -595,6 +597,10 @@
 		bool mDumpRawText;
 		bool mDumpRawBinary;
 		bool mDumpRawBinaryZip;
+
+#if PARALLEL==1
+		int mNumOMPThreads;
+#endif  // PARALLEL==1
 };
 
 

Modified: trunk/blender/intern/elbeem/intern/solver_main.cpp
===================================================================
--- trunk/blender/intern/elbeem/intern/solver_main.cpp	2013-09-27 16:58:34 UTC (rev 60397)
+++ trunk/blender/intern/elbeem/intern/solver_main.cpp	2013-09-27 18:55:15 UTC (rev 60398)
@@ -378,7 +378,7 @@
 	const int gridLoopBound=1;
 	GRID_REGION_INIT();
 #if PARALLEL==1
-#pragma omp parallel default(shared) \
+#pragma omp parallel default(shared) num_threads(mNumOMPThreads) \
   reduction(+: \
 	  calcCurrentMass,calcCurrentVolume, \
 		calcCellsFilled,calcCellsEmptied, \
@@ -1119,7 +1119,7 @@
 	
 		GRID_REGION_INIT();
 #if PARALLEL==1
-#pragma omp parallel default(shared) \
+#pragma omp parallel default(shared) num_threads(mNumOMPThreads) \
   reduction(+: \
 	  calcCurrentMass,calcCurrentVolume, \
 		calcCellsFilled,calcCellsEmptied, \
@@ -1156,7 +1156,7 @@
 
 	GRID_REGION_INIT();
 #if PARALLEL==1
-#pragma omp parallel default(shared) \
+#pragma omp parallel default(shared) num_threads(mNumOMPThreads) \
   reduction(+: \
 	  calcCurrentMass,calcCurrentVolume, \
 		calcCellsFilled,calcCellsEmptied, \




More information about the Bf-blender-cvs mailing list