50 label nOutstanding = 0;
54 if (commToSchedule[procComms[i]] == -1)
72 schedule_(comms.
size()),
80 label proc0 = comms[commI][0];
81 label proc1 = comms[commI][1];
83 if (proc0 < 0 || proc0 >= nProcs || proc1 < 0 || proc1 >= nProcs)
89 procToComms[proc0].
append(commI);
90 procToComms[proc1].
append(commI);
94 if (debug && Pstream::master())
96 Pout<<
"commSchedule::commSchedule : Wanted communication:" <<
endl;
103 << twoProcs[0] <<
" with " << twoProcs[1] <<
endl;
108 Pout<<
"commSchedule::commSchedule : Schedule:" <<
endl;
115 for (
int i = 0; i < nProcs; i++)
124 for (
int i = 0; i < nProcs; i++)
135 label nScheduled = 0;
142 while (nScheduled < comms.
size())
144 label oldNScheduled = nScheduled;
158 label proc0 = comms[commI][0];
159 label proc1 = comms[commI][1];
163 commToSchedule[commI] == -1
169 outstandingComms(commToSchedule, procToComms[proc0])
170 + outstandingComms(commToSchedule, procToComms[proc1]);
188 commToSchedule[maxCommI] = nScheduled++;
189 busy[comms[maxCommI][0]] =
true;
190 busy[comms[maxCommI][1]] =
true;
193 if (debug && Pstream::master())
195 label nIterComms = nScheduled-oldNScheduled;
201 forAll(commToSchedule, commI)
203 label sched = commToSchedule[commI];
205 if (sched >= oldNScheduled && sched < nScheduled)
207 label proc0 = comms[commI][0];
208 procToComm[proc0] = commI;
209 label proc1 = comms[commI][1];
210 procToComm[proc1] = commI;
216 os <<
setw(3) << iter <<
" |";
219 if (procToComm[procI] == -1)
225 os <<
setw(3) << procToComm[procI];
235 if (debug && Pstream::master())
251 label commI = schedule_[i];
252 const labelPair& twoProcs = comms[commI];
254 nProcScheduled[twoProcs[0]]++;
255 nProcScheduled[twoProcs[1]]++;
258 forAll(procSchedule_, procI)
260 procSchedule_[procI].setSize(nProcScheduled[procI]);
266 label commI = schedule_[i];
267 const labelPair& twoProcs = comms[commI];
269 label proc0 = twoProcs[0];
270 procSchedule_[proc0][nProcScheduled[proc0]++] = commI;
272 label proc1 = twoProcs[1];
273 procSchedule_[proc1][nProcScheduled[proc1]++] = commI;
276 if (debug && Pstream::master())
278 Pout<<
"commSchedule::commSchedule : Per processor:" <<
endl;
280 forAll(procSchedule_, procI)
282 const labelList& procComms = procSchedule_[procI];
284 Pout<<
"Processor " << procI <<
" talks to processors:" <<
endl;
288 const labelPair& twoProcs = comms[procComms[i]];
290 label nbr = (twoProcs[1] == procI ? twoProcs[0] : twoProcs[1]);