QUDA  v0.7.0
A library for QCD on GPUs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Namespaces | Macros | Functions | Variables
interface_quda.cpp File Reference
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <sys/time.h>
#include <quda.h>
#include <quda_fortran.h>
#include <quda_internal.h>
#include <comm_quda.h>
#include <tune_quda.h>
#include <blas_quda.h>
#include <gauge_field.h>
#include <dirac_quda.h>
#include <ritz_quda.h>
#include <dslash_quda.h>
#include <invert_quda.h>
#include <lanczos_quda.h>
#include <color_spinor_field.h>
#include <eig_variables.h>
#include <clover_field.h>
#include <llfat_quda.h>
#include <fat_force_quda.h>
#include <hisq_links_quda.h>
#include <algorithm>
#include <staggered_oprod.h>
#include <ks_improved_force.h>
#include <ks_force_quda.h>
#include <cuda.h>
#include "face_quda.h"
#include <gauge_update_quda.h>
#include "check_params.h"
#include <gauge_tools.h>
#include <blas_magma.h>

Go to the source code of this file.

Classes

struct  LexMapData
 

Namespaces

 quda
 

Macros

#define MAX(a, b)   ((a)>(b)? (a):(b))
 
#define TDIFF(a, b)   (b.tv_sec - a.tv_sec + 0.000001*(b.tv_usec - a.tv_usec))
 
#define spinorSiteSize   24
 
#define MAX_GPU_NUM_PER_NODE   16
 
#define INIT_PARAM
 
#define CHECK_PARAM
 
#define PRINT_PARAM
 
#define USE_EXTENDED_VOLUME
 

Functions

void openMagma ()
 
void closeMagma ()
 
void quda::printLaunchTimer ()
 
void setVerbosityQuda (QudaVerbosity verbosity, const char prefix[], FILE *outfile)
 
void initCommsGridQuda (int nDim, const int *dims, QudaCommsMap func, void *fdata)
 
void initQudaDevice (int dev)
 
void initQudaMemory ()
 
void initQuda (int dev)
 
void loadGaugeQuda (void *h_gauge, QudaGaugeParam *param)
 
void saveGaugeQuda (void *h_gauge, QudaGaugeParam *param)
 
void loadCloverQuda (void *h_clover, void *h_clovinv, QudaInvertParam *inv_param)
 
void freeGaugeQuda (void)
 
void freeSloppyGaugeQuda (void)
 
void freeCloverQuda (void)
 
void endQuda (void)
 
void quda::setDiracParam (DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
 
void quda::setDiracSloppyParam (DiracParam &diracParam, QudaInvertParam *inv_param, bool pc)
 
void quda::setDiracPreParam (DiracParam &diracParam, QudaInvertParam *inv_param, const bool pc)
 
void quda::createDirac (Dirac *&d, Dirac *&dSloppy, Dirac *&dPre, QudaInvertParam &param, const bool pc_solve)
 
void quda::massRescale (cudaColorSpinorField &b, QudaInvertParam &param)
 
void dslashQuda (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity parity)
 
void dslashQuda_4dpc (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity parity, int test_type)
 
void dslashQuda_mdwf (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity parity, int test_type)
 
void MatQuda (void *h_out, void *h_in, QudaInvertParam *inv_param)
 
void MatDagMatQuda (void *h_out, void *h_in, QudaInvertParam *inv_param)
 
quda::cudaGaugeFieldcheckGauge (QudaInvertParam *param)
 
void cloverQuda (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity parity, int inverse)
 
void lanczosQuda (int k0, int m, void *hp_Apsi, void *hp_r, void *hp_V, void *hp_alpha, void *hp_beta, QudaEigParam *eig_param)
 
void invertQuda (void *hp_x, void *hp_b, QudaInvertParam *param)
 
void invertMDQuda (void *hp_x, void *hp_b, QudaInvertParam *param)
 
void invertMultiShiftQuda (void **_hp_x, void *_hp_b, QudaInvertParam *param)
 
void invertMultiShiftMDQuda (void **_hp_xe, void **_hp_xo, void **_hp_ye, void **_hp_yo, void *_hp_b, QudaInvertParam *param)
 
void incrementalEigQuda (void *_h_x, void *_h_b, QudaInvertParam *param, void *_h_u, double *inv_eigenvals, int last_rhs)
 
int getGaugePadding (GaugeFieldParam &param)
 
int computeGaugeForceQuda (void *mom, void *siteLink, int ***input_path_buf, int *path_length, double *loop_coeff, int num_paths, int max_length, double eb3, QudaGaugeParam *qudaGaugeParam, double *timeinfo)
 
void createCloverQuda (QudaInvertParam *invertParam)
 
void * createGaugeField (void *gauge, int geometry, QudaGaugeParam *param)
 
void saveGaugeField (void *gauge, void *inGauge, QudaGaugeParam *param)
 
void * createExtendedGaugeField (void *gauge, int geometry, QudaGaugeParam *param)
 
void extendGaugeField (void *out, void *in)
 
void destroyQudaGaugeField (void *gauge)
 
void computeCloverTraceQuda (void *out, void *clov, int mu, int nu, int dim[4])
 
void computeCloverDerivativeQuda (void *out, void *gauge, void *oprod, int mu, int nu, double coeff, QudaParity parity, QudaGaugeParam *param, int conjugate)
 
void computeKSOprodQuda (void *oprod, void *fermion, double coeff, int X[4], QudaPrecision prec)
 
void computeStaggeredForceQuda (void *cudaMom, void *qudaQuark, double coeff)
 
void computeAsqtadForceQuda (void *const milc_momentum, long long *flops, const double act_path_coeff[6], const void *const one_link_src[4], const void *const naik_src[4], const void *const link, const QudaGaugeParam *gParam)
 
void computeHISQForceCompleteQuda (void *const milc_momentum, const double level2_coeff[6], const double fat7_coeff[6], void **quark_array, int num_terms, double **quark_coeff, const void *const w_link, const void *const v_link, const void *const u_link, const QudaGaugeParam *gParam)
 
void computeHISQForceQuda (void *const milc_momentum, long long *flops, const double level2_coeff[6], const double fat7_coeff[6], const void *const staple_src[4], const void *const one_link_src[4], const void *const naik_src[4], const void *const w_link, const void *const v_link, const void *const u_link, const QudaGaugeParam *gParam)
 
void computeStaggeredOprodQuda (void **oprod, void **fermion, int num_terms, double **coeff, QudaGaugeParam *param)
 
void updateGaugeFieldQuda (void *gauge, void *momentum, double dt, int conj_mom, int exact, QudaGaugeParam *param)
 
void init_quda_ (int *dev)
 
void init_quda_device_ (int *dev)
 
void init_quda_memory_ ()
 
void end_quda_ ()
 
void load_gauge_quda_ (void *h_gauge, QudaGaugeParam *param)
 
void free_gauge_quda_ ()
 
void free_sloppy_gauge_quda_ ()
 
void load_clover_quda_ (void *h_clover, void *h_clovinv, QudaInvertParam *inv_param)
 
void free_clover_quda_ (void)
 
void dslash_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity *parity)
 
void clover_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param, QudaParity *parity, int *inverse)
 
void mat_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param)
 
void mat_dag_mat_quda_ (void *h_out, void *h_in, QudaInvertParam *inv_param)
 
void invert_quda_ (void *hp_x, void *hp_b, QudaInvertParam *param)
 
void invert_md_quda_ (void *hp_x, void *hp_b, QudaInvertParam *param)
 
void invert_multishift_quda_ (void *hp_x[QUDA_MAX_MULTI_SHIFT], void *hp_b, QudaInvertParam *param)
 
void new_quda_gauge_param_ (QudaGaugeParam *param)
 
void new_quda_invert_param_ (QudaInvertParam *param)
 
void update_gauge_field_quda_ (void *gauge, void *momentum, double *dt, bool *conj_mom, bool *exact, QudaGaugeParam *param)
 
int compute_gauge_force_quda_ (void *mom, void *gauge, int *input_path_buf, int *path_length, double *loop_coeff, int *num_paths, int *max_length, double *dt, QudaGaugeParam *param)
 
void compute_staggered_force_quda_ (void *cudaMom, void *qudaQuark, double *coeff)
 
void apply_staggered_phase_quda_ ()
 
void remove_staggered_phase_quda_ ()
 
void comm_set_gridsize_ (int *grid)
 
void set_kernel_pack_t_ (int *pack)
 
double plaqCuda ()
 
void performAPEnStep (unsigned int nSteps, double alpha)
 

Variables

int numa_affinity_enabled = 1
 
cudaGaugeFieldgaugePrecise = NULL
 
cudaGaugeFieldgaugeSloppy = NULL
 
cudaGaugeFieldgaugePrecondition = NULL
 
cudaGaugeFieldgaugeExtended = NULL
 
cudaGaugeField *& gaugeFatPrecise = gaugePrecise
 
cudaGaugeField *& gaugeFatSloppy = gaugeSloppy
 
cudaGaugeField *& gaugeFatPrecondition = gaugePrecondition
 
cudaGaugeField *& gaugeFatExtended = gaugeExtended
 
cudaGaugeFieldgaugeLongExtended = NULL
 
cudaGaugeFieldgaugeLongPrecise = NULL
 
cudaGaugeFieldgaugeLongSloppy = NULL
 
cudaGaugeFieldgaugeLongPrecondition = NULL
 
cudaGaugeFieldgaugeSmeared = NULL
 
cudaCloverFieldcloverPrecise = NULL
 
cudaCloverFieldcloverSloppy = NULL
 
cudaCloverFieldcloverPrecondition = NULL
 
cudaCloverFieldcloverInvPrecise = NULL
 
cudaCloverFieldcloverInvSloppy = NULL
 
cudaCloverFieldcloverInvPrecondition = NULL
 
cudaGaugeFieldmomResident = NULL
 
cudaGaugeFieldextendedGaugeResident = NULL
 
cudaColorSpinorFieldsolutionResident = NULL
 
cudaDeviceProp deviceProp
 
cudaStream_t * streams
 

Macro Definition Documentation

#define CHECK_PARAM

Definition at line 64 of file interface_quda.cpp.

#define INIT_PARAM

Definition at line 59 of file interface_quda.cpp.

#define MAX (   a,
 
)    ((a)>(b)? (a):(b))

Definition at line 51 of file interface_quda.cpp.

#define MAX_GPU_NUM_PER_NODE   16

Definition at line 56 of file interface_quda.cpp.

#define PRINT_PARAM

Definition at line 69 of file interface_quda.cpp.

#define spinorSiteSize   24

Definition at line 54 of file interface_quda.cpp.

#define TDIFF (   a,
 
)    (b.tv_sec - a.tv_sec + 0.000001*(b.tv_usec - a.tv_usec))

Definition at line 52 of file interface_quda.cpp.

#define USE_EXTENDED_VOLUME

Function Documentation

void apply_staggered_phase_quda_ ( )

Apply the staggered phase factors to the resident gauge field

Definition at line 5124 of file interface_quda.cpp.

quda::cudaGaugeField* checkGauge ( QudaInvertParam param)

Definition at line 1722 of file interface_quda.cpp.

void closeMagma ( )

Definition at line 98 of file interface_quda.cpp.

void clover_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity parity,
int *  inverse 
)

Apply the clover operator or its inverse.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe source and destination parity of the field
inverseWhether to apply the inverse of the clover term

Definition at line 5066 of file interface_quda.cpp.

void cloverQuda ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity  parity,
int  inverse 
)

Definition at line 1752 of file interface_quda.cpp.

void comm_set_gridsize_ ( int *  grid)

BQCD wants a node mapping with x varying fastest.

Definition at line 5160 of file interface_quda.cpp.

int compute_gauge_force_quda_ ( void *  mom,
void *  gauge,
int *  input_path_buf,
int *  path_length,
double *  loop_coeff,
int *  num_paths,
int *  max_length,
double *  dt,
QudaGaugeParam qudaGaugeParam 
)

Compute the gauge force and update the mometum field

Parameters
momThe momentum field to be updated
gaugeThe gauge field from which we compute the force
input_path_buf[dim][num_paths][path_length](Fortran 3-d array)
path_lengthOne less that the number of links in a loop (e.g., 3 for a staple)
loop_coeffCoefficients of the different loops in the Symanzik action
num_pathsHow many contributions from path_length different "staples"
max_lengthThe maximum number of non-zero of links in any path in the action
dtThe integration step size (for MILC this is dt*beta/3)
paramThe parameters of the external fields and the computation settings

Definition at line 5091 of file interface_quda.cpp.

void compute_staggered_force_quda_ ( void *  cudaMom,
void *  qudaQuark,
double *  coeff 
)

Definition at line 5119 of file interface_quda.cpp.

void computeAsqtadForceQuda ( void *const  momentum,
long long *  flops,
const double  act_path_coeff[6],
const void *const  one_link_src[4],
const void *const  naik_src[4],
const void *const  link,
const QudaGaugeParam param 
)

Compute the fermion force for the asqtad quark action.

Parameters
momentumThe momentum contribution from the quark action.
act_path_coeffThe coefficients that define the asqtad action.
one_link_srcThe quark field outer product corresponding to the one-link term in the action.
naik_srcThe quark field outer product corresponding to the naik term in the action.
linkThe gauge field.
paramThe field parameters.

Definition at line 4235 of file interface_quda.cpp.

void computeCloverDerivativeQuda ( void *  out,
void *  gauge,
void *  oprod,
int  mu,
int  nu,
double  coeff,
QudaParity  parity,
QudaGaugeParam param,
int  conjugate 
)

Definition at line 4064 of file interface_quda.cpp.

void computeCloverTraceQuda ( void *  out,
void *  clov,
int  mu,
int  nu,
int  dim[4] 
)

Definition at line 4041 of file interface_quda.cpp.

int computeGaugeForceQuda ( void *  mom,
void *  sitelink,
int ***  input_path_buf,
int *  path_length,
double *  loop_coeff,
int  num_paths,
int  max_length,
double  dt,
QudaGaugeParam qudaGaugeParam,
double *  timeinfo 
)

Compute the gauge force and update the mometum field

Parameters
momThe momentum field to be updated
sitelinkThe gauge field from which we compute the force
input_path_buf[dim][num_paths][path_length]
path_lengthOne less that the number of links in a loop (e.g., 3 for a staple)
loop_coeffCoefficients of the different loops in the Symanzik action
num_pathsHow many contributions from path_length different "staples"
max_lengthThe maximum number of non-zero of links in any path in the action
dtThe integration step size (for MILC this is dt*beta/3)
paramThe parameters of the external fields and the computation settings
timeinfo

Definition at line 3608 of file interface_quda.cpp.

void computeHISQForceCompleteQuda ( void *const  milc_momentum,
const double  level2_coeff[6],
const double  fat7_coeff[6],
void **  quark_array,
int  num_terms,
double **  quark_coeff,
const void *const  w_link,
const void *const  v_link,
const void *const  u_link,
const QudaGaugeParam gParam 
)

Definition at line 4408 of file interface_quda.cpp.

void computeHISQForceQuda ( void *  momentum,
long long *  flops,
const double  level2_coeff[6],
const double  fat7_coeff[6],
const void *const  staple_src[4],
const void *const  one_link_src[4],
const void *const  naik_src[4],
const void *const  w_link,
const void *const  v_link,
const void *const  u_link,
const QudaGaugeParam param 
)

Compute the fermion force for the HISQ quark action.

Parameters
momentumThe momentum contribution from the quark action.
level2_coeffThe coefficients for the second level of smearing in the quark action.
fat7_coeffThe coefficients for the first level of smearing (fat7) in the quark action.
staple_srcQuark outer-product for the staple.
one_link_srcQuark outer-product for the one-link term in the action.
naik_srcQuark outer-product for the three-hop term in the action.
w_linkUnitarized link variables obtained by applying fat7 smearing and unitarization to the original links.
v_linkFat7 link variables.
u_linkSU(3) think link variables.
param.The field parameters.

Definition at line 4448 of file interface_quda.cpp.

void computeKSOprodQuda ( void *  oprod,
void *  fermion,
double  coeff,
int  X[4],
QudaPrecision  prec 
)

Definition at line 4149 of file interface_quda.cpp.

void computeStaggeredForceQuda ( void *  cudaMom,
void *  qudaQuark,
double  coeff 
)

Definition at line 4185 of file interface_quda.cpp.

void computeStaggeredOprodQuda ( void **  oprod,
void **  quark,
int  num,
double **  coeff,
QudaGaugeParam param 
)

Compute the quark-field outer product needed for gauge generation

Parameters
oprodThe outer product to be computed.
quarkThe input fermion field.
displacementThe fermion-field displacement in the outer product.
coeffThe coefficient multiplying the fermion fields in the outer product
paramThe parameters of the outer-product field.

Definition at line 4705 of file interface_quda.cpp.

void createCloverQuda ( QudaInvertParam invertParam)

Definition at line 3776 of file interface_quda.cpp.

void* createExtendedGaugeField ( void *  gauge,
int  geometry,
QudaGaugeParam param 
)

Take a gauge field on the host, extend it and load it onto the device. Return a pointer to the extended gauge field.

Definition at line 3939 of file interface_quda.cpp.

void* createGaugeField ( void *  gauge,
int  geometry,
QudaGaugeParam param 
)

Definition at line 3891 of file interface_quda.cpp.

void destroyQudaGaugeField ( void *  gauge)

Reinterpret gauge as a pointer to cudaGaugeField and call destructor.

Definition at line 4035 of file interface_quda.cpp.

void dslash_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity parity 
)

Apply the Dslash operator (D_{eo} or D_{oe}).

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe destination parity of the field

Definition at line 5064 of file interface_quda.cpp.

void dslashQuda ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity  parity 
)

Apply the Dslash operator (D_{eo} or D_{oe}).

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe destination parity of the field

Definition at line 1329 of file interface_quda.cpp.

void dslashQuda_4dpc ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity  parity,
int  test_type 
)

Apply the Dslash operator (D_{eo} or D_{oe}) for 4D EO preconditioned DWF.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe destination parity of the field
test_typeChoose a type of dslash operators

Definition at line 1411 of file interface_quda.cpp.

void dslashQuda_mdwf ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param,
QudaParity  parity,
int  test_type 
)

Apply the Dslash operator (D_{eo} or D_{oe}) for Mobius DWF.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage
parityThe destination parity of the field
test_typeChoose a type of dslash operators

Definition at line 1487 of file interface_quda.cpp.

void end_quda_ ( void  )

Finalize the library.

Definition at line 5057 of file interface_quda.cpp.

void endQuda ( void  )

Finalize the library.

Definition at line 1018 of file interface_quda.cpp.

void extendGaugeField ( void *  out,
void *  in 
)

Definition at line 4021 of file interface_quda.cpp.

void free_clover_quda_ ( void  )

Free QUDA's internal copy of the clover term and/or clover inverse.

Definition at line 5063 of file interface_quda.cpp.

void free_gauge_quda_ ( void  )

Free QUDA's internal copy of the gauge field.

Definition at line 5059 of file interface_quda.cpp.

void free_sloppy_gauge_quda_ ( void  )

Free QUDA's internal copy of the gauge field.

Definition at line 5060 of file interface_quda.cpp.

void freeCloverQuda ( void  )

Free QUDA's internal copy of the clover term and/or clover inverse.

Definition at line 996 of file interface_quda.cpp.

void freeGaugeQuda ( void  )

Free QUDA's internal copy of the gauge field.

Definition at line 929 of file interface_quda.cpp.

void freeSloppyGaugeQuda ( void  )

Definition at line 973 of file interface_quda.cpp.

int getGaugePadding ( GaugeFieldParam param)

Definition at line 3588 of file interface_quda.cpp.

void incrementalEigQuda ( void *  _h_x,
void *  _h_b,
QudaInvertParam param,
void *  _h_u,
double *  inv_eigenvals,
int  last_rhs 
)

Deflated solvers interface (e.g., based on invremental deflation space constructors, like incremental eigCG).

Parameters
_h_xOutnput: array of solution spinor fields (typically O(10))
_h_bInput: array of source spinor fields (typically O(10))
_h_uInput/Output: array of Ritz spinor fields (typically O(100))
_h_hInput/Output: complex projection mutirx (typically O(100))
paramContains all metadata regarding host and device storage and solver parameters

half precision Dirac field (for the initCG)

Definition at line 3071 of file interface_quda.cpp.

void init_quda_ ( int *  device)

Initialize the library. Under the interface this just calls initQudaMemory and initQudaDevice.

Parameters
deviceCUDA device number to use. In a multi-GPU build, this parameter may be either set explicitly on a per-process basis or set to -1 to enable a default allocation of devices to processes.

Definition at line 5054 of file interface_quda.cpp.

void init_quda_device_ ( int *  device)

Initialize the library. This is a low-level interface that is called by initQuda. Calling initQudaDevice requires that the user also call initQudaMemory before using QUDA.

Parameters
deviceCUDA device number to use. In a multi-GPU build, this parameter may either be set explicitly on a per-process basis or set to -1 to enable a default allocation of devices to processes.

Definition at line 5055 of file interface_quda.cpp.

void init_quda_memory_ ( )

Initialize the library persistant memory allocations (both host and device). This is a low-level interface that is called by initQuda. Calling initQudaMemory requires that the user has previously called initQudaDevice.

Definition at line 5056 of file interface_quda.cpp.

void initCommsGridQuda ( int  nDim,
const int *  dims,
QudaCommsMap  func,
void *  fdata 
)

Declare the grid mapping ("logical topology" in QMP parlance) used for communications in a multi-GPU grid. This function should be called prior to initQuda(). The only case in which it's optional is when QMP is used for communication and the logical topology has already been declared by the application.

Parameters
nDimNumber of grid dimensions. "4" is the only supported value currently.
dimsArray of grid dimensions. dims[0]*dims[1]*dims[2]*dims[3] must equal the total number of MPI ranks or QMP nodes.
funcPointer to a user-supplied function that maps coordinates in the communication grid to MPI ranks (or QMP node IDs). If the pointer is NULL, the default mapping depends on whether QMP or MPI is being used for communication. With QMP, the existing logical topology is used if it's been declared. With MPI or as a fallback with QMP, the default ordering is lexicographical with the fourth ("t") index varying fastest.
fdataPointer to any data required by "func" (may be NULL)
See Also
QudaCommsMap

Definition at line 254 of file interface_quda.cpp.

void initQuda ( int  device)

Initialize the library. This function is actually a wrapper around calls to initQudaDevice() and initQudaMemory().

Parameters
deviceCUDA device number to use. In a multi-GPU build, this parameter may either be set explicitly on a per-process basis or set to -1 to enable a default allocation of devices to processes.

Definition at line 428 of file interface_quda.cpp.

void initQudaDevice ( int  device)

Initialize the library. This is a low-level interface that is called by initQuda. Calling initQudaDevice requires that the user also call initQudaMemory before using QUDA.

Parameters
deviceCUDA device number to use. In a multi-GPU build, this parameter may either be set explicitly on a per-process basis or set to -1 to enable a default allocation of devices to processes.

Definition at line 320 of file interface_quda.cpp.

void initQudaMemory ( )

Initialize the library persistant memory allocations (both host and device). This is a low-level interface that is called by initQuda. Calling initQudaMemory requires that the user has previously called initQudaDevice.

Definition at line 398 of file interface_quda.cpp.

void invert_md_quda_ ( void *  hp_x,
void *  hp_b,
QudaInvertParam param 
)

Definition at line 5074 of file interface_quda.cpp.

void invert_multishift_quda_ ( void *  hp_x[QUDA_MAX_MULTI_SHIFT],
void *  hp_b,
QudaInvertParam param 
)

Definition at line 5076 of file interface_quda.cpp.

void invert_quda_ ( void *  h_x,
void *  h_b,
QudaInvertParam param 
)

Perform the solve, according to the parameters set in param. It is assumed that the gauge field has already been loaded via loadGaugeQuda().

Parameters
h_xSolution spinor field
h_bSource spinor field
paramContains all metadata regarding host and device storage and solver parameters

Definition at line 5072 of file interface_quda.cpp.

void invertMDQuda ( void *  hp_x,
void *  hp_b,
QudaInvertParam param 
)

Definition at line 2217 of file interface_quda.cpp.

void invertMultiShiftMDQuda ( void **  _hp_xe,
void **  _hp_xo,
void **  _hp_ye,
void **  _hp_yo,
void *  _hp_b,
QudaInvertParam param 
)

Solve for multiple shifts (e.g., masses). This is a special variant of the multi-shift solver where the additional vectors required for force computation are also returned.

Parameters
_hp_xeArray of solution spinor fields
_hp_xoArray of fields with A_oo^{-1} D_oe * x
_hp_yeArray of fields with M_ee * x
_hp_yoArray of fields with A_oo^{-1} D_oe * M_ee * x
_hp_bArray of source spinor fields
paramContains all metadata regarding host and device storage and solver parameters

Definition at line 2767 of file interface_quda.cpp.

void invertMultiShiftQuda ( void **  _hp_x,
void *  _hp_b,
QudaInvertParam param 
)

Generic version of the multi-shift solver. Should work for most fermions. Note that offset[0] is not folded into the mass parameter.

At present, the solution_type must be MATDAG_MAT or MATPCDAG_MATPC, and solve_type must be NORMOP or NORMOP_PC. The solution and solve preconditioning have to match.

Definition at line 2473 of file interface_quda.cpp.

void invertQuda ( void *  h_x,
void *  h_b,
QudaInvertParam param 
)

Perform the solve, according to the parameters set in param. It is assumed that the gauge field has already been loaded via loadGaugeQuda().

Parameters
h_xSolution spinor field
h_bSource spinor field
paramContains all metadata regarding host and device storage and solver parameters

Definition at line 1977 of file interface_quda.cpp.

void lanczosQuda ( int  k0,
int  m,
void *  hp_Apsi,
void *  hp_r,
void *  hp_V,
void *  hp_alpha,
void *  hp_beta,
QudaEigParam eig_param 
)

Perform the solve, according to the parameters set in param. It is assumed that the gauge field has already been loaded via loadGaugeQuda().

Parameters
h_xSolution spinor field
h_bSource spinor field
paramContains all metadata regarding host and device storage and solver parameters

Definition at line 1824 of file interface_quda.cpp.

void load_clover_quda_ ( void *  h_clover,
void *  h_clovinv,
QudaInvertParam inv_param 
)

Load the clover term and/or the clover inverse from the host. Either h_clover or h_clovinv may be set to NULL.

Parameters
h_cloverBase pointer to host clover field
h_cloverinvBase pointer to host clover inverse field
inv_paramContains all metadata regarding host and device storage

Definition at line 5061 of file interface_quda.cpp.

void load_gauge_quda_ ( void *  h_gauge,
QudaGaugeParam param 
)

Load the gauge field from the host.

Parameters
h_gaugeBase pointer to host gauge field (regardless of dimensionality)
paramContains all metadata regarding host and device storage

Definition at line 5058 of file interface_quda.cpp.

void loadCloverQuda ( void *  h_clover,
void *  h_clovinv,
QudaInvertParam inv_param 
)

Load the clover term and/or the clover inverse from the host. Either h_clover or h_clovinv may be set to NULL.

Parameters
h_cloverBase pointer to host clover field
h_cloverinvBase pointer to host clover inverse field
inv_paramContains all metadata regarding host and device storage

Definition at line 659 of file interface_quda.cpp.

void loadGaugeQuda ( void *  h_gauge,
QudaGaugeParam param 
)

Load the gauge field from the host.

Parameters
h_gaugeBase pointer to host gauge field (regardless of dimensionality)
paramContains all metadata regarding host and device storage

Definition at line 452 of file interface_quda.cpp.

void mat_dag_mat_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param 
)

Apply M^{}M, possibly even/odd preconditioned.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage

Definition at line 5070 of file interface_quda.cpp.

void mat_quda_ ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param 
)

Apply the full Dslash matrix, possibly even/odd preconditioned.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage

Definition at line 5068 of file interface_quda.cpp.

void MatDagMatQuda ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param 
)

Apply M^{}M, possibly even/odd preconditioned.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage

Definition at line 1643 of file interface_quda.cpp.

void MatQuda ( void *  h_out,
void *  h_in,
QudaInvertParam inv_param 
)

Apply the full Dslash matrix, possibly even/odd preconditioned.

Parameters
h_outResult spinor field
h_inInput spinor field
paramContains all metadata regarding host and device storage

Definition at line 1567 of file interface_quda.cpp.

void new_quda_gauge_param_ ( QudaGaugeParam param)

Initializes the QudaGaugeParam with default entries.

Parameters
TheQudaGaugeParam to be initialized

Definition at line 5078 of file interface_quda.cpp.

void new_quda_invert_param_ ( QudaInvertParam param)

Initializes the QudaInvertParam with default entries.

Parameters
TheQudaInvertParam to be initialized

Definition at line 5081 of file interface_quda.cpp.

void openMagma ( )

Open/Close MAGMA library

Definition at line 87 of file interface_quda.cpp.

void performAPEnStep ( unsigned int  nSteps,
double  alpha 
)

Definition at line 5210 of file interface_quda.cpp.

double plaqCuda ( )

Definition at line 5176 of file interface_quda.cpp.

void remove_staggered_phase_quda_ ( )

Remove the staggered phase factors to the resident gauge field

Definition at line 5134 of file interface_quda.cpp.

void saveGaugeField ( void *  gauge,
void *  inGauge,
QudaGaugeParam param 
)

Definition at line 3921 of file interface_quda.cpp.

void saveGaugeQuda ( void *  h_gauge,
QudaGaugeParam param 
)

Save the gauge field to the host.

Parameters
h_gaugeBase pointer to host gauge field (regardless of dimensionality)
paramContains all metadata regarding host and device storage

Definition at line 623 of file interface_quda.cpp.

void set_kernel_pack_t_ ( int *  pack)

Exposed due to poor derived MPI datatype performance with GPUDirect RDMA

Definition at line 5170 of file interface_quda.cpp.

void setVerbosityQuda ( QudaVerbosity  verbosity,
const char  prefix[],
FILE *  outfile 
)

Set parameters related to status reporting.

In typical usage, this function will be called once (or not at all) just before the call to initQuda(), but it's valid to call it any number of times at any point during execution. Prior to the first time it's called, the parameters take default values as indicated below.

Parameters
verbosityDefault verbosity, ranging from QUDA_SILENT to QUDA_DEBUG_VERBOSE. Within a solver, this parameter is overridden by the "verbosity" member of QudaInvertParam. The default value is QUDA_SUMMARIZE.
prefixString to prepend to all messages from QUDA. This defaults to the empty string (""), but you may wish to specify something like "QUDA: " to distinguish QUDA's output from that of your application.
outfileFile pointer (such as stdout, stderr, or a handle returned by fopen()) where messages should be printed. The default is stdout.

Definition at line 214 of file interface_quda.cpp.

void update_gauge_field_quda_ ( void *  gauge,
void *  momentum,
double *  dt,
bool *  conj_mom,
bool *  exact,
QudaGaugeParam param 
)

Evolve the gauge field by step size dt, using the momentum field I.e., Evalulate U(t+dt) = e(dt pi) U(t)

Parameters
gaugeThe gauge field to be updated
momentumThe momentum field
dtThe integration step size step
conj_momWhether to conjugate the momentum matrix
exactWhether to use an exact exponential or Taylor expand
paramThe parameters of the external fields and the computation settings

Definition at line 5085 of file interface_quda.cpp.

void updateGaugeFieldQuda ( void *  gauge,
void *  momentum,
double  dt,
int  conj_mom,
int  exact,
QudaGaugeParam param 
)

Evolve the gauge field by step size dt, using the momentum field I.e., Evalulate U(t+dt) = e(dt pi) U(t)

Parameters
gaugeThe gauge field to be updated
momentumThe momentum field
dtThe integration step size step
conj_momWhether to conjugate the momentum matrix
exactWhether to use an exact exponential or Taylor expand
paramThe parameters of the external fields and the computation settings

Definition at line 4936 of file interface_quda.cpp.

Variable Documentation

cudaCloverField* cloverInvPrecise = NULL

Definition at line 129 of file interface_quda.cpp.

cudaCloverField* cloverInvPrecondition = NULL

Definition at line 131 of file interface_quda.cpp.

cudaCloverField* cloverInvSloppy = NULL

Definition at line 130 of file interface_quda.cpp.

cudaCloverField* cloverPrecise = NULL

Definition at line 125 of file interface_quda.cpp.

cudaCloverField* cloverPrecondition = NULL

Definition at line 127 of file interface_quda.cpp.

cudaCloverField* cloverSloppy = NULL

Definition at line 126 of file interface_quda.cpp.

cudaDeviceProp deviceProp

Definition at line 138 of file interface_quda.cpp.

cudaGaugeField* extendedGaugeResident = NULL

Definition at line 134 of file interface_quda.cpp.

cudaGaugeField* gaugeExtended = NULL

Definition at line 109 of file interface_quda.cpp.

cudaGaugeField*& gaugeFatExtended = gaugeExtended

Definition at line 115 of file interface_quda.cpp.

cudaGaugeField*& gaugeFatPrecise = gaugePrecise

Definition at line 112 of file interface_quda.cpp.

cudaGaugeField*& gaugeFatPrecondition = gaugePrecondition

Definition at line 114 of file interface_quda.cpp.

cudaGaugeField*& gaugeFatSloppy = gaugeSloppy

Definition at line 113 of file interface_quda.cpp.

cudaGaugeField* gaugeLongExtended = NULL

Definition at line 118 of file interface_quda.cpp.

cudaGaugeField* gaugeLongPrecise = NULL

Definition at line 119 of file interface_quda.cpp.

cudaGaugeField* gaugeLongPrecondition = NULL

Definition at line 121 of file interface_quda.cpp.

cudaGaugeField* gaugeLongSloppy = NULL

Definition at line 120 of file interface_quda.cpp.

cudaGaugeField* gaugePrecise = NULL

Definition at line 106 of file interface_quda.cpp.

cudaGaugeField* gaugePrecondition = NULL

Definition at line 108 of file interface_quda.cpp.

cudaGaugeField* gaugeSloppy = NULL

Definition at line 107 of file interface_quda.cpp.

cudaGaugeField* gaugeSmeared = NULL

Definition at line 123 of file interface_quda.cpp.

cudaGaugeField* momResident = NULL

Definition at line 133 of file interface_quda.cpp.

int numa_affinity_enabled = 1

Definition at line 75 of file interface_quda.cpp.

cudaColorSpinorField* solutionResident = NULL

Definition at line 136 of file interface_quda.cpp.

cudaStream_t* streams

Definition at line 139 of file interface_quda.cpp.