1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-07-28 02:07:07 +01:00

Global edit with change to View usage. autoView() creates a wrapper object that closes the view when scope closes.

This commit is contained in:
Peter Boyle
2020-06-05 18:52:35 -04:00
parent f39c2a240b
commit 1a4c8c3387
78 changed files with 773 additions and 778 deletions

View File

@@ -29,7 +29,6 @@ Author: Peter Boyle <paboyle@ph.ed.ac.uk>
using namespace std;
using namespace Grid;
;
template<class d>
struct scal {
@@ -51,6 +50,7 @@ int main (int argc, char ** argv)
std::cout << GridLogMessage << "::::: NB: to enable a quick bit reproducibility check use the --checksums flag. " << std::endl;
{
GridCartesian * UGrid = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplexD::Nsimd()),GridDefaultMpi());
GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
GridCartesian * FGrid = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
@@ -100,6 +100,8 @@ int main (int argc, char ** argv)
ConjugateGradient<LatticeFermionD> CG(1.0e-8,10000);
CG(HermOpEO,src_o,result_o_2);
MemoryManager::Print();
LatticeFermionD diff_o(FrbGrid);
RealD diff = axpy_norm(diff_o, -1.0, result_o, result_o_2);
@@ -130,7 +132,9 @@ int main (int argc, char ** argv)
std::cout << GridLogMessage << " CG checksums "<<std::hex << scidac_csuma << " "<<scidac_csumb<<std::endl;
}
#endif
}
MemoryManager::Print();
Grid_finalize();
}

View File

@@ -107,9 +107,8 @@ int main(int argc, char ** argv)
// Implement a stencil code that should agree with cshift!
for(int i=0;i<Check.Grid()->oSites();i++){
auto SE = gStencil.GetEntry(0,i);
auto check = Check.View(CpuWrite);
auto foo = Foo.View(CpuRead);
autoView(check, Check, CpuWrite);
autoView( foo, Foo, CpuRead);
// Encapsulate in a general wrapper
check[i] = foo[SE->_offset]; auto tmp=check[i];
if (SE->_permute & 0x1 ) { permute(check[i],tmp,0); tmp=check[i];}
@@ -147,8 +146,8 @@ int main(int argc, char ** argv)
}}}}
if (nrm > 1.0e-4) {
auto check = Check.View(CpuRead);
auto bar = Bar.View(CpuRead);
autoView( check , Check, CpuRead);
autoView( bar , Bar, CpuRead);
for(int i=0;i<check.size();i++){
std::cout << i<<" Check "<<check[i]<< "\n"<<i<<" Bar "<<bar[i]<<std::endl;
}

View File

@@ -109,8 +109,8 @@ int main(int argc, char ** argv) {
StencilEntry *SE;
SE = myStencil.GetEntry(permute_type,0,i);
auto check = Check.View(CpuWrite);
auto foo = Foo.View(CpuRead);
autoView( check , Check, CpuWrite);
autoView( foo , Foo, CpuRead);
if ( SE->_is_local && SE->_permute )
permute(check[i],foo[SE->_offset],permute_type);
else if (SE->_is_local)
@@ -151,8 +151,8 @@ int main(int argc, char ** argv) {
}}}}
if (nrm > 1.0e-4) {
auto check = Check.View(CpuRead);
auto bar = Bar.View(CpuRead);
autoView( check , Check, CpuRead);
autoView( bar , Bar, CpuRead);
for(int i=0;i<check.size();i++){
std::cout << i<<" Check "<<check[i]<< "\n"<<i<<" Bar "<<bar[i]<<std::endl;
}
@@ -210,8 +210,8 @@ int main(int argc, char ** argv) {
SE = EStencil.GetEntry(permute_type,0,i);
// std::cout << "Even source "<< i<<" -> " <<SE->_offset << " "<< SE->_is_local<<std::endl;
auto ocheck = OCheck.View(CpuWrite);
auto efoo = EFoo.View(CpuRead);
autoView( ocheck , OCheck, CpuWrite);
autoView( efoo , EFoo, CpuRead);
if ( SE->_is_local && SE->_permute )
permute(ocheck[i],efoo[SE->_offset],permute_type);
else if (SE->_is_local)
@@ -226,8 +226,8 @@ int main(int argc, char ** argv) {
SE = OStencil.GetEntry(permute_type,0,i);
// std::cout << "ODD source "<< i<<" -> " <<SE->_offset << " "<< SE->_is_local<<std::endl;
auto echeck = ECheck.View(CpuWrite);
auto ofoo = OFoo.View(CpuRead);
autoView( echeck , ECheck, CpuWrite);
autoView( ofoo , OFoo, CpuRead);
if ( SE->_is_local && SE->_permute )
permute(echeck[i],ofoo[SE->_offset],permute_type);
else if (SE->_is_local)

View File

@@ -89,8 +89,8 @@ int main (int argc, char ** argv)
////////////////////////////////////
LatticeGaugeField Umu5d(FGrid);
{
auto umu5d = Umu5d.View(CpuWrite);
auto umu = Umu.View(CpuRead);
autoView(umu5d, Umu5d, CpuWrite);
autoView( umu, Umu , CpuRead);
for(int ss=0;ss<Umu.Grid()->oSites();ss++){
for(int s=0;s<Ls;s++){
umu5d[Ls*ss+s] = umu[ss];

View File

@@ -570,8 +570,8 @@ void TestConserved1(Action & Ddwf, Action & Ddwfrev,
LatticeGaugeField Umu5d(FGrid);
std::vector<LatticeColourMatrix> U(4,FGrid);
{
auto Umu5d_v = Umu5d.View(CpuWrite);
auto Umu_v = Umu.View(CpuRead);
autoView( Umu5d_v , Umu5d, CpuWrite);
autoView( Umu_v , Umu , CpuRead);
for(int ss=0;ss<Umu.Grid()->oSites();ss++){
for(int s=0;s<Ls;s++){
Umu5d_v[Ls*ss+s] = Umu_v[ss];
@@ -597,8 +597,8 @@ void TestConserved1(Action & Ddwf, Action & Ddwfrev,
{
RealD diag = 5.0 - Ddwf.M5;
mass = Ddwf.mass;
auto psi=result5.View(CpuRead);
auto chi=tmp.View(CpuWrite);
autoView( psi,result5,CpuRead);
autoView( chi,tmp, CpuWrite);
thread_for(sss,UGrid->oSites(),{
uint64_t ss= sss*Ls;
typedef vSpinColourVector spinor;

View File

@@ -98,9 +98,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach( i,mom_v,{
Uprime_v[i](mu) =
U_v[i](mu)

View File

@@ -100,9 +100,9 @@ int main (int argc, char ** argv)
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach( i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -110,9 +110,9 @@ int main (int argc, char** argv)
PokeIndex<LorentzIndex>(mom, mommu, mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -119,9 +119,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -114,9 +114,9 @@ int main (int argc, char** argv)
PokeIndex<LorentzIndex>(mom, mommu, mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -85,9 +85,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto Uprime_v = Uprime.View(CpuWrite);
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
thread_foreach(i,mom_v,{ // exp(pmu dt) * Umu
Uprime_v[i](mu) = U_v[i](mu) + mom_v[i](mu)*U_v[i](mu)*dt ;
});

View File

@@ -87,9 +87,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto Uprime_v= Uprime.View(CpuWrite);
auto U_v = U.View(CpuRead);
autoView( mom_v, mom, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
autoView( U_v , U, CpuRead);
thread_foreach(i,mom_v,{ // exp(pmu dt) * Umu
Uprime_v[i](mu) = U_v[i](mu) + mom_v[i](mu)*U_v[i](mu)*dt ;
});

View File

@@ -105,9 +105,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)
+ mom_v[i](mu)*U_v[i](mu)*dt

View File

@@ -99,9 +99,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -101,9 +101,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)
+ mom_v[i](mu)*U_v[i](mu)*dt

View File

@@ -112,9 +112,9 @@ int main (int argc, char** argv)
PokeIndex<LorentzIndex>(mom, mommu, mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -115,9 +115,9 @@ int main (int argc, char** argv)
SU3::GaussianFundamentalLieAlgebraMatrix(RNG4, mommu); // Traceless antihermitian momentum; gaussian in lie alg
PokeIndex<LorentzIndex>(mom, mommu, mu);
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
// fourth order exponential approx
thread_foreach( i, mom_v,{
Uprime_v[i](mu) = U_v[i](mu) + mom_v[i](mu)*U_v[i](mu)*dt + mom_v[i](mu) *mom_v[i](mu) *U_v[i](mu)*(dt*dt/2.0)

View File

@@ -101,9 +101,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)
+ mom_v[i](mu)*U_v[i](mu)*dt

View File

@@ -87,9 +87,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto Uprime_v = Uprime.View(CpuWrite);
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
thread_foreach(i,mom_v,{ // exp(pmu dt) * Umu
Uprime_v[i](mu) = U_v[i](mu) + mom_v[i](mu)*U_v[i](mu)*dt ;
});

View File

@@ -105,9 +105,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach( i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu);
Uprime_v[i](mu) += mom_v[i](mu)*U_v[i](mu)*dt ;

View File

@@ -105,9 +105,9 @@ int main(int argc, char **argv)
Hmom -= real(sum(trace(mommu * mommu)));
PokeIndex<LorentzIndex>(mom, mommu, mu);
auto Uprime_v = Uprime.View(CpuWrite);
auto U_v = U.View(CpuRead);
auto mom_v = mom.View(CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
autoView( U_v , U, CpuRead);
autoView( mom_v, mom, CpuRead);
thread_foreach(ss,mom_v,
{
Uprime_v[ss]._internal[mu] = ProjectOnGroup(Exponentiate(mom_v[ss]._internal[mu], dt, 12) * U_v[ss]._internal[mu]);

View File

@@ -114,9 +114,9 @@ int main (int argc, char ** argv)
PokeIndex<LorentzIndex>(mom,mommu,mu);
// fourth order exponential approx
auto mom_v = mom.View(CpuRead);
auto U_v = U.View(CpuRead);
auto Uprime_v = Uprime.View(CpuWrite);
autoView( mom_v, mom, CpuRead);
autoView( U_v , U, CpuRead);
autoView(Uprime_v, Uprime, CpuWrite);
thread_foreach(i,mom_v,{
Uprime_v[i](mu) = U_v[i](mu)

View File

@@ -300,8 +300,8 @@ int main (int argc, char ** argv)
int nb=nbasisc/2;
CoarseAggregates.CreateSubspaceChebyshev(CRNG,PosdefLdop,nb,12.0,0.02,500,100,100,0.0);
for(int n=0;n<nb;n++){
auto subspace = CoarseAggregates.subspace[n].View(CpuRead);
auto subspace_g5 = CoarseAggregates.subspace[n+nb].View(CpuWrite);
autoView( subspace, CoarseAggregates.subspace[n] ,CpuRead);
autoView( subspace_g5,CoarseAggregates.subspace[n+nb],CpuWrite);
for(int nn=0;nn<nb;nn++){
for(int site=0;site<Coarse5d->oSites();site++){
subspace_g5[site](nn) = subspace[site](nn);