QUDA v0.3.2
A library for QCD on GPUs

quda/lib/dslash_constants.h

Go to the documentation of this file.
00001 __constant__ int X1h;
00002 __constant__ int X1;
00003 __constant__ int X2;
00004 __constant__ int X3;
00005 __constant__ int X4;
00006 
00007 __constant__ int X1_3;
00008 __constant__ int X2_3;
00009 __constant__ int X3_3;
00010 __constant__ int X4_3;
00011 
00012 __constant__ int X1m1;
00013 __constant__ int X2m1;
00014 __constant__ int X3m1;
00015 __constant__ int X4m1;
00016 
00017 __constant__ int X1m3;
00018 __constant__ int X2m3;
00019 __constant__ int X3m3;
00020 __constant__ int X4m3;
00021 
00022 __constant__ int X2X1mX1;
00023 __constant__ int X3X2X1mX2X1;
00024 __constant__ int X4X3X2X1mX3X2X1;
00025 __constant__ int X4X3X2X1hmX3X2X1h;
00026 
00027 __constant__ int X2X1m3X1;
00028 __constant__ int X3X2X1m3X2X1;
00029 __constant__ int X4X3X2X1m3X3X2X1;
00030 __constant__ int X4X3X2X1hm3X3X2X1h;
00031 
00032 __constant__ int X2X1;
00033 __constant__ int X3X2X1;
00034 
00035 __constant__ int X2X1_3;
00036 __constant__ int X3X2X1_3;
00037 
00038 __constant__ int Vh;
00039 __constant__ int sp_stride;
00040 __constant__ int ga_stride;
00041 __constant__ int cl_stride;
00042 
00043 __constant__ int fat_ga_stride;
00044 __constant__ int long_ga_stride;
00045 
00046 __constant__ int gauge_fixed;
00047 
00048 // domain wall constants
00049 __constant__ int Ls;
00050 
00051 // single precision constants
00052 __constant__ float anisotropy_f;
00053 __constant__ float coeff_f;
00054 __constant__ float t_boundary_f;
00055 __constant__ float pi_f;
00056 
00057 // double precision constants
00058 __constant__ double anisotropy;
00059 __constant__ double t_boundary;
00060 __constant__ double coeff;
00061 
00062 __constant__ float2 An2;
00063 __constant__ float2 TB2;
00064 __constant__ float2 No2;
00065 
00066 int initDslash = 0;
00067 
00068 void initCommonConstants(FullGauge gauge) {
00069   int Vh = gauge.volume;
00070   cudaMemcpyToSymbol("Vh", &Vh, sizeof(int));  
00071   
00072   if (Vh%BLOCK_DIM != 0) {
00073     errorQuda("Error, Volume not a multiple of the thread block size");
00074   }
00075 
00076   int X1 = 2*gauge.X[0];
00077   cudaMemcpyToSymbol("X1", &X1, sizeof(int));  
00078 
00079   int X2 = gauge.X[1];
00080   cudaMemcpyToSymbol("X2", &X2, sizeof(int));  
00081 
00082   int X3 = gauge.X[2];
00083   cudaMemcpyToSymbol("X3", &X3, sizeof(int));  
00084 
00085   int X4 = gauge.X[3];
00086   cudaMemcpyToSymbol("X4", &X4, sizeof(int));  
00087 
00088 
00089   int X1_3 = 3*X1;
00090   cudaMemcpyToSymbol("X1_3", &X1_3, sizeof(int));  
00091 
00092   int X2_3 = 3*X2;
00093   cudaMemcpyToSymbol("X2_3", &X2_3, sizeof(int));  
00094 
00095   int X3_3 = 3*X3;
00096   cudaMemcpyToSymbol("X3_3", &X3_3, sizeof(int));  
00097 
00098   int X4_3 = 3*X4;
00099   cudaMemcpyToSymbol("X4_3", &X4_3, sizeof(int));  
00100 
00101 
00102   int X2X1 = X2*X1;
00103   cudaMemcpyToSymbol("X2X1", &X2X1, sizeof(int));  
00104 
00105   int X3X2X1 = X3*X2*X1;
00106   cudaMemcpyToSymbol("X3X2X1", &X3X2X1, sizeof(int));  
00107   
00108   int X2X1_3 = 3*X2*X1;
00109   cudaMemcpyToSymbol("X2X1_3", &X2X1_3, sizeof(int));  
00110   
00111   int X3X2X1_3 = 3*X3*X2*X1;
00112   cudaMemcpyToSymbol("X3X2X1_3", &X3X2X1_3, sizeof(int)); 
00113 
00114 
00115   int X1h = X1/2;
00116   cudaMemcpyToSymbol("X1h", &X1h, sizeof(int));  
00117 
00118   int X1m1 = X1 - 1;
00119   cudaMemcpyToSymbol("X1m1", &X1m1, sizeof(int));  
00120 
00121   int X2m1 = X2 - 1;
00122   cudaMemcpyToSymbol("X2m1", &X2m1, sizeof(int));  
00123 
00124   int X3m1 = X3 - 1;
00125   cudaMemcpyToSymbol("X3m1", &X3m1, sizeof(int));  
00126 
00127   int X4m1 = X4 - 1;
00128   cudaMemcpyToSymbol("X4m1", &X4m1, sizeof(int));  
00129   
00130   int X1m3 = X1 - 3;
00131   cudaMemcpyToSymbol("X1m3", &X1m3, sizeof(int));  
00132 
00133   int X2m3 = X2 - 3;
00134   cudaMemcpyToSymbol("X2m3", &X2m3, sizeof(int));  
00135 
00136   int X3m3 = X3 - 3;
00137   cudaMemcpyToSymbol("X3m3", &X3m3, sizeof(int));  
00138 
00139   int X4m3 = X4 - 3;
00140   cudaMemcpyToSymbol("X4m3", &X4m3, sizeof(int));  
00141 
00142 
00143   int X2X1mX1 = X2X1 - X1;
00144   cudaMemcpyToSymbol("X2X1mX1", &X2X1mX1, sizeof(int));  
00145 
00146   int X3X2X1mX2X1 = X3X2X1 - X2X1;
00147   cudaMemcpyToSymbol("X3X2X1mX2X1", &X3X2X1mX2X1, sizeof(int));  
00148 
00149   int X4X3X2X1mX3X2X1 = (X4-1)*X3X2X1;
00150   cudaMemcpyToSymbol("X4X3X2X1mX3X2X1", &X4X3X2X1mX3X2X1, sizeof(int));  
00151 
00152   int X4X3X2X1hmX3X2X1h = (X4-1)*X3*X2*X1h;
00153   cudaMemcpyToSymbol("X4X3X2X1hmX3X2X1h", &X4X3X2X1hmX3X2X1h, sizeof(int));  
00154 
00155   int X2X1m3X1 = X2X1 - 3*X1;
00156   cudaMemcpyToSymbol("X2X1m3X1", &X2X1m3X1, sizeof(int));  
00157 
00158   int X3X2X1m3X2X1 = X3X2X1 - 3*X2X1;
00159   cudaMemcpyToSymbol("X3X2X1m3X2X1", &X3X2X1m3X2X1, sizeof(int));  
00160 
00161   int X4X3X2X1m3X3X2X1 = (X4-3)*X3X2X1;
00162   cudaMemcpyToSymbol("X4X3X2X1m3X3X2X1", &X4X3X2X1m3X3X2X1, sizeof(int));  
00163 
00164   int X4X3X2X1hm3X3X2X1h = (X4-3)*X3*X2*X1h;
00165   cudaMemcpyToSymbol("X4X3X2X1hm3X3X2X1h", &X4X3X2X1hm3X3X2X1h, sizeof(int)); 
00166 
00167   checkCudaError();
00168 }
00169 
00170 
00171 void initDslashConstants(FullGauge gauge, int sp_stride, int cl_stride, int Ls) 
00172 {
00173 
00174   initCommonConstants(gauge);
00175 
00176   cudaMemcpyToSymbol("sp_stride", &sp_stride, sizeof(int));  
00177   
00178   int ga_stride = gauge.stride;
00179   cudaMemcpyToSymbol("ga_stride", &ga_stride, sizeof(int));  
00180 
00181   int fat_ga_stride = gauge.stride;
00182   int long_ga_stride = gauge.stride;
00183     
00184   cudaMemcpyToSymbol("fat_ga_stride", &fat_ga_stride, sizeof(int));
00185   cudaMemcpyToSymbol("long_ga_stride", &long_ga_stride, sizeof(int));
00186 
00187 
00188 
00189   cudaMemcpyToSymbol("cl_stride", &cl_stride, sizeof(int));  
00190 
00191   int gf = (gauge.gauge_fixed == QUDA_GAUGE_FIXED_YES) ? 1 : 0;
00192   cudaMemcpyToSymbol("gauge_fixed", &(gf), sizeof(int));
00193 
00194   cudaMemcpyToSymbol("anisotropy", &(gauge.anisotropy), sizeof(double));
00195 
00196   double t_bc = (gauge.t_boundary == QUDA_PERIODIC_T) ? 1.0 : -1.0;
00197   cudaMemcpyToSymbol("t_boundary", &(t_bc), sizeof(double));
00198 
00199   double coeff = -24.0*gauge.tadpole_coeff*gauge.tadpole_coeff;
00200   cudaMemcpyToSymbol("coeff", &(coeff), sizeof(double));
00201 
00202 
00203   float anisotropy_f = gauge.anisotropy;
00204   cudaMemcpyToSymbol("anisotropy_f", &(anisotropy_f), sizeof(float));
00205 
00206   float t_bc_f = (gauge.t_boundary == QUDA_PERIODIC_T) ? 1.0 : -1.0;
00207   cudaMemcpyToSymbol("t_boundary_f", &(t_bc_f), sizeof(float));
00208 
00209   float coeff_f = -24.0*gauge.tadpole_coeff*gauge.tadpole_coeff;
00210   cudaMemcpyToSymbol("coeff_f", &(coeff_f), sizeof(float));
00211 
00212 
00213   float2 An2 = make_float2(gauge.anisotropy, 1.0 / (gauge.anisotropy*gauge.anisotropy));
00214   cudaMemcpyToSymbol("An2", &(An2), sizeof(float2));
00215   float2 TB2 = make_float2(t_bc_f, 1.0 / (t_bc_f * t_bc_f));
00216   cudaMemcpyToSymbol("TB2", &(TB2), sizeof(float2));
00217   float2 No2 = make_float2(1.0, 1.0);
00218   cudaMemcpyToSymbol("No2", &(No2), sizeof(float2));
00219 
00220   float h_pi_f = M_PI;
00221   cudaMemcpyToSymbol("pi_f", &(h_pi_f), sizeof(float));
00222 
00223   cudaMemcpyToSymbol("Ls", &Ls, sizeof(int));  
00224 
00225   checkCudaError();
00226 
00227   initDslash = 1;
00228 }
00229 
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines