37 #define GHOST_SPMV_DOT (GHOST_SPMV_DOT_YY | GHOST_SPMV_DOT_XY | GHOST_SPMV_DOT_XX)
42 #define GHOST_SPMV_AUG_FLAGS \
43 (GHOST_SPMV_SHIFT | GHOST_SPMV_VSHIFT | GHOST_SPMV_SCALE | GHOST_SPMV_AXPY | GHOST_SPMV_AXPBY \
44 | GHOST_SPMV_DOT | GHOST_SPMV_CHAIN_AXPBY)
69 #define GHOST_SPMV_PARSE_TRAITS(traits, _alpha, _beta, _gamma, _dot, _z, _delta, _eta, dt_in, dt_out) \
72 if (traits.flags & GHOST_SPMV_SCALE) { \
73 arg = (dt_in *)traits.alpha; \
75 GHOST_ERROR_LOG("Scale argument is NULL!"); \
76 return GHOST_ERR_INVALID_ARG; \
78 _alpha = *(dt_out *)arg; \
80 if (traits.flags & GHOST_SPMV_AXPBY) { \
81 arg = (dt_in *)traits.beta; \
83 GHOST_ERROR_LOG("AXPBY argument is NULL!"); \
84 return GHOST_ERR_INVALID_ARG; \
86 _beta = *(dt_out *)arg; \
88 if (traits.flags & (GHOST_SPMV_SHIFT | GHOST_SPMV_VSHIFT)) { \
89 arg = (dt_in *)traits.gamma; \
91 GHOST_ERROR_LOG("Shift argument is NULL!"); \
92 return GHOST_ERR_INVALID_ARG; \
94 _gamma = (dt_out *)arg; \
96 if (traits.flags & GHOST_SPMV_DOT) { \
97 arg = (dt_in *)traits.dot; \
99 GHOST_ERROR_LOG("Dot argument is NULL!"); \
100 return GHOST_ERR_INVALID_ARG; \
104 if (traits.flags & GHOST_SPMV_CHAIN_AXPBY) { \
105 ghost_densemat *zarg; \
106 zarg = (ghost_densemat *)traits.z; \
108 GHOST_ERROR_LOG("z argument is NULL!"); \
109 return GHOST_ERR_INVALID_ARG; \
112 arg = (dt_in *)traits.delta; \
114 GHOST_ERROR_LOG("delta argument is NULL!"); \
115 return GHOST_ERR_INVALID_ARG; \
117 _delta = *(dt_out *)arg; \
118 arg = (dt_in *)traits.eta; \
120 GHOST_ERROR_LOG("eta argument is NULL!"); \
121 return GHOST_ERR_INVALID_ARG; \
123 _eta = *(dt_out *)arg; \
125 if (traits.flags & GHOST_SPMV_REMOTE) { \
126 traits.flags = (ghost_spmv_flags)(traits.flags & ~GHOST_SPMV_AXPBY); \
127 traits.flags = (ghost_spmv_flags)(traits.flags & ~GHOST_SPMV_SHIFT); \
128 traits.flags = (ghost_spmv_flags)(traits.flags & ~GHOST_SPMV_VSHIFT); \
129 traits.flags = (ghost_spmv_flags)(traits.flags | GHOST_SPMV_AXPY); \
130 } else if (traits.flags & GHOST_SPMV_LOCAL) { \
131 traits.flags = (ghost_spmv_flags)(traits.flags & ~GHOST_SPMV_DOT); \
132 traits.flags = (ghost_spmv_flags)(traits.flags & ~GHOST_SPMV_CHAIN_AXPBY); \
139 #define GHOST_SPMV_MODES_FULL \
140 (GHOST_SPMV_MODE_NOMPI | GHOST_SPMV_MODE_VECTOR | GHOST_SPMV_MODE_PIPELINED)
144 #define GHOST_SPMV_MODES_SPLIT (GHOST_SPMV_MODE_OVERLAP | GHOST_SPMV_MODE_TASK)
148 #define GHOST_SPMV_MODES_ALL (GHOST_SPMV_MODES_FULL | GHOST_SPMV_MODES_SPLIT)
150 #define GHOST_SPMV_MODES_MPI \
151 (GHOST_SPMV_MODE_VECTOR | GHOST_SPMV_MODES_SPLIT | GHOST_SPMV_MODE_PIPELINED)
164 return static_cast<ghost_spmv_flags>(
static_cast<int>(a) | static_cast<int>(b));
169 return static_cast<ghost_spmv_flags>(
static_cast<int>(a) & static_cast<int>(b));
bool ghost_spmvflags_isset(const ghost_spmv_flags a, const ghost_spmv_flags b)
Definition: spmv.h:174
ghost_spmv_flags ghost_spmvflags_disable(ghost_spmv_flags a, ghost_spmv_flags b)
Definition: spmv.h:184
ghost_spmv_flags ghost_spmvflags_enable(ghost_spmv_flags a, ghost_spmv_flags b)
Definition: spmv.h:179
ghost_spmv_flags
Flags to be passed to sparse matrix-vector multiplication.
Definition: spmv.h:15
Types and functions related to sparse matrices.