[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12049] branches/cloth/blender/intern/ elbeem/intern: Little project: Getting fluidsim multithreaded.
Daniel Genrich
dgenrich at axlo.de
Sun Sep 16 18:33:42 CEST 2007
Revision: 12049
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12049
Author: genscher
Date: 2007-09-16 18:33:42 +0200 (Sun, 16 Sep 2007)
Log Message:
-----------
Little project: Getting fluidsim multithreaded.
Can be actuvated by adding "PARALLEL" to compiler flags in elbeem folder.
-----
Code already works for MAX_THREADS=1 so there seems to be some bug in openMP code in paraloopstart.h
Help appeciated :)
Added Paths:
-----------
branches/cloth/blender/intern/elbeem/intern/paraloop.h
branches/cloth/blender/intern/elbeem/intern/paraloopend.h
branches/cloth/blender/intern/elbeem/intern/paraloopstart.h
Added: branches/cloth/blender/intern/elbeem/intern/paraloop.h
===================================================================
--- branches/cloth/blender/intern/elbeem/intern/paraloop.h (rev 0)
+++ branches/cloth/blender/intern/elbeem/intern/paraloop.h 2007-09-16 16:33:42 UTC (rev 12049)
@@ -0,0 +1,51 @@
+
+#define PERFORM_USQRMAXCHECK \
+_Pragma("omp critical") {\
+USQRMAXCHECK(usqr,ux,uy,uz, mMaxVlen, mMxvx,mMxvy,mMxvz); \
+} \
+
+
+#define LIST_EMPTY(x) \
+_Pragma("omp critical") {\
+mListEmpty.push_back( x ); }
+
+#define LIST_FULL(x) \
+_Pragma("omp critical") {\
+mListFull.push_back( x ); }
+
+#define FSGR_ADDPART(x) \
+_Pragma("omp critical") { \
+mpParticles->addFullParticle( x ); } \
+
+
+#define MAX_THREADS 2
+
+#define GRID_REGION_START() \
+{ /* main_region */ \
+ int kstart=getForZMinBnd(), kend=getForZMaxBnd(mMaxRefine); \
+ if(gridLoopBound>0){ kstart=getForZMin1(), kend=getForZMax1(mMaxRefine); } \
+ int kdir = 1; \
+ const int id=omp_get_thread_num(); \
+ int jstart = (id*((mLevel[mMaxRefine].lSizey-gridLoopBound) / MAX_THREADS))+gridLoopBound; \
+ int jend = (id+1)*((mLevel[mMaxRefine].lSizey-gridLoopBound)/ MAX_THREADS); \
+ if(id+1 == MAX_THREADS) \
+ { \
+ jend = mLevel[mMaxRefine].lSizey-gridLoopBound; \
+ } \
+ if(jstart<1) jstart = 1; \
+ LbmFloat *ccel = NULL, *tcel = NULL; \
+ CellFlagType *pFlagSrc=NULL, *pFlagDst=NULL; \
+ if(mLevel[mMaxRefine].setCurr==1) { \
+ kdir = -1; \
+ int temp = kend; \
+ kend = kstart-1; \
+ kstart = temp-1; \
+ temp = id; /* dummy remove warning */ \
+} \
+
+
+
+#define unused_GRID_REGION_END() \
+} /* main_region */ \
+ // end unusedGRID_REGION_END
+
Added: branches/cloth/blender/intern/elbeem/intern/paraloopend.h
===================================================================
--- branches/cloth/blender/intern/elbeem/intern/paraloopend.h (rev 0)
+++ branches/cloth/blender/intern/elbeem/intern/paraloopend.h 2007-09-16 16:33:42 UTC (rev 12049)
@@ -0,0 +1,14 @@
+// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+} /* i */
+ int i=0;
+ ADVANCE_POINTERS(2*gridLoopBound);
+} /* j */
+ /* COMPRESSGRIDS!=1 */
+#pragma omp barrier
+
+ /* int i=0; */
+ /* ADVANCE_POINTERS(mLevel[lev].lSizex*2); */
+} /* all cell loop k,j,i */
+ if(doReduce) { } /* dummy remove warning */
+} /* main_region */
+
Added: branches/cloth/blender/intern/elbeem/intern/paraloopstart.h
===================================================================
--- branches/cloth/blender/intern/elbeem/intern/paraloopstart.h (rev 0)
+++ branches/cloth/blender/intern/elbeem/intern/paraloopstart.h 2007-09-16 16:33:42 UTC (rev 12049)
@@ -0,0 +1,3 @@
+
+#pragma omp parallel section num_threads(MAX_THREADS) \
+reduction(+: calcCurrentMass, calcCurrentVolume, calcCellsFilled, calcCellsEmptied, calcNumUsedCells)
More information about the Bf-blender-cvs
mailing list