diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-09-27 22:55:15 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-09-27 22:55:15 +0400 |
commit | 16da43ef19034e885324299715ab4972b1a9d181 (patch) | |
tree | 48db41c924bc24fe46a8504b4a6217c95e8d05a7 /intern/elbeem | |
parent | 9745d39eff2d83073638717946cf8f5ee23f4710 (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.cpp | 12 | ||||
-rw-r--r-- | intern/elbeem/intern/solver_interface.cpp | 11 | ||||
-rw-r--r-- | intern/elbeem/intern/solver_interface.h | 8 | ||||
-rw-r--r-- | intern/elbeem/intern/solver_main.cpp | 6 |
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, \ |