|
1 | 1 | #:include 'shared_parallel_macros.fpp' |
2 | 2 |
|
| 3 | +#:set NVIDIA_COMPILER_ID="NVHPC" |
| 4 | +#:set PGI_COMPILER_ID="PGI" |
| 5 | +#:set INTEL_COMPILER_ID="Intel" |
| 6 | +#:set CCE_COMPILER_ID="Cray" |
| 7 | +#:set AMD_COMPILER_ID="LLVMFlang" |
| 8 | + |
3 | 9 | #:def OMP_MAP_STR(map_type, var_list) |
4 | 10 | #:assert map_type is not None |
5 | 11 | #:assert isinstance(map_type, str) |
|
17 | 23 | #:assert isinstance(default, str) |
18 | 24 | #:assert (default == 'present' or default == 'none') |
19 | 25 | #:if default == 'present' |
20 | | - #! #:set default_val = 'defaultmap(present:aggregate) defaultmap(present:allocatable) defaultmap(present:pointer) ' |
21 | | - #:set default_val = 'defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) ' |
| 26 | + #:if MFC_COMPILER == NVIDIA_COMPILER_ID or MFC_COMPILER == PGI_COMPILER_ID |
| 27 | + #:set default_val = 'defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) ' |
| 28 | + #:elif MFC_COMPILER == CCE_COMPILER_ID |
| 29 | + #:set default_val = 'defaultmap(present:aggregate) defaultmap(present:allocatable) defaultmap(present:pointer) ' |
| 30 | + #:elif MFC_COMPILER == AMD_COMPILER_ID |
| 31 | + #:set default_val = '' |
| 32 | + #:else |
| 33 | + #:set default_val = 'defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) ' |
| 34 | + #:endif |
22 | 35 | #:elif default == 'none' |
23 | 36 | #:stop 'Not Supported Yet' |
24 | 37 | #:endif |
|
160 | 173 | & no_create_val.strip('\n') + present_val.strip('\n') + & |
161 | 174 | & deviceptr_val.strip('\n') + attach_val.strip('\n') |
162 | 175 | #! Hardcoding the parallelism for now |
163 | | - !#:set omp_directive = '!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) ' + & |
164 | | - !& clause_val + extraOmpArgs_val.strip('\n') |
165 | | - !#:set omp_end_directive = '!$omp end target teams loop' |
166 | | - #:set omp_directive = '!$omp target teams distribute parallel do simd defaultmap(firstprivate:scalar) ' + & |
167 | | - & clause_val + extraOmpArgs_val.strip('\n') |
168 | | - #:set omp_end_directive = '!$omp end target teams distribute parallel do simd' |
| 176 | + |
| 177 | + #:if MFC_COMPILER == NVIDIA_COMPILER_ID or MFC_COMPILER == PGI_COMPILER_ID |
| 178 | + #:set omp_start_directive = '!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) ' |
| 179 | + #:set omp_end_directive = '!$omp end target teams loop' |
| 180 | + #:elif MFC_COMPILER == CCE_COMPILER_ID |
| 181 | + #:set omp_start_directive = '!$omp target teams distribute parallel do simd defaultmap(firstprivate:scalar) ' |
| 182 | + #:set omp_end_directive = '!$omp end target teams distribute parallel do simd' |
| 183 | + #:elif MFC_COMPILER == AMD_COMPILER_ID |
| 184 | + #:set omp_start_directive = '!$omp target teams distribute parallel do ' |
| 185 | + #:set omp_end_directive = '!$omp end target teams distribute parallel do' |
| 186 | + #:else |
| 187 | + #:set omp_start_directive = '!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) ' |
| 188 | + #:set omp_end_directive = '!$omp end target teams loop' |
| 189 | + #:endif |
| 190 | + |
| 191 | + #:set omp_directive = omp_start_directive + clause_val + extraOmpArgs_val.strip('\n') |
169 | 192 | $:omp_directive |
170 | 193 | $:code |
171 | 194 | $:omp_end_directive |
|
184 | 207 | #:else |
185 | 208 | #:set function_name_val = '' |
186 | 209 | #:endif |
187 | | - #:set clause_val = nohost_val.strip('\n') |
| 210 | + |
| 211 | + #:if MFC_COMPILER == AMD_COMPILER_ID |
| 212 | + #:set clause_val = '' |
| 213 | + #:else |
| 214 | + #:set clause_val = nohost_val.strip('\n') |
| 215 | + #:endif |
| 216 | + |
188 | 217 | #:set omp_directive = '!$omp declare target ' + & |
189 | 218 | & clause_val + extraOmpArgs_val.strip('\n') |
190 | 219 | $:omp_directive |
|
201 | 230 | $:omp_directive |
202 | 231 | #:enddef |
203 | 232 |
|
204 | | -#! Not implemented yet |
| 233 | +#! Not fully implemented yet (ignores most args right now) |
205 | 234 | #:def OMP_LOOP(collapse=None, parallelism=None, data_dependency=None, reduction=None, reductionOp=None, private=None, extraOmpArgs=None) |
206 | | - #! loop is going to be ignored since all loops right now are seq |
207 | | - #:set temp = '' |
208 | | - $:temp |
| 235 | + #:if MFC_COMPILER == NVIDIA_COMPILER_ID or MFC_COMPILER == PGI_COMPILER_ID |
| 236 | + #:set omp_directive = '!$omp loop bind(thread)' |
| 237 | + #:elif MFC_COMPILER == CRAY_COMPILER_ID or MFC_COMPILER == AMD_COMPILER_ID |
| 238 | + #:set omp_directive = '' |
| 239 | + #:else |
| 240 | + #:set omp_directive = '' |
| 241 | + #:endif |
| 242 | + $:omp_directive |
209 | 243 | #:enddef |
210 | 244 |
|
211 | 245 | #:def OMP_DATA(code, copy=None, copyin=None, copyinReadOnly=None, copyout=None, create=None, no_create=None, present=None, deviceptr=None, attach=None, default=None, extraOmpArgs=None) |
|
298 | 332 | #:set omp_directive = '!$omp barrier ' + clause_val + extraOmpArgs_val.strip('\n') |
299 | 333 | $:omp_directive |
300 | 334 | #:enddef |
| 335 | + |
| 336 | +#:def UNDEF_AMD(code) |
| 337 | + #:if MFC_COMPILER != AMD_COMPILER_ID |
| 338 | + $:code |
| 339 | + #:endif |
| 340 | +#:enddef |
| 341 | + |
| 342 | +#:def UNDEF_CCE(code) |
| 343 | + #:if MFC_COMPILER != CCE_COMPILER_ID |
| 344 | + $:code |
| 345 | + #:endif |
| 346 | +#:enddef |
| 347 | + |
| 348 | +#:def UNDEF_NVIDIA(code) |
| 349 | + #:if MFC_COMPILER != NVIDIA_COMPILER_ID and MFC_COMPILER != PGI_COMPILER_ID |
| 350 | + $:code |
| 351 | + #:endif |
| 352 | +#:enddef |
301 | 353 | ! New line at end of file is required for FYPP |
0 commit comments