HiRep 0.1
Loading...
Searching...
No Matches
gpu_geometry.h
1/***************************************************************************\
2* Copyright (c) 2022, Claudio Pica, Sofie Martins *
3* All rights reserved. *
4\***************************************************************************/
5
12#ifndef GPU_GEOMETRY_H
13#define GPU_GEOMETRY_H
14
15#include "new_geometry.h"
16#include "Utils/generics.h"
17
18#define _BUFFER_BOX_FOR(_L, _body) \
19 box_t *_L = geometryBoxes->next; \
20 int i = 0; \
21 geometry_descriptor *type = f->type; \
22 int nbuffers = _NUMBER_OF_BUFFERS(type, _GEOM_TYPE); \
23 if (type == &glattice) { nbuffers /= 2; } \
24 while (_L && i < nbuffers) { \
25 _body; \
26 _L = _L->next; \
27 i++; \
28 }
29
30#define _GPU_FIELD_BLK(s, i) (((s)->gpu_ptr) + ((s)->type->master_start[(i)] - (s)->type->master_shift))
31#define _GPU_4FIELD_BLK(s, i) (((s)->gpu_ptr) + 4 * ((s)->type->master_start[(i)]))
32#define _GPU_DFIELD_BLK(s, i, size) (((s)->gpu_ptr) + size * ((s)->type->master_start[(i)] - (s)->type->master_shift))
33
34#define _BUF_GPU_FIELD_BLK(s, i) (((s)->gpu_ptr) + ((s)->type->rbuf_start[(i)] - (s)->type->master_shift))
35#define _BUF_GPU_4FIELD_BLK(s, i) (((s)->gpu_ptr) + 4 * ((s)->type->rbuf_start[(i)] - (s)->type->master_shift))
36#define _BUF_GPU_DFIELD_BLK(s, i, size) (((s)->gpu_ptr) + size * ((s)->type->rbuf_start[(i)] - (s)->type->master_shift))
37
38#define find_neighbor(_ix, _dir, _mu, _iup_gpu, _idn_gpu) \
39 ((_dir == UP) ? (_iup_gpu)[4 * (_ix) + _mu] : (_idn_gpu)[4 * (_ix) + _mu])
40#define _DIR(MASK) ((MASK & UP_MASK) ? UP : DOWN)
41#define _MU(MASK) ((MASK & T_MASK) ? 0 : (MASK & X_MASK) ? 1 : (MASK & Y_MASK) ? 2 : 3)
42
43// Kernel structure
44#define _KERNEL_PIECE_FOR(_piece) for (int _piece = EVEN; _piece <= ODD; _piece++)
45
46#define _IF_IN_BOX_IN(_input, _piece) \
47 if (_input->gd_in & piece) \
48 if (blockIdx.x * BLOCK_SIZE + threadIdx.x < _input->vol_in[piece - 1])
49
50#define _IF_IN_BOX_OUT(_input, _piece) \
51 if (_input->gd_in & piece) \
52 if (blockIdx.x * BLOCK_SIZE + threadIdx.x < _input->vol_out[piece - 1])
53
54typedef struct _kernel_field_input {
55 void *field_in;
56 size_t start_in_even;
57 size_t start_in;
58 size_t base_in[2];
59 int stride_in;
60 size_t vol_in[2];
61 size_t master_shift_in;
62 void *field_out;
63 size_t stride_out;
64 size_t base_out[2];
65 size_t start_out;
66 size_t vol_out[2];
67 size_t master_shift_out;
68 void *gauge;
69 int *iup_gpu;
70 int *idn_gpu;
71 char *imask_gpu;
72 gd_type gd_in;
73 char mask;
75
76#endif
77#undef local_index
Functions needed for the new geometry implementation that will replace the current geometry in the fu...
Definition gpu_geometry.h:54