mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Update domain 5d vectorised impl type, move the type over to 4d redblack with
the dense OO inverse
This commit is contained in:
		@@ -62,6 +62,41 @@ WilsonFermion5D<Impl>::WilsonFermion5D(GaugeField &_Umu,
 | 
				
			|||||||
  Lebesgue(_FourDimGrid),
 | 
					  Lebesgue(_FourDimGrid),
 | 
				
			||||||
  LebesgueEvenOdd(_FourDimRedBlackGrid)
 | 
					  LebesgueEvenOdd(_FourDimRedBlackGrid)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  if (Impl::LsVectorised) { 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    int nsimd = Simd::Nsimd();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    // some assertions
 | 
				
			||||||
 | 
					    assert(FiveDimGrid._ndimension==5);
 | 
				
			||||||
 | 
					    assert(FiveDimRedBlackGrid._ndimension==5);
 | 
				
			||||||
 | 
					    assert(FiveDimRedBlackGrid._checker_dim==1); // Don't checker the s direction
 | 
				
			||||||
 | 
					    assert(FourDimGrid._ndimension==4);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Dimension zero of the five-d is the Ls direction
 | 
				
			||||||
 | 
					    Ls=FiveDimGrid._fdimensions[0];
 | 
				
			||||||
 | 
					    assert(FiveDimGrid._processors[0]         ==1);
 | 
				
			||||||
 | 
					    assert(FiveDimGrid._simd_layout[0]        ==nsimd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert(FiveDimRedBlackGrid._fdimensions[0]==Ls);
 | 
				
			||||||
 | 
					    assert(FiveDimRedBlackGrid._processors[0] ==1);
 | 
				
			||||||
 | 
					    assert(FiveDimRedBlackGrid._simd_layout[0]==nsimd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Other dimensions must match the decomposition of the four-D fields 
 | 
				
			||||||
 | 
					    for(int d=0;d<4;d++){
 | 
				
			||||||
 | 
					      assert(FiveDimRedBlackGrid._fdimensions[d+1]==FourDimGrid._fdimensions[d]);
 | 
				
			||||||
 | 
					      assert(FiveDimRedBlackGrid._processors[d+1] ==FourDimGrid._processors[d]);
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      assert(FourDimGrid._simd_layout[d]=1);
 | 
				
			||||||
 | 
					      assert(FourDimRedBlackGrid._simd_layout[d]=1);
 | 
				
			||||||
 | 
					      assert(FiveDimRedBlackGrid._simd_layout[d+1]==1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      assert(FiveDimGrid._fdimensions[d+1]        ==FourDimGrid._fdimensions[d]);
 | 
				
			||||||
 | 
					      assert(FiveDimGrid._processors[d+1]         ==FourDimGrid._processors[d]);
 | 
				
			||||||
 | 
					      assert(FiveDimGrid._simd_layout[d+1]        ==FourDimGrid._simd_layout[d]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // some assertions
 | 
					    // some assertions
 | 
				
			||||||
    assert(FiveDimGrid._ndimension==5);
 | 
					    assert(FiveDimGrid._ndimension==5);
 | 
				
			||||||
    assert(FourDimGrid._ndimension==4);
 | 
					    assert(FourDimGrid._ndimension==4);
 | 
				
			||||||
@@ -92,30 +127,18 @@ WilsonFermion5D<Impl>::WilsonFermion5D(GaugeField &_Umu,
 | 
				
			|||||||
      assert(FiveDimGrid._processors[d+1]         ==FourDimGrid._processors[d]);
 | 
					      assert(FiveDimGrid._processors[d+1]         ==FourDimGrid._processors[d]);
 | 
				
			||||||
      assert(FiveDimGrid._simd_layout[d+1]        ==FourDimGrid._simd_layout[d]);
 | 
					      assert(FiveDimGrid._simd_layout[d+1]        ==FourDimGrid._simd_layout[d]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
  // Allocate the required comms buffer
 | 
					  // Allocate the required comms buffer
 | 
				
			||||||
  ImportGauge(_Umu);
 | 
					  ImportGauge(_Umu);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					  /*
 | 
				
			||||||
template<class Impl>
 | 
					template<class Impl>
 | 
				
			||||||
WilsonFermion5D<Impl>::WilsonFermion5D(int simd,GaugeField &_Umu,
 | 
					WilsonFermion5D<Impl>::WilsonFermion5D(int simd,GaugeField &_Umu,
 | 
				
			||||||
				       GridCartesian         &FiveDimGrid,
 | 
									       GridCartesian         &FiveDimGrid,
 | 
				
			||||||
				       GridRedBlackCartesian &FiveDimRedBlackGrid,
 | 
									       GridRedBlackCartesian &FiveDimRedBlackGrid,
 | 
				
			||||||
				       GridCartesian         &FourDimGrid,
 | 
									       GridCartesian         &FourDimGrid,
 | 
				
			||||||
				       RealD _M5,const ImplParams &p) :
 | 
									       RealD _M5,const ImplParams &p) :
 | 
				
			||||||
  Kernels(p),
 | 
					 | 
				
			||||||
  _FiveDimGrid        (&FiveDimGrid),
 | 
					 | 
				
			||||||
  _FiveDimRedBlackGrid(&FiveDimRedBlackGrid),
 | 
					 | 
				
			||||||
  _FourDimGrid        (&FourDimGrid),
 | 
					 | 
				
			||||||
  Stencil    (_FiveDimGrid,npoint,Even,directions,displacements),
 | 
					 | 
				
			||||||
  StencilEven(_FiveDimRedBlackGrid,npoint,Even,directions,displacements), // source is Even
 | 
					 | 
				
			||||||
  StencilOdd (_FiveDimRedBlackGrid,npoint,Odd ,directions,displacements), // source is Odd
 | 
					 | 
				
			||||||
  M5(_M5),
 | 
					 | 
				
			||||||
  Umu(_FourDimGrid),
 | 
					 | 
				
			||||||
  UmuEven(_FourDimGrid),
 | 
					 | 
				
			||||||
  UmuOdd (_FourDimGrid),
 | 
					 | 
				
			||||||
  Lebesgue(_FourDimGrid),
 | 
					 | 
				
			||||||
  LebesgueEvenOdd(_FourDimGrid)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  int nsimd = Simd::Nsimd();
 | 
					  int nsimd = Simd::Nsimd();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -148,14 +171,9 @@ WilsonFermion5D<Impl>::WilsonFermion5D(int simd,GaugeField &_Umu,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    GaugeField HUmu(_Umu._grid);
 | 
					 | 
				
			||||||
    HUmu = _Umu*(-0.5);
 | 
					 | 
				
			||||||
    Impl::DoubleStore(GaugeGrid(),Umu,HUmu);
 | 
					 | 
				
			||||||
    UmuEven=Umu;// Really want a reference.
 | 
					 | 
				
			||||||
    UmuOdd =Umu;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}  
 | 
					}  
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
     
 | 
					     
 | 
				
			||||||
template<class Impl>
 | 
					template<class Impl>
 | 
				
			||||||
void WilsonFermion5D<Impl>::ImportGauge(const GaugeField &_Umu)
 | 
					void WilsonFermion5D<Impl>::ImportGauge(const GaugeField &_Umu)
 | 
				
			||||||
@@ -376,8 +394,6 @@ void WilsonFermion5D<Impl>::DW(const FermionField &in, FermionField &out,int dag
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
FermOpTemplateInstantiate(WilsonFermion5D);
 | 
					FermOpTemplateInstantiate(WilsonFermion5D);
 | 
				
			||||||
GparityFermOpTemplateInstantiate(WilsonFermion5D);
 | 
					GparityFermOpTemplateInstantiate(WilsonFermion5D);
 | 
				
			||||||
template class WilsonFermion5D<DomainWallRedBlack5dImplF>;		
 | 
					 | 
				
			||||||
template class WilsonFermion5D<DomainWallRedBlack5dImplD>;
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
}}
 | 
					}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -572,7 +572,4 @@ void WilsonKernels<Impl>::DiracOptDhopDir(StencilImpl &st,DoubledGaugeField &U,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  FermOpTemplateInstantiate(WilsonKernels);
 | 
					  FermOpTemplateInstantiate(WilsonKernels);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
template class WilsonKernels<DomainWallRedBlack5dImplF>;		
 | 
					 | 
				
			||||||
template class WilsonKernels<DomainWallRedBlack5dImplD>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}}
 | 
					}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,7 +90,7 @@ void WilsonKernels<WilsonImplF>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrd
 | 
				
			|||||||
#define VMOVRDUP(A,B,C)                                  VBCASTRDUPf(A,B,C)
 | 
					#define VMOVRDUP(A,B,C)                                  VBCASTRDUPf(A,B,C)
 | 
				
			||||||
#define MULT_2SPIN(ptr,pf) MULT_ADDSUB_2SPIN_LS(ptr,pf)
 | 
					#define MULT_2SPIN(ptr,pf) MULT_ADDSUB_2SPIN_LS(ptr,pf)
 | 
				
			||||||
template<>
 | 
					template<>
 | 
				
			||||||
void WilsonKernels<DomainWallRedBlack5dImplF>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U,
 | 
					void WilsonKernels<DomainWallVec5dImplF>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U,
 | 
				
			||||||
								   std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
													   std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
				
			||||||
								   int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
 | 
													   int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
 | 
				
			||||||
#include <qcd/action/fermion/WilsonKernelsAsmBody.h>
 | 
					#include <qcd/action/fermion/WilsonKernelsAsmBody.h>
 | 
				
			||||||
@@ -110,10 +110,10 @@ template void WilsonKernels<GparityWilsonImplF>::DiracOptAsmDhopSite(StencilImpl
 | 
				
			|||||||
template void WilsonKernels<GparityWilsonImplD>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U, 
 | 
					template void WilsonKernels<GparityWilsonImplD>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U, 
 | 
				
			||||||
							       std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
												       std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
				
			||||||
							       int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out);		
 | 
												       int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out);		
 | 
				
			||||||
template void WilsonKernels<DomainWallRedBlack5dImplF>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U, 
 | 
					template void WilsonKernels<DomainWallVec5dImplF>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U, 
 | 
				
			||||||
							       std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
												       std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
				
			||||||
							       int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out);		
 | 
												       int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out);		
 | 
				
			||||||
template void WilsonKernels<DomainWallRedBlack5dImplD>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U, 
 | 
					template void WilsonKernels<DomainWallVec5dImplD>::DiracOptAsmDhopSite(StencilImpl &st,LebesgueOrder & lo,DoubledGaugeField &U, 
 | 
				
			||||||
							       std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
												       std::vector<SiteHalfSpinor,alignedAllocator<SiteHalfSpinor> >  &buf,
 | 
				
			||||||
							       int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out);		
 | 
												       int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out);		
 | 
				
			||||||
}}
 | 
					}}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user