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