QUDA v0.4.0
A library for QCD on GPUs
quda/include/blas_quda.h
Go to the documentation of this file.
00001 #ifndef _QUDA_BLAS_H
00002 #define _QUDA_BLAS_H
00003 
00004 #include <quda_internal.h>
00005 #include <color_spinor_field.h>
00006 
00007   // ---------- blas_quda.cu ---------- 
00008 
00009 namespace quda {
00010   // creates and destroys reduction buffers  
00011   void initBlas(); 
00012   void endBlas(void);
00013 
00014   void setBlasTuning(QudaTune tune, QudaVerbosity verbose);
00015   void setBlasParam(int kernel, int prec, int threads, int blocks);
00016 
00017   extern unsigned long long blas_flops;
00018   extern unsigned long long blas_bytes;
00019 }
00020 
00021 
00022 // C++ linkage
00023 
00024 // Generic variants
00025 
00026 double norm2(const ColorSpinorField&);
00027 
00028 // CUDA variants
00029 
00030 void zeroCuda(cudaColorSpinorField &a);
00031 void copyCuda(cudaColorSpinorField &dst, const cudaColorSpinorField &src);
00032 
00033 double axpyNormCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
00034 double normCuda(const cudaColorSpinorField &b);
00035 double reDotProductCuda(cudaColorSpinorField &a, cudaColorSpinorField &b);
00036 double xmyNormCuda(cudaColorSpinorField &a, cudaColorSpinorField &b);
00037 
00038 void axpbyCuda(const double &a, cudaColorSpinorField &x, const double &b, cudaColorSpinorField &y);
00039 void axpyCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
00040 void axCuda(const double &a, cudaColorSpinorField &x);
00041 void xpyCuda(cudaColorSpinorField &x, cudaColorSpinorField &y);
00042 void xpayCuda(cudaColorSpinorField &x, const double &a, cudaColorSpinorField &y);
00043 void mxpyCuda(cudaColorSpinorField &x, cudaColorSpinorField &y);
00044 
00045 void axpyZpbxCuda(const double &a, cudaColorSpinorField &x, cudaColorSpinorField &y, cudaColorSpinorField &z, const double &b);
00046 void axpyBzpcxCuda(const double &a, cudaColorSpinorField& x, cudaColorSpinorField& y, const double &b, cudaColorSpinorField& z, const double &c); 
00047 
00048 void caxpbyCuda(const quda::Complex &a, cudaColorSpinorField &x, const quda::Complex &b, cudaColorSpinorField &y);
00049 void caxpyCuda(const quda::Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
00050 void cxpaypbzCuda(cudaColorSpinorField &, const quda::Complex &b, cudaColorSpinorField &y, const quda::Complex &c, cudaColorSpinorField &z);
00051 void caxpbypzYmbwCuda(const quda::Complex &, cudaColorSpinorField &, const quda::Complex &, cudaColorSpinorField &, cudaColorSpinorField &, cudaColorSpinorField &);
00052 
00053 quda::Complex cDotProductCuda(cudaColorSpinorField &, cudaColorSpinorField &);
00054 quda::Complex xpaycDotzyCuda(cudaColorSpinorField &x, const double &a, cudaColorSpinorField &y, cudaColorSpinorField &z);
00055 
00056 double3 cDotProductNormACuda(cudaColorSpinorField &a, cudaColorSpinorField &b);
00057 double3 cDotProductNormBCuda(cudaColorSpinorField &a, cudaColorSpinorField &b);
00058 double3 caxpbypzYmbwcDotProductUYNormYCuda(const quda::Complex &a, cudaColorSpinorField &x, const quda::Complex &b, cudaColorSpinorField &y, 
00059                                            cudaColorSpinorField &z, cudaColorSpinorField &w, cudaColorSpinorField &u);
00060 
00061 void cabxpyAxCuda(const double &a, const quda::Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y);
00062 double caxpyNormCuda(const quda::Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y);
00063 void caxpyXmazCuda(const quda::Complex &a, cudaColorSpinorField &x,
00064                    cudaColorSpinorField &y, cudaColorSpinorField &z);
00065 double caxpyXmazNormXCuda(const quda::Complex &a, cudaColorSpinorField &x, 
00066                           cudaColorSpinorField &y, cudaColorSpinorField &z);
00067 double cabxpyAxNormCuda(const double &a, const quda::Complex &b, cudaColorSpinorField &x, cudaColorSpinorField &y);
00068 
00069 void caxpbypzCuda(const quda::Complex &, cudaColorSpinorField &, const quda::Complex &, cudaColorSpinorField &, 
00070                   cudaColorSpinorField &);
00071 void caxpbypczpwCuda(const quda::Complex &, cudaColorSpinorField &, const quda::Complex &, cudaColorSpinorField &, 
00072                      const quda::Complex &, cudaColorSpinorField &, cudaColorSpinorField &);
00073 quda::Complex caxpyDotzyCuda(const quda::Complex &a, cudaColorSpinorField &x, cudaColorSpinorField &y,
00074                        cudaColorSpinorField &z);
00075 
00076 // CPU variants
00077 
00078 double axpyNormCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
00079 double normCpu(const cpuColorSpinorField &b);
00080 double reDotProductCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
00081 double xmyNormCpu(const cpuColorSpinorField &a, cpuColorSpinorField &b);
00082 void axpbyCpu(const double &a, const cpuColorSpinorField &x, const double &b, cpuColorSpinorField &y);
00083 void axpyCpu(const double &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
00084 void axCpu(const double &a, cpuColorSpinorField &x);
00085 void xpyCpu(const cpuColorSpinorField &x, cpuColorSpinorField &y);
00086 void xpayCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y);
00087 void mxpyCpu(const cpuColorSpinorField &x, cpuColorSpinorField &y);
00088 void axpyZpbxCpu(const double &a, cpuColorSpinorField &x, cpuColorSpinorField &y, 
00089                  const cpuColorSpinorField &z, const double &b);
00090 void axpyBzpcxCpu(const double &a, cpuColorSpinorField& x, cpuColorSpinorField& y,
00091                   const double &b, const cpuColorSpinorField& z, const double &c); 
00092 
00093 void caxpbyCpu(const quda::Complex &a, const cpuColorSpinorField &x, const quda::Complex &b, cpuColorSpinorField &y);
00094 void caxpyCpu(const quda::Complex &a, const cpuColorSpinorField &x, cpuColorSpinorField &y);
00095 void cxpaypbzCpu(const cpuColorSpinorField &x, const quda::Complex &b, const cpuColorSpinorField &y, 
00096                  const quda::Complex &c, cpuColorSpinorField &z);
00097 void caxpbypzYmbwCpu(const quda::Complex &, const cpuColorSpinorField &, const quda::Complex &, cpuColorSpinorField &, 
00098                      cpuColorSpinorField &, const cpuColorSpinorField &); 
00099 quda::Complex cDotProductCpu(const cpuColorSpinorField &, const cpuColorSpinorField &);
00100 quda::Complex xpaycDotzyCpu(const cpuColorSpinorField &x, const double &a, cpuColorSpinorField &y, 
00101                       const cpuColorSpinorField &z);
00102 double3 cDotProductNormACpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
00103 double3 cDotProductNormBCpu(const cpuColorSpinorField &a, const cpuColorSpinorField &b);
00104 double3 caxpbypzYmbwcDotProductUYNormYCpu(const quda::Complex &a, const cpuColorSpinorField &x, 
00105                                           const quda::Complex &b, cpuColorSpinorField &y, 
00106                                           cpuColorSpinorField &z, const cpuColorSpinorField &w, 
00107                                           const cpuColorSpinorField &u);
00108 
00109 void cabxpyAxCpu(const double &a, const quda::Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y);
00110 
00111 double caxpyNormCpu(const quda::Complex &a, cpuColorSpinorField &x, cpuColorSpinorField &y);
00112 
00113 void caxpyXmazCpu(const quda::Complex &a, cpuColorSpinorField &x,
00114                   cpuColorSpinorField &y, cpuColorSpinorField &z);
00115 double caxpyXmazNormXCpu(const quda::Complex &a, cpuColorSpinorField &x, 
00116                          cpuColorSpinorField &y, cpuColorSpinorField &z);
00117 double cabxpyAxNormCpu(const double &a, const quda::Complex &b, cpuColorSpinorField &x, cpuColorSpinorField &y);
00118 
00119 void caxpbypzCpu(const quda::Complex &, cpuColorSpinorField &, const quda::Complex &, cpuColorSpinorField &, 
00120                  cpuColorSpinorField &);
00121 
00122 void caxpbypczpwCpu(const quda::Complex &, cpuColorSpinorField &, const quda::Complex &, cpuColorSpinorField &, 
00123                     const quda::Complex &, cpuColorSpinorField &, cpuColorSpinorField &);
00124 quda::Complex caxpyDotzyCpu(const quda::Complex &a, cpuColorSpinorField &x, cpuColorSpinorField &y,
00125                       cpuColorSpinorField &z);
00126 
00127 #endif // _QUDA_BLAS_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines