Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-09-27 22:55:15 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-09-27 22:55:15 +0400
commit16da43ef19034e885324299715ab4972b1a9d181 (patch)
tree48db41c924bc24fe46a8504b4a6217c95e8d05a7 /intern/elbeem
parent9745d39eff2d83073638717946cf8f5ee23f4710 (diff)
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.
Diffstat (limited to 'intern/elbeem')
-rw-r--r--intern/elbeem/intern/simulation_object.cpp12
-rw-r--r--intern/elbeem/intern/solver_interface.cpp11
-rw-r--r--intern/elbeem/intern/solver_interface.h8
-rw-r--r--intern/elbeem/intern/solver_main.cpp6
4 files changed, 21 insertions, 16 deletions
diff --git a/intern/elbeem/intern/simulation_object.cpp b/intern/elbeem/intern/simulation_object.cpp
index 9e98adfc734..99c3b170634 100644
--- a/intern/elbeem/intern/simulation_object.cpp
+++ b/intern/elbeem/intern/simulation_object.cpp
@@ -32,10 +32,6 @@
//! lbm factory functions
LbmSolverInterface* createSolver();
-#if PARALLEL==1
-static int omp_threadcache;
-#endif
-
/******************************************************************************
* Constructor
*****************************************************************************/
@@ -71,10 +67,6 @@ SimulationObject::~SimulationObject()
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 @@ int SimulationObject::initializeLbmSimulation(ntlRenderGlobals *glob)
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);
diff --git a/intern/elbeem/intern/solver_interface.cpp b/intern/elbeem/intern/solver_interface.cpp
index c3421fe1968..4284a56f2fd 100644
--- a/intern/elbeem/intern/solver_interface.cpp
+++ b/intern/elbeem/intern/solver_interface.cpp
@@ -64,7 +64,10 @@ LbmSolverInterface::LbmSolverInterface() :
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 @@ void LbmSolverInterface::markedClearList() {
mMarkedCells.clear();
}
+#if PARALLEL==1
+void LbmSolverInterface::setNumOMPThreads(int num_threads) {
+ mNumOMPThreads = num_threads;
+}
+#endif // PARALLEL==1
+
/*******************************************************************************/
/*! string helper functions */
/*******************************************************************************/
diff --git a/intern/elbeem/intern/solver_interface.h b/intern/elbeem/intern/solver_interface.h
index 8f3181a307d..e25c59e2d50 100644
--- a/intern/elbeem/intern/solver_interface.h
+++ b/intern/elbeem/intern/solver_interface.h
@@ -452,7 +452,9 @@ class LbmSolverInterface
CellIdentifierInterface* markedAdvanceCell();
void markedClearList();
-
+#if PARALLEL==1
+ void setNumOMPThreads(int num_threads);
+#endif // PARALLEL==1
protected:
/*! abort simulation on error... */
@@ -595,6 +597,10 @@ class LbmSolverInterface
bool mDumpRawText;
bool mDumpRawBinary;
bool mDumpRawBinaryZip;
+
+#if PARALLEL==1
+ int mNumOMPThreads;
+#endif // PARALLEL==1
};
diff --git a/intern/elbeem/intern/solver_main.cpp b/intern/elbeem/intern/solver_main.cpp
index 99278657fd9..46af6740cf1 100644
--- a/intern/elbeem/intern/solver_main.cpp
+++ b/intern/elbeem/intern/solver_main.cpp
@@ -378,7 +378,7 @@ LbmFsgrSolver::mainLoop(int lev)
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 @@ LbmFsgrSolver::preinitGrids()
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 @@ LbmFsgrSolver::standingFluidPreinit()
GRID_REGION_INIT();
#if PARALLEL==1
-#pragma omp parallel default(shared) \
+#pragma omp parallel default(shared) num_threads(mNumOMPThreads) \
reduction(+: \
calcCurrentMass,calcCurrentVolume, \
calcCellsFilled,calcCellsEmptied, \