mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Faster code for split unsplit
This commit is contained in:
parent
ae3b7713a9
commit
d93c6760ec
@ -822,6 +822,7 @@ void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
|
|||||||
|
|
||||||
// Loop over reordered data post A2A
|
// Loop over reordered data post A2A
|
||||||
parallel_for(int c=0;c<chunk;c++){
|
parallel_for(int c=0;c<chunk;c++){
|
||||||
|
std::vector<int> coor(ndim);
|
||||||
for(int m=0;m<M;m++){
|
for(int m=0;m<M;m++){
|
||||||
for(int s=0;s<sP;s++){
|
for(int s=0;s<sP;s++){
|
||||||
|
|
||||||
@ -833,7 +834,6 @@ void Grid_split(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
|
|||||||
uint64_t lex_vec = lex_fvol_vec/fvol;
|
uint64_t lex_vec = lex_fvol_vec/fvol;
|
||||||
|
|
||||||
// which node sets an adder to the coordinate
|
// which node sets an adder to the coordinate
|
||||||
std::vector<int> coor(ndim);
|
|
||||||
Lexicographic::CoorFromIndex(coor, lex_fvol, ldims);
|
Lexicographic::CoorFromIndex(coor, lex_fvol, ldims);
|
||||||
coor[d] += m*ldims[d];
|
coor[d] += m*ldims[d];
|
||||||
Lexicographic::IndexFromCoor(coor, lex_r, rdims);
|
Lexicographic::IndexFromCoor(coor, lex_r, rdims);
|
||||||
@ -940,10 +940,11 @@ void Grid_unsplit(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
|
|||||||
|
|
||||||
{
|
{
|
||||||
// Loop over reordered data post A2A
|
// Loop over reordered data post A2A
|
||||||
for(int c=0;c<chunk;c++){
|
parallel_for(int c=0;c<chunk;c++){
|
||||||
|
std::vector<int> coor(ndim);
|
||||||
for(int m=0;m<M;m++){
|
for(int m=0;m<M;m++){
|
||||||
for(int s=0;s<sP;s++){
|
for(int s=0;s<sP;s++){
|
||||||
|
|
||||||
// addressing; use lexico
|
// addressing; use lexico
|
||||||
int lex_r;
|
int lex_r;
|
||||||
uint64_t lex_c = c+chunk*m+chunk*M*s;
|
uint64_t lex_c = c+chunk*m+chunk*M*s;
|
||||||
@ -952,7 +953,6 @@ void Grid_unsplit(std::vector<Lattice<Vobj> > & full,Lattice<Vobj> & split)
|
|||||||
uint64_t lex_vec = lex_fvol_vec/fvol;
|
uint64_t lex_vec = lex_fvol_vec/fvol;
|
||||||
|
|
||||||
// which node sets an adder to the coordinate
|
// which node sets an adder to the coordinate
|
||||||
std::vector<int> coor(ndim);
|
|
||||||
Lexicographic::CoorFromIndex(coor, lex_fvol, ldims);
|
Lexicographic::CoorFromIndex(coor, lex_fvol, ldims);
|
||||||
coor[d] += m*ldims[d];
|
coor[d] += m*ldims[d];
|
||||||
Lexicographic::IndexFromCoor(coor, lex_r, rdims);
|
Lexicographic::IndexFromCoor(coor, lex_r, rdims);
|
||||||
@ -978,9 +978,9 @@ 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());
|
// assert(v<full.size());
|
||||||
parallel_for(int site=0;site<lsites;site++){
|
parallel_for(int site=0;site<lsites;site++){
|
||||||
assert(v*lsites+site < alldata.size());
|
// assert(v*lsites+site < alldata.size());
|
||||||
scalardata[site] = alldata[v*lsites+site];
|
scalardata[site] = alldata[v*lsites+site];
|
||||||
}
|
}
|
||||||
vectorizeFromLexOrdArray(scalardata,full[v]);
|
vectorizeFromLexOrdArray(scalardata,full[v]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user