QUDA v0.4.0
A library for QCD on GPUs
quda/include/llfat_quda.h
Go to the documentation of this file.
00001 #ifndef _LLFAT_QUDA_H
00002 #define _LLFAT_QUDA_H
00003 
00004 #include "quda.h"
00005 
00006 #ifdef __cplusplus
00007 extern "C"{
00008 #endif
00009 
00010 #define LLFAT_INTERIOR_KERNEL 0
00011 #define LLFAT_EXTERIOR_KERNEL_FWD_X 1
00012 #define LLFAT_EXTERIOR_KERNEL_BACK_X 2
00013 #define LLFAT_EXTERIOR_KERNEL_FWD_Y 3
00014 #define LLFAT_EXTERIOR_KERNEL_BACK_Y 4
00015 #define LLFAT_EXTERIOR_KERNEL_FWD_Z 5
00016 #define LLFAT_EXTERIOR_KERNEL_BACK_Z 6
00017 #define LLFAT_EXTERIOR_KERNEL_FWD_T 7
00018 #define LLFAT_EXTERIOR_KERNEL_BACK_T 8
00019 
00020   typedef struct llfat_kernel_param_s{
00021     unsigned long threads;
00022     int ghostDim[4]; // Whether a ghost zone has been allocated for a given dimension
00023     int kernel_type;
00024     
00025     //use in extended kernels
00026     int D1, D2,D3, D4, D1h;
00027     dim3 blockDim;
00028     dim3 halfGridDim;
00029     int base_idx;
00030     
00031   }llfat_kernel_param_t;
00032   
00033 
00034   void llfat_cuda(cudaGaugeField& cudaFatLink, cudaGaugeField& cudaSiteLink, 
00035                   cudaGaugeField& cudaStaple, cudaGaugeField& cudaStaple1,
00036                   QudaGaugeParam* param, double* act_path_coeff);
00037   void llfat_cuda_ex(cudaGaugeField& cudaFatLink, cudaGaugeField& cudaSiteLink, 
00038                      cudaGaugeField& cudaStaple, cudaGaugeField& cudaStaple1,
00039                      QudaGaugeParam* param, double* act_path_coeff);
00040   
00041   void llfat_init_cuda(QudaGaugeParam* param);
00042   void llfat_init_cuda_ex(QudaGaugeParam* param_ex);
00043 
00044   void computeGenStapleFieldParityKernel(void* staple_even, void* staple_odd, 
00045                                          void* sitelink_even, void* sitelink_odd,
00046                                          void* fatlink_even, void* fatlink_odd,                     
00047                                          void* mulink_even, void* mulink_odd, 
00048                                          int mu, int nu, int save_staple,
00049                                          double mycoeff,
00050                                          QudaReconstructType recon, QudaPrecision prec,
00051                                          dim3 halfGridDim,  llfat_kernel_param_t kparam,
00052                                          cudaStream_t* stream);
00053   void computeGenStapleFieldParityKernel_ex(void* staple_even, void* staple_odd, 
00054                                             void* sitelink_even, void* sitelink_odd,
00055                                             void* fatlink_even, void* fatlink_odd,                          
00056                                             void* mulink_even, void* mulink_odd, 
00057                                             int mu, int nu, int save_staple,
00058                                             double mycoeff,
00059                                             QudaReconstructType recon, QudaPrecision prec,
00060                                             llfat_kernel_param_t kparam);  
00061   void siteComputeGenStapleParityKernel(void* staple_even, void* staple_odd, 
00062                                         void* sitelink_even, void* sitelink_odd, 
00063                                         void* fatlink_even, void* fatlink_odd,  
00064                                         int mu, int nu, double mycoeff,
00065                                         QudaReconstructType recon, QudaPrecision prec,
00066                                         dim3 halfGridDim, llfat_kernel_param_t kparam,
00067                                         cudaStream_t* stream); 
00068   void siteComputeGenStapleParityKernel_ex(void* staple_even, void* staple_odd, 
00069                                            void* sitelink_even, void* sitelink_odd, 
00070                                            void* fatlink_even, void* fatlink_odd,       
00071                                            int mu, int nu,      double mycoeff,
00072                                            QudaReconstructType recon, QudaPrecision prec,
00073                                            llfat_kernel_param_t kparam);
00074   void llfatOneLinkKernel(cudaGaugeField& cudaFatLink, cudaGaugeField& cudaSiteLink,
00075                           cudaGaugeField& cudaStaple, cudaGaugeField& cudaStaple1,                       
00076                           QudaGaugeParam* param, double* act_path_coeff);  
00077   void llfatOneLinkKernel_ex(cudaGaugeField& cudaFatLink, cudaGaugeField& cudaSiteLink,
00078                              cudaGaugeField& cudaStaple, cudaGaugeField& cudaStaple1,
00079                              QudaGaugeParam* param, double* act_path_coeff,
00080                              llfat_kernel_param_t kparam);
00081 
00082 
00083   void computeFatLinkCore(cudaGaugeField* cudaSiteLink, double* act_path_coeff,
00084                         QudaGaugeParam* qudaGaugeParam, QudaComputeFatMethod method,
00085                         cudaGaugeField* cudaFatLink, struct timeval time_array[]);
00086 
00087 #ifdef __cplusplus
00088 }
00089 #endif
00090 
00091 #endif // _LLFAT_QUDA_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines