QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
blas_quda.h
Go to the documentation of this file.
1 #ifndef _QUDA_BLAS_H
2 #define _QUDA_BLAS_H
3 
4 #include <quda_internal.h>
5 #include <color_spinor_field.h>
6 
7 // ---------- blas_quda.cu ----------
8 
9 namespace quda {
10  // creates and destroys reduction buffers
11  void initBlas();
12  void endBlas(void);
13 
14  void setBlasParam(int kernel, int prec, int threads, int blocks);
15 
16  extern unsigned long long blas_flops;
17  extern unsigned long long blas_bytes;
18 
19  // C++ linkage
20 
21  // Generic variants
22 
23  double norm2(const ColorSpinorField&);
24 
25  // CUDA variants
26 
28  void copyCuda(cudaColorSpinorField &dst, const cudaColorSpinorField &src);
29 
30  double axpyNormCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
31  double normCuda(const cudaColorSpinorField &b);
33  void reDotProductCuda(double* result, std::vector<cudaColorSpinorField*>& a, std::vector<cudaColorSpinorField*>& b);
34 
36 
38 
39 
40  void axpbyCuda(const double &a, cudaColorSpinorField &x, const double &b, cudaColorSpinorField &y);
41  void axpyCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
42  void axCuda(const double &a, cudaColorSpinorField &x);
44  void xpayCuda(cudaColorSpinorField &x, const double &a, cudaColorSpinorField &y);
46 
47  void axpyZpbxCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z, const double &b);
48  void axpyBzpcxCuda(const double &a, cudaColorSpinorField& x, cudaColorSpinorField& y, const double &b, cudaColorSpinorField& z, const double &c);
49 
50  void caxpbyCuda(const Complex &a, cudaColorSpinorField &x, const Complex &b, cudaColorSpinorField &y);
54 
56  void cDotProductCuda(Complex* result, std::vector<cudaColorSpinorField*>& a, std::vector<cudaColorSpinorField*>& b);
58 
63 
64  void cabxpyAxCuda(const double &a, const Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y);
66  void caxpyXmazCuda(const Complex &a, cudaColorSpinorField &x,
68  double caxpyXmazNormXCuda(const Complex &a, cudaColorSpinorField &x,
70  double cabxpyAxNormCuda(const double &a, const Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y);
71 
81 
82  void tripleCGUpdateCuda(const double &alpha, const double &beta, cudaColorSpinorField &q,
85 
86  // CPU variants
87 
88  double axpyNormCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
89  double normCpu(const cpuColorSpinorField &b);
90  double reDotProductCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
92  void axpbyCpu(const double &a, const cpuColorSpinorField &x, const double &b, cpuColorSpinorField &y);
93  void axpyCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
94  void axCpu(const double &a, cpuColorSpinorField &x);
96  void xpayCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y);
98  void axpyZpbxCpu(const double &a, cpuColorSpinorField &x, cpuColorSpinorField &y,
99  const cpuColorSpinorField &z, const double &b);
100  void axpyBzpcxCpu(const double &a, cpuColorSpinorField& x, cpuColorSpinorField& y,
101  const double &b, const cpuColorSpinorField& z, const double &c);
102 
103  void caxpbyCpu(const Complex &a, const cpuColorSpinorField &x, const Complex &b, cpuColorSpinorField &y);
104  void caxpyCpu(const Complex &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
105  void cxpaypbzCpu(const cpuColorSpinorField &x, const Complex &b, const cpuColorSpinorField &y,
106  const Complex &c, cpuColorSpinorField &z);
107  void caxpbypzYmbwCpu(const Complex &, const cpuColorSpinorField &, const Complex &, cpuColorSpinorField &,
110  Complex xpaycDotzyCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y,
111  const cpuColorSpinorField &z);
112  double3 cDotProductNormACpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
113  double3 cDotProductNormBCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
115  const Complex &b, cpuColorSpinorField &y,
117  const cpuColorSpinorField &u);
118 
119  void cabxpyAxCpu(const double &a, const Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y);
120 
122 
123  void caxpyXmazCpu(const Complex &a, cpuColorSpinorField &x,
125  double caxpyXmazNormXCpu(const Complex &a, cpuColorSpinorField &x,
127  double cabxpyAxNormCpu(const double &a, const Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y);
128 
131 
138 
139 } // namespace quda
140 
141 #endif // _QUDA_BLAS_H
void caxpyCuda(const Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:207
void caxpbypzYmbwCpu(const Complex &, const cpuColorSpinorField &, const Complex &, cpuColorSpinorField &, cpuColorSpinorField &, const cpuColorSpinorField &)
Definition: blas_cpu.cpp:143
double3 tripleCGReductionCuda(cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z)
Definition: reduce_quda.cu:811
void mxpyCpu(const cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:51
int y[4]
Complex xpaycDotzyCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y, const cpuColorSpinorField &z)
Definition: blas_cpu.cpp:231
void cabxpyAxCpu(const double &a, const Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:259
double axpyNormCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: reduce_quda.cu:321
unsigned long long blas_bytes
Definition: blas_quda.cu:38
void xpayCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:41
std::complex< double > Complex
Definition: eig_variables.h:13
void axpbyCuda(const double &a, cudaColorSpinorField &x, const double &b, cudaColorSpinorField &y)
Definition: blas_quda.cu:82
__global__ void const FloatN FloatM FloatM Float Float int threads
Definition: llfat_core.h:1099
void axpyZpbxCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z, const double &b)
Definition: blas_quda.cu:338
double3 xpyHeavyQuarkResidualNormCpu(cpuColorSpinorField &x, cpuColorSpinorField &y, cpuColorSpinorField &r)
void xpyCpu(const cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:22
double cabxpyAxNormCuda(const double &a, const Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: reduce_quda.cu:440
double3 cDotProductNormBCuda(cudaColorSpinorField &a, cudaColorSpinorField &b)
Definition: reduce_quda.cu:620
double2 reDotProductNormACuda(cudaColorSpinorField &a, cudaColorSpinorField &b)
Definition: reduce_quda.cu:297
void axpyZpbxCpu(const double &a, cpuColorSpinorField &x, cpuColorSpinorField &y, const cpuColorSpinorField &z, const double &b)
Definition: blas_cpu.cpp:136
Complex axpyCGNormCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: reduce_quda.cu:682
void cabxpyAxCuda(const double &a, const Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:386
void axpyBzpcxCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y, const double &b, cudaColorSpinorField &z, const double &c)
Definition: blas_quda.cu:311
void caxpyXmazCuda(const Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z)
Definition: blas_quda.cu:452
double3 caxpbypzYmbwcDotProductUYNormYCuda(const Complex &a, cudaColorSpinorField &x, const Complex &b, cudaColorSpinorField &y, cudaColorSpinorField &z, cudaColorSpinorField &w, cudaColorSpinorField &u)
Definition: reduce_quda.cu:643
void caxpbyCpu(const Complex &a, const cpuColorSpinorField &x, const Complex &b, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:92
Complex cDotProductCuda(cudaColorSpinorField &, cudaColorSpinorField &)
Definition: reduce_quda.cu:468
void mxpyCuda(cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:154
double3 caxpbypzYmbwcDotProductUYNormYCpu(const Complex &a, const cpuColorSpinorField &x, const Complex &b, cpuColorSpinorField &y, cpuColorSpinorField &z, const cpuColorSpinorField &w, const cpuColorSpinorField &u)
Definition: blas_cpu.cpp:250
double caxpyXmazNormXCuda(const Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z)
Definition: reduce_quda.cu:413
Complex cDotProductCpu(const cpuColorSpinorField &, const cpuColorSpinorField &)
Definition: blas_cpu.cpp:217
void cxpaypbzCpu(const cpuColorSpinorField &x, const Complex &b, const cpuColorSpinorField &y, const Complex &c, cpuColorSpinorField &z)
Definition: blas_cpu.cpp:115
void caxpbypzCpu(const Complex &, cpuColorSpinorField &, const Complex &, cpuColorSpinorField &, cpuColorSpinorField &)
Definition: blas_cpu.cpp:289
void copyCuda(cudaColorSpinorField &dst, const cudaColorSpinorField &src)
Definition: copy_quda.cu:235
void setBlasParam(int kernel, int prec, int threads, int blocks)
double normCuda(const cudaColorSpinorField &b)
Definition: reduce_quda.cu:145
void caxpyCpu(const Complex &a, const cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:79
void axpyCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:115
Complex caxpyDotzyCuda(const Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z)
Definition: reduce_quda.cu:559
void axpbyCpu(const double &a, const cpuColorSpinorField &x, const double &b, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:12
void axpyBzpcxCpu(const double &a, cpuColorSpinorField &x, cpuColorSpinorField &y, const double &b, const cpuColorSpinorField &z, const double &c)
Definition: blas_cpu.cpp:129
void caxpbypczpwCuda(const Complex &, cudaColorSpinorField &, const Complex &, cudaColorSpinorField &, const Complex &, cudaColorSpinorField &, cudaColorSpinorField &)
Definition: blas_quda.cu:429
Complex xpaycDotzyCuda(cudaColorSpinorField &x, const double &a, cudaColorSpinorField &y, cudaColorSpinorField &z)
Definition: reduce_quda.cu:534
int x[4]
void axCpu(const double &a, cpuColorSpinorField &x)
Definition: blas_cpu.cpp:60
unsigned long long blas_flops
Definition: blas_quda.cu:37
double cabxpyAxNormCpu(const double &a, const Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:283
double3 xpyHeavyQuarkResidualNormCuda(cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &r)
Definition: reduce_quda.cu:782
void caxpyXmazCpu(const Complex &a, cpuColorSpinorField &x, cpuColorSpinorField &y, cpuColorSpinorField &z)
Definition: blas_cpu.cpp:277
void caxpbypczpwCpu(const Complex &, cpuColorSpinorField &, const Complex &, cpuColorSpinorField &, const Complex &, cpuColorSpinorField &, cpuColorSpinorField &)
Definition: blas_cpu.cpp:295
void xpyCuda(cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: blas_quda.cu:98
double reDotProductCuda(cudaColorSpinorField &a, cudaColorSpinorField &b)
Definition: reduce_quda.cu:170
void endBlas(void)
Definition: blas_quda.cu:59
double caxpyNormCpu(const Complex &a, cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:264
void cxpaypbzCuda(cudaColorSpinorField &, const Complex &b, cudaColorSpinorField &y, const Complex &c, cudaColorSpinorField &z)
Definition: blas_quda.cu:290
void caxpbypzCuda(const Complex &, cudaColorSpinorField &, const Complex &, cudaColorSpinorField &, cudaColorSpinorField &)
Definition: blas_quda.cu:407
double normCpu(const cpuColorSpinorField &b)
Definition: blas_cpu.cpp:166
void zeroCuda(cudaColorSpinorField &a)
Definition: blas_quda.cu:40
double axpyNormCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:178
double3 cDotProductNormACuda(cudaColorSpinorField &a, cudaColorSpinorField &b)
Definition: reduce_quda.cu:591
double reDotProductCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b)
Definition: blas_cpu.cpp:191
void tripleCGUpdateCuda(const double &alpha, const double &beta, cudaColorSpinorField &q, cudaColorSpinorField &r, cudaColorSpinorField &x, cudaColorSpinorField &p)
Definition: blas_quda.cu:480
double3 cDotProductNormACpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b)
Definition: blas_cpu.cpp:237
double caxpyXmazNormXCpu(const Complex &a, cpuColorSpinorField &x, cpuColorSpinorField &y, cpuColorSpinorField &z)
Definition: blas_cpu.cpp:270
void caxpbyCuda(const Complex &a, cudaColorSpinorField &x, const Complex &b, cudaColorSpinorField &y)
Definition: blas_quda.cu:247
double3 HeavyQuarkResidualNormCpu(cpuColorSpinorField &x, cpuColorSpinorField &r)
Definition: blas_cpu.cpp:331
double caxpyNormCuda(const Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y)
Definition: reduce_quda.cu:388
double xmyNormCpu(const cpuColorSpinorField &a, cpuColorSpinorField &b)
Definition: blas_cpu.cpp:205
void xpayCuda(cudaColorSpinorField &x, const double &a, cudaColorSpinorField &y)
Definition: blas_quda.cu:138
double3 HeavyQuarkResidualNormCuda(cudaColorSpinorField &x, cudaColorSpinorField &r)
Definition: reduce_quda.cu:777
Complex caxpyDotzyCpu(const Complex &a, cpuColorSpinorField &x, cpuColorSpinorField &y, cpuColorSpinorField &z)
Definition: blas_cpu.cpp:303
QudaPrecision prec
Definition: test_util.cpp:1551
double3 cDotProductNormBCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b)
Definition: blas_cpu.cpp:243
void axCuda(const double &a, cudaColorSpinorField &x)
Definition: blas_quda.cu:171
double norm2(const ColorSpinorField &)
void axpyCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y)
Definition: blas_cpu.cpp:31
double xmyNormCuda(cudaColorSpinorField &a, cudaColorSpinorField &b)
Definition: reduce_quda.cu:343
void initBlas()
Definition: blas_quda.cu:53
void caxpbypzYmbwCuda(const Complex &, cudaColorSpinorField &, const Complex &, cudaColorSpinorField &, cudaColorSpinorField &, cudaColorSpinorField &)
Definition: blas_quda.cu:366