14 #define REAL(a) (*((double *)&a)) 15 #define IMAG(a) (*((double *)&a + 1)) 33 #define QudaSumFloat doubledouble 34 #define QudaSumFloat2 doubledouble2 35 #define QudaSumFloat3 doubledouble3 36 template <>
struct scalar<doubledouble> {
37 typedef doubledouble type;
39 template <>
struct scalar<doubledouble2> {
40 typedef doubledouble type;
42 template <>
struct scalar<doubledouble3> {
43 typedef doubledouble type;
45 template <>
struct scalar<doubledouble4> {
46 typedef doubledouble type;
48 template <>
struct vector<doubledouble, 2> {
49 typedef doubledouble2 type;
52 #define QudaSumFloat double 53 #define QudaSumFloat2 double2 54 #define QudaSumFloat3 double3 55 #define QudaSumFloat4 double4 58 __host__ __device__
inline double set(
double &x) {
return x; }
59 __host__ __device__
inline double2
set(double2 &x) {
return x; }
60 __host__ __device__
inline double3
set(double3 &x) {
return x; }
61 __host__ __device__
inline double4
set(double4 &x) {
return x; }
62 __host__ __device__
inline void sum(
double &a,
double &b) { a += b; }
63 __host__ __device__
inline void sum(double2 &a, double2 &b)
68 __host__ __device__
inline void sum(double3 &a, double3 &b)
74 __host__ __device__
inline void sum(double4 &a, double4 &b)
83 __host__ __device__
inline double set(doubledouble &a) {
return a.head(); }
84 __host__ __device__
inline double2
set(doubledouble2 &a) {
return make_double2(a.x.head(), a.y.head()); }
85 __host__ __device__
inline double3
set(doubledouble3 &a) {
return make_double3(a.x.head(), a.y.head(), a.z.head()); }
86 __host__ __device__
inline void sum(
double &a, doubledouble &b) { a += b.
head(); }
87 __host__ __device__
inline void sum(double2 &a, doubledouble2 &b)
92 __host__ __device__
inline void sum(double3 &a, doubledouble3 &b)
__device__ __host__ double head() const
__host__ __device__ void sum(double &a, double &b)
void checkLength(const ColorSpinorField &a, const ColorSpinorField &b)
void checkSpinor(const ColorSpinorField &a, const ColorSpinorField &b)