HiRep 0.1
Loading...
Searching...
No Matches
geometry_omp.h
Go to the documentation of this file.
1
7#ifndef GEOMETRY_OMP_H
8#define GEOMETRY_OMP_H
9
10#include "hr_omp.h"
11
19#define _PIECE_FOR(type, ip) for (int ip = 0; ip < (type)->local_master_pieces; ip++)
20
33#define _SITE_FOR_RED(type, ip, is, redop1, redop2) \
34 _OMP_PRAGMA(_omp_parallel) \
35 _OMP_PRAGMA(_omp_for redop1 redop2) \
36 for (size_t is = (type)->master_start[ip]; is <= (type)->master_end[ip]; is++)
37
46#define _SITE_FOR(type, ip, is) _SITE_FOR_RED(type, ip, is, nowait, )
47
56#define _SITE_FOR_SUM(type, ip, is, ...) _SITE_FOR_RED(type, ip, is, _omp_sum(__VA_ARGS__), )
57
66#define _SITE_FOR_MAX(type, ip, is, ...) _SITE_FOR_RED(type, ip, is, _omp_max(__VA_ARGS__), )
67
76#define _SITE_FOR_MIN(type, ip, is, ...) _SITE_FOR_RED(type, ip, is, _omp_min(__VA_ARGS__), )
77
88#define _MASTER_FOR_RED(type, is, redop1, redop2) \
89 _PIECE_FOR((type), _master_for_ip_##is) \
90 _SITE_FOR_RED((type), _master_for_ip_##is, is, redop1, redop2)
91
99#define _MASTER_FOR(type, is) _MASTER_FOR_RED(type, is, , )
100
108#define _MASTER_FOR_SUM(type, is, ...) _MASTER_FOR_RED(type, is, _omp_sum(__VA_ARGS__), )
109
117#define _MASTER_FOR_MAX(type, is, ...) _MASTER_FOR_RED(type, is, _omp_max(__VA_ARGS__), )
118
126#define _MASTER_FOR_MIN(type, is, ...) _MASTER_FOR_RED(type, is, _omp_min(__VA_ARGS__), )
127
138#define _FUSE_FOR_RED(type, ip, is, redop1, redop2) \
139 _OMP_PRAGMA(_omp_parallel) \
140 _OMP_PRAGMA(_omp_for redop1 redop2) \
141 for (int ip = 0; ip < type->fuse_gauge_size; ip++)
142
152#define _FUSE_MASTER_FOR_RED(type, is, redop1, redop2) _FUSE_FOR_RED((type), _fuse_master_for_ip_##is, is, redop1, redop2)
153
163#define _ONE_SPINOR_FOR_RED(s, redop1, redop2) _MASTER_FOR_RED((s)->type, _spinor_for_is, redop1, redop2)
164
174#define _ONE_SITE_FOR_RED(s, redop1, redop2) _MASTER_FOR_RED((s)->type, _site_for_is, redop1, redop2)
175
184#define _ONE_SPINOR_FOR_SUM(s, ...) _ONE_SPINOR_FOR_RED(s, _omp_sum(__VA_ARGS__), )
185
194#define _ONE_SITE_FOR_SUM(s, ...) _ONE_SITE_FOR_RED(s, _omp_sum(__VA_ARGS__), )
195
204#define _ONE_SITE_FOR_MAX(s, ...) _ONE_SITE_FOR_RED(s, _omp_max(__VA_ARGS__), )
205
216#define _TWO_SPINORS_FOR_RED(s1, s2, redop1, redop2) \
217 _TWO_SPINORS_MATCHING(s1, s2); \
218 _ONE_SPINOR_FOR_RED(s1, redop1, redop2)
219
230#define _TWO_SITE_FOR_RED(s1, s2, redop1, redop2) \
231 _CHECK_GEOMETRY_MATCHING(s1, s2); \
232 _ONE_SITE_FOR_RED(s1, redop1, redop2)
233
243#define _TWO_SPINORS_FOR_SUM(s1, s2, ...) _TWO_SPINORS_FOR_RED(s1, s2, _omp_sum(__VA_ARGS__), )
244
254#define _TWO_SITE_FOR_SUM(s1, s2, ...) _TWO_SITE_FOR_RED(s1, s2, _omp_sum(__VA_ARGS__), )
255
266#define _THREE_SPINORS_FOR_RED(s1, s2, s3, redop1, redop2) \
267 _TWO_SPINORS_MATCHING(s1, s2); \
268 _TWO_SPINORS_MATCHING(s1, s3); \
269 _ONE_SPINOR_FOR_RED(s1, redop1, redop2)
270
281#define _THREE_SITE_FOR_RED(s1, s2, s3, redop1, redop2) \
282 _CHECK_GEOMETRY_MATCHING(s1, s2); \
283 _CHECK_GEOMETRY_MATCHING(s1, s3); \
284 _ONE_SITE_FOR_RED(s1, redop1, redop2)
285
292#define _ONE_SPINOR_FOR(s) _ONE_SPINOR_FOR_RED(s, , )
293
300#define _ONE_SITE_FOR(s) _ONE_SITE_FOR_RED(s, , )
301
309#define _TWO_SPINORS_FOR(s1, s2) _TWO_SPINORS_FOR_RED(s1, s2, , )
310
318#define _TWO_SITE_FOR(s1, s2) _TWO_SITE_FOR_RED(s1, s2, , )
319
328#define _THREE_SPINORS_FOR(s1, s2, s3) _THREE_SPINORS_FOR_RED(s1, s2, s3, , )
329
338#define _THREE_SITE_FOR(s1, s2, s3) _THREE_SITE_FOR_RED(s1, s2, s3, , )
339
346#define _SPINOR_PTR(s) _FIELD_AT(s, _spinor_for_is)
347
354#define _SITE_PTR(__s, __mu, __dim) (_DFIELD_AT(__s, _site_for_is, __mu, __dim))
355
356#endif
OpenMP reduction operations for HiRep.