Révision 76 Pi/C/Hybrid/Pi_Hybrid.c

Pi_Hybrid.c (revision 76)
94 94
#endif
95 95

  
96 96
  MPI_Status Stat;
97

  
97
  MPI_Request RequestSend,RequestRecv,RequestSend2,RequestRecv2;
98
  
98 99
  rc = MPI_Init(&argc,&argv);
99 100
  if (rc != MPI_SUCCESS) {
100 101
    printf ("Error starting MPI program. Terminating.\n");
......
152 153
    send.process=process;
153 154

  
154 155
    // Split part of code
155
    for (i=1;i<numtasks;i++) {
156
      
157
      rc = MPI_Send(&send, 1, mpi_node_type, i, tag, MPI_COMM_WORLD);
156
    for (i=1;i<numtasks;i++) {      
157
      rc = MPI_Isend(&send, 1, mpi_node_type, i, tag, MPI_COMM_WORLD, &RequestSend);
158 158
    }
159
    MPI_Wait(&RequestSend,&Stat);
159 160
    
160 161
#ifdef TIME
161 162
    gettimeofday(&start,(struct timezone *)0);
......
191 192
    // Join part of code
192 193
      for (i=1;i<numtasks;i++) {
193 194
#ifdef LONG
194
	rc = MPI_Recv(&insideMPI[i], 1, MPI_LONG_LONG, i, tag, 
195
		      MPI_COMM_WORLD, &Stat);
195
	rc = MPI_Irecv(&insideMPI[i], 1, MPI_LONG_LONG, i, tag, 
196
		       MPI_COMM_WORLD, &RequestRecv2);
196 197
#else
197
	rc = MPI_Recv(&insideMPI[i], 1, MPI_INT, i, tag, 
198
		      MPI_COMM_WORLD, &Stat);
198
	rc = MPI_Irecv(&insideMPI[i], 1, MPI_INT, i, tag, 
199
		       MPI_COMM_WORLD, &RequestRecv2);
199 200
#endif
201
	MPI_Wait(&RequestRecv2,&Stat);
200 202
	printf("\tReceive %lu inside from rank %i\n",(unsigned long)insideMPI[i],i);
201 203
	insides+=insideMPI[i];
202 204
      }
......
213 215
     
214 216
      node recv;
215 217

  
216
      rc = MPI_Recv(&recv, 1, mpi_node_type, 0, tag, MPI_COMM_WORLD, &Stat);
218
      rc = MPI_Irecv(&recv, 1, mpi_node_type, 0, tag, MPI_COMM_WORLD, &RequestRecv);
219
      MPI_Wait(&RequestRecv,&Stat);
217 220
      
218 221
      printf("\t(%s,%i) receive from master %lld with %i process\n",
219 222
             hostname,rank,(long long)recv.iterations,recv.process);
......
246 249
	     (long long)part_inside);
247 250
      
248 251
#endif
249
      
252

  
250 253
#ifdef LONG
251
      rc = MPI_Send(&part_inside, 1, MPI_LONG_LONG, 0, tag, MPI_COMM_WORLD);
254
      rc = MPI_Isend(&part_inside, 1, MPI_LONG_LONG, 0, tag, MPI_COMM_WORLD, &RequestSend2);
252 255
#else
253
      rc = MPI_Send(&part_inside, 1, MPI_INT, 0, tag, MPI_COMM_WORLD);
256
      rc = MPI_Isend(&part_inside, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &RequestSend2);
254 257
#endif
255 258

  
259
      MPI_Wait(&RequestSend2, &Stat);
256 260
    }
257 261
  
258 262
  MPI_Type_free(&mpi_node_type);

Formats disponibles : Unified diff