QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
su3_test.cpp
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 
5 #include <test_util.h>
6 #include <dslash_util.h>
7 
8 #include <gauge_qio.h>
9 
10 #ifdef QMP_COMMS
11 #include <qmp.h>
12 #endif
13 
15 void *gauge[4], *new_gauge[4];
16 
17 extern int device;
18 extern int xdim;
19 extern int ydim;
20 extern int zdim;
21 extern int tdim;
22 extern int gridsize_from_cmdline[];
24 extern QudaPrecision prec;
25 extern char latfile[];
26 
27 #define MAX(a,b) ((a)>(b)?(a):(b))
28 
29 void init() {
30 
31  param = newQudaGaugeParam();
32 
34  param.cuda_prec = prec;
35  param.reconstruct = link_recon;
36  param.cuda_prec_sloppy = prec;
38 
39  param.type = QUDA_WILSON_LINKS;
40  param.tadpole_coeff = 0.8;
42 
43  param.X[0] = xdim;
44  param.X[1] = ydim;
45  param.X[2] = zdim;
46  param.X[3] = tdim;
47  setDims(param.X);
48 
49  param.anisotropy = 1.0;
52 #ifdef MULTI_GPU
53  int x_face_size = param.X[1]*param.X[2]*param.X[3]/2;
54  int y_face_size = param.X[0]*param.X[2]*param.X[3]/2;
55  int z_face_size = param.X[0]*param.X[1]*param.X[3]/2;
56  int t_face_size = param.X[0]*param.X[1]*param.X[2]/2;
57  int pad_size = MAX(x_face_size, y_face_size);
58  pad_size = MAX(pad_size, z_face_size);
59  pad_size = MAX(pad_size, t_face_size);
60  param.ga_pad = pad_size;
61 #else
62  param.ga_pad = 0;
63 #endif
64 
65  // construct gauge fields
66  for (int dir = 0; dir < 4; dir++) {
67  gauge[dir] = malloc(V*gaugeSiteSize*param.cpu_prec);
68  new_gauge[dir] = malloc(V*gaugeSiteSize*param.cpu_prec);
69  }
70 
72 }
73 
74 void end() {
75  endQuda();
76 
77  // release memory
78  for (int dir = 0; dir < 4; dir++) {
79  free(gauge[dir]);
80  free(new_gauge[dir]);
81  }
82 
83  finalizeComms();
84 }
85 
86 extern void usage(char**);
87 
88 void SU3Test(int argc, char **argv) {
89 
90  for (int i =1;i < argc; i++){
91  if(process_command_line_option(argc, argv, &i) == 0){
92  continue;
93  }
94 
95  fprintf(stderr, "ERROR: Invalid option:%s\n", argv[i]);
96  usage(argv);
97  }
98 
99  // initialize QMP/MPI, QUDA comms grid and RNG (test_util.cpp)
100  initComms(argc, argv, gridsize_from_cmdline);
101 
102  init();
103 
104  if (strcmp(latfile,"")) { // load in the command line supplied gauge field
105  read_gauge_field(latfile, gauge, param.cpu_prec, param.X, argc, argv);
106  construct_gauge_field((void**)gauge, 2, param.cpu_prec, &param);
107  } else { // generate a random SU(3) field
108  printf("Randomizing fields...");
109  construct_gauge_field((void**)gauge, 1, param.cpu_prec, &param);
110  printf("done.\n");
111  }
112 
113  loadGaugeQuda(gauge, &param);
114  saveGaugeQuda(new_gauge, &param);
115 
116  check_gauge(gauge, new_gauge, 1e-3, param.cpu_prec);
117 
118  end();
119 }
120 
121 int main(int argc, char **argv) {
122 
123  SU3Test(argc, argv);
124 
125  return 0;
126 }
QudaGaugeParam param
Definition: su3_test.cpp:14
QudaReconstructType reconstruct_sloppy
Definition: quda.h:46
double anisotropy
Definition: quda.h:31
void endQuda(void)
void construct_gauge_field(void **gauge, int type, QudaPrecision precision, QudaGaugeParam *param)
Definition: test_util.cpp:1003
enum QudaPrecision_s QudaPrecision
int V
Definition: test_util.cpp:29
int ga_pad
Definition: quda.h:53
int tdim
Definition: test_util.cpp:1556
QudaGaugeFixed gauge_fix
Definition: quda.h:51
void usage(char **)
Definition: test_util.cpp:1584
QudaLinkType type
Definition: quda.h:35
void setDims(int *)
Definition: test_util.cpp:88
void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param)
int process_command_line_option(int argc, char **argv, int *idx)
Definition: test_util.cpp:1635
void * new_gauge[4]
Definition: su3_test.cpp:15
int zdim
Definition: test_util.cpp:1555
#define gaugeSiteSize
void finalizeComms()
Definition: test_util.cpp:65
QudaGaugeFieldOrder gauge_order
Definition: quda.h:36
int gridsize_from_cmdline[]
Definition: test_util.cpp:1559
int ydim
Definition: test_util.cpp:1554
int device
Definition: test_util.cpp:1546
#define MAX(a, b)
Definition: su3_test.cpp:27
void SU3Test(int argc, char **argv)
Definition: su3_test.cpp:88
void initQuda(int device)
int xdim
Definition: test_util.cpp:1553
void saveGaugeQuda(void *h_gauge, QudaGaugeParam *param)
QudaPrecision cuda_prec_sloppy
Definition: quda.h:45
QudaReconstructType reconstruct
Definition: quda.h:43
void read_gauge_field(char *filename, void *gauge[], QudaPrecision precision, int *X, int argc, char *argv[])
Definition: gauge_qio.cpp:86
QudaPrecision cuda_prec
Definition: quda.h:42
int X[4]
Definition: quda.h:29
void check_gauge(void **oldG, void **newG, double epsilon, QudaPrecision precision)
Definition: test_util.cpp:1156
void init()
Definition: su3_test.cpp:29
char latfile[]
Definition: test_util.cpp:1561
double tadpole_coeff
Definition: quda.h:32
enum QudaReconstructType_s QudaReconstructType
QudaReconstructType link_recon
Definition: test_util.cpp:1549
QudaTboundary t_boundary
Definition: quda.h:38
QudaPrecision prec
Definition: test_util.cpp:1551
int main(int argc, char **argv)
Definition: su3_test.cpp:121
void initComms(int argc, char **argv, const int *commDims)
Definition: test_util.cpp:48
void * gauge[4]
Definition: su3_test.cpp:15
void end()
Definition: su3_test.cpp:74
QudaPrecision cpu_prec
Definition: quda.h:40
QudaGaugeParam newQudaGaugeParam(void)