mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Hide internal data
This commit is contained in:
parent
5642ea270f
commit
8dccffdfd5
@ -73,15 +73,15 @@ public:
|
|||||||
void coarseToFine(const CoarseField& in, Field& out) {
|
void coarseToFine(const CoarseField& in, Field& out) {
|
||||||
|
|
||||||
out = zero;
|
out = zero;
|
||||||
out.checkerboard = _evec._v[0].checkerboard;
|
out.Checkerboard() = _evec._v[0].Checkerboard();
|
||||||
|
|
||||||
int Nbasis = sizeof(in._odata[0]._internal._internal) / sizeof(in._odata[0]._internal._internal[0]);
|
int Nbasis = sizeof(in[0]._internal._internal) / sizeof(in[0]._internal._internal[0]);
|
||||||
assert(Nbasis == _evec._Nm);
|
assert(Nbasis == _evec._Nm);
|
||||||
|
|
||||||
#pragma omp parallel for
|
#pragma omp parallel for
|
||||||
for (int b=0;b<_bgrid._o_blocks;b++) {
|
for (int b=0;b<_bgrid._o_blocks;b++) {
|
||||||
for (int j=0;j<_evec._Nm;j++) {
|
for (int j=0;j<_evec._Nm;j++) {
|
||||||
_bgrid.block_caxpy(b,out,in._odata[b]._internal._internal[j],_evec._v[j],out);
|
_bgrid.block_caxpy(b,out,in[b]._internal._internal[j],_evec._v[j],out);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ public:
|
|||||||
|
|
||||||
out = zero;
|
out = zero;
|
||||||
|
|
||||||
int Nbasis = sizeof(out._odata[0]._internal._internal) / sizeof(out._odata[0]._internal._internal[0]);
|
int Nbasis = sizeof(out[0]._internal._internal) / sizeof(out[0]._internal._internal[0]);
|
||||||
assert(Nbasis == _evec._Nm);
|
assert(Nbasis == _evec._Nm);
|
||||||
|
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ public:
|
|||||||
// |rhs> -= <j|rhs> |j>
|
// |rhs> -= <j|rhs> |j>
|
||||||
auto c = _bgrid.block_sp(b,_evec._v[j],tmp);
|
auto c = _bgrid.block_sp(b,_evec._v[j],tmp);
|
||||||
_bgrid.block_caxpy(b,tmp,-c,_evec._v[j],tmp); // may make this more numerically stable
|
_bgrid.block_caxpy(b,tmp,-c,_evec._v[j],tmp); // may make this more numerically stable
|
||||||
out._odata[b]._internal._internal[j] = c;
|
out[b]._internal._internal[j] = c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ public:
|
|||||||
vCoeff_t ret = 0.0;
|
vCoeff_t ret = 0.0;
|
||||||
for (int i=0;i<_block_sites;i++) { // only odd sites
|
for (int i=0;i<_block_sites;i++) { // only odd sites
|
||||||
int ss = block_site_to_o_site(x0,i);
|
int ss = block_site_to_o_site(x0,i);
|
||||||
ret += TensorRemove(innerProduct(x._odata[ss],y._odata[ss]));
|
ret += TensorRemove(innerProduct(x[ss],y[ss]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -140,7 +140,7 @@ public:
|
|||||||
for (int j=0;j<nsimd;j++) {
|
for (int j=0;j<nsimd;j++) {
|
||||||
int t = lsize * i + l*nsimd + j;
|
int t = lsize * i + l*nsimd + j;
|
||||||
|
|
||||||
ret[j] += conjugate(((Coeff_t*)&x._odata[ss]._internal)[l*nsimd + j]) * y[t];
|
ret[j] += conjugate(((Coeff_t*)&x[ss]._internal)[l*nsimd + j]) * y[t];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -175,7 +175,7 @@ public:
|
|||||||
|
|
||||||
for (int i=0;i<_block_sites;i++) { // only odd sites
|
for (int i=0;i<_block_sites;i++) { // only odd sites
|
||||||
int ss = block_site_to_o_site(x0,i);
|
int ss = block_site_to_o_site(x0,i);
|
||||||
vcaxpy(ret._odata[ss],a,x._odata[ss],y._odata[ss]);
|
vcaxpy(ret[ss],a,x[ss],y[ss]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ public:
|
|||||||
|
|
||||||
int n = lsize / nsimd;
|
int n = lsize / nsimd;
|
||||||
for (int l=0;l<n;l++) {
|
for (int l=0;l<n;l++) {
|
||||||
vCoeff_t r = a* ((vCoeff_t*)&x._odata[ss]._internal)[l];
|
vCoeff_t r = a* ((vCoeff_t*)&x[ss]._internal)[l];
|
||||||
|
|
||||||
for (int j=0;j<nsimd;j++) {
|
for (int j=0;j<nsimd;j++) {
|
||||||
int t = lsize * i + l*nsimd + j;
|
int t = lsize * i + l*nsimd + j;
|
||||||
@ -213,7 +213,7 @@ public:
|
|||||||
int ss = block_site_to_o_site(x0,i);
|
int ss = block_site_to_o_site(x0,i);
|
||||||
|
|
||||||
for (int l=0;l<lsize;l++)
|
for (int l=0;l<lsize;l++)
|
||||||
((Coeff_t*)&ret._odata[ss]._internal)[l] = (Coeff_t)x[lsize * i + l]; // convert precision
|
((Coeff_t*)&ret[ss]._internal)[l] = (Coeff_t)x[lsize * i + l]; // convert precision
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -228,7 +228,7 @@ public:
|
|||||||
int ss = block_site_to_o_site(x0,i);
|
int ss = block_site_to_o_site(x0,i);
|
||||||
|
|
||||||
for (int l=0;l<lsize;l++)
|
for (int l=0;l<lsize;l++)
|
||||||
x[lsize * i + l] = (ComplexD)((Coeff_t*)&ret._odata[ss]._internal)[l];
|
x[lsize * i + l] = (ComplexD)((Coeff_t*)&ret[ss]._internal)[l];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -255,7 +255,7 @@ public:
|
|||||||
|
|
||||||
for (int i=0;i<_block_sites;i++) { // only odd sites
|
for (int i=0;i<_block_sites;i++) { // only odd sites
|
||||||
int ss = block_site_to_o_site(x0,i);
|
int ss = block_site_to_o_site(x0,i);
|
||||||
vcscale(ret._odata[ss],a,ret._odata[ss]);
|
vcscale(ret[ss],a,ret[ss]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,7 +310,7 @@ public:
|
|||||||
|
|
||||||
for (int s=0;s<4;s++)
|
for (int s=0;s<4;s++)
|
||||||
for (int c=0;c<3;c++) {
|
for (int c=0;c<3;c++) {
|
||||||
Coeff_t& ld = ((Coeff_t*)&v._odata[oi]._internal._internal[s]._internal[c])[ii];
|
Coeff_t& ld = ((Coeff_t*)&v[oi]._internal._internal[s]._internal[c])[ii];
|
||||||
int ti = 12*lti + 3*s + c;
|
int ti = 12*lti + 3*s + c;
|
||||||
ld = Coeff_t(buf[2*ti+0], buf[2*ti+1]);
|
ld = Coeff_t(buf[2*ti+0], buf[2*ti+1]);
|
||||||
}
|
}
|
||||||
@ -350,7 +350,7 @@ public:
|
|||||||
|
|
||||||
for (int s=0;s<4;s++)
|
for (int s=0;s<4;s++)
|
||||||
for (int c=0;c<3;c++) {
|
for (int c=0;c<3;c++) {
|
||||||
Coeff_t& ld = ((Coeff_t*)&v._odata[oi]._internal._internal[s]._internal[c])[ii];
|
Coeff_t& ld = ((Coeff_t*)&v[oi]._internal._internal[s]._internal[c])[ii];
|
||||||
int ti = 12*lti + 3*s + c;
|
int ti = 12*lti + 3*s + c;
|
||||||
buf[2*ti+0] = ld.real();
|
buf[2*ti+0] = ld.real();
|
||||||
buf[2*ti+1] = ld.imag();
|
buf[2*ti+1] = ld.imag();
|
||||||
|
@ -174,7 +174,7 @@ namespace Grid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// loop
|
// loop
|
||||||
ret._v[nev].checkerboard = Odd;
|
ret._v[nev].Checkerboard() = Odd;
|
||||||
#pragma omp parallel
|
#pragma omp parallel
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -706,13 +706,13 @@ namespace Grid {
|
|||||||
read_floats(lptr, &buf1[0], buf1.size() );
|
read_floats(lptr, &buf1[0], buf1.size() );
|
||||||
if (mnb != -1) {
|
if (mnb != -1) {
|
||||||
for (l=0;l<nkeep_single;l++) {
|
for (l=0;l<nkeep_single;l++) {
|
||||||
((CoeffCoarse_t*)&coef._v[j]._odata[oi]._internal._internal[l])[ii] = CoeffCoarse_t(buf1[2*l+0],buf1[2*l+1]);
|
((CoeffCoarse_t*)&coef._v[j][oi]._internal._internal[l])[ii] = CoeffCoarse_t(buf1[2*l+0],buf1[2*l+1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
read_floats_fp16(lptr, &buf2[0], buf2.size(), _FP16_COEF_EXP_SHARE_FLOATS);
|
read_floats_fp16(lptr, &buf2[0], buf2.size(), _FP16_COEF_EXP_SHARE_FLOATS);
|
||||||
if (mnb != -1) {
|
if (mnb != -1) {
|
||||||
for (l=nkeep_single;l<nkeep;l++) {
|
for (l=nkeep_single;l<nkeep;l++) {
|
||||||
((CoeffCoarse_t*)&coef._v[j]._odata[oi]._internal._internal[l])[ii] = CoeffCoarse_t(buf2[2*(l-nkeep_single)+0],buf2[2*(l-nkeep_single)+1]);
|
((CoeffCoarse_t*)&coef._v[j][oi]._internal._internal[l])[ii] = CoeffCoarse_t(buf2[2*(l-nkeep_single)+0],buf2[2*(l-nkeep_single)+1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -721,7 +721,7 @@ namespace Grid {
|
|||||||
|
|
||||||
// set checkerboard
|
// set checkerboard
|
||||||
for (int i=0;i<(int)pr._evec.size();i++)
|
for (int i=0;i<(int)pr._evec.size();i++)
|
||||||
pr._evec._v[i].checkerboard = Odd;
|
pr._evec._v[i].Checkerboard() = Odd;
|
||||||
|
|
||||||
gsw2.Stop();
|
gsw2.Stop();
|
||||||
seconds=gsw2.useconds()/1e6;
|
seconds=gsw2.useconds()/1e6;
|
||||||
@ -875,7 +875,7 @@ namespace Grid {
|
|||||||
gsw4.Start();
|
gsw4.Start();
|
||||||
gsw5.Start();
|
gsw5.Start();
|
||||||
for (int l=0;l<nsingleCap;l++) {
|
for (int l=0;l<nsingleCap;l++) {
|
||||||
auto res = ((CoeffCoarse_t*)&coef._v[j]._odata[oi]._internal._internal[l])[ii];
|
auto res = ((CoeffCoarse_t*)&coef._v[j][oi]._internal._internal[l])[ii];
|
||||||
buf[2*l+0] = res.real();
|
buf[2*l+0] = res.real();
|
||||||
buf[2*l+1] = res.imag();
|
buf[2*l+1] = res.imag();
|
||||||
//nrmTest += res.real() * res.real() + res.imag() * res.imag();
|
//nrmTest += res.real() * res.real() + res.imag() * res.imag();
|
||||||
@ -884,7 +884,7 @@ namespace Grid {
|
|||||||
write_floats(f,fbuf,crc, &buf[0], size1 );
|
write_floats(f,fbuf,crc, &buf[0], size1 );
|
||||||
gsw4.Stop();
|
gsw4.Stop();
|
||||||
for (int l=nsingleCap;l<(int)pr._evec.size();l++) {
|
for (int l=nsingleCap;l<(int)pr._evec.size();l++) {
|
||||||
auto res = ((CoeffCoarse_t*)&coef._v[j]._odata[oi]._internal._internal[l])[ii];
|
auto res = ((CoeffCoarse_t*)&coef._v[j][oi]._internal._internal[l])[ii];
|
||||||
buf[2*(l-nsingleCap)+0] = res.real();
|
buf[2*(l-nsingleCap)+0] = res.real();
|
||||||
buf[2*(l-nsingleCap)+1] = res.imag();
|
buf[2*(l-nsingleCap)+1] = res.imag();
|
||||||
//nrmTest += res.real() * res.real() + res.imag() * res.imag();
|
//nrmTest += res.real() * res.real() + res.imag() * res.imag();
|
||||||
@ -990,7 +990,7 @@ namespace Grid {
|
|||||||
|
|
||||||
for (int i=0;i<N;i++) {
|
for (int i=0;i<N;i++) {
|
||||||
|
|
||||||
if (ret._v[i].checkerboard != Odd)
|
if (ret._v[i].Checkerboard() != Odd)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// create buffer and put data in argonne format in there
|
// create buffer and put data in argonne format in there
|
||||||
|
@ -142,14 +142,14 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
fseeko(_f,cur,SEEK_SET);
|
fseeko(_f,cur,SEEK_SET);
|
||||||
|
|
||||||
size_t sz = sizeof(out._odata[0]) * out._odata.size();
|
size_t sz = sizeof(out[0]) * out._odata.size();
|
||||||
|
|
||||||
GridStopWatch gsw;
|
GridStopWatch gsw;
|
||||||
gsw.Start();
|
gsw.Start();
|
||||||
uint32_t crc_exp;
|
uint32_t crc_exp;
|
||||||
assert(fread(&crc_exp,4,1,_f)==1);
|
assert(fread(&crc_exp,4,1,_f)==1);
|
||||||
assert(fread(&out._odata[0],sz,1,_f)==1);
|
assert(fread(&out[0],sz,1,_f)==1);
|
||||||
assert(FieldVectorIO::crc32_threaded((unsigned char*)&out._odata[0],sz,0x0)==crc_exp);
|
assert(FieldVectorIO::crc32_threaded((unsigned char*)&out[0],sz,0x0)==crc_exp);
|
||||||
gsw.Stop();
|
gsw.Stop();
|
||||||
|
|
||||||
printf("CheckpointLinearFunction:: reading %lld\n",(long long)sz);
|
printf("CheckpointLinearFunction:: reading %lld\n",(long long)sz);
|
||||||
@ -161,13 +161,13 @@ public:
|
|||||||
|
|
||||||
fseek(_f,0,SEEK_CUR); // switch to write
|
fseek(_f,0,SEEK_CUR); // switch to write
|
||||||
|
|
||||||
size_t sz = sizeof(out._odata[0]) * out._odata.size();
|
size_t sz = sizeof(out[0]) * out._odata.size();
|
||||||
|
|
||||||
GridStopWatch gsw;
|
GridStopWatch gsw;
|
||||||
gsw.Start();
|
gsw.Start();
|
||||||
uint32_t crc = FieldVectorIO::crc32_threaded((unsigned char*)&out._odata[0],sz,0x0);
|
uint32_t crc = FieldVectorIO::crc32_threaded((unsigned char*)&out[0],sz,0x0);
|
||||||
assert(fwrite(&crc,4,1,_f)==1);
|
assert(fwrite(&crc,4,1,_f)==1);
|
||||||
assert(fwrite(&out._odata[0],sz,1,_f)==1);
|
assert(fwrite(&out[0],sz,1,_f)==1);
|
||||||
fflush(_f); // try this on the GPFS to suppress OPA usage for disk during dslash; this is not needed at Lustre/JLAB
|
fflush(_f); // try this on the GPFS to suppress OPA usage for disk during dslash; this is not needed at Lustre/JLAB
|
||||||
gsw.Stop();
|
gsw.Stop();
|
||||||
|
|
||||||
@ -390,7 +390,7 @@ void CoarseGridLanczos(BlockProjector<Field>& pr,RealD alpha2,RealD beta,int Npo
|
|||||||
gsw.Start();
|
gsw.Start();
|
||||||
|
|
||||||
pr.coarseToFine(coef[i],v_i);
|
pr.coarseToFine(coef[i],v_i);
|
||||||
v_i.checkerboard = Odd;
|
v_i.Checkerboard() = Odd;
|
||||||
|
|
||||||
for (int j=0;j<smoothed_eval_outer;j++) {
|
for (int j=0;j<smoothed_eval_outer;j++) {
|
||||||
tmp=zero;
|
tmp=zero;
|
||||||
@ -425,7 +425,7 @@ void CoarseGridLanczos(BlockProjector<Field>& pr,RealD alpha2,RealD beta,int Npo
|
|||||||
if (cg_test_enabled) {
|
if (cg_test_enabled) {
|
||||||
ConjugateGradient<LatticeFermion> CG(1.0e-8, cg_test_maxiter, false);
|
ConjugateGradient<LatticeFermion> CG(1.0e-8, cg_test_maxiter, false);
|
||||||
LatticeFermion src_orig(bgrid._grid);
|
LatticeFermion src_orig(bgrid._grid);
|
||||||
src_orig.checkerboard = Odd;
|
src_orig.Checkerboard() = Odd;
|
||||||
src_orig = 1.0;
|
src_orig = 1.0;
|
||||||
src_orig = src_orig * (1.0 / ::sqrt(norm2(src_orig)) );
|
src_orig = src_orig * (1.0 / ::sqrt(norm2(src_orig)) );
|
||||||
auto result = src_orig;
|
auto result = src_orig;
|
||||||
@ -594,7 +594,7 @@ int main (int argc, char ** argv) {
|
|||||||
LatticeFermion src(FrbGrid);
|
LatticeFermion src(FrbGrid);
|
||||||
{
|
{
|
||||||
src=1.0;
|
src=1.0;
|
||||||
src.checkerboard = Odd;
|
src.Checkerboard() = Odd;
|
||||||
|
|
||||||
// normalize
|
// normalize
|
||||||
RealD nn = norm2(src);
|
RealD nn = norm2(src);
|
||||||
|
@ -85,7 +85,7 @@ public:
|
|||||||
Grid::QCD::ScidacReader RD ;
|
Grid::QCD::ScidacReader RD ;
|
||||||
RD.open(evecs_file);
|
RD.open(evecs_file);
|
||||||
for(int k=0;k<nbasis;k++) {
|
for(int k=0;k<nbasis;k++) {
|
||||||
this->_Aggregate.subspace[k].checkerboard=this->_checkerboard;
|
this->_Aggregate.subspace[k].Checkerboard()=this->_checkerboard;
|
||||||
RD.readScidacFieldRecord(this->_Aggregate.subspace[k],record);
|
RD.readScidacFieldRecord(this->_Aggregate.subspace[k],record);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -87,8 +87,8 @@ public:
|
|||||||
|
|
||||||
GridBase *FineGrid = _Aggregate.FineGrid;
|
GridBase *FineGrid = _Aggregate.FineGrid;
|
||||||
|
|
||||||
FineField fin(FineGrid) ;fin.checkerboard =_Aggregate.checkerboard;
|
FineField fin(FineGrid) ;fin.Checkerboard() =_Aggregate.Checkerboard();
|
||||||
FineField fout(FineGrid);fout.checkerboard =_Aggregate.checkerboard;
|
FineField fout(FineGrid);fout.Checkerboard() =_Aggregate.Checkerboard();
|
||||||
|
|
||||||
_Aggregate.PromoteFromSubspace(in,fin);
|
_Aggregate.PromoteFromSubspace(in,fin);
|
||||||
_poly(_Linop,fin,fout);
|
_poly(_Linop,fin,fout);
|
||||||
@ -139,7 +139,7 @@ public:
|
|||||||
int Nk = nbasis;
|
int Nk = nbasis;
|
||||||
_Aggregate.subspace.resize(Nk,_FineGrid);
|
_Aggregate.subspace.resize(Nk,_FineGrid);
|
||||||
_Aggregate.subspace[0]=1.0;
|
_Aggregate.subspace[0]=1.0;
|
||||||
_Aggregate.subspace[0].checkerboard=_checkerboard;
|
_Aggregate.subspace[0].Checkerboard()=_checkerboard;
|
||||||
normalise(_Aggregate.subspace[0]);
|
normalise(_Aggregate.subspace[0]);
|
||||||
PlainHermOp<FineField> Op(_FineOp);
|
PlainHermOp<FineField> Op(_FineOp);
|
||||||
for(int k=1;k<Nk;k++){
|
for(int k=1;k<Nk;k++){
|
||||||
@ -148,7 +148,7 @@ public:
|
|||||||
std::cout << GridLogMessage << "testFine subspace "<<k<<" " <<norm2(_Aggregate.subspace[k])<<std::endl;
|
std::cout << GridLogMessage << "testFine subspace "<<k<<" " <<norm2(_Aggregate.subspace[k])<<std::endl;
|
||||||
}
|
}
|
||||||
for(int k=0;k<Nk;k++){
|
for(int k=0;k<Nk;k++){
|
||||||
std::cout << GridLogMessage << "testFine subspace "<<k<<" cb " <<_Aggregate.subspace[k].checkerboard<<std::endl;
|
std::cout << GridLogMessage << "testFine subspace "<<k<<" cb " <<_Aggregate.subspace[k].Checkerboard()<<std::endl;
|
||||||
}
|
}
|
||||||
_Aggregate.Orthogonalise();
|
_Aggregate.Orthogonalise();
|
||||||
}
|
}
|
||||||
@ -165,14 +165,14 @@ public:
|
|||||||
|
|
||||||
std::vector<RealD> eval(Nm);
|
std::vector<RealD> eval(Nm);
|
||||||
|
|
||||||
FineField src(_FineGrid); src=1.0; src.checkerboard = _checkerboard;
|
FineField src(_FineGrid); src=1.0; src.Checkerboard() = _checkerboard;
|
||||||
|
|
||||||
ImplicitlyRestartedLanczos<FineField> IRL(ChebyOp,Op,Nk,Nk,Nm,resid,MaxIt,betastp,MinRes);
|
ImplicitlyRestartedLanczos<FineField> IRL(ChebyOp,Op,Nk,Nk,Nm,resid,MaxIt,betastp,MinRes);
|
||||||
_Aggregate.subspace.resize(Nm,_FineGrid);
|
_Aggregate.subspace.resize(Nm,_FineGrid);
|
||||||
IRL.calc(eval,_Aggregate.subspace,src,Nk,false);
|
IRL.calc(eval,_Aggregate.subspace,src,Nk,false);
|
||||||
_Aggregate.subspace.resize(Nk,_FineGrid);
|
_Aggregate.subspace.resize(Nk,_FineGrid);
|
||||||
for(int k=0;k<Nk;k++){
|
for(int k=0;k<Nk;k++){
|
||||||
std::cout << GridLogMessage << "testFine subspace "<<k<<" cb " <<_Aggregate.subspace[k].checkerboard<<std::endl;
|
std::cout << GridLogMessage << "testFine subspace "<<k<<" cb " <<_Aggregate.subspace[k].Checkerboard()<<std::endl;
|
||||||
}
|
}
|
||||||
_Aggregate.Orthogonalise();
|
_Aggregate.Orthogonalise();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user