7 #include <cuda_runtime.h>
26 #define TDIFF(a,b) (b.tv_sec - a.tv_sec + 0.000001*(b.tv_usec - a.tv_usec))
31 extern void usage(
char** argv);
35 static double unitarize_eps = 1e-6;
36 static bool reunit_allow_svd =
true;
37 static bool reunit_svd_only =
false;
38 static double svd_rel_error = 1e-4;
39 static double svd_abs_error = 1e-5;
40 static double max_allowed_error = 1e-11;
71 qudaGaugeParam.
X[0] =
xdim;
72 qudaGaugeParam.
X[1] =
ydim;
73 qudaGaugeParam.
X[2] =
zdim;
74 qudaGaugeParam.
X[3] =
tdim;
129 errorQuda(
"ERROR: allocating fatlink failed\n");
133 for(
int i=0;i < 4;i++){
135 if(sitelink[i] == NULL){
136 errorQuda(
"ERROR; allocate sitelink[%d] failed\n", i);
145 double* link =
reinterpret_cast<double*
>(inlink);
146 for(
int dir=0; dir<4; ++dir){
147 double* slink =
reinterpret_cast<double*
>(sitelink[dir]);
148 for(
int i=0; i<
V; ++i){
150 link[(i*4 + dir)*gaugeSiteSize + j] = slink[i*gaugeSiteSize + j];
155 float* link =
reinterpret_cast<float*
>(inlink);
156 for(
int dir=0; dir<4; ++dir){
157 float* slink =
reinterpret_cast<float*
>(sitelink[dir]);
158 for(
int i=0; i<
V; ++i){
160 link[(i*4 + dir)*gaugeSiteSize + j] = slink[i*gaugeSiteSize + j];
167 double act_path_coeff[6];
168 act_path_coeff[0] = 0.625000;
169 act_path_coeff[1] = -0.058479;
170 act_path_coeff[2] = -0.087719;
171 act_path_coeff[3] = 0.030778;
172 act_path_coeff[4] = -0.007200;
173 act_path_coeff[5] = -0.123113;
182 for(
int dir=0; dir<4; ++dir){
206 int* num_failures_dev;
207 if(cudaMalloc(&num_failures_dev,
sizeof(
int)) != cudaSuccess){
208 errorQuda(
"cudaMalloc failed for num_failures_dev\n");
210 cudaMemset(num_failures_dev, 0,
sizeof(
int));
212 struct timeval t0, t1;
214 gettimeofday(&t0,NULL);
216 cudaDeviceSynchronize();
217 gettimeofday(&t1,NULL);
220 cudaMemcpy(&num_failures, num_failures_dev,
sizeof(
int), cudaMemcpyDeviceToHost);
225 for(
int dir=0; dir<4; ++dir) cudaFreeHost(sitelink[dir]);
229 cudaFree(num_failures_dev);
246 printfQuda(
"link_precision link_reconstruct space_dimension T_dimension algorithm max allowed error\n");
277 for (i=1; i<argc; i++){
282 fprintf(stderr,
"ERROR: Invalid option:%s\n", argv[i]);
289 int num_failures = unitarize_link_test();
296 printfQuda(
"Number of failures = %d\n", num_failures);
297 if(num_failures > 0){
298 printfQuda(
"Failure rate = %lf\n", num_failures/(4.0*
V*num_procs));
299 printfQuda(
"You may want to increase the error tolerance or vary the unitarization parameters\n");
int dimPartitioned(int dim)
QudaReconstructType reconstruct_sloppy
void exchange_llfat_cleanup(void)
int main(int argc, char **argv)
enum QudaPrecision_s QudaPrecision
void setUnitarizeLinksConstants(double unitarize_eps, double max_error, bool allow_svd, bool svd_only, double svd_rel_error, double svd_abs_error, bool check_unitarization=true)
void computeKSLinkQuda(void *fatlink, void *longlink, void *ulink, void *inlink, double *path_coeff, QudaGaugeParam *param, QudaComputeFatMethod method)
int process_command_line_option(int argc, char **argv, int *idx)
QudaReconstructType link_recon
QudaGaugeFieldOrder gauge_order
const char * get_prec_str(QudaPrecision prec)
void setFatLinkPadding(QudaComputeFatMethod method, QudaGaugeParam *param)
void setUnitarizeLinksPadding(int input_padding, int output_padding)
void createSiteLinkCPU(void **link, QudaPrecision precision, int phase)
const char * get_unitarization_str(bool svd_only)
void initQuda(int device)
cudaGaugeField * cudaFatLink
const char * get_recon_str(QudaReconstructType recon)
QudaGaugeFieldOrder order
QudaPrecision cuda_prec_sloppy
void loadCPUField(const cpuGaugeField &, const QudaFieldLocation &)
void initLatticeConstants(const LatticeField &lat, TimeProfile &profile)
enum QudaGaugeFieldOrder_s QudaGaugeFieldOrder
QudaReconstructType reconstruct
void unitarizeLinksCuda(const QudaGaugeParam ¶m, cudaGaugeField &infield, cudaGaugeField *outfield, int *num_failures)
QudaGhostExchange ghostExchange
int gridsize_from_cmdline[]
QudaGaugeFieldOrder gauge_order
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
void comm_allreduce_int(int *data)
QudaReconstructType reconstruct
void initComms(int argc, char **argv, const int *commDims)
QudaGaugeParam newQudaGaugeParam(void)