mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	Sizable improvement in multigrid for unsquared.
6000 matmuls CG unprec 2000 matmuls CG prec (4000 eo muls) 1050 matmuls PGCR on 16^3 x 32 x 8 m=.01 Substantial effort on timing and logging infrastructure
This commit is contained in:
		@@ -36,15 +36,15 @@ namespace Grid{
 | 
			
		||||
	RealD prob = std::exp(-DeltaH);
 | 
			
		||||
	random(sRNG,rn_test);
 | 
			
		||||
      
 | 
			
		||||
	std::cout<< "--------------------------------------------\n";
 | 
			
		||||
	std::cout<< "dH = "<<DeltaH << "  Random = "<< rn_test 
 | 
			
		||||
	std::cout<<GridLogMessage<< "--------------------------------------------\n";
 | 
			
		||||
	std::cout<<GridLogMessage<< "dH = "<<DeltaH << "  Random = "<< rn_test 
 | 
			
		||||
		 << "\nAcc. Probability = " << ((prob<1.0)? prob: 1.0)<< "   ";
 | 
			
		||||
      
 | 
			
		||||
	if((prob >1.0) || (rn_test <= prob)){       // accepted
 | 
			
		||||
	  std::cout <<"-- ACCEPTED\n";
 | 
			
		||||
	  std::cout<<GridLogMessage <<"-- ACCEPTED\n";
 | 
			
		||||
	  return true;
 | 
			
		||||
	} else {                               // rejected
 | 
			
		||||
	  std::cout <<"-- REJECTED\n";
 | 
			
		||||
	  std::cout<<GridLogMessage <<"-- REJECTED\n";
 | 
			
		||||
	  return false;
 | 
			
		||||
	}
 | 
			
		||||
      }
 | 
			
		||||
@@ -53,12 +53,12 @@ namespace Grid{
 | 
			
		||||
 | 
			
		||||
	MD.init(U); // set U and initialize P and phi's 
 | 
			
		||||
	RealD H0 = MD.S(U); // initial state action  
 | 
			
		||||
	std::cout<<"Total H before = "<< H0 << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage<<"Total H before = "<< H0 << "\n";
 | 
			
		||||
      
 | 
			
		||||
	MD.integrate(U);
 | 
			
		||||
      
 | 
			
		||||
	RealD H1 = MD.S(U); // updated state action            
 | 
			
		||||
	std::cout<<"Total H after = "<< H1 << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage<<"Total H after = "<< H1 << "\n";
 | 
			
		||||
      
 | 
			
		||||
	return (H1-H0);
 | 
			
		||||
      }
 | 
			
		||||
@@ -81,17 +81,17 @@ namespace Grid{
 | 
			
		||||
	
 | 
			
		||||
	// Thermalizations
 | 
			
		||||
	for(int iter=1; iter <= Params.ThermalizationSteps; ++iter){
 | 
			
		||||
	  std::cout << "-- # Thermalization step = "<< iter <<  "\n";
 | 
			
		||||
	  std::cout<<GridLogMessage << "-- # Thermalization step = "<< iter <<  "\n";
 | 
			
		||||
	
 | 
			
		||||
	  DeltaH = evolve_step(Uin);
 | 
			
		||||
	  std::cout<< " dH = "<< DeltaH << "\n";
 | 
			
		||||
	  std::cout<<GridLogMessage<< " dH = "<< DeltaH << "\n";
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Actual updates (evolve a copy Ucopy then copy back eventually)
 | 
			
		||||
	LatticeLorentzColourMatrix Ucopy(Uin._grid);
 | 
			
		||||
	for(int iter=Params.StartingConfig; 
 | 
			
		||||
	    iter < Params.Nsweeps+Params.StartingConfig; ++iter){
 | 
			
		||||
	  std::cout << "-- # Sweep = "<< iter <<  "\n";
 | 
			
		||||
	  std::cout<<GridLogMessage << "-- # Sweep = "<< iter <<  "\n";
 | 
			
		||||
	  
 | 
			
		||||
	  Ucopy = Uin;
 | 
			
		||||
	  DeltaH = evolve_step(Ucopy);
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ namespace Grid{
 | 
			
		||||
 | 
			
		||||
      //Initialization of momenta and actions
 | 
			
		||||
      void init(LatticeLorentzColourMatrix& U){
 | 
			
		||||
	std::cout<< "Integrator init\n";
 | 
			
		||||
	std::cout<<GridLogMessage<< "Integrator init\n";
 | 
			
		||||
 | 
			
		||||
	MDutils::generate_momenta(*P,pRNG);
 | 
			
		||||
	for(int level=0; level< as.size(); ++level){
 | 
			
		||||
@@ -119,7 +119,7 @@ namespace Grid{
 | 
			
		||||
	
 | 
			
		||||
	RealD H = Hsum.real();
 | 
			
		||||
 | 
			
		||||
	std::cout << "H_p = "<< H << "\n";
 | 
			
		||||
	std::cout<<GridLogMessage << "H_p = "<< H << "\n";
 | 
			
		||||
 | 
			
		||||
	// Actions
 | 
			
		||||
	for(int level=0; level<as.size(); ++level)
 | 
			
		||||
 
 | 
			
		||||
@@ -39,29 +39,29 @@ namespace Grid{
 | 
			
		||||
	  if(clock[level] == 0){    // initial half step 
 | 
			
		||||
	    Integ->update_P(U,level,lambda*eps);
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	  
 | 
			
		||||
	  if(level == fl){          // lowest level 
 | 
			
		||||
	    Integ->update_U(U,0.5*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call 
 | 
			
		||||
	    step(U,level+1,clock, Integ);
 | 
			
		||||
	  }
 | 
			
		||||
	  
 | 
			
		||||
	  Integ->update_P(U,level,(1.0-2.0*lambda)*eps);
 | 
			
		||||
	  ++clock[level];
 | 
			
		||||
	  for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	  std::cout<<"P "<< (clock[level]) <<std::endl;
 | 
			
		||||
	  for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	  std::cout<<GridLogMessage<<"P "<< (clock[level]) <<std::endl;
 | 
			
		||||
	  
 | 
			
		||||
	  if(level == fl){          // lowest level 
 | 
			
		||||
	    Integ->update_U(U,0.5*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< (clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call 
 | 
			
		||||
	    step(U,level+1,clock, Integ);
 | 
			
		||||
	  }    
 | 
			
		||||
@@ -71,14 +71,14 @@ namespace Grid{
 | 
			
		||||
	    Integ->update_P(U,level,lambda*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	  }else{                  // bulk step
 | 
			
		||||
	    Integ->update_P(U,level,lambda*2.0*eps);
 | 
			
		||||
	    
 | 
			
		||||
	    clock[level]+=2;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
@@ -112,13 +112,13 @@ namespace Grid{
 | 
			
		||||
	  if(clock[level] == 0){    // initial half step
 | 
			
		||||
	    Integ->update_P(U, level,eps/2.0);
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	  if(level == fl){          // lowest level
 | 
			
		||||
	    Integ->update_U(U, eps);
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call
 | 
			
		||||
	    step(U, level+1,clock, Integ);
 | 
			
		||||
	  }
 | 
			
		||||
@@ -126,14 +126,14 @@ namespace Grid{
 | 
			
		||||
	    Integ->update_P(U, level,eps/2.0);
 | 
			
		||||
	    
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }else{                  // bulk step
 | 
			
		||||
	    Integ->update_P(U, level,eps);
 | 
			
		||||
	    
 | 
			
		||||
	    clock[level]+=2;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,7 @@ namespace Grid{
 | 
			
		||||
      //Initialization of momenta and actions
 | 
			
		||||
      void init(LatticeLorentzColourMatrix& U,
 | 
			
		||||
		GridParallelRNG& pRNG){
 | 
			
		||||
	std::cout<< "Integrator init\n";
 | 
			
		||||
	std::cout<<GridLogMessage<< "Integrator init\n";
 | 
			
		||||
	if (!P)
 | 
			
		||||
	  P = new LatticeLorentzColourMatrix(U._grid);
 | 
			
		||||
	MDutils::generate_momenta(*P,pRNG);
 | 
			
		||||
@@ -172,13 +172,13 @@ namespace Grid{
 | 
			
		||||
	  if(clock[level] == 0){    // initial half step
 | 
			
		||||
	    Integ->update_P(U, level,eps/2);
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	  if(level == fl){          // lowest level
 | 
			
		||||
	    Integ->update_U(U, eps);
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"U "<< 0.5*(clock[level]+1) <<std::endl;
 | 
			
		||||
	  }else{                 // recursive function call
 | 
			
		||||
	    step(U, level+1,clock, Integ);
 | 
			
		||||
	  }
 | 
			
		||||
@@ -186,14 +186,14 @@ namespace Grid{
 | 
			
		||||
	    Integ->update_P(U, level,eps/2);
 | 
			
		||||
	    
 | 
			
		||||
	    ++clock[level];
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }else{                  // bulk step
 | 
			
		||||
	    Integ->update_P(U, level,eps);
 | 
			
		||||
	    
 | 
			
		||||
	    clock[level]+=2;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<"   ";
 | 
			
		||||
	    std::cout<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	    for(int l=0; l<level;++l) std::cout<<GridLogMessage<<"   ";
 | 
			
		||||
	    std::cout<<GridLogMessage<<"P "<< 0.5*clock[level] <<std::endl;
 | 
			
		||||
	  }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user