How to display the data after MPI_Scatter

Hi,
I have done MPI_Scatter but I am not sure if the data has reached other processes or not. So I want to print the data arrived a other processes but its not printing anything:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110

#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;
}


I am not getting any error but its not printinganything.

Some body please guide me.


$ mpic++ GES2.cpp
$ ./a.out
$

Zulfi.
You haven't actually told it how many processors to use.
Hi,
Thanks for your help. It worked. God bless you.

$ mpirun -np 4 ./a.out


Zulfi.
Registered users can post here. Sign in or register to post.