QUDA v0.4.0
A library for QCD on GPUs
|
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