QUDA
v0.5.0
A library for QCD on GPUs
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
quda
tests
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
14
QudaGaugeParam
param
;
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
[];
23
extern
QudaReconstructType
link_recon
;
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
33
param.
cpu_prec
=
QUDA_DOUBLE_PRECISION
;
34
param.
cuda_prec
=
prec
;
35
param.
reconstruct
=
link_recon
;
36
param.
cuda_prec_sloppy
=
prec
;
37
param.
reconstruct_sloppy
=
link_recon
;
38
39
param.
type
=
QUDA_WILSON_LINKS
;
40
param.
gauge_order
=
QUDA_QDP_GAUGE_ORDER
;
41
42
param.
X
[0] =
xdim
;
43
param.
X
[1] =
ydim
;
44
param.
X
[2] =
zdim
;
45
param.
X
[3] =
tdim
;
46
setDims
(param.
X
);
47
48
param.
anisotropy
= 1.0;
49
param.
t_boundary
=
QUDA_PERIODIC_T
;
50
param.
gauge_fix
=
QUDA_GAUGE_FIXED_NO
;
51
#ifdef MULTI_GPU
52
int
x_face_size = param.
X
[1]*param.
X
[2]*param.
X
[3]/2;
53
int
y_face_size = param.
X
[0]*param.
X
[2]*param.
X
[3]/2;
54
int
z_face_size = param.
X
[0]*param.
X
[1]*param.
X
[3]/2;
55
int
t_face_size = param.
X
[0]*param.
X
[1]*param.
X
[2]/2;
56
int
pad_size =
MAX
(x_face_size, y_face_size);
57
pad_size =
MAX
(pad_size, z_face_size);
58
pad_size =
MAX
(pad_size, t_face_size);
59
param.
ga_pad
= pad_size;
60
#else
61
param.
ga_pad
= 0;
62
#endif
63
64
// construct gauge fields
65
for
(
int
dir
= 0;
dir
< 4;
dir
++) {
66
gauge
[
dir
] = malloc(
V
*
gaugeSiteSize
*param.
cpu_prec
);
67
new_gauge
[
dir
] = malloc(
V
*gaugeSiteSize*param.
cpu_prec
);
68
}
69
70
initQuda
(
device
);
71
}
72
73
void
end
() {
74
endQuda
();
75
76
// release memory
77
for
(
int
dir
= 0;
dir
< 4;
dir
++) {
78
free(
gauge
[
dir
]);
79
free(
new_gauge
[dir]);
80
}
81
}
82
83
extern
void
usage
(
char
**);
84
85
void
SU3Test
(
int
argc,
char
**argv) {
86
87
for
(
int
i =1;i < argc; i++){
88
if
(
process_command_line_option
(argc, argv, &i) == 0){
89
continue
;
90
}
91
92
fprintf(stderr,
"ERROR: Invalid option:%s\n"
, argv[i]);
93
usage
(argv);
94
}
95
96
init
();
97
98
if
(strcmp(
latfile
,
""
)) {
// load in the command line supplied gauge field
99
read_gauge_field
(
latfile
,
gauge
, param.
cpu_prec
, param.
X
, argc, argv);
100
construct_gauge_field
((
void
**)
gauge
, 2, param.
cpu_prec
, ¶m);
101
}
else
{
// generate a random SU(3) field
102
printf(
"Randomizing fields..."
);
103
construct_gauge_field
((
void
**)
gauge
, 1, param.
cpu_prec
, ¶m);
104
printf(
"done.\n"
);
105
}
106
107
loadGaugeQuda
(
gauge
, ¶m);
108
saveGaugeQuda
(
new_gauge
, ¶m);
109
110
check_gauge
(
gauge
,
new_gauge
, 1e-3, param.
cpu_prec
);
111
112
end
();
113
}
114
115
int
main
(
int
argc,
char
**argv) {
116
117
initComms
(argc, argv,
gridsize_from_cmdline
);
118
119
SU3Test
(argc, argv);
120
121
finalizeComms
();
122
123
return
0;
124
}
Generated on Wed Mar 20 2013 12:52:18 for QUDA by
1.8.2