[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