[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