18 extern void usage(
char** argv);
73 for(
int i=0;i < 4;i++){
75 if (siteLink_2d[i] == NULL){
76 errorQuda(
"ERROR: malloc failed for siteLink_2d\n");
84 for(
int dir=0;dir < 4; dir++){
92 for(
int i=0;i < 4;i++){
126 fprintf(stderr,
"ERROR: malloc failed for hw\n");
153 namespace fermionforce {
159 fermion_force_test(
void)
162 fermion_force_init();
171 float act_path_coeff[6];
173 act_path_coeff[0] = 0.625000;
174 act_path_coeff[1] = -0.058479;
175 act_path_coeff[2] = -0.087719;
176 act_path_coeff[3] = 0.030778;
177 act_path_coeff[4] = -0.007200;
178 act_path_coeff[5] = -0.123113;
201 struct timeval t0, t1;
202 cudaDeviceSynchronize();
204 gettimeofday(&t0, NULL);
206 cudaDeviceSynchronize();
207 gettimeofday(&t1, NULL);
208 double secs = t1.tv_sec - t0.tv_sec + 0.000001*(t1.tv_usec - t0.tv_usec);
219 printf(
"Test %s\n",(1 == res) ?
"PASSED" :
"FAILED");
222 double perf = 1.0* flops*volume/(secs*1024*1024*1024);
223 printf(
"GPU runtime =%.2f ms, kernel performance= %.2f GFLOPS\n", secs*1000, perf);
229 printf(
"Warning: you test failed. \n");
230 printf(
" Did you use --verify?\n");
231 printf(
" Did you check the GPU health by running cuda memtest?\n");
234 return accuracy_level;
241 printf(
"running the following fermion force computation test:\n");
243 printf(
"link_precision link_reconstruct space_dim(x/y/z) T_dimension\n");
244 printf(
"%s %s %d/%d/%d %d \n",
255 printf(
"Extra options: \n");
256 printf(
" --verify # Verify the GPU results using CPU results\n");
264 for (i =1;i < argc; i++){
269 fprintf(stderr,
"ERROR: Invalid option:%s\n", argv[i]);
279 int accuracy_level = fermion_force_test();
280 printfQuda(
"accuracy_level=%d\n", accuracy_level);
285 if(accuracy_level >=3 ){
enum QudaPrecision_s QudaPrecision
FullHw createHwQuda(int *X, QudaPrecision precision)
int site_link_sanity_check(void *link, int len, int precision, QudaGaugeParam *gaugeParam)
void saveCPUField(cpuGaugeField &, const QudaFieldLocation &) const
void createHwCPU(void *hw, QudaPrecision precision)
QudaGaugeParam gaugeParam
void createMomCPU(void *mom, QudaPrecision precision)
QudaReconstructType link_recon
int process_command_line_option(int argc, char **argv, int *idx)
void fermion_force_cuda(double eps, double weight1, double weight2, void *act_path_coeff, FullHw cudaHw, cudaGaugeField &cudaSiteLink, cudaGaugeField &cudaMom, QudaGaugeParam *param)
QudaGaugeFieldOrder gauge_order
void fermion_force_reference(float eps, float weight1, float weight2, void *act_path_coeff, void *temp_x, void *sitelink, void *mom)
int compare_floats(void *a, void *b, int len, double epsilon, QudaPrecision precision)
const char * get_prec_str(QudaPrecision prec)
void createSiteLinkCPU(void **link, QudaPrecision precision, int phase)
cudaGaugeField * cudaGauge
void loadHwToGPU(FullHw ret, void *hw, QudaPrecision cpu_prec)
void fermion_force_init_cuda(QudaGaugeParam *param)
void initQuda(int device)
int main(int argc, char **argv)
void freeHwQuda(FullHw hw)
const char * get_recon_str(QudaReconstructType recon)
QudaGaugeFieldOrder order
void loadCPUField(const cpuGaugeField &, const QudaFieldLocation &)
QudaReconstructType reconstruct
int strong_check_mom(void *momA, void *momB, int len, QudaPrecision prec)
QudaPrecision cpu_hw_prec
void initLatticeConstants(const LatticeField &lat, TimeProfile &profile)
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
int gridsize_from_cmdline[]
QudaReconstructType reconstruct
void usage_extra(char **argv)
void initComms(int argc, char **argv, const int *commDims)