|
196 | 196 | $:omp_end_directive |
197 | 197 | #:enddef |
198 | 198 |
|
| 199 | +#:def NEW_OMP_PARALLEL_LOOP(collapse=None, private=None, parallelism='[gang, vector]', & |
| 200 | + & default='present', firstprivate=None, reduction=None, reductionOp=None, & |
| 201 | + & copy=None, copyin=None, copyinReadOnly=None, copyout=None, create=None, & |
| 202 | + & no_create=None, present=None, deviceptr=None, attach=None, extraOmpArgs=None) |
| 203 | + |
| 204 | + #:set collapse_val = GEN_COLLAPSE_STR(collapse) |
| 205 | + #:set parallelism_val = OMP_PARALLELISM_STR(parallelism) |
| 206 | + #:set default_val = OMP_DEFAULT_STR(default) |
| 207 | + #:set private_val = GEN_PRIVATE_STR(private, False).strip('\n') + GEN_PRIVATE_STR(firstprivate, True).strip('\n') |
| 208 | + #:set reduction_val = GEN_REDUCTION_STR(reduction, reductionOp) |
| 209 | + #:set copy_val = OMP_COPY_STR(copy) |
| 210 | + #:set copyin_val = OMP_COPYIN_STR(copyin).strip('\n') + OMP_COPYIN_STR(copyinReadOnly).strip('\n') |
| 211 | + #:set copyout_val = OMP_COPYOUT_STR(copyout) |
| 212 | + #:set create_val = OMP_CREATE_STR(create) |
| 213 | + #:set no_create_val = OMP_NOCREATE_STR(no_create) |
| 214 | + #:set present_val = OMP_PRESENT_STR(present) |
| 215 | + #:set deviceptr_val = OMP_DEVICEPTR_STR(deviceptr) |
| 216 | + #:set attach_val = OMP_MAP_STR('always,tofrom', attach) |
| 217 | + #:set extraOmpArgs_val = GEN_EXTRA_ARGS_STR(extraOmpArgs) |
| 218 | + #:set clause_val = collapse_val.strip('\n') + parallelism_val.strip('\n') + & |
| 219 | + & default_val.strip('\n') + private_val.strip('\n') + reduction_val.strip('\n') + & |
| 220 | + & copy_val.strip('\n') + copyin_val.strip('\n') + & |
| 221 | + & copyout_val.strip('\n') + create_val.strip('\n') + & |
| 222 | + & no_create_val.strip('\n') + present_val.strip('\n') + & |
| 223 | + & deviceptr_val.strip('\n') + attach_val.strip('\n') |
| 224 | + #! Hardcoding the parallelism for now |
| 225 | + |
| 226 | + #:if MFC_COMPILER == NVIDIA_COMPILER_ID or MFC_COMPILER == PGI_COMPILER_ID |
| 227 | + #:set omp_start_directive = '!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) ' |
| 228 | + #:elif MFC_COMPILER == CCE_COMPILER_ID |
| 229 | + #:set omp_start_directive = '!$omp target teams distribute parallel do simd defaultmap(firstprivate:scalar) ' |
| 230 | + #:elif MFC_COMPILER == AMD_COMPILER_ID |
| 231 | + #:set omp_start_directive = '!$omp target teams distribute parallel do ' |
| 232 | + #:else |
| 233 | + #:set omp_start_directive = '!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) ' |
| 234 | + #:endif |
| 235 | + |
| 236 | + #:set omp_directive = omp_start_directive + clause_val + extraOmpArgs_val.strip('\n') |
| 237 | + $:omp_directive |
| 238 | +#:enddef |
| 239 | + |
| 240 | +#:def END_OMP_PARALLEL_LOOP() |
| 241 | + |
| 242 | + #:if MFC_COMPILER == NVIDIA_COMPILER_ID or MFC_COMPILER == PGI_COMPILER_ID |
| 243 | + #:set omp_end_directive = '!$omp end target teams loop' |
| 244 | + #:elif MFC_COMPILER == CCE_COMPILER_ID |
| 245 | + #:set omp_end_directive = '!$omp end target teams distribute parallel do simd' |
| 246 | + #:elif MFC_COMPILER == AMD_COMPILER_ID |
| 247 | + #:set omp_end_directive = '!$omp end target teams distribute parallel do' |
| 248 | + #:else |
| 249 | + #:set omp_end_directive = '!$omp end target teams loop' |
| 250 | + #:endif |
| 251 | + |
| 252 | + $:omp_end_directive |
| 253 | +#:enddef |
| 254 | + |
199 | 255 | #:def OMP_ROUTINE(function_name, nohost, extraOmpArgs) |
200 | 256 | #:assert isinstance(nohost, bool) |
201 | 257 | #:if nohost == True |
|
0 commit comments