Hi,
I have used MPI_Scatter to dsitribute the data but I am not sure if the data has arrived at all the processes or not. I am trying to print the data at other processes, but I am not getting any value
Code:
#include <iostream>
#include <cmath>
#include <mpi.h>
#include <fstream>
#include <ctime>
#include <vector>
#define n 16
int rank, size;
//void GaussianElimination(double **,double *b ,double *y);
int main(int argc, char * argv[])
{
double sTime, eTime, rTime;
std::ifstream inFile;
int num_rows = 4;
int num_cols = 4;
int num_processors =4;
int cur_control = 0;
double * send_buffer = NULL;
double * recv_buffer = NULL;
double ** data = NULL;
double determinant;
int irow =0; int icol=0; int iIndex =0;
std::vector<double> file_buffer;
double **M_A, *I_A, *I_B, *I_Y, *ARecv, *BRecv;
double *Output, Pivot;
I_B = NULL;
I_B = new double[n];
if(I_B == NULL){
std::cout<< " I_A can't be allocated memory";
return -2;
}
I_A = NULL;
I_A = new double[n];
if(I_A == NULL){
std::cout<< " I_A can't be allocated memory";
return -2;
}
I_Y = NULL;
I_Y = new double[n];
if(I_Y== NULL){
std::cout<< " I_Y can't be allocated memory";
return -2;
}
recv_buffer = new double[n];
if(recv_buffer== NULL){
std::cout<< " recv_buffer can't be allocated memory";
return -2;
}
M_A = new double*[num_cols];
for(int i = 0; i < num_cols; i++){
M_A[i] = new double[num_rows];
if(M_A[i]==NULL){
std::cout<<"M_A can't be allocated";
MPI_Finalize();
return 0;
}
}
for(int i = 0; i < num_cols; i++)
{
for(int j = 0; j < num_rows; j++)
M_A[i][j] = 0;
}
// Just get the initialization of the program going.
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if(!rank)
{ M_A[0][0] =2.0;M_A[0][1] =1.0; M_A[0][2] = -1.0; M_A[0][3] =2.0; //A[0][3] = 12.0;
M_A[1][0] =4.0;M_A[1][1] =5.0; M_A[1][2] =-3.0; M_A[1][3] = 6.0;//A[1][3] = 0.0;
M_A[2][0] =-2.0;M_A[2][1] =5.0; M_A[2][2] = -2.0; M_A[2][3]=6.0;//A[0][3] = -9;
M_A[3][0] =4.0;M_A[3][1] =11.0; M_A[3][2] = -4.0; M_A[3][3]=8.0;//A[0][3] = -9;
I_B[0] = 5; I_B[1] = 9; I_B[2] = 4; I_B[3]=2;
for(irow=0; irow<num_rows; irow++)
for(icol=0; icol<num_cols; icol++)
I_A[iIndex++] = M_A[irow][icol];
}
MPI_Bcast (&num_rows, 1, MPI_INT, 0, MPI_COMM_WORLD);
int iChunkSize = num_rows/num_processors;
MPI_Scatter(send_buffer, num_cols, MPI_DOUBLE, recv_buffer, num_cols, MPI_DOUBLE, 0, MPI_COMM_WORLD);//data goes to each process
/*for(int i=0;i<num_rows;i++)
{
MPI_Bcast((int **)&(M_A[i][0]),num_rows,MPI_INT,0,MPI_COMM_WORLD);
}*/
if(rank!=0) {
for (int i= 0; i <num_rows;i++)
{
std::cout<<recv_buffer[i];
printf("\n");
}
}
// MPI_Barrier(MPI_COMM_WORLD);*/
delete [] I_Y;
delete [ ]I_B;
for(int i = 0; i < n; i++)
delete [] M_A[i];
delete [ ] M_A;// No need to delete A because A is not created dynamically
MPI_Finalize();
return 0;
}
Somebody please guide me what is the problem with my printing code. I am not getting any error at compile or run-time.
Zulfi.