15 extern void usage(
char** argv);
60 for(
int dir=0; dir<4; ++dir){
61 for(
int i=0; i<
V*18; ++i){
63 double* ptr = ((
double**)field)[dir] + i;
64 *ptr += (rand() - RAND_MAX/2.0)/(20.0*RAND_MAX);
66 float* ptr = ((
float**)field)[dir]+i;
67 *ptr += (rand() - RAND_MAX/2.0)/(20.0*RAND_MAX);
83 gaugeParam.
X[0] =
xdim;
84 gaugeParam.
X[1] =
ydim;
85 gaugeParam.
X[2] =
zdim;
86 gaugeParam.
X[3] =
tdim;
151 const double hisq_force_filter = 5e-5;
152 const double max_det_error = 1e-12;
153 const bool allow_svd =
true;
154 const bool svd_only =
false;
155 const double svd_rel_err = 1e-8;
156 const double svd_abs_err = 1e-8;
163 if(cudaMalloc(&num_failures_dev,
sizeof(
int)) != cudaSuccess){
164 errorQuda(
"cudaMalloc failed for num_failures_dev\n");
166 cudaMemset(num_failures_dev, 0,
sizeof(
int));
179 printfQuda(
"Comparing CPU and GPU results\n");
180 for(
int dir=0; dir<4; ++dir){
186 printfQuda(
"Dir:%d Test %s\n",dir,(1 == res) ?
"PASSED" :
"FAILED");
196 printfQuda(
"running the following fermion force computation test:\n");
198 printfQuda(
"link_precision link_reconstruct space_dim(x/y/z) T_dimension\n");
211 for (i =1;i < argc; i++){
217 fprintf(stderr,
"ERROR: Invalid option:%s\n", argv[i]);
static void hisq_force_test()
QudaGhostExchange ghostExchange
static void hisq_force_init()
cudaGaugeField * cudaResult
enum QudaPrecision_s QudaPrecision
void saveCPUField(cpuGaugeField &cpu) const
Upload from this field into a CPU field.
void setUnitarizeForceConstants(double unitarize_eps, double hisq_force_filter, double max_det_error, bool allow_svd, bool svd_only, double svd_rel_error, double svd_abs_error)
Set the constant parameters for the force unitarization.
int main(int argc, char **argv)
int process_command_line_option(int argc, char **argv, int *idx)
static QudaGaugeParam gaugeParam
void unitarizeForce(cudaGaugeField &newForce, const cudaGaugeField &oldForce, const cudaGaugeField &gauge, int *unitarization_failed)
Unitarize the fermion force.
cpuGaugeField * cpuResult
void setPrecision(QudaPrecision precision)
QudaGaugeFieldOrder gauge_order
int compare_floats(void *a, void *b, int len, double epsilon, QudaPrecision precision)
const char * get_prec_str(QudaPrecision prec)
void unitarizeForceCPU(cpuGaugeField &newForce, const cpuGaugeField &oldForce, const cpuGaugeField &gauge)
Unitarize the fermion force on CPU.
void createSiteLinkCPU(void **link, QudaPrecision precision, int phase)
cpuGaugeField * cpuReference
void loadCPUField(const cpuGaugeField &cpu)
Download into this field from a CPU field.
void initQuda(int device)
static void display_test_info()
cpuGaugeField * cpuFatLink
cudaGaugeField * cudaFatLink
const char * get_recon_str(QudaReconstructType recon)
QudaGaugeFieldOrder order
QudaReconstructType link_recon
QudaReconstructType reconstruct
cudaGaugeField * cudaOprod
static void hisq_force_end()
enum QudaReconstructType_s QudaReconstructType
Main header file for the QUDA library.
static double unitarize_eps
int gridsize_from_cmdline[]
void createNoisyLinkCPU(void **field, QudaPrecision prec, int seed)
void comm_allreduce_int(int *data)
void initComms(int argc, char **argv, int *const commDims)
QudaPrecision cpu_hw_prec