22 for (
int site = 0; site <
V; site++) {
33 temp[G_idx] += h_result[idx + 4 * 0 + 0];
34 temp[G_idx] += h_result[idx + 4 * 1 + 1];
35 temp[G_idx] += h_result[idx + 4 * 2 + 2];
36 temp[G_idx] += h_result[idx + 4 * 3 + 3];
41 temp[G_idx] += I * h_result[idx + 4 * 0 + 3];
42 temp[G_idx] += I * h_result[idx + 4 * 1 + 2];
43 temp[G_idx] -= I * h_result[idx + 4 * 2 + 1];
44 temp[G_idx] -= I * h_result[idx + 4 * 3 + 0];
49 temp[G_idx] -= h_result[idx + 4 * 0 + 3];
50 temp[G_idx] += h_result[idx + 4 * 1 + 2];
51 temp[G_idx] += h_result[idx + 4 * 2 + 1];
52 temp[G_idx] -= h_result[idx + 4 * 3 + 0];
57 temp[G_idx] += I * h_result[idx + 4 * 0 + 2];
58 temp[G_idx] -= I * h_result[idx + 4 * 1 + 3];
59 temp[G_idx] -= I * h_result[idx + 4 * 2 + 0];
60 temp[G_idx] += I * h_result[idx + 4 * 3 + 1];
65 temp[G_idx] += h_result[idx + 4 * 0 + 2];
66 temp[G_idx] += h_result[idx + 4 * 1 + 3];
67 temp[G_idx] += h_result[idx + 4 * 2 + 0];
68 temp[G_idx] += h_result[idx + 4 * 3 + 1];
73 temp[G_idx] += h_result[idx + 4 * 0 + 0];
74 temp[G_idx] += h_result[idx + 4 * 1 + 1];
75 temp[G_idx] -= h_result[idx + 4 * 2 + 2];
76 temp[G_idx] -= h_result[idx + 4 * 3 + 3];
81 temp[G_idx] += I * h_result[idx + 4 * 0 + 3];
82 temp[G_idx] += I * h_result[idx + 4 * 1 + 2];
83 temp[G_idx] += I * h_result[idx + 4 * 2 + 1];
84 temp[G_idx] += I * h_result[idx + 4 * 3 + 0];
89 temp[G_idx] -= h_result[idx + 4 * 0 + 3];
90 temp[G_idx] += h_result[idx + 4 * 1 + 2];
91 temp[G_idx] -= h_result[idx + 4 * 2 + 1];
92 temp[G_idx] += h_result[idx + 4 * 3 + 0];
97 temp[G_idx] += I * h_result[idx + 4 * 0 + 2];
98 temp[G_idx] -= I * h_result[idx + 4 * 1 + 3];
99 temp[G_idx] += I * h_result[idx + 4 * 2 + 0];
100 temp[G_idx] -= I * h_result[idx + 4 * 3 + 1];
105 temp[G_idx] += h_result[idx + 4 * 0 + 2];
106 temp[G_idx] += h_result[idx + 4 * 1 + 3];
107 temp[G_idx] -= h_result[idx + 4 * 2 + 0];
108 temp[G_idx] -= h_result[idx + 4 * 3 + 1];
113 temp[G_idx] += h_result[idx + 4 * 0 + 0];
114 temp[G_idx] -= h_result[idx + 4 * 1 + 1];
115 temp[G_idx] += h_result[idx + 4 * 2 + 2];
116 temp[G_idx] -= h_result[idx + 4 * 3 + 3];
121 temp[G_idx] -= I * h_result[idx + 4 * 0 + 2];
122 temp[G_idx] -= I * h_result[idx + 4 * 1 + 3];
123 temp[G_idx] += I * h_result[idx + 4 * 2 + 0];
124 temp[G_idx] += I * h_result[idx + 4 * 3 + 1];
129 temp[G_idx] -= h_result[idx + 4 * 0 + 1];
130 temp[G_idx] -= h_result[idx + 4 * 1 + 0];
131 temp[G_idx] += h_result[idx + 4 * 2 + 3];
132 temp[G_idx] += h_result[idx + 4 * 3 + 2];
137 temp[G_idx] += h_result[idx + 4 * 0 + 1];
138 temp[G_idx] += h_result[idx + 4 * 1 + 0];
139 temp[G_idx] += h_result[idx + 4 * 2 + 3];
140 temp[G_idx] += h_result[idx + 4 * 3 + 2];
145 temp[G_idx] -= I * h_result[idx + 4 * 0 + 1];
146 temp[G_idx] += I * h_result[idx + 4 * 1 + 0];
147 temp[G_idx] += I * h_result[idx + 4 * 2 + 3];
148 temp[G_idx] -= I * h_result[idx + 4 * 3 + 2];
153 temp[G_idx] -= h_result[idx + 4 * 0 + 0];
154 temp[G_idx] -= h_result[idx + 4 * 1 + 1];
155 temp[G_idx] += h_result[idx + 4 * 2 + 2];
156 temp[G_idx] += h_result[idx + 4 * 3 + 3];
160 for (
int i = 0; i < 16; i++) h_result[idx + i] = temp[i];
167 Float re = 0.0, im = 0.0;
170 for (
int i = 0; i <
V; i++) {
171 for (
int s1 = 0; s1 < 4; s1++) {
172 for (
int s2 = 0; s2 < 4; s2++) {
175 for (
int c = 0; c < 3; c++) {
176 re += (((
Float *)spinorX)[24 * i + 6 * s1 + 2 * c + 0] * ((
Float *)spinorY)[24 * i + 6 * s2 + 2 * c + 0]
177 + ((
Float *)spinorX)[24 * i + 6 * s1 + 2 * c + 1] * ((
Float *)spinorY)[24 * i + 6 * s2 + 2 * c + 1]);
179 im += (((
Float *)spinorX)[24 * i + 6 * s1 + 2 * c + 0] * ((
Float *)spinorY)[24 * i + 6 * s2 + 2 * c + 1]
180 - ((
Float *)spinorX)[24 * i + 6 * s1 + 2 * c + 1] * ((
Float *)spinorY)[24 * i + 6 * s2 + 2 * c + 0]);
183 ((
Float *)h_result)[2 * (i * 16 + 4 * s1 + s2) + 0] = re;
184 ((
Float *)h_result)[2 * (i * 16 + 4 * s1 + s2) + 1] = im;
190 template <
typename Float>
196 void *h_result = malloc(
V * 2 * 16 *
sizeof(
Float));
205 for (
int j = 0; j < 16; j++) {
207 for (
int i = 0; i <
V; i++) {
208 if (
abs(((
Float *)h_result)[32 * i + 2 * j] - ((
Float *)d_result)[32 * i + 2 * j]) >
tol) {
216 if (
abs(((
Float *)h_result)[32 * i + 2 * j + 1] - ((
Float *)d_result)[32 * i + 2 * j + 1]) >
tol) {
void contractColor(Float *spinorX, Float *spinorY, Float *h_result)
void contractDegrandRossi(Float *h_result_)
int contraction_reference(Float *spinorX, Float *spinorY, Float *d_result, QudaContractType cType, int X[])
enum QudaContractType_s QudaContractType
__host__ __device__ ValueType abs(ValueType x)
FloatingPoint< float > Float