mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Faster fermtoprop case
This commit is contained in:
		@@ -451,9 +451,20 @@ template<class vobj> void pokeLorentz(vobj &lhs,const decltype(peekIndex<Lorentz
 | 
				
			|||||||
// Fermion <-> propagator assignements
 | 
					// Fermion <-> propagator assignements
 | 
				
			||||||
//////////////////////////////////////////////
 | 
					//////////////////////////////////////////////
 | 
				
			||||||
//template <class Prop, class Ferm>
 | 
					//template <class Prop, class Ferm>
 | 
				
			||||||
 | 
					#define FAST_FERM_TO_PROP
 | 
				
			||||||
template <class Fimpl>
 | 
					template <class Fimpl>
 | 
				
			||||||
void FermToProp(typename Fimpl::PropagatorField &p, const typename Fimpl::FermionField &f, const int s, const int c)
 | 
					void FermToProp(typename Fimpl::PropagatorField &p, const typename Fimpl::FermionField &f, const int s, const int c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#ifdef FAST_FERM_TO_PROP
 | 
				
			||||||
 | 
					  autoView(p_v,p,AcceleratorWrite);
 | 
				
			||||||
 | 
					  autoView(f_v,f,AcceleratorRead);
 | 
				
			||||||
 | 
					  accelerator_for(idx,p_v.oSites(),1,{
 | 
				
			||||||
 | 
					      for(int ss = 0; ss < Ns; ++ss) {
 | 
				
			||||||
 | 
					      for(int cc = 0; cc < Fimpl::Dimension; ++cc) {
 | 
				
			||||||
 | 
						p_v[idx]()(ss,s)(cc,c) = f_v[idx]()(ss)(cc); // Propagator sink index is LEFT, suitable for left mult by gauge link (e.g.)
 | 
				
			||||||
 | 
					      }}
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
  for(int j = 0; j < Ns; ++j)
 | 
					  for(int j = 0; j < Ns; ++j)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      auto pjs = peekSpin(p, j, s);
 | 
					      auto pjs = peekSpin(p, j, s);
 | 
				
			||||||
@@ -465,12 +476,23 @@ void FermToProp(typename Fimpl::PropagatorField &p, const typename Fimpl::Fermio
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
      pokeSpin(p, pjs, j, s);
 | 
					      pokeSpin(p, pjs, j, s);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
//template <class Prop, class Ferm>
 | 
					//template <class Prop, class Ferm>
 | 
				
			||||||
template <class Fimpl>
 | 
					template <class Fimpl>
 | 
				
			||||||
void PropToFerm(typename Fimpl::FermionField &f, const typename Fimpl::PropagatorField &p, const int s, const int c)
 | 
					void PropToFerm(typename Fimpl::FermionField &f, const typename Fimpl::PropagatorField &p, const int s, const int c)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#ifdef FAST_FERM_TO_PROP
 | 
				
			||||||
 | 
					  autoView(p_v,p,AcceleratorWrite);
 | 
				
			||||||
 | 
					  autoView(f_v,f,AcceleratorRead);
 | 
				
			||||||
 | 
					  accelerator_for(idx,p_v.oSites(),1,{
 | 
				
			||||||
 | 
					      for(int ss = 0; ss < Ns; ++ss) {
 | 
				
			||||||
 | 
					      for(int cc = 0; cc < Fimpl::Dimension; ++cc) {
 | 
				
			||||||
 | 
						f_v[idx]()(ss)(cc) = p_v[idx]()(ss,s)(cc,c); // LEFT index is copied across for s,c right index
 | 
				
			||||||
 | 
					      }}
 | 
				
			||||||
 | 
					  );
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
  for(int j = 0; j < Ns; ++j)
 | 
					  for(int j = 0; j < Ns; ++j)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      auto pjs = peekSpin(p, j, s);
 | 
					      auto pjs = peekSpin(p, j, s);
 | 
				
			||||||
@@ -482,6 +504,7 @@ void PropToFerm(typename Fimpl::FermionField &f, const typename Fimpl::Propagato
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
      pokeSpin(f, fj, j);
 | 
					      pokeSpin(f, fj, j);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
//////////////////////////////////////////////
 | 
					//////////////////////////////////////////////
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user