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
hr_omp.h
OpenMP reduction operations for HiRep.
Include
Geometry
geometry_omp.h
Generated by
1.12.0