Classes | |
| struct | Bilinear_a |
| Structure of arrays for Hermitian bilinear \(X_{\mu\nu}\) in memory. More... | |
| struct | Bilinear |
| Hermitian bilinear \(X_{\mu\nu}\) on the local stack. More... | |
Functions | |
| void | CalcXmunu (Bilinear_a Xmunu, Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, const unsigned short mu, const unsigned short nu) |
| Gets \(X_{\mu\nu}\) for the clover force. | |
| void | Clov_Force (double *dSdpi, Complex_f *ut[2], Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, unsigned int *iu, unsigned int *id, const float akappa) |
| Gets the clover contribution to the force. | |
| void | cuCalcXmunu (Bilinear_a Xmunu, Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, const unsigned short mu, const unsigned short nu) |
| CUDA wrapper for CalcXmunu. Only called during testing to be honest. | |
| int | cuClov_Force (double *dSdpi, Complex_f *ut[nc], Complex_f *X1, Complex_f *X2, const Complex_f *sigval, const unsigned short *sigin, const unsigned int *iu, const unsigned int *id, const float akappa) |
| CUDA wrapper for Clover_Force. | |
| static void | GetBilinear (Complex_f Z[nc *nc], Bilinear_a Xmn, unsigned int ind) |
| Loads the compacted bilinear form into a \(2\times2\) complex valued matrix. | |
| static void | GLeft (Complex_f out[4], const Complex_f G[2], const Complex_f X[4]) |
| Multiplies \( X_{\mu\nu}\) by a gauge field from the left. | |
| static void | GRight (Complex_f out[4], const Complex_f G[2], const Complex_f X[4]) |
| Multiplies \( X_{\mu\nu}\) by a gauge field from the right. | |
| static void | GSandwich (Complex_f out[4], Complex_f tmp[4], const Complex_f Gl[2], const Complex_f X[4], const Complex_f Gr[2]) |
| Multiplies \( X_{\mu\nu}\) by a gauge field from the left and the right. | |
| template<typename T> | |
| __device__ void | Device::cuByGenLeft (T a[nc], const unsigned short gen) |
| Multiply leaf (or part of one) by generator from left. | |
| template<typename T> | |
| __device__ void | Device::cuByGenRight (T a[nc], const unsigned short gen) |
| Multiply leaf (or part of one) by generator from right. | |
| template<typename T> | |
| __device__ void | Device::cuGLeft (T out[4], const T G[2], const T X[4]) |
| Multiplies \( X_{\mu\nu}\) by a gauge field from the left. | |
| template<typename T> | |
| __device__ void | Device::cuGRight (T out[4], const T G[2], const T X[4]) |
| Multiplies \( X_{\mu\nu}\) by a gauge field from the right. | |
| template<typename T> | |
| __device__ void | Device::cuGSandwich (T out[4], T tmp[4], const T Gl[2], const T X[4], const T Gr[2]) |
| Multiplies \( X_{\mu\nu}\) by a gauge field from the left and the right. | |
| __device__ void | Device::GetBilinear (Complex_f Z[nc *nc], Bilinear_a Xmn, unsigned int ind) |
| Loads the compacted bilinear form into a \(2\times2\) complex valued matrix. | |
| template<typename T> | |
| __global__ void | Kernels::cuCalcXmunu (Bilinear_a Xmunu, const complex< T > *X1, const complex< T > *X2, const complex< T > *sigval, const unsigned short *sigin, const unsigned short clov) |
| Gets \(X_{\mu\nu}\) for the clover force. | |
| template<typename T> | |
| __global__ void | Kernels::Clov_Force (double *dSdpi, const complex< T > *u11t, const complex< T > *u12t, Bilinear_a Xmn, const complex< T > *sigval, const unsigned short *sigin, const unsigned int *iu, const unsigned int *id, const float akappa, const unsigned short mu, const unsigned short nu) |
| cuGets the clover contribution to the force | |
| void CalcXmunu | ( | Bilinear_a | Xmunu, |
| Complex_f * | X1, | ||
| Complex_f * | X2, | ||
| const Complex_f * | sigval, | ||
| const unsigned short * | sigin, | ||
| const unsigned short | mu, | ||
| const unsigned short | nu ) |
Gets \(X_{\mu\nu}\) for the clover force.
| [out] | Xmunu | All Xmunu values |
| [in] | X1 | Congrad output \(\left(M^\dagger M\right)\Phi\) |
| [in] | X2 | \(M\left(M^\dagger M\right)^{-1}\Phi\) |
| [in] | sigval | \(\sigma_{\mu\nu}\) scaled by \(\frac{c_\text{SW}}{2}\) |
| [in] | sigin | Dirac index of \(\sigma_{\mu\nu}\) |
| [in] | mu,nu | Lattice directions |
Xmunu Definition at line 445 of file clover.c.
References Complex_f, creal, cuCalcXmunu(), Bilinear::diag, Bilinear_a::diag, kvol, kvolHalo, nc, ndirac, Bilinear::offd, and Bilinear_a::offd.
| void Clov_Force | ( | double * | dSdpi, |
| Complex_f * | ut[2], | ||
| Complex_f * | X1, | ||
| Complex_f * | X2, | ||
| const Complex_f * | sigval, | ||
| const unsigned short * | sigin, | ||
| unsigned int * | iu, | ||
| unsigned int * | id, | ||
| const float | akappa ) |
Gets the clover contribution to the force.
| [in,out] | dSdpi | Force |
| [in] | ut | Gauge fields |
| [in] | X1 | Congrad output \(\left(M^\dagger M\right)\Phi\) |
| [in] | X2 | \(M\left(M^\dagger M\right)^{-1}\Phi\) |
| [in] | sigval | \(\sigma_{\mu\nu}\) scaled by \(\frac{c_\text{SW}}{2}\) |
| [in] | sigin | Dirac index of \(\sigma_{\mu\nu}\) |
| [in] | iu,id | Neighbouring sites |
| [in] | akappa | Hopping parameter |
dSdpi Definition at line 542 of file clover.c.
References AVX, ByGenLeft(), CalcXmunu(), CHalo_swap_all(), Complex_f, cuClov_Force(), Bilinear_a::diag, GetBilinear(), GLeft(), GRight(), GSandwich(), I, kvol, kvolHalo, nadj, nc, ndim, Bilinear_a::offd, and SHalo_swap_all().
| __global__ void Kernels::Clov_Force | ( | double * | dSdpi, |
| const complex< T > * | u11t, | ||
| const complex< T > * | u12t, | ||
| Bilinear_a | Xmn, | ||
| const complex< T > * | sigval, | ||
| const unsigned short * | sigin, | ||
| const unsigned int * | iu, | ||
| const unsigned int * | id, | ||
| const float | akappa, | ||
| const unsigned short | mu, | ||
| const unsigned short | nu ) |
cuGets the clover contribution to the force
| [out] | dSdpi | Force. |
| [in] | u11t,u12t | Gauge fields |
| [in] | Xmn | Pseudofermion bilinear contraction |
| [in] | sigval | \(\sigma_{\mu\nu}\) scaled by \(\frac{c_\text{SW}}{2}\) |
| [in] | sigin | Dirac index of \(\sigma_{\mu\nu}\) |
| [in] | iu,id | Neighbouring sites |
| [in] | akappa | Hopping Parameter |
| [in] | mu,nu | Clover direction |
dSdpi Definition at line 427 of file cuclover.cu.
References conj(), creal, Device::cuByGenLeft(), Device::cuGLeft(), Device::cuGRight(), Device::cuGSandwich(), Device::GetBilinear(), I_f, kvol, kvolHalo, nadj, nc, and ndim.
| __device__ void Device::cuByGenLeft | ( | T | a[nc], |
| const unsigned short | gen ) |
Multiply leaf (or part of one) by generator from left.
The leaves contributing to each force term need to be scaled by the generator, but the generator appears at different points in each leaf. This routine multiples by the generator from the left side.
| [in,out] | a | The leaf or partial leaf. Result saved in place |
| [in] | gen | What generator are we multiplying by? |
\(i\sigma_x\)
\(i\sigma_y\)
\(i\sigma_z\)
Definition at line 24 of file cuclover.cu.
| __device__ void Device::cuByGenRight | ( | T | a[nc], |
| const unsigned short | gen ) |
Multiply leaf (or part of one) by generator from right.
The leaves contributing to each force term need to be scaled by the generator, but the generator appears at different points in each leaf. This routine multiples by the generator from the right side.
| [in,out] | a | The leaf or partial leaf. Result saved in place |
| [in] | gen | What generator are we multiplying by? |
\(i\sigma_x\)
\(i\sigma_y\)
\(i\sigma_z\)
Definition at line 56 of file cuclover.cu.
References nc.
| void cuCalcXmunu | ( | Bilinear_a | Xmunu, |
| Complex_f * | X1, | ||
| Complex_f * | X2, | ||
| const Complex_f * | sigval, | ||
| const unsigned short * | sigin, | ||
| const unsigned short | mu, | ||
| const unsigned short | nu ) |
CUDA wrapper for CalcXmunu. Only called during testing to be honest.
| [out] | Xmunu | All Xmunu values |
| [in] | X1 | Congrad output \(\left(M^\dagger M\right)\Phi\) |
| [in] | X2 | \(M\left(M^\dagger M\right)^{-1}\Phi\) |
| [in] | sigval | \(\sigma_{\mu\nu}\) scaled by \(\frac{c_\text{SW}}{2}\) |
| [in] | sigin | Dirac index of \(\sigma_{\mu\nu}\) |
| [in] | mu,nu | Lattice directions |
Xmunu Definition at line 729 of file cuclover.cu.
References Complex_f, and Kernels::cuCalcXmunu().
| __global__ void Kernels::cuCalcXmunu | ( | Bilinear_a | Xmunu, |
| const complex< T > * | X1, | ||
| const complex< T > * | X2, | ||
| const complex< T > * | sigval, | ||
| const unsigned short * | sigin, | ||
| const unsigned short | clov ) |
Gets \(X_{\mu\nu}\) for the clover force.
| [out] | Xmunu | All Xmunu values |
| [in] | X1 | Congrad output \(\left(M^\dagger M\right)\Phi\) |
| [in] | X2 | \(M\left(M^\dagger M\right)^{-1}\Phi\) |
| [in] | sigval | \(\sigma_{\mu\nu}\) scaled by \(\frac{c_\text{SW}}{2}\) |
| [in] | sigin | Dirac index of \(\sigma_{\mu\nu}\) |
| [in] | clov | Index of clover being used |
Xmunu overwritten Definition at line 369 of file cuclover.cu.
References conj(), Bilinear::diag, Bilinear_a::diag, kvol, kvolHalo, nc, ndirac, Bilinear::offd, and Bilinear_a::offd.
| int cuClov_Force | ( | double * | dSdpi, |
| Complex_f * | ut[nc], | ||
| Complex_f * | X1, | ||
| Complex_f * | X2, | ||
| const Complex_f * | sigval, | ||
| const unsigned short * | sigin, | ||
| const unsigned int * | iu, | ||
| const unsigned int * | id, | ||
| const float | akappa ) |
CUDA wrapper for Clover_Force.
| [in,out] | dSdpi | Force |
| [in] | ut | Gauge fields |
| [in] | X1 | \(\left(M^\dagger M\right)^{-1} \Psi\) |
| [in] | X2 | \(M\left(M^\dagger M\right)^{-1} \Psi\) |
| [in] | sigval | \( \sigma_{\mu\nu}\) entries scaled by \(c_sw\) |
| [in] | sigin | What element of the spinor is multiplied by row idirac each sigma matrix? |
| [in] | iu,id | Up/down indices |
| [in] | akappa | Hopping parameter |
dSdpi Definition at line 736 of file cuclover.cu.
References Kernels::Clov_Force(), Complex_f, Kernels::cuCalcXmunu(), cudaDeviceSynchronise, kvol, nc, ndim, and streams.
| __device__ void Device::cuGLeft | ( | T | out[4], |
| const T | G[2], | ||
| const T | X[4] ) |
Multiplies \( X_{\mu\nu}\) by a gauge field from the left.
| [out] | out | Result |
| [in] | X | \(X_{\mu\nu}(x)\) |
| [in] | G | Gauge field |
Definition at line 224 of file cuclover.cu.
References conj().
| __device__ void Device::cuGRight | ( | T | out[4], |
| const T | G[2], | ||
| const T | X[4] ) |
Multiplies \( X_{\mu\nu}\) by a gauge field from the right.
| [out] | out | Result |
| [in] | X | \(X_{\mu\nu}(x)\) |
| [in] | G | Gauge field |
Definition at line 240 of file cuclover.cu.
References conj().
| __device__ void Device::cuGSandwich | ( | T | out[4], |
| T | tmp[4], | ||
| const T | Gl[2], | ||
| const T | X[4], | ||
| const T | Gr[2] ) |
Multiplies \( X_{\mu\nu}\) by a gauge field from the left and the right.
| [out] | out | Result |
| [in] | tmp | Buffer for intermediate result. Passing as an argument to reduce register pressure. |
| [in] | X | \(X_{\mu\nu}(x)\) |
| [in] | Gl,Gr | Left/Right Gauge fields |
Definition at line 257 of file cuclover.cu.
References cuGLeft(), and cuGRight().
| __device__ void Device::GetBilinear | ( | Complex_f | Z[nc *nc], |
| Bilinear_a | Xmn, | ||
| unsigned int | ind ) |
Loads the compacted bilinear form into a \(2\times2\) complex valued matrix.
| [out] | Z | Complex matrix on stack |
| [in] | Xmn | Hermitian form of \(X_{\mu\nu}\) in memory |
| [in] | ind | Index of \(X_{\mu\nu}\) we're interested in |
Z are replaced by bilinear from memory Definition at line 272 of file cuclover.cu.
References Complex_f, conj(), Bilinear_a::diag, kvolHalo, nc, and Bilinear_a::offd.
|
inlinestatic |
Loads the compacted bilinear form into a \(2\times2\) complex valued matrix.
| [out] | Z | Complex matrix on stack |
| [in] | Xmn | Hermitian form of \(X_{\mu\nu}\) in memory |
| [in] | ind | Index of \(X_{\mu\nu}\) we're interested in |
Z are replaced by bilinear from memory Definition at line 440 of file clover.c.
References Complex_f, Bilinear_a::diag, kvolHalo, nc, and Bilinear_a::offd.
Multiplies \( X_{\mu\nu}\) by a gauge field from the left.
| [out] | out | Result |
| [in] | X | \(X_{\mu\nu}(x)\) |
| [in] | G | Gauge field |
Definition at line 503 of file clover.c.
References Complex_f, and conj().
Multiplies \( X_{\mu\nu}\) by a gauge field from the right.
| [out] | out | Result |
| [in] | X | \(X_{\mu\nu}(x)\) |
| [in] | G | Gauge field |
Definition at line 518 of file clover.c.
References Complex_f, and conj().
|
inlinestatic |
Multiplies \( X_{\mu\nu}\) by a gauge field from the left and the right.
| [out] | out | Result |
| [in,out] | tmp | Buffer for intermediate result. Passing as an argument to reduce register pressure. |
| [in] | X | \(X_{\mu\nu}(x)\) |
| [in] | Gl,Gr | Left/Right Gauge fields |
tmp will be changed during the call Definition at line 536 of file clover.c.
References Complex_f, GLeft(), and GRight().