Go to the documentation of this file.
41 #define OPENMPNUMCHUNKS 100 // when large blocksize, if too small chunks, then overhead is large
42 #define MINCHUNKSIZE 10 // if too few chunks, then overhead is large (GODMARK: should worry about if <10 iterations? -- not for now)
48 #if(N1*N2*N3<200) // overhead becomes a problem for too few iterations in loops
49 #define OPENMPSCHEDULE(arg) static
50 #define OPENMPCHUNKSIZE(blocksize) (MAX(blocksize/numopenmpthreads,MINCHUNKSIZE))
52 #define OPENMPSCHEDULE(arg) guided
53 #define OPENMPCHUNKSIZE(blocksize) (MAX(blocksize/OPENMPNUMCHUNKS,MINCHUNKSIZE))
61 #define OPENMPNOVARYSCHEDULE(arg) static
64 #define OPENMPFULLNOVARYSCHEDULE(arg) static
67 #define OPENMPVARYENDTIMESCHEDULE(arg) guided
71 #define OPENMP3DLOOPBLOCK for(blockijk=1;blockijk<=blocksize;blockijk++)
75 #define OPENMP3DLOOPVARSDEFINE int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk
79 #define OPENMP3DLOOPSETUPSUPERGENCOMP(i,j,k,istart,istop,jstart,jstop,kstart,kstop,di,dj,dk) \
80 {nxsize=( ((istop+SHIFTX1UP) - (istart+SHIFTX1DN))*di +1 ); \
81 nxshift=istart+SHIFTX1DN; \
82 nysize=( ((jstop+SHIFTX2UP) - (jstart+SHIFTX2DN))*dj +1 ); \
83 nyshift=jstart+SHIFTX2DN; \
84 nzsize=( ((kstop+SHIFTX3UP) - (kstart+SHIFTX3DN))*dk +1 ); \
85 nzshift=kstart+SHIFTX3DN; \
86 blocksize=nxsize*nysize*nzsize;}
89 #define OPENMP3DLOOPSETUPSUPERGEN(istart,istop,jstart,jstop,kstart,kstop,di,dj,dk) \
90 {nxsize=( (istop - istart)*di +1 ); \
92 nysize=( (jstop - jstart)*dj +1 ); \
94 nzsize=( (kstop - kstart)*dk +1 ); \
96 blocksize=nxsize*nysize*nzsize;}
99 #define OPENMP3DLOOPSETUP(istart,istop,jstart,jstop,kstart,kstop) \
100 {nxsize=((istop+SHIFTX1UP) - (istart+SHIFTX1DN) +1 ); \
101 nxshift=istart+SHIFTX1DN; \
102 nysize=((jstop+SHIFTX2UP) - (jstart+SHIFTX2DN) +1 ); \
103 nyshift=jstart+SHIFTX2DN; \
104 nzsize=((kstop+SHIFTX3UP) - (kstart+SHIFTX3DN) +1 ); \
105 nzshift=kstart+SHIFTX3DN; \
106 blocksize=nxsize*nysize*nzsize;}
110 #define OPENMP3DLOOPSETUPFULL OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND,-N2BND,N2-1+N2BND,-N3BND,N3-1+N3BND)
112 #define OPENMP3DLOOPSETUPFULLINOUT2 OPENMP3DLOOPSETUP(-N1BND+2*SHIFT1,N1-1+N1BND-2*SHIFT1,-N2BND+2*SHIFT2,N2-1+N2BND-2*SHIFT2,-N3BND+2*SHIFT3,N3-1+N3BND-2*SHIFT3)
114 #define OPENMP3DLOOPSETUPFULLINOUT2DIR1 OPENMP3DLOOPSETUP(-N1BND+2*SHIFT1,N1-1+N1BND-2*SHIFT1,-N2BND,N2-1+N2BND,-N3BND,N3-1+N3BND)
116 #define OPENMP3DLOOPSETUPFULLINOUT2DIR2 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND,-N2BND+2*SHIFT2,N2-1+N2BND-2*SHIFT2,-N3BND,N3-1+N3BND)
118 #define OPENMP3DLOOPSETUPFULLINOUT2DIR3 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND,-N2BND,N2-1+N2BND,-N3BND+2*SHIFT3,N3-1+N3BND-2*SHIFT3)
122 #define OPENMP3DLOOPSETUPFULLP1 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND+SHIFT1,-N2BND,N2-1+N2BND+SHIFT2,-N3BND,N3-1+N3BND+SHIFT3)
124 #define OPENMP3DLOOPSETUPFULLP2 OPENMP3DLOOPSETUP(-N1BND-SHIFT1,N1-1+N1BND+SHIFT1*2,-N2BND-SHIFT2,N2-1+N2BND+SHIFT2*2,-N3BND-SHIFT3,N3-1+N3BND+SHIFT3*2)
126 #define OPENMP3DLOOPSETUPFULLP1EXCEPTX2 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND+SHIFT1,-N2BND,N2-1+N2BND,-N3BND,N3-1+N3BND+SHIFT3)
129 #define OPENMP3DLOOPSETUPZLOOP OPENMP3DLOOPSETUP(0,N1-1,0,N2-1,0,N3-1)
134 #define OPENMPBCLOOPSETUP(istart,istop,jstart,jstop,kstart,kstop) \
135 {nxsize=((istop) - (istart) +1 ); \
137 nysize=((jstop) - (jstart) +1 ); \
139 nzsize=((kstop) - (kstart) +1 ); \
141 blocksize=nxsize*nysize*nzsize;}
144 #define OPENMPBCLOOPVARSDEFINELOOPX1DIR int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk, fooi
146 #define OPENMPBCLOOPVARSDEFINELOOPX2DIR int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk, fooj
148 #define OPENMPBCLOOPVARSDEFINELOOPX3DIR int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk, fook
152 #define OPENMPBCLOOPSETUPLOOPX1DIR OPENMPBCLOOPSETUP(0,0,innormalloop[2],outnormalloop[2],innormalloop[3],outnormalloop[3])
156 #define OPENMPBCLOOPSETUPLOOPX2DIR OPENMPBCLOOPSETUP(inboundloop[1],outboundloop[1],0,0,innormalloop[3],outnormalloop[3])
160 #define OPENMPBCLOOPSETUPLOOPX3DIR OPENMPBCLOOPSETUP(inboundloop[1],outboundloop[1],inboundloop[2],outboundloop[2],0,0)
162 #define OPENMPBCLOOPBLOCK2IJKLOOPX1DIR(j,k) OPENMP3DLOOPBLOCK2IJK(fooi,j,k);
164 #define OPENMPBCLOOPBLOCK2IJKLOOPX2DIR(i,k) OPENMP3DLOOPBLOCK2IJK(i,fooj,k);
166 #define OPENMPBCLOOPBLOCK2IJKLOOPX3DIR(i,j) OPENMP3DLOOPBLOCK2IJK(i,j,fook);
169 #define OPENMPBCLOOPBLOCK OPENMP3DLOOPBLOCK