1
0
mirror of https://github.com/paboyle/Grid.git synced 2025-04-09 21:50:45 +01:00

SHaking out

This commit is contained in:
paboyle 2017-10-30 00:22:06 +00:00
parent 501fa1614a
commit a7f72eb994

View File

@ -757,6 +757,7 @@ void precisionChange(Lattice<VobjOut> &out, const Lattice<VobjIn> &in){
// NB: Easiest to programme if keep in lex order. // NB: Easiest to programme if keep in lex order.
// //
///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////
template<class Vobj> template<class Vobj>
void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split) void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
{ {
@ -805,6 +806,7 @@ void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
std::vector<Sobj> tmpdata(sz); std::vector<Sobj> tmpdata(sz);
std::vector<Sobj> alldata(sz); std::vector<Sobj> alldata(sz);
std::vector<Sobj> scalardata(lsites); std::vector<Sobj> scalardata(lsites);
for(int v=0;v<nvector;v++){ for(int v=0;v<nvector;v++){
unvectorizeToLexOrdArray(scalardata,full[v]); unvectorizeToLexOrdArray(scalardata,full[v]);
parallel_for(int site=0;site<lsites;site++){ parallel_for(int site=0;site<lsites;site++){
@ -816,18 +818,23 @@ void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
std::vector<int> ldims = full_grid->_ldimensions; std::vector<int> ldims = full_grid->_ldimensions;
std::vector<int> lcoor(ndim); std::vector<int> lcoor(ndim);
for(int d=0;d<ndim;d++){ for(int d=ndim-1;d>=0;d--){
if ( ratio[d] != 1 ) { if ( ratio[d] != 1 ) {
full_grid ->AllToAll(d,alldata,tmpdata); full_grid ->AllToAll(d,alldata,tmpdata);
// std::cout << GridLogMessage << "Grid_split: dim " <<d<<" ratio "<<ratio[d]<<" nvec "<<nvec<<" procs "<<split_grid->_processors[d]<<std::endl;
// for(int v=0;v<nvec;v++){
// std::cout << "Grid_split: alldata["<<v<<"] " << alldata[v] <<std::endl;
// std::cout << "Grid_split: tmpdata["<<v<<"] " << tmpdata[v] <<std::endl;
// }
////////////////////////////////////////// //////////////////////////////////////////
//Local volume for this dimension is expanded by ratio of processor extents //Local volume for this dimension is expanded by ratio of processor extents
// Number of vectors is decreased by same factor // Number of vectors is decreased by same factor
// Rearrange to lexico for bigger volume // Rearrange to lexico for bigger volume
////////////////////////////////////////// //////////////////////////////////////////
nvec /= ratio[d]; nvec /= ratio[d];
auto rdims = ldims; rdims[d] *= ratio[d]; auto rdims = ldims; rdims[d] *= ratio[d];
auto rsites= lsites*ratio[d]; auto rsites= lsites*ratio[d];
for(int v=0;v<nvec;v++){ for(int v=0;v<nvec;v++){
@ -847,7 +854,9 @@ void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
int rmul=nvec*lsites; int rmul=nvec*lsites;
int vmul= lsites; int vmul= lsites;
alldata[rsite] = tmpdata[lsite+r*rmul+v*vmul]; alldata[rsite] = tmpdata[lsite+r*rmul+v*vmul];
// if ( lsite==0 ) {
// std::cout << "Grid_split: grow alldata["<<rsite<<"] " << alldata[rsite] << " <- tmpdata["<< lsite+r*rmul+v*vmul<<"] "<<tmpdata[lsite+r*rmul+v*vmul] <<std::endl;
// }
} }
} }
} }
@ -860,7 +869,6 @@ void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
} }
} }
} }
vectorizeFromLexOrdArray(alldata,split); vectorizeFromLexOrdArray(alldata,split);
} }
@ -936,10 +944,12 @@ void Grid_unsplit(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
lsites = split_grid->lSites(); lsites = split_grid->lSites();
std::vector<int> ldims = split_grid->_ldimensions; std::vector<int> ldims = split_grid->_ldimensions;
for(int d=ndim-1;d>=0;d--){ // for(int d=ndim-1;d>=0;d--){
for(int d=0;d<ndim;d++){
if ( ratio[d] != 1 ) { if ( ratio[d] != 1 ) {
if ( split_grid->_processors[d] > 1 ) { if ( split_grid->_processors[d] > 1 ) {
tmpdata = alldata; tmpdata = alldata;
split_grid->AllToAll(d,tmpdata,alldata); split_grid->AllToAll(d,tmpdata,alldata);
@ -985,13 +995,11 @@ void Grid_unsplit(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
lsites = full_grid->lSites(); lsites = full_grid->lSites();
for(int v=0;v<nvector;v++){ for(int v=0;v<nvector;v++){
assert(v<full.size());
parallel_for(int site=0;site<lsites;site++){ parallel_for(int site=0;site<lsites;site++){
scalardata[site] = alldata[v*lsites+site]; scalardata[site] = alldata[v*lsites+site];
} }
assert(v<full.size());
vectorizeFromLexOrdArray(scalardata,full[v]); vectorizeFromLexOrdArray(scalardata,full[v]);
} }
} }