Eigenvalue SoLvers for Petaflop-Applications (ELPA)  2017.05.003
elpa_constants.h
Go to the documentation of this file.
1 #pragma once
2 
3 /* This might seem over-engineered, but helps to re-use this file also on the
4  * Fortran side and thus to keep the definitions in this one place here
5  */
6 
7 /* Private helper macros */
8 #define ELPA_ENUM_ENTRY(name, value, ...) \
9  name = value,
10 #define ELPA_ENUM_SUM(name, value, ...) +1
11 
12 
13 /* Solver constants */
14 #define ELPA_FOR_ALL_SOLVERS(X) \
15  X(ELPA_SOLVER_1STAGE, 1) \
16  X(ELPA_SOLVER_2STAGE, 2)
17 
20 };
21 
22 #define ELPA_NUMBER_OF_SOLVERS (0 ELPA_FOR_ALL_SOLVERS(ELPA_ENUM_SUM))
23 
24 /* Kernel constants */
25 #define ELPA_FOR_ALL_2STAGE_REAL_KERNELS(X, ...) \
26  X(ELPA_2STAGE_REAL_GENERIC, 1, 1, __VA_ARGS__) \
27  X(ELPA_2STAGE_REAL_GENERIC_SIMPLE, 2, 1, __VA_ARGS__) \
28  X(ELPA_2STAGE_REAL_BGP, 3, 0, __VA_ARGS__) \
29  X(ELPA_2STAGE_REAL_BGQ, 4, 0, __VA_ARGS__) \
30  X(ELPA_2STAGE_REAL_SSE_ASSEMBLY, 5, 0, __VA_ARGS__) \
31  X(ELPA_2STAGE_REAL_SSE_BLOCK2, 6, 0, __VA_ARGS__) \
32  X(ELPA_2STAGE_REAL_SSE_BLOCK4, 7, 0, __VA_ARGS__) \
33  X(ELPA_2STAGE_REAL_SSE_BLOCK6, 8, 0, __VA_ARGS__) \
34  X(ELPA_2STAGE_REAL_AVX_BLOCK2, 9, 0, __VA_ARGS__) \
35  X(ELPA_2STAGE_REAL_AVX_BLOCK4, 10, 0, __VA_ARGS__) \
36  X(ELPA_2STAGE_REAL_AVX_BLOCK6, 11, 0, __VA_ARGS__) \
37  X(ELPA_2STAGE_REAL_AVX2_BLOCK2, 12, 0, __VA_ARGS__) \
38  X(ELPA_2STAGE_REAL_AVX2_BLOCK4, 13, 0, __VA_ARGS__) \
39  X(ELPA_2STAGE_REAL_AVX2_BLOCK6, 14, 0, __VA_ARGS__) \
40  X(ELPA_2STAGE_REAL_AVX512_BLOCK2, 15, 0, __VA_ARGS__) \
41  X(ELPA_2STAGE_REAL_AVX512_BLOCK4, 16, 0, __VA_ARGS__) \
42  X(ELPA_2STAGE_REAL_AVX512_BLOCK6, 17, 0, __VA_ARGS__) \
43  X(ELPA_2STAGE_REAL_GPU, 18, 0, __VA_ARGS__)
44 
45 #define ELPA_FOR_ALL_2STAGE_REAL_KERNELS_AND_DEFAULT(X) \
46  ELPA_FOR_ALL_2STAGE_REAL_KERNELS(X) \
47  X(ELPA_2STAGE_REAL_INVALID, -1, choke me) \
48  X(ELPA_2STAGE_REAL_DEFAULT, 1, choke me)
49 
52 };
53 
54 
55 #define ELPA_FOR_ALL_2STAGE_COMPLEX_KERNELS(X, ...) \
56  X(ELPA_2STAGE_COMPLEX_GENERIC, 1, 1, __VA_ARGS__) \
57  X(ELPA_2STAGE_COMPLEX_GENERIC_SIMPLE, 2, 1, __VA_ARGS__) \
58  X(ELPA_2STAGE_COMPLEX_BGP, 3, 0, __VA_ARGS__) \
59  X(ELPA_2STAGE_COMPLEX_BGQ, 4, 0, __VA_ARGS__) \
60  X(ELPA_2STAGE_COMPLEX_SSE_ASSEMBLY, 5, 0, __VA_ARGS__) \
61  X(ELPA_2STAGE_COMPLEX_SSE_BLOCK1, 6, 0, __VA_ARGS__) \
62  X(ELPA_2STAGE_COMPLEX_SSE_BLOCK2, 7, 0, __VA_ARGS__) \
63  X(ELPA_2STAGE_COMPLEX_AVX_BLOCK1, 8, 0, __VA_ARGS__) \
64  X(ELPA_2STAGE_COMPLEX_AVX_BLOCK2, 9, 0, __VA_ARGS__) \
65  X(ELPA_2STAGE_COMPLEX_AVX2_BLOCK1, 10, 0, __VA_ARGS__) \
66  X(ELPA_2STAGE_COMPLEX_AVX2_BLOCK2, 11, 0, __VA_ARGS__) \
67  X(ELPA_2STAGE_COMPLEX_AVX512_BLOCK1, 12, 0, __VA_ARGS__) \
68  X(ELPA_2STAGE_COMPLEX_AVX512_BLOCK2, 13, 0, __VA_ARGS__) \
69  X(ELPA_2STAGE_COMPLEX_GPU, 14, 0, __VA_ARGS__)
70 
71 #define ELPA_FOR_ALL_2STAGE_COMPLEX_KERNELS_AND_DEFAULT(X) \
72  ELPA_FOR_ALL_2STAGE_COMPLEX_KERNELS(X) \
73  X(ELPA_2STAGE_COMPLEX_INVALID, -1, choke me) \
74  X(ELPA_2STAGE_COMPLEX_DEFAULT, 1, choke me)
75 
78 };
79 
80 
81 
82 /* General constants */
83 #define ELPA_FOR_ALL_ERRORS(X) \
84  X(ELPA_OK, 0) \
85  X(ELPA_ERROR, -1) \
86  X(ELPA_ERROR_ENTRY_NOT_FOUND, -2) \
87  X(ELPA_ERROR_ENTRY_INVALID_VALUE, -3) \
88  X(ELPA_ERROR_ENTRY_ALREADY_SET, -4) \
89  X(ELPA_ERROR_ENTRY_NO_STRING_REPRESENTATION, -5) \
90  X(ELPA_ERROR_ENTRY_READONLY, -6)
91 
94 };
95 
96 enum ELPA_CONSTANTS {
99 };
100 
#define ELPA_ENUM_ENTRY(name, value,...)
Definition: elpa_constants.h:8
#define ELPA_ENUM_SUM(name, value,...)
Definition: elpa_constants.h:10
Definition: elpa_constants.h:93
ELPA_REAL_KERNELS
Definition: elpa_constants.h:49
#define ELPA_FOR_ALL_2STAGE_COMPLEX_KERNELS(X,...)
Definition: elpa_constants.h:53
#define ELPA_FOR_ALL_SOLVERS(X)
Definition: elpa_constants.h:14
#define ELPA_FOR_ALL_2STAGE_REAL_KERNELS_AND_DEFAULT(X)
Definition: elpa_constants.h:44
#define ELPA_FOR_ALL_2STAGE_COMPLEX_KERNELS_AND_DEFAULT(X)
Definition: elpa_constants.h:69
ELPA_COMPLEX_KERNELS
Definition: elpa_constants.h:74
#define ELPA_FOR_ALL_ERRORS(X)
Definition: elpa_constants.h:80
#define ELPA_FOR_ALL_2STAGE_REAL_KERNELS(X,...)
Definition: elpa_constants.h:24
Definition: elpa_constants.h:94
ELPA_CONSTANTS
Definition: elpa_constants.h:92
ELPA_SOLVERS
Definition: elpa_constants.h:18
ELPA_ERRORS
Definition: elpa_constants.h:89