mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	Optional overlap of comms with compute
This commit is contained in:
		
							
								
								
									
										28
									
								
								lib/Init.cc
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								lib/Init.cc
									
									
									
									
									
								
							@@ -238,20 +238,20 @@ void Grid_init(int *argc,char ***argv)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  std::cout <<std::endl;
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__|__|__|__"<<             "|__|__|_"<<              "_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__|__|__|__"<<             "|__|__|_"<<              "_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__|__|  |  "<<             "|  |  | "<<              " |  |  |"<<                "  |  |  | _|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__         "<<             "        "<<              "        "<<                "          _|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::GREEN<< "__|_   GGGG   "<<Logger::RED<<" RRRR   "<<Logger::BLUE<<" III    "<<Logger::PURPLE<<"DDDD      _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::GREEN<< "__|_  G       "<<Logger::RED<<" R   R  "<<Logger::BLUE<<"  I     "<<Logger::PURPLE<<"D   D     _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::GREEN<< "__|_  G       "<<Logger::RED<<" R   R  "<<Logger::BLUE<<"  I     "<<Logger::PURPLE<<"D    D    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::GREEN<< "__|_  G  GG   "<<Logger::RED<<" RRRR   "<<Logger::BLUE<<"  I     "<<Logger::PURPLE<<"D    D    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::GREEN<< "__|_  G   G   "<<Logger::RED<<" R  R   "<<Logger::BLUE<<"  I     "<<Logger::PURPLE<<"D   D     _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::GREEN<< "__|_   GGGG   "<<Logger::RED<<" R   R  "<<Logger::BLUE<<" III    "<<Logger::PURPLE<<"DDDD      _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|__         "<<             "        "<<              "        "<<                "          _|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|__|__|__|__"<<             "|__|____"<<              "_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|__|__|__|__"<<             "|__|__|_"<<              "_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::BLUE << "  |  |  |  |  "<<             "|  |  | "<<              " |  |  |"<<                "  |  |  |  |  "<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__|__|__|__"<<             "|__|__|_"<<Logger::PURPLE<<"_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__|__|__|__"<<             "|__|__|_"<<Logger::PURPLE<<"_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__|  |  |  "<<             "|  |  | "<<Logger::PURPLE<<" |  |  |"<<                "  |  |  | _|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|__         "<<             "        "<<Logger::PURPLE<<"        "<<                "          _|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::RED  << "__|_  "<<Logger::GREEN<<" GGGG   "<<Logger::RED<<" RRRR   "<<Logger::BLUE  <<" III    "<<Logger::PURPLE<<"DDDD  "<<Logger::PURPLE<<"    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::RED  << "__|_  "<<Logger::GREEN<<"G       "<<Logger::RED<<" R   R  "<<Logger::BLUE  <<"  I     "<<Logger::PURPLE<<"D   D "<<Logger::PURPLE<<"    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::RED  << "__|_  "<<Logger::GREEN<<"G       "<<Logger::RED<<" R   R  "<<Logger::BLUE  <<"  I     "<<Logger::PURPLE<<"D    D"<<Logger::PURPLE<<"    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|_  "<<Logger::GREEN<<"G  GG   "<<Logger::RED<<" RRRR   "<<Logger::BLUE  <<"  I     "<<Logger::PURPLE<<"D    D"<<Logger::GREEN <<"    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|_  "<<Logger::GREEN<<"G   G   "<<Logger::RED<<" R  R   "<<Logger::BLUE  <<"  I     "<<Logger::PURPLE<<"D   D "<<Logger::GREEN <<"    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|_  "<<Logger::GREEN<<" GGGG   "<<Logger::RED<<" R   R  "<<Logger::BLUE  <<" III    "<<Logger::PURPLE<<"DDDD  "<<Logger::GREEN <<"    _|__"<<std::endl;
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|__         "<<             "        "<<Logger::GREEN <<"        "<<                "          _|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|__|__|__|__"<<             "|__|__|_"<<Logger::GREEN <<"_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::BLUE << "__|__|__|__|__"<<             "|__|__|_"<<Logger::GREEN <<"_|__|__|"<<                "__|__|__|__|__"<<std::endl; 
 | 
			
		||||
  std::cout <<Logger::BLUE << "  |  |  |  |  "<<             "|  |  | "<<Logger::GREEN <<" |  |  |"<<                "  |  |  |  |  "<<std::endl; 
 | 
			
		||||
  std::cout << std::endl;
 | 
			
		||||
  std::cout << std::endl;
 | 
			
		||||
  std::cout <<Logger::YELLOW<< std::endl;
 | 
			
		||||
 
 | 
			
		||||
@@ -34,12 +34,16 @@ namespace QCD {
 | 
			
		||||
 | 
			
		||||
    // These can move into a params header and be given MacroMagic serialisation
 | 
			
		||||
    struct GparityWilsonImplParams {
 | 
			
		||||
      bool overlapCommsCompute;
 | 
			
		||||
      std::vector<int> twists; 
 | 
			
		||||
      GparityWilsonImplParams () : twists(Nd,0) {};
 | 
			
		||||
      GparityWilsonImplParams () : twists(Nd,0), overlapCommsCompute(false) {};
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct WilsonImplParams { };
 | 
			
		||||
    struct WilsonImplParams {
 | 
			
		||||
      bool overlapCommsCompute;
 | 
			
		||||
      WilsonImplParams() : overlapCommsCompute(false) {};
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    struct OneFlavourRationalParams { 
 | 
			
		||||
      RealD  lo;
 | 
			
		||||
 
 | 
			
		||||
@@ -131,9 +131,13 @@ namespace Grid {
 | 
			
		||||
      typedef WilsonCompressor<SiteHalfSpinor,SiteSpinor> Compressor;
 | 
			
		||||
      typedef WilsonImplParams ImplParams;
 | 
			
		||||
      typedef CartesianStencil<SiteSpinor,SiteHalfSpinor,Compressor> StencilImpl;
 | 
			
		||||
 | 
			
		||||
      ImplParams Params;
 | 
			
		||||
 | 
			
		||||
      WilsonImpl(const ImplParams &p= ImplParams()) : Params(p) {}; 
 | 
			
		||||
 | 
			
		||||
      bool overlapCommsCompute(void) { return Params.overlapCommsCompute; };
 | 
			
		||||
    
 | 
			
		||||
      inline void multLink(SiteHalfSpinor &phi,const SiteDoubledGaugeField &U,const SiteHalfSpinor &chi,int mu,StencilEntry *SE,StencilImpl &St){
 | 
			
		||||
        mult(&phi(),&U(mu),&chi());
 | 
			
		||||
      }
 | 
			
		||||
@@ -204,9 +208,12 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
      typedef CartesianStencil<SiteSpinor,SiteHalfSpinor,Compressor> StencilImpl;
 | 
			
		||||
 | 
			
		||||
      typedef GparityWilsonImplParams ImplParams;
 | 
			
		||||
 | 
			
		||||
      ImplParams Params;
 | 
			
		||||
 | 
			
		||||
      GparityWilsonImpl(const ImplParams &p= ImplParams()) : Params(p) {}; 
 | 
			
		||||
      
 | 
			
		||||
      bool overlapCommsCompute(void) { return Params.overlapCommsCompute; };
 | 
			
		||||
 | 
			
		||||
      // provide the multiply by link that is differentiated between Gparity (with flavour index) and non-Gparity
 | 
			
		||||
      inline void multLink(SiteHalfSpinor &phi,const SiteDoubledGaugeField &U,const SiteHalfSpinor &chi,int mu,StencilEntry *SE,StencilImpl &St){
 | 
			
		||||
 
 | 
			
		||||
@@ -227,7 +227,7 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
    
 | 
			
		||||
    out.checkerboard = in.checkerboard;
 | 
			
		||||
    
 | 
			
		||||
    DhopInternalCommsCompute(Stencil,Umu,in,out,dag);
 | 
			
		||||
    DhopInternal(Stencil,Umu,in,out,dag);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
@@ -238,7 +238,7 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
    assert(in.checkerboard==Even);
 | 
			
		||||
    out.checkerboard = Odd;
 | 
			
		||||
    
 | 
			
		||||
    DhopInternalCommsCompute(StencilEven,UmuOdd,in,out,dag);
 | 
			
		||||
    DhopInternal(StencilEven,UmuOdd,in,out,dag);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
@@ -249,7 +249,7 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
    assert(in.checkerboard==Odd);
 | 
			
		||||
    out.checkerboard = Even;
 | 
			
		||||
    
 | 
			
		||||
    DhopInternalCommsCompute(StencilOdd,UmuEven,in,out,dag);
 | 
			
		||||
    DhopInternal(StencilOdd,UmuEven,in,out,dag);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
@@ -283,10 +283,19 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
    
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonFermion<Impl>::DhopInternal(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
					 const FermionField &in, FermionField &out,int dag) {
 | 
			
		||||
					 const FermionField &in, FermionField &out,int dag) 
 | 
			
		||||
  {
 | 
			
		||||
    if ( Impl::overlapCommsCompute () ) { 
 | 
			
		||||
      DhopInternalCommsOverlapCompute(st,U,in,out,dag);
 | 
			
		||||
    } else { 
 | 
			
		||||
      DhopInternalCommsThenCompute(st,U,in,out,dag);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonFermion<Impl>::DhopInternalCommsThenCompute(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
							 const FermionField &in, FermionField &out,int dag) {
 | 
			
		||||
 | 
			
		||||
    assert((dag==DaggerNo) ||(dag==DaggerYes));
 | 
			
		||||
 | 
			
		||||
@@ -322,7 +331,7 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  template<class Impl>
 | 
			
		||||
  void WilsonFermion<Impl>::DhopInternalCommsCompute(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
  void WilsonFermion<Impl>::DhopInternalCommsOverlapCompute(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
						     const FermionField &in, FermionField &out,int dag) {
 | 
			
		||||
 | 
			
		||||
    assert((dag==DaggerNo) ||(dag==DaggerYes));
 | 
			
		||||
 
 | 
			
		||||
@@ -114,7 +114,9 @@ namespace Grid {
 | 
			
		||||
      void DhopInternal(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
			const FermionField &in, FermionField &out,int dag) ;
 | 
			
		||||
 | 
			
		||||
      void DhopInternalCommsCompute(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
      void DhopInternalCommsThenCompute(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
				    const FermionField &in, FermionField &out,int dag) ;
 | 
			
		||||
      void DhopInternalCommsOverlapCompute(StencilImpl & st,DoubledGaugeField & U,
 | 
			
		||||
				    const FermionField &in, FermionField &out,int dag) ;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -272,6 +272,18 @@ template<class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::DhopInternal(StencilImpl & st, LebesgueOrder &lo,
 | 
			
		||||
					 DoubledGaugeField & U,
 | 
			
		||||
					 const FermionField &in, FermionField &out,int dag)
 | 
			
		||||
{
 | 
			
		||||
  if ( Impl::overlapCommsCompute () ) { 
 | 
			
		||||
    DhopInternalCommsOverlapCompute(st,lo,U,in,out,dag);
 | 
			
		||||
  } else { 
 | 
			
		||||
    DhopInternalCommsThenCompute(st,lo,U,in,out,dag);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::DhopInternalCommsThenCompute(StencilImpl & st, LebesgueOrder &lo,
 | 
			
		||||
					 DoubledGaugeField & U,
 | 
			
		||||
					 const FermionField &in, FermionField &out,int dag)
 | 
			
		||||
{
 | 
			
		||||
  //  assert((dag==DaggerNo) ||(dag==DaggerYes));
 | 
			
		||||
 | 
			
		||||
@@ -398,7 +410,7 @@ PARALLEL_FOR_LOOP
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::DhopInternalCommsCompute(StencilImpl & st, LebesgueOrder &lo,
 | 
			
		||||
void WilsonFermion5D<Impl>::DhopInternalCommsOverlapCompute(StencilImpl & st, LebesgueOrder &lo,
 | 
			
		||||
						     DoubledGaugeField & U,
 | 
			
		||||
						     const FermionField &in, FermionField &out,int dag)
 | 
			
		||||
{
 | 
			
		||||
@@ -536,7 +548,7 @@ void WilsonFermion5D<Impl>::DhopOE(const FermionField &in, FermionField &out,int
 | 
			
		||||
  assert(in.checkerboard==Even);
 | 
			
		||||
  out.checkerboard = Odd;
 | 
			
		||||
 | 
			
		||||
  DhopInternalCommsCompute(StencilEven,LebesgueEvenOdd,UmuOdd,in,out,dag);
 | 
			
		||||
  DhopInternal(StencilEven,LebesgueEvenOdd,UmuOdd,in,out,dag);
 | 
			
		||||
}
 | 
			
		||||
template<class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::DhopEO(const FermionField &in, FermionField &out,int dag)
 | 
			
		||||
@@ -547,7 +559,7 @@ void WilsonFermion5D<Impl>::DhopEO(const FermionField &in, FermionField &out,int
 | 
			
		||||
  assert(in.checkerboard==Odd);
 | 
			
		||||
  out.checkerboard = Even;
 | 
			
		||||
 | 
			
		||||
  DhopInternalCommsCompute(StencilOdd,LebesgueEvenOdd,UmuEven,in,out,dag);
 | 
			
		||||
  DhopInternal(StencilOdd,LebesgueEvenOdd,UmuEven,in,out,dag);
 | 
			
		||||
}
 | 
			
		||||
template<class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::Dhop(const FermionField &in, FermionField &out,int dag)
 | 
			
		||||
@@ -557,7 +569,7 @@ void WilsonFermion5D<Impl>::Dhop(const FermionField &in, FermionField &out,int d
 | 
			
		||||
 | 
			
		||||
  out.checkerboard = in.checkerboard;
 | 
			
		||||
 | 
			
		||||
  DhopInternalCommsCompute(Stencil,Lebesgue,Umu,in,out,dag);
 | 
			
		||||
  DhopInternal(Stencil,Lebesgue,Umu,in,out,dag);
 | 
			
		||||
}
 | 
			
		||||
template<class Impl>
 | 
			
		||||
void WilsonFermion5D<Impl>::DW(const FermionField &in, FermionField &out,int dag)
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,13 @@ namespace Grid {
 | 
			
		||||
			FermionField &out,
 | 
			
		||||
			int dag);
 | 
			
		||||
 | 
			
		||||
      void DhopInternalCommsCompute(StencilImpl & st,
 | 
			
		||||
      void DhopInternalCommsThenCompute(StencilImpl & st,
 | 
			
		||||
			LebesgueOrder &lo,
 | 
			
		||||
			DoubledGaugeField &U,
 | 
			
		||||
			const FermionField &in, 
 | 
			
		||||
			FermionField &out,
 | 
			
		||||
			int dag);
 | 
			
		||||
      void DhopInternalCommsOverlapCompute(StencilImpl & st,
 | 
			
		||||
			LebesgueOrder &lo,
 | 
			
		||||
			DoubledGaugeField &U,
 | 
			
		||||
			const FermionField &in, 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user