Révision 77 Pi/C/MPI/Pi_MPI.c

Pi_MPI.c (revision 77)
82 82
#endif
83 83

  
84 84
  MPI_Status Stat;
85

  
85
  MPI_Request RequestSend, RequestRecv, RequestSend2, RequestRecv2;
86
     
86 87
  rc = MPI_Init(&argc,&argv);
87 88
  if (rc != MPI_SUCCESS) {
88 89
    printf ("Error starting MPI program. Terminating.\n");
......
116 117
    for (i=1;i<numtasks;i++) {
117 118
      
118 119
#ifdef LONG
119
      rc = MPI_Send(&part_iterations, 1, MPI_LONG_LONG, i, tag, 
120
                    MPI_COMM_WORLD);
120
      rc = MPI_Isend(&part_iterations, 1, MPI_LONG_LONG, i, tag, 
121
		     MPI_COMM_WORLD,&RequestSend);
121 122
#else
122
      rc = MPI_Send(&part_iterations, 1, MPI_INT, i, tag, 
123
                    MPI_COMM_WORLD);
124
#endif
123
      rc = MPI_Isend(&part_iterations, 1, MPI_INT, i, tag, 
124
		     MPI_COMM_WORLD,&RequestSend);
125
#endif      
125 126
    }
127
    MPI_Wait(&RequestSend, &Stat);
126 128
    
127 129
#ifdef TIME
128 130
    gettimeofday(&start,(struct timezone *)0);
......
145 147
    // Join part of code
146 148
      for (i=1;i<numtasks;i++) {
147 149
#ifdef LONG
148
	rc = MPI_Recv(&inside[i], 1, MPI_LONG_LONG, i, tag, 
149
		      MPI_COMM_WORLD, &Stat);
150
	rc = MPI_Irecv(&inside[i], 1, MPI_LONG_LONG, i, tag, 
151
		      MPI_COMM_WORLD, &RequestRecv2);
150 152
#else
151
	rc = MPI_Recv(&inside[i], 1, MPI_INT, i, tag, 
152
		      MPI_COMM_WORLD, &Stat);
153
	rc = MPI_Irecv(&inside[i], 1, MPI_INT, i, tag, 
154
		      MPI_COMM_WORLD, &RequestRecv2);
153 155
#endif
156
	MPI_Wait(&RequestRecv2, &Stat);
157
	
154 158
	printf("\tReceive %lu inside from rank %i\n",(unsigned long)inside[i],i);
155 159
	insides+=inside[i];
156 160
      }
......
165 169
    {
166 170
      // Receive information from master
167 171
#ifdef LONG
168
      rc = MPI_Recv(&part_iterations, 1, MPI_LONG_LONG, 0, tag, 
169
                    MPI_COMM_WORLD, &Stat);
172
      rc = MPI_Irecv(&part_iterations, 1, MPI_LONG_LONG, 0, tag, 
173
                    MPI_COMM_WORLD, &RequestRecv);
170 174
#else
171
      rc = MPI_Recv(&part_iterations, 1, MPI_INT, 0, tag, 
172
                    MPI_COMM_WORLD, &Stat);
175
      rc = MPI_Irecv(&part_iterations, 1, MPI_INT, 0, tag, 
176
                    MPI_COMM_WORLD, &RequestRecv);
173 177
#endif
178
      MPI_Wait(&RequestRecv, &Stat);
174 179
      
175 180
      printf("\tOn %s with rank %i, receive from master %lld\n",
176 181
             hostname,rank,(long long)part_iterations);
......
195 200
#endif
196 201
      
197 202
#ifdef LONG
198
      rc = MPI_Send(&part_inside, 1, MPI_LONG_LONG, 0, tag, MPI_COMM_WORLD);
203
      rc = MPI_Isend(&part_inside, 1, MPI_LONG_LONG, 0, tag, MPI_COMM_WORLD,&RequestSend2);
199 204
#else
200
      rc = MPI_Send(&part_inside, 1, MPI_INT, 0, tag, MPI_COMM_WORLD);
205
      rc = MPI_Isend(&part_inside, 1, MPI_INT, 0, tag, MPI_COMM_WORLD,&RequestSend2);
201 206
#endif
207
      MPI_Wait(&RequestSend2, &Stat);
202 208

  
203 209
    }
204 210
  

Formats disponibles : Unified diff