HARM
harm and utilities
 All Data Structures Files Functions Variables Typedefs Macros Pages
global.openmploops.h
Go to the documentation of this file.
1 
39 
40 
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)
43 
44 
45 
46 
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))
51 #else
52 #define OPENMPSCHEDULE(arg) guided
53 #define OPENMPCHUNKSIZE(blocksize) (MAX(blocksize/OPENMPNUMCHUNKS,MINCHUNKSIZE))
54 #endif
55 
58 
61 #define OPENMPNOVARYSCHEDULE(arg) static
62 
64 #define OPENMPFULLNOVARYSCHEDULE(arg) static
65 
67 #define OPENMPVARYENDTIMESCHEDULE(arg) guided
68 
70 //#define OPENMP3DLOOPBLOCK for(blockijk=0;blockijk<blocksize;blockijk++)
71 #define OPENMP3DLOOPBLOCK for(blockijk=1;blockijk<=blocksize;blockijk++)
72 
73 
74 
75 #define OPENMP3DLOOPVARSDEFINE int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk
76 
77 
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;}
87 
89 #define OPENMP3DLOOPSETUPSUPERGEN(istart,istop,jstart,jstop,kstart,kstop,di,dj,dk) \
90  {nxsize=( (istop - istart)*di +1 ); \
91  nxshift=istart; \
92  nysize=( (jstop - jstart)*dj +1 ); \
93  nyshift=jstart; \
94  nzsize=( (kstop - kstart)*dk +1 ); \
95  nzshift=kstart; \
96  blocksize=nxsize*nysize*nzsize;}
97 
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;}
107 
108 
110 #define OPENMP3DLOOPSETUPFULL OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND,-N2BND,N2-1+N2BND,-N3BND,N3-1+N3BND)
111 
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)
113 
114 #define OPENMP3DLOOPSETUPFULLINOUT2DIR1 OPENMP3DLOOPSETUP(-N1BND+2*SHIFT1,N1-1+N1BND-2*SHIFT1,-N2BND,N2-1+N2BND,-N3BND,N3-1+N3BND)
115 
116 #define OPENMP3DLOOPSETUPFULLINOUT2DIR2 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND,-N2BND+2*SHIFT2,N2-1+N2BND-2*SHIFT2,-N3BND,N3-1+N3BND)
117 
118 #define OPENMP3DLOOPSETUPFULLINOUT2DIR3 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND,-N2BND,N2-1+N2BND,-N3BND+2*SHIFT3,N3-1+N3BND-2*SHIFT3)
119 
120 
122 #define OPENMP3DLOOPSETUPFULLP1 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND+SHIFT1,-N2BND,N2-1+N2BND+SHIFT2,-N3BND,N3-1+N3BND+SHIFT3)
123 
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)
125 
126 #define OPENMP3DLOOPSETUPFULLP1EXCEPTX2 OPENMP3DLOOPSETUP(-N1BND,N1-1+N1BND+SHIFT1,-N2BND,N2-1+N2BND,-N3BND,N3-1+N3BND+SHIFT3)
127 
129 #define OPENMP3DLOOPSETUPZLOOP OPENMP3DLOOPSETUP(0,N1-1,0,N2-1,0,N3-1)
130 
131 
132 
134 #define OPENMPBCLOOPSETUP(istart,istop,jstart,jstop,kstart,kstop) \
135  {nxsize=((istop) - (istart) +1 ); \
136  nxshift=istart; \
137  nysize=((jstop) - (jstart) +1 ); \
138  nyshift=jstart; \
139  nzsize=((kstop) - (kstart) +1 ); \
140  nzshift=kstart; \
141  blocksize=nxsize*nysize*nzsize;}
142 
143 
144 #define OPENMPBCLOOPVARSDEFINELOOPX1DIR int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk, fooi
145 
146 #define OPENMPBCLOOPVARSDEFINELOOPX2DIR int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk, fooj
147 
148 #define OPENMPBCLOOPVARSDEFINELOOPX3DIR int nxsize, nxshift, nysize, nyshift, nzsize, nzshift, blocksize, blockijk, fook
149 
152 #define OPENMPBCLOOPSETUPLOOPX1DIR OPENMPBCLOOPSETUP(0,0,innormalloop[2],outnormalloop[2],innormalloop[3],outnormalloop[3])
153 
156 #define OPENMPBCLOOPSETUPLOOPX2DIR OPENMPBCLOOPSETUP(inboundloop[1],outboundloop[1],0,0,innormalloop[3],outnormalloop[3])
157 
160 #define OPENMPBCLOOPSETUPLOOPX3DIR OPENMPBCLOOPSETUP(inboundloop[1],outboundloop[1],inboundloop[2],outboundloop[2],0,0)
161 
162 #define OPENMPBCLOOPBLOCK2IJKLOOPX1DIR(j,k) OPENMP3DLOOPBLOCK2IJK(fooi,j,k);
163 
164 #define OPENMPBCLOOPBLOCK2IJKLOOPX2DIR(i,k) OPENMP3DLOOPBLOCK2IJK(i,fooj,k);
165 
166 #define OPENMPBCLOOPBLOCK2IJKLOOPX3DIR(i,j) OPENMP3DLOOPBLOCK2IJK(i,j,fook);
167 
169 #define OPENMPBCLOOPBLOCK OPENMP3DLOOPBLOCK
170 
171 
172 
173 
174 
175 
176 
177