QUDA  v0.5.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 
15  void setBlasParam(int kernel, int prec, int threads, int blocks);
16 
17  extern unsigned long long blas_flops;
18  extern unsigned long long blas_bytes;
19 
20  // C++ linkage
21 
22  // Generic variants
23 
24  double norm2(const ColorSpinorField&);
25 
26  // CUDA variants
27 
29  void copyCuda(cudaColorSpinorField &dst, const cudaColorSpinorField &src);
30 
31  double axpyNormCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
32  double normCuda(const cudaColorSpinorField &b);
35 
36  void axpbyCuda(const double &a, cudaColorSpinorField &x, const double &b, cudaColorSpinorField &y);
37  void axpyCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
38  void axCuda(const double &a, cudaColorSpinorField &x);
40  void xpayCuda(cudaColorSpinorField &x, const double &a, cudaColorSpinorField &y);
42 
43  void axpyZpbxCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z, const double &b);
44  void axpyBzpcxCuda(const double &a, cudaColorSpinorField& x, cudaColorSpinorField& y, const double &b, cudaColorSpinorField& z, const double &c);
45 
46  void caxpbyCuda(const Complex &a, cudaColorSpinorField &x, const Complex &b, cudaColorSpinorField &y);
50 
53 
58 
59  void cabxpyAxCuda(const double &a, const Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y);
61  void caxpyXmazCuda(const Complex &a, cudaColorSpinorField &x,
63  double caxpyXmazNormXCuda(const Complex &a, cudaColorSpinorField &x,
65  double cabxpyAxNormCuda(const double &a, const Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y);
66 
76 
77  void tripleCGUpdateCuda(const double &alpha, const double &beta, cudaColorSpinorField &q,
80 
81  // CPU variants
82 
83  double axpyNormCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
84  double normCpu(const cpuColorSpinorField &b);
85  double reDotProductCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
87  void axpbyCpu(const double &a, const cpuColorSpinorField &x, const double &b, cpuColorSpinorField &y);
88  void axpyCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
89  void axCpu(const double &a, cpuColorSpinorField &x);
91  void xpayCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y);
93  void axpyZpbxCpu(const double &a, cpuColorSpinorField &x, cpuColorSpinorField &y,
94  const cpuColorSpinorField &z, const double &b);
95  void axpyBzpcxCpu(const double &a, cpuColorSpinorField& x, cpuColorSpinorField& y,
96  const double &b, const cpuColorSpinorField& z, const double &c);
97 
98  void caxpbyCpu(const Complex &a, const cpuColorSpinorField &x, const Complex &b, cpuColorSpinorField &y);
99  void caxpyCpu(const Complex &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
100  void cxpaypbzCpu(const cpuColorSpinorField &x, const Complex &b, const cpuColorSpinorField &y,
101  const Complex &c, cpuColorSpinorField &z);
102  void caxpbypzYmbwCpu(const Complex &, const cpuColorSpinorField &, const Complex &, cpuColorSpinorField &,
105  Complex xpaycDotzyCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y,
106  const cpuColorSpinorField &z);
107  double3 cDotProductNormACpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
108  double3 cDotProductNormBCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
110  const Complex &b, cpuColorSpinorField &y,
112  const cpuColorSpinorField &u);
113 
114  void cabxpyAxCpu(const double &a, const Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y);
115 
117 
118  void caxpyXmazCpu(const Complex &a, cpuColorSpinorField &x,
120  double caxpyXmazNormXCpu(const Complex &a, cpuColorSpinorField &x,
122  double cabxpyAxNormCpu(const double &a, const Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y);
123 
126 
133 
134 } // namespace quda
135 
136 #endif // _QUDA_BLAS_H