15 #if defined(QMP_COMMS) 17 #elif defined(MPI_COMMS) 23 #define MAX(a,b) ((a)>(b)?(a):(b)) 67 extern void usage(
char** );
76 printfQuda(
"prec prec_sloppy multishift matpc_type recon recon_sloppy S_dimension T_dimension Ls_dimension dslash_type normalization\n");
77 printfQuda(
"%6s %6s %d %12s %2s %2s %3d/%3d/%3d %3d %2d %14s %8s\n",
96 int main(
int argc,
char **argv)
99 for (
int i = 1;
i < argc;
i++){
176 for(
int k = 0; k <
Lsdim; k++)
187 double offset[12] = {0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12};
228 errorQuda(
"qudaInvert: requesting zero residual\n");
280 int pad_size =
MAX(x_face_size, y_face_size);
281 pad_size =
MAX(pad_size, z_face_size);
282 pad_size =
MAX(pad_size, t_face_size);
314 void *gauge[4], *
clover=0, *clover_inv=0;
316 for (
int dir = 0; dir < 4; dir++) {
345 void *
spinorOut = NULL, **spinorOutMulti = NULL;
397 time0 /= CLOCKS_PER_SEC;
399 printfQuda(
"Device memory used:\n Spinor: %f GiB\n Gauge: %f GiB\n",
404 printfQuda(
"\nDone: %i iter / %g secs = %g Gflops, total time = %g secs\n",
409 errorQuda(
"Mass normalization not supported for multi-shift solver in invert_test");
421 void *out0 = spinorCheck;
422 void *out1 = (
char*)out0 + tm_offset*
cpu_prec;
427 void *in0 = spinorOutMulti[
i];
428 void *in1 = (
char*)in0 + tm_offset*
cpu_prec;
430 tm_ndeg_matpc(
tmp0,
tmp1, gauge, in0, in1,
inv_param.
kappa,
inv_param.
mu,
inv_param.
epsilon,
inv_param.
matpc_type, 0,
inv_param.
cpu_prec,
gauge_param);
431 tm_ndeg_matpc(out0, out1, gauge,
tmp0,
tmp1,
inv_param.
kappa,
inv_param.
mu,
inv_param.
epsilon,
inv_param.
matpc_type, 1,
inv_param.
cpu_prec,
gauge_param);
440 errorQuda(
"Twisted mass solution type not supported");
456 printfQuda(
"Domain wall not supported for multi-shift\n");
464 double l2r =
sqrt(nrm2 / src2);
466 printfQuda(
"Shift %d residuals: (L2 relative) tol %g, QUDA = %g, host = %g; (heavy-quark) tol %g, QUDA = %g\n",
481 void *evenOut = spinorCheck;
482 void *oddOut = (
char*)evenOut + tm_offset*
cpu_prec;
485 void *oddIn = (
char*)evenIn + tm_offset*
cpu_prec;
487 tm_ndeg_mat(evenOut, oddOut, gauge, evenIn, oddIn,
inv_param.
kappa,
inv_param.
mu,
inv_param.
epsilon, 0,
inv_param.
cpu_prec,
gauge_param);
501 double *kappa_b, *kappa_c;
504 for(
int xs = 0 ; xs <
Lsdim ; xs++)
509 mdw_mat(spinorCheck, gauge,
spinorOut, kappa_b, kappa_c,
inv_param.
dagger,
inv_param.
cpu_prec,
gauge_param,
inv_param.
mass,
inv_param.
b_5,
inv_param.
c_5);
532 void *out0 = spinorCheck;
533 void *out1 = (
char*)out0 + tm_offset*
cpu_prec;
536 void *in1 = (
char*)in0 + tm_offset*
cpu_prec;
538 tm_ndeg_matpc(out0, out1, gauge, in0, in1,
inv_param.
kappa,
inv_param.
mu,
inv_param.
epsilon,
inv_param.
matpc_type, 0,
inv_param.
cpu_prec,
gauge_param);
545 errorQuda(
"Twisted mass solution type not supported");
559 double *kappa_b, *kappa_c;
562 for(
int xs = 0 ; xs <
Lsdim ; xs++)
567 mdw_matpc(spinorCheck, gauge,
spinorOut, kappa_b, kappa_c,
inv_param.
matpc_type, 0,
inv_param.
cpu_prec,
gauge_param,
inv_param.
mass,
inv_param.
b_5,
inv_param.
c_5);
594 void *out0 = spinorCheck;
595 void *out1 = (
char*)out0 + tm_offset*
cpu_prec;
601 void *in1 = (
char*)in0 + tm_offset*
cpu_prec;
603 tm_ndeg_matpc(
tmp0,
tmp1, gauge, in0, in1,
inv_param.
kappa,
inv_param.
mu,
inv_param.
epsilon,
inv_param.
matpc_type, 0,
inv_param.
cpu_prec,
gauge_param);
604 tm_ndeg_matpc(out0, out1, gauge,
tmp0,
tmp1,
inv_param.
kappa,
inv_param.
mu,
inv_param.
epsilon,
inv_param.
matpc_type, 1,
inv_param.
cpu_prec,
gauge_param);
613 errorQuda(
"Twisted mass solution type not supported");
635 double *kappa_b, *kappa_c;
638 for(
int xs = 0 ; xs <
Lsdim ; xs++)
643 mdw_matpc(
spinorTmp, gauge,
spinorOut, kappa_b, kappa_c,
inv_param.
matpc_type, 0,
inv_param.
cpu_prec,
gauge_param,
inv_param.
mass,
inv_param.
b_5,
inv_param.
c_5);
644 mdw_matpc(spinorCheck, gauge,
spinorTmp, kappa_b, kappa_c,
inv_param.
matpc_type, 1,
inv_param.
cpu_prec,
gauge_param,
inv_param.
mass,
inv_param.
b_5,
inv_param.
c_5);
652 errorQuda(
"Mass normalization not implemented");
663 double l2r =
sqrt(nrm2 / src2);
665 printfQuda(
"Residuals: (L2 relative) tol %g, QUDA = %g, host = %g; (heavy-quark) tol %g, QUDA = %g\n",
680 if (clover_inv)
free(clover_inv);
683 for (
int dir = 0; dir<4; dir++)
free(gauge[dir]);
int dimPartitioned(int dim)
QudaDiracFieldOrder dirac_order
QudaMassNormalization mass_normalization
double tol_hq_offset[QUDA_MAX_MULTI_SHIFT]
enum QudaMassNormalization_s QudaMassNormalization
QudaReconstructType reconstruct_sloppy
void freeCloverQuda(void)
QudaTwistFlavorType twist_flavor
double b_5[QUDA_MAX_DWF_LS]
void dw_4d_matpc(void *out, void **gauge, void *in, double kappa, QudaMatPCType matpc_type, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
void invertMultiShiftQuda(void **_hp_x, void *_hp_b, QudaInvertParam *param)
void construct_gauge_field(void **gauge, int type, QudaPrecision precision, QudaGaugeParam *param)
QudaVerbosity verbosity_precondition
enum QudaPrecision_s QudaPrecision
int main(int argc, char **argv)
void dw_setDims(int *X, const int L5)
QudaSchwarzType schwarz_type
__host__ __device__ ValueType norm(const complex< ValueType > &z)
Returns the magnitude of z squared.
void tm_mat(void *out, void **gauge, void *in, double kappa, double mu, QudaTwistFlavorType flavor, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param)
QudaInverterType inv_type_precondition
void invertQuda(void *h_x, void *h_b, QudaInvertParam *param)
QudaDslashType dslash_type
QudaReconstructType reconstruct_precondition
QudaInverterType inv_type
double c_5[QUDA_MAX_DWF_LS]
int return_clover_inverse
void loadGaugeQuda(void *h_gauge, QudaGaugeParam *param)
int process_command_line_option(int argc, char **argv, int *idx)
QudaReconstructType link_recon_precondition
void tm_ndeg_mat(void *evenOut, void *oddOut, void **gauge, void *evenIn, void *oddIn, double kappa, double mu, double epsilon, int daggerBit, QudaPrecision precision, QudaGaugeParam &gauge_param)
void clover_matpc(void *out, void **gauge, void *clover, void *clover_inv, void *in, double kappa, QudaMatPCType matpc_type, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param)
const char * get_matpc_str(QudaMatPCType type)
void ax(const double &a, ColorSpinorField &x)
QudaGaugeParam gauge_param
void mdw_mat(void *out, void **gauge, void *in, double *kappa_b, double *kappa_c, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm, double *b5, double *c5)
QudaGaugeFieldOrder gauge_order
void dw_mat(void *out, void **gauge, void *in, double kappa, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
void tmc_mat(void *out, void **gauge, void *clover, void *in, double kappa, double mu, QudaTwistFlavorType flavor, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param)
QudaReconstructType link_recon
void tm_matpc(void *outEven, void **gauge, void *inEven, double kappa, double mu, QudaTwistFlavorType flavor, QudaMatPCType matpc_type, int daggerBit, QudaPrecision precision, QudaGaugeParam &gauge_param)
const char * get_prec_str(QudaPrecision prec)
void loadCloverQuda(void *h_clover, void *h_clovinv, QudaInvertParam *inv_param)
QudaPrecision & cuda_prec_precondition
void exit(int) __attribute__((noreturn))
QudaPrecision clover_cuda_prec_sloppy
QudaFieldLocation input_location
double true_res_hq_offset[QUDA_MAX_MULTI_SHIFT]
int solution_accumulator_pipeline
QudaSolutionType solution_type
else return(__swbuf(_c, _p))
QudaSolverNormalization solver_normalization
int strcmp(const char *__s1, const char *__s2)
QudaPrecision clover_cuda_prec
void initQuda(int device)
void dw_matpc(void *out, void **gauge, void *in, double kappa, QudaMatPCType matpc_type, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
QudaFieldLocation output_location
void * malloc(size_t __size) __attribute__((__warn_unused_result__)) __attribute__((alloc_size(1)))
QudaPrecision clover_cuda_prec_precondition
QudaInvertParam inv_param
QudaPrecision & cuda_prec_sloppy
QudaPrecision cuda_prec_sloppy
QudaMassNormalization normalization
void setSpinorSiteSize(int n)
const char * get_mass_normalization_str(QudaMassNormalization type)
int solution_accumulator_pipeline
double tol_offset[QUDA_MAX_MULTI_SHIFT]
double true_res_offset[QUDA_MAX_MULTI_SHIFT]
QudaInvertParam newQudaInvertParam(void)
const char * get_recon_str(QudaReconstructType recon)
QudaPrecision cuda_prec_precondition
QudaCloverFieldOrder clover_order
void dw_4d_mat(void *out, void **gauge, void *in, double kappa, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm)
enum QudaMatPCType_s QudaMatPCType
cpuColorSpinorField * spinorOut
void mdw_matpc(void *out, void **gauge, void *in, double *kappa_b, double *kappa_c, QudaMatPCType matpc_type, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param, double mferm, double *b5, double *c5)
QudaGammaBasis gamma_basis
QudaPrecision cuda_prec_sloppy
const char * get_dslash_str(QudaDslashType type)
void clover_mat(void *out, void **gauge, void *clover, void *in, double kappa, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param)
double offset[QUDA_MAX_MULTI_SHIFT]
int use_sloppy_partial_accumulator
void tm_ndeg_matpc(void *outEven1, void *outEven2, void **gauge, void *inEven1, void *inEven2, double kappa, double mu, double epsilon, QudaMatPCType matpc_type, int daggerBit, QudaPrecision precision, QudaGaugeParam &gauge_param)
QudaReconstructType reconstruct
double norm_2(void *v, int len, QudaPrecision precision)
int rand(void) __attribute__((__availability__(swift
int compute_clover_inverse
void axpy(const double &a, ColorSpinorField &x, ColorSpinorField &y)
void construct_clover_field(void *clover, double norm, double diag, QudaPrecision precision)
void * memset(void *__b, int __c, size_t __len)
void wil_mat(void *out, void **gauge, void *in, double kappa, int dagger_bit, QudaPrecision precision, QudaGaugeParam &gauge_param)
QudaInverterType inv_type
QudaPrecision cuda_prec_precondition
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
void tmc_matpc(void *out, void **gauge, void *in, void *clover, void *cInv, double kappa, double mu, QudaTwistFlavorType flavor, QudaMatPCType matpc_type, int dagger, QudaPrecision precision, QudaGaugeParam &gauge_param)
QudaTwistFlavorType twist_flavor
enum QudaDslashType_s QudaDslashType
void mxpy(ColorSpinorField &x, ColorSpinorField &y)
QudaResidualType residual_type
void wil_matpc(void *outEven, void **gauge, void *inEven, double kappa, QudaMatPCType matpc_type, int daggerBit, QudaPrecision precision, QudaGaugeParam &gauge_param)
clock_t clock(void) __asm("_" "clock")
QudaDslashType dslash_type
QudaReconstructType link_recon_sloppy
cpuColorSpinorField * spinorTmp
QudaPrecision prec_sloppy
QudaInverterType precon_type
void read_gauge_field(const char *filename, void *gauge[], QudaPrecision prec, const int *X, int argc, char *argv[])
int gridsize_from_cmdline[]
QudaPrecision clover_cpu_prec
void initComms(int argc, char **argv, const int *commDims)
QudaPrecision prec_precondition
enum QudaInverterType_s QudaInverterType
QudaGaugeParam newQudaGaugeParam(void)
QudaPreserveSource preserve_source
enum QudaTwistFlavorType_s QudaTwistFlavorType