Commit 21f66668 authored by Nandhana Sakhtivel's avatar Nandhana Sakhtivel
Browse files

Changes in MPI One sided communication

parent e792cb60
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -30,8 +30,6 @@
#include "numa.h"


#include "numa.h"

extern struct io
{
	FILE * pFile;
+19 −27
Original line number Diff line number Diff line
#include <stdio.h>
#include <math.h>
#include "allvars.h"
#include "proto.h"

@@ -253,10 +254,12 @@ void gridding_data(){
      // MPI_Win_unlock(target_rank,slabwin);
       memcpy(Me.win.ptr+isector*sizeof(gridss), gridss, sizeof(gridss));
       MPI_Barrier(MPI_COMM_WORLD);
       printf("rank %d\n", rank);
       reduce(target_rank, isector, 0, size-1);
       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
          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);
@@ -384,32 +387,21 @@ void write_grided_data()

}

void reduce(int target, int sector, int begin, int end)
{
   if(begin >= end)
       return;
   int mid = (begin+end)/2;
   reduce(target, sector, begin, mid);
   reduce(target, sector, mid+1, end);
   accumulate(target, sector, begin, mid, end);
}


void accumulate(int target, int sector, int begin, int mid, int end)
void reduce(int sector, int max_level)
{

    for(int i =mid; i<end; i++)
   for(int i = 0; i < max_level; i++)
   {
        if(i != target)
         int threshold = 1 << (i+1);
         if( Me.Rank[myHOST] % threshold == 0)
         {
         	int local = Me.Rank[myHOST]+ (1<<i);
         	for(int j=0; j<size_of_grid; j++)
         	{
                    *((double*)Me.swins[target].ptr+sector*sizeof(gridss)+j) += *((double*)Me.swins[i].ptr+sector*sizeof(gridss)+j);
                    //printf("value = %lf, rank = %d\n", *((double*)Me.swins[target].ptr+isector*sizeof(gridss)+j), rank);
	 		*((double*)Me.swins[Me.Rank[myHOST]].ptr+sector*sizeof(gridss)+j) += *((double*)Me.swins[local].ptr+sector*sizeof(gridss)+j);
         	}  
         }
   }
    //if(rank == target_rank)
    //   memcpy(grid, Me.swins[target_rank].ptr+isector*sizeof(gridss), sizeof(grid));    

}


+1 −2
Original line number Diff line number Diff line
@@ -23,8 +23,7 @@ void gridding();
void initialize_array();
void gridding_data();
void write_grided_data();
void reduce(int target, int sector, int begin, int end);
void accumulate(int target, int sector, int begin, int mid, int end);
void reduce(int sector, int max_level);


/* fourier_transform.c */