Skip to content
Snippets Groups Projects
Commit 19c1352f authored by Luca Tornatore's avatar Luca Tornatore
Browse files

updated reduce routine

parent 5f3d8132
No related branches found
No related tags found
No related merge requests found
......@@ -252,14 +252,25 @@ void gridding_data(){
// MPI_Win_lock(MPI_LOCK_SHARED,target_rank,0,slabwin);
// MPI_Accumulate(gridss,size_of_grid,MPI_DOUBLE,target_rank,0,size_of_grid,MPI_DOUBLE,MPI_SUM,slabwin);
// MPI_Win_unlock(target_rank,slabwin);
// that can be avoided if shared window coincides with gridss
memcpy(Me.win.ptr+isector*sizeof(gridss), gridss, sizeof(gridss));
reduce( isector ); // here the reduce is performed within every host
// here thre reduce is performed among hosts
MPI_Barrier(MPI_COMM_WORLD);
if(Me.Rank[myHOST] == 0)
reduce(isector, 1<<(++Me.Ntasks[myHOST]));
if((Me.MAXl > myHOST) && (Me.Rank[HOSTS] != -1))
MPI_Reduce(grid, grid, size_of_grid, MPI_DOUBLE,MPI_SUM,target_rank,*Me.COMM[HOSTS]);
else
// that can be avoided if shared window coincides with gridss
memcpy(grid, Me.swins[Me.Rank[myHOST]].ptr+isector*sizeof(gridss), sizeof(grid));
//MPI_Put(gridss,size_of_grid,MPI_DOUBLE,target_rank,0,size_of_grid,MPI_DOUBLE,slabwin);
#else
MPI_Reduce(gridss,grid,size_of_grid,MPI_DOUBLE,MPI_SUM,target_rank,MPI_COMM_WORLD);
......@@ -387,20 +398,27 @@ void write_grided_data()
}
void reduce(int sector, int max_level)
void reduce( int sector )
{
for(int i = 0; i < max_level; i++)
int max_level = 0;
while( (1<< (++max_level) ) < Me.Ntasks[myHOST] );
for(int l = 0; l < max_level; l++)
{
int threshold = 1 << (i+1);
int threshold = 1 << (1+l);
if( Me.Rank[myHOST] % threshold == 0)
{
int local = Me.Rank[myHOST]+ (1<<i);
int target = Me.Rank[myHOST] + (1<<l);
for(int j = 0; j < size_of_grid; j++)
{
*((double*)Me.swins[Me.Rank[myHOST]].ptr+sector*sizeof(gridss)+j) += *((double*)Me.swins[local].ptr+sector*sizeof(gridss)+j);
}
*((double*)Me.swins[Me.Rank[myHOST]].ptr+sector*sizeof(gridss)+j) +=
*((double*)Me.swins[target].ptr+sector*sizeof(gridss)+j);
}
}
return;
}
......
......@@ -23,7 +23,7 @@ void gridding();
void initialize_array();
void gridding_data();
void write_grided_data();
void reduce(int sector, int max_level);
void reduce( int );
/* fourier_transform.c */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment