mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-10 07:55:35 +00:00
Merge branch 'feature/staggered-comms-compute' of https://github.com/paboyle/Grid into feature/staggered-comms-compute
This commit is contained in:
commit
5c936d88a0
@ -84,15 +84,6 @@ ImprovedStaggeredFermion<Impl>::ImprovedStaggeredFermion(GaugeField &_Uthin, Gau
|
|||||||
{
|
{
|
||||||
ImportGauge(_Uthin,_Ufat);
|
ImportGauge(_Uthin,_Ufat);
|
||||||
}
|
}
|
||||||
template <class Impl>
|
|
||||||
ImprovedStaggeredFermion<Impl>::ImprovedStaggeredFermion(GaugeField &_Utriple, GaugeField &_Ufat, GridCartesian &Fgrid,
|
|
||||||
GridRedBlackCartesian &Hgrid, RealD _mass,
|
|
||||||
const ImplParams &p)
|
|
||||||
: ImprovedStaggeredFermion(Fgrid,Hgrid,_mass,1.0,1.0,1.0,p)
|
|
||||||
{
|
|
||||||
ImportGaugeSimple(_Utriple,_Ufat);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// Momentum space propagator should be
|
// Momentum space propagator should be
|
||||||
@ -106,11 +97,6 @@ ImprovedStaggeredFermion<Impl>::ImprovedStaggeredFermion(GaugeField &_Utriple, G
|
|||||||
// of above link to implmement fourier based solver.
|
// of above link to implmement fourier based solver.
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
void ImprovedStaggeredFermion<Impl>::ImportGauge(const GaugeField &_Uthin)
|
|
||||||
{
|
|
||||||
ImportGauge(_Uthin,_Uthin);
|
|
||||||
};
|
|
||||||
template <class Impl>
|
|
||||||
void ImprovedStaggeredFermion<Impl>::ImportGaugeSimple(const GaugeField &_Utriple,const GaugeField &_Ufat)
|
void ImprovedStaggeredFermion<Impl>::ImportGaugeSimple(const GaugeField &_Utriple,const GaugeField &_Ufat)
|
||||||
{
|
{
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
@ -133,6 +119,20 @@ void ImprovedStaggeredFermion<Impl>::ImportGaugeSimple(const GaugeField &_Utripl
|
|||||||
PokeIndex<LorentzIndex>(Umu, -U, mu+4);
|
PokeIndex<LorentzIndex>(Umu, -U, mu+4);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
CopyGaugeCheckerboards();
|
||||||
|
}
|
||||||
|
template <class Impl>
|
||||||
|
void ImprovedStaggeredFermion<Impl>::ImportGaugeSimple(const DoubledGaugeField &_UUU,const DoubledGaugeField &_U)
|
||||||
|
{
|
||||||
|
|
||||||
|
Umu = _U;
|
||||||
|
UUUmu = _UUU;
|
||||||
|
CopyGaugeCheckerboards();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class Impl>
|
||||||
|
void ImprovedStaggeredFermion<Impl>::CopyGaugeCheckerboards(void)
|
||||||
|
{
|
||||||
pickCheckerboard(Even, UmuEven, Umu);
|
pickCheckerboard(Even, UmuEven, Umu);
|
||||||
pickCheckerboard(Odd, UmuOdd , Umu);
|
pickCheckerboard(Odd, UmuOdd , Umu);
|
||||||
pickCheckerboard(Even, UUUmuEven,UUUmu);
|
pickCheckerboard(Even, UUUmuEven,UUUmu);
|
||||||
@ -168,10 +168,7 @@ void ImprovedStaggeredFermion<Impl>::ImportGauge(const GaugeField &_Uthin,const
|
|||||||
PokeIndex<LorentzIndex>(UUUmu, U*(-0.5*c2/u0/u0/u0), mu+4);
|
PokeIndex<LorentzIndex>(UUUmu, U*(-0.5*c2/u0/u0/u0), mu+4);
|
||||||
}
|
}
|
||||||
|
|
||||||
pickCheckerboard(Even, UmuEven, Umu);
|
CopyGaugeCheckerboards();
|
||||||
pickCheckerboard(Odd, UmuOdd , Umu);
|
|
||||||
pickCheckerboard(Even, UUUmuEven, UUUmu);
|
|
||||||
pickCheckerboard(Odd, UUUmuOdd, UUUmu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
|
@ -122,30 +122,29 @@ class ImprovedStaggeredFermion : public StaggeredKernels<Impl>, public ImprovedS
|
|||||||
void DhopInternalOverlappedComms(StencilImpl &st, LebesgueOrder &lo, DoubledGaugeField &U,DoubledGaugeField &UUU,
|
void DhopInternalOverlappedComms(StencilImpl &st, LebesgueOrder &lo, DoubledGaugeField &U,DoubledGaugeField &UUU,
|
||||||
const FermionField &in, FermionField &out, int dag);
|
const FermionField &in, FermionField &out, int dag);
|
||||||
|
|
||||||
// Constructor
|
//////////////////////////////////////////////////////////////////////////
|
||||||
|
// Grid own interface Constructor
|
||||||
|
//////////////////////////////////////////////////////////////////////////
|
||||||
ImprovedStaggeredFermion(GaugeField &_Uthin, GaugeField &_Ufat, GridCartesian &Fgrid,
|
ImprovedStaggeredFermion(GaugeField &_Uthin, GaugeField &_Ufat, GridCartesian &Fgrid,
|
||||||
GridRedBlackCartesian &Hgrid, RealD _mass,
|
GridRedBlackCartesian &Hgrid, RealD _mass,
|
||||||
RealD _c1, RealD _c2,RealD _u0,
|
RealD _c1, RealD _c2,RealD _u0,
|
||||||
const ImplParams &p = ImplParams());
|
const ImplParams &p = ImplParams());
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// MILC constructor no coefficients; premultiply links by desired scaling
|
// MILC constructor no gauge fields
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
ImprovedStaggeredFermion(GaugeField &_Utriple, GaugeField &_Ufat, GridCartesian &Fgrid,
|
|
||||||
GridRedBlackCartesian &Hgrid, RealD _mass,
|
|
||||||
const ImplParams &p = ImplParams());
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
// A don't initialise the gauge field constructor; largely internal
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
ImprovedStaggeredFermion(GridCartesian &Fgrid, GridRedBlackCartesian &Hgrid, RealD _mass,
|
ImprovedStaggeredFermion(GridCartesian &Fgrid, GridRedBlackCartesian &Hgrid, RealD _mass,
|
||||||
RealD _c1, RealD _c2,RealD _u0,
|
RealD _c1=1.0, RealD _c2=1.0,RealD _u0=1.0,
|
||||||
const ImplParams &p = ImplParams());
|
const ImplParams &p = ImplParams());
|
||||||
|
|
||||||
// DoubleStore impl dependent
|
// DoubleStore impl dependent
|
||||||
void ImportGaugeSimple(const GaugeField &_Utriple, const GaugeField &_Ufat);
|
void ImportGauge (const GaugeField &_Uthin ) { assert(0); }
|
||||||
void ImportGauge(const GaugeField &_Uthin, const GaugeField &_Ufat);
|
void ImportGauge (const GaugeField &_Uthin ,const GaugeField &_Ufat);
|
||||||
void ImportGauge(const GaugeField &_Uthin);
|
void ImportGaugeSimple(const GaugeField &_UUU ,const GaugeField &_U);
|
||||||
|
void ImportGaugeSimple(const DoubledGaugeField &_UUU,const DoubledGaugeField &_U);
|
||||||
|
DoubledGaugeField &GetU(void) { return Umu ; } ;
|
||||||
|
DoubledGaugeField &GetUUU(void) { return UUUmu; };
|
||||||
|
void CopyGaugeCheckerboards(void);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
// Data members require to support the functionality
|
// Data members require to support the functionality
|
||||||
|
@ -128,7 +128,14 @@ ImprovedStaggeredFermion5D<Impl>::ImprovedStaggeredFermion5D(GridCartesian
|
|||||||
StencilEven.BuildSurfaceList(LLs,vol4);
|
StencilEven.BuildSurfaceList(LLs,vol4);
|
||||||
StencilOdd.BuildSurfaceList(LLs,vol4);
|
StencilOdd.BuildSurfaceList(LLs,vol4);
|
||||||
}
|
}
|
||||||
|
template <class Impl>
|
||||||
|
void ImprovedStaggeredFermion5D<Impl>::CopyGaugeCheckerboards(void)
|
||||||
|
{
|
||||||
|
pickCheckerboard(Even, UmuEven, Umu);
|
||||||
|
pickCheckerboard(Odd, UmuOdd , Umu);
|
||||||
|
pickCheckerboard(Even, UUUmuEven,UUUmu);
|
||||||
|
pickCheckerboard(Odd, UUUmuOdd, UUUmu);
|
||||||
|
}
|
||||||
template<class Impl>
|
template<class Impl>
|
||||||
ImprovedStaggeredFermion5D<Impl>::ImprovedStaggeredFermion5D(GaugeField &_Uthin,GaugeField &_Ufat,
|
ImprovedStaggeredFermion5D<Impl>::ImprovedStaggeredFermion5D(GaugeField &_Uthin,GaugeField &_Ufat,
|
||||||
GridCartesian &FiveDimGrid,
|
GridCartesian &FiveDimGrid,
|
||||||
@ -144,26 +151,7 @@ ImprovedStaggeredFermion5D<Impl>::ImprovedStaggeredFermion5D(GaugeField &_Uthin,
|
|||||||
{
|
{
|
||||||
ImportGauge(_Uthin,_Ufat);
|
ImportGauge(_Uthin,_Ufat);
|
||||||
}
|
}
|
||||||
template<class Impl>
|
|
||||||
ImprovedStaggeredFermion5D<Impl>::ImprovedStaggeredFermion5D(GaugeField &_Utriple,GaugeField &_Ufat,
|
|
||||||
GridCartesian &FiveDimGrid,
|
|
||||||
GridRedBlackCartesian &FiveDimRedBlackGrid,
|
|
||||||
GridCartesian &FourDimGrid,
|
|
||||||
GridRedBlackCartesian &FourDimRedBlackGrid,
|
|
||||||
RealD _mass,
|
|
||||||
const ImplParams &p) :
|
|
||||||
ImprovedStaggeredFermion5D(FiveDimGrid,FiveDimRedBlackGrid,
|
|
||||||
FourDimGrid,FourDimRedBlackGrid,
|
|
||||||
_mass,1.0,1.0,1.0,p)
|
|
||||||
{
|
|
||||||
ImportGaugeSimple(_Utriple,_Ufat);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class Impl>
|
|
||||||
void ImprovedStaggeredFermion5D<Impl>::ImportGauge(const GaugeField &_Uthin)
|
|
||||||
{
|
|
||||||
ImportGauge(_Uthin,_Uthin);
|
|
||||||
};
|
|
||||||
///////////////////////////////////////////////////
|
///////////////////////////////////////////////////
|
||||||
// For MILC use; pass three link U's and 1 link U
|
// For MILC use; pass three link U's and 1 link U
|
||||||
///////////////////////////////////////////////////
|
///////////////////////////////////////////////////
|
||||||
@ -188,10 +176,17 @@ void ImprovedStaggeredFermion5D<Impl>::ImportGaugeSimple(const GaugeField &_Utri
|
|||||||
Impl::InsertGaugeField(Umu,-U,mu+4);
|
Impl::InsertGaugeField(Umu,-U,mu+4);
|
||||||
|
|
||||||
}
|
}
|
||||||
pickCheckerboard(Even, UmuEven, Umu);
|
CopyGaugeCheckerboards();
|
||||||
pickCheckerboard(Odd, UmuOdd , Umu);
|
}
|
||||||
pickCheckerboard(Even, UUUmuEven,UUUmu);
|
template <class Impl>
|
||||||
pickCheckerboard(Odd, UUUmuOdd, UUUmu);
|
void ImprovedStaggeredFermion5D<Impl>::ImportGaugeSimple(const DoubledGaugeField &_UUU,const DoubledGaugeField &_U)
|
||||||
|
{
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
// Trivial import; phases and fattening and such like preapplied
|
||||||
|
/////////////////////////////////////////////////////////////////
|
||||||
|
Umu = _U;
|
||||||
|
UUUmu = _UUU;
|
||||||
|
CopyGaugeCheckerboards();
|
||||||
}
|
}
|
||||||
template<class Impl>
|
template<class Impl>
|
||||||
void ImprovedStaggeredFermion5D<Impl>::ImportGauge(const GaugeField &_Uthin,const GaugeField &_Ufat)
|
void ImprovedStaggeredFermion5D<Impl>::ImportGauge(const GaugeField &_Uthin,const GaugeField &_Ufat)
|
||||||
@ -221,10 +216,7 @@ void ImprovedStaggeredFermion5D<Impl>::ImportGauge(const GaugeField &_Uthin,cons
|
|||||||
PokeIndex<LorentzIndex>(UUUmu, U*(-0.5*c2/u0/u0/u0), mu+4);
|
PokeIndex<LorentzIndex>(UUUmu, U*(-0.5*c2/u0/u0/u0), mu+4);
|
||||||
}
|
}
|
||||||
|
|
||||||
pickCheckerboard(Even, UmuEven, Umu);
|
CopyGaugeCheckerboards();
|
||||||
pickCheckerboard(Odd, UmuOdd , Umu);
|
|
||||||
pickCheckerboard(Even, UUUmuEven, UUUmu);
|
|
||||||
pickCheckerboard(Odd, UUUmuOdd, UUUmu);
|
|
||||||
}
|
}
|
||||||
template<class Impl>
|
template<class Impl>
|
||||||
void ImprovedStaggeredFermion5D<Impl>::DhopDir(const FermionField &in, FermionField &out,int dir5,int disp)
|
void ImprovedStaggeredFermion5D<Impl>::DhopDir(const FermionField &in, FermionField &out,int dir5,int disp)
|
||||||
|
@ -139,15 +139,9 @@ namespace QCD {
|
|||||||
|
|
||||||
|
|
||||||
// Constructors
|
// Constructors
|
||||||
// -- No Gauge field
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
ImprovedStaggeredFermion5D(GridCartesian &FiveDimGrid,
|
// Grid internal interface -- Thin link and fat link, with coefficients
|
||||||
GridRedBlackCartesian &FiveDimRedBlackGrid,
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
GridCartesian &FourDimGrid,
|
|
||||||
GridRedBlackCartesian &FourDimRedBlackGrid,
|
|
||||||
double _mass,
|
|
||||||
RealD _c1, RealD _c2,RealD _u0,
|
|
||||||
const ImplParams &p= ImplParams());
|
|
||||||
// -- Thin link and fat link, with coefficients
|
|
||||||
ImprovedStaggeredFermion5D(GaugeField &_Uthin,
|
ImprovedStaggeredFermion5D(GaugeField &_Uthin,
|
||||||
GaugeField &_Ufat,
|
GaugeField &_Ufat,
|
||||||
GridCartesian &FiveDimGrid,
|
GridCartesian &FiveDimGrid,
|
||||||
@ -160,19 +154,24 @@ namespace QCD {
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// MILC constructor ; triple links, no rescale factors; must be externally pre multiplied
|
// MILC constructor ; triple links, no rescale factors; must be externally pre multiplied
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
ImprovedStaggeredFermion5D(GaugeField &_Utriple,
|
ImprovedStaggeredFermion5D(GridCartesian &FiveDimGrid,
|
||||||
GaugeField &_Ufat,
|
|
||||||
GridCartesian &FiveDimGrid,
|
|
||||||
GridRedBlackCartesian &FiveDimRedBlackGrid,
|
GridRedBlackCartesian &FiveDimRedBlackGrid,
|
||||||
GridCartesian &FourDimGrid,
|
GridCartesian &FourDimGrid,
|
||||||
GridRedBlackCartesian &FourDimRedBlackGrid,
|
GridRedBlackCartesian &FourDimRedBlackGrid,
|
||||||
double _mass,
|
double _mass,
|
||||||
|
RealD _c1=1.0, RealD _c2=1.0,RealD _u0=1.0,
|
||||||
const ImplParams &p= ImplParams());
|
const ImplParams &p= ImplParams());
|
||||||
|
|
||||||
// DoubleStore
|
// DoubleStore gauge field in operator
|
||||||
void ImportGauge(const GaugeField &_U);
|
void ImportGauge (const GaugeField &_Uthin ) { assert(0); }
|
||||||
void ImportGauge(const GaugeField &_Uthin,const GaugeField &_Ufat);
|
void ImportGauge (const GaugeField &_Uthin ,const GaugeField &_Ufat);
|
||||||
void ImportGaugeSimple(const GaugeField &_Uthin,const GaugeField &_Ufat);
|
void ImportGaugeSimple(const GaugeField &_UUU,const GaugeField &_U);
|
||||||
|
void ImportGaugeSimple(const DoubledGaugeField &_UUU,const DoubledGaugeField &_U);
|
||||||
|
// Give a reference; can be used to do an assignment or copy back out after import
|
||||||
|
// if Carleton wants to cache them and not use the ImportSimple
|
||||||
|
DoubledGaugeField &GetU(void) { return Umu ; } ;
|
||||||
|
DoubledGaugeField &GetUUU(void) { return UUUmu; };
|
||||||
|
void CopyGaugeCheckerboards(void);
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
// Data members require to support the functionality
|
// Data members require to support the functionality
|
||||||
|
@ -141,6 +141,7 @@ int main (int argc, char ** argv)
|
|||||||
t1=usecond();
|
t1=usecond();
|
||||||
|
|
||||||
std::cout<<GridLogMessage << "Called Ds ASM"<<std::endl;
|
std::cout<<GridLogMessage << "Called Ds ASM"<<std::endl;
|
||||||
|
std::cout<<GridLogMessage << "norm src "<< norm2(src)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm result "<< norm2(tmp)<<std::endl;
|
std::cout<<GridLogMessage << "norm result "<< norm2(tmp)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
||||||
|
|
||||||
@ -160,7 +161,8 @@ int main (int argc, char ** argv)
|
|||||||
localConvert(sresult,tmp);
|
localConvert(sresult,tmp);
|
||||||
|
|
||||||
std::cout<<GridLogMessage << "Called sDs unroll"<<std::endl;
|
std::cout<<GridLogMessage << "Called sDs unroll"<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm result "<< norm2(sresult)<<std::endl;
|
std::cout<<GridLogMessage << "norm ssrc "<< norm2(ssrc)<<std::endl;
|
||||||
|
std::cout<<GridLogMessage << "norm sresult "<< norm2(sresult)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
||||||
|
|
||||||
|
|
||||||
@ -181,6 +183,7 @@ int main (int argc, char ** argv)
|
|||||||
localConvert(sresult,tmp);
|
localConvert(sresult,tmp);
|
||||||
|
|
||||||
std::cout<<GridLogMessage << "Called sDs asm"<<std::endl;
|
std::cout<<GridLogMessage << "Called sDs asm"<<std::endl;
|
||||||
|
std::cout<<GridLogMessage << "norm ssrc "<< norm2(ssrc)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm result "<< norm2(sresult)<<std::endl;
|
std::cout<<GridLogMessage << "norm result "<< norm2(sresult)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)*extra<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)*extra<<std::endl;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user