46 Foam::label Foam::commSchedule::outstandingComms
49 DynamicList<label>& procComms
52 label nOutstanding = 0;
56 if (commToSchedule[procComms[i]] == -1)
73 schedule_(comms.size()),
81 label proc0 = comms[commI][0];
82 label proc1 = comms[commI][1];
84 if (proc0 < 0 || proc0 >= nProcs || proc1 < 0 || proc1 >= nProcs)
90 procToComms[proc0].
append(commI);
91 procToComms[proc1].
append(commI);
97 Pout<<
"commSchedule::commSchedule : Wanted communication:" <<
endl;
104 << twoProcs[0] <<
" with " << twoProcs[1] <<
endl;
109 Pout<<
"commSchedule::commSchedule : Schedule:" <<
endl;
116 for (
int i = 0; i < nProcs; i++)
125 for (
int i = 0; i < nProcs; i++)
136 label nScheduled = 0;
141 labelList commToSchedule(comms.size(), -1);
143 while (nScheduled < comms.size())
145 label oldNScheduled = nScheduled;
159 label proc0 = comms[commI][0];
160 label proc1 = comms[commI][1];
164 commToSchedule[commI] == -1
170 outstandingComms(commToSchedule, procToComms[proc0])
171 + outstandingComms(commToSchedule, procToComms[proc1]);
189 commToSchedule[maxCommI] = nScheduled++;
190 busy[comms[maxCommI][0]] =
true;
191 busy[comms[maxCommI][1]] =
true;
196 label nIterComms = nScheduled-oldNScheduled;
202 forAll(commToSchedule, commI)
204 label sched = commToSchedule[commI];
206 if (sched >= oldNScheduled && sched < nScheduled)
208 label proc0 = comms[commI][0];
209 procToComm[proc0] = commI;
210 label proc1 = comms[commI][1];
211 procToComm[proc1] = commI;
217 os <<
setw(3) << iter <<
" |";
220 if (procToComm[proci] == -1)
226 os <<
setw(3) << procToComm[proci];
243 schedule_ = SortableList<label>(commToSchedule).indices();
252 label commI = schedule_[i];
253 const labelPair& twoProcs = comms[commI];
255 nProcScheduled[twoProcs[0]]++;
256 nProcScheduled[twoProcs[1]]++;
259 forAll(procSchedule_, proci)
261 procSchedule_[proci].
setSize(nProcScheduled[proci]);
267 label commI = schedule_[i];
268 const labelPair& twoProcs = comms[commI];
270 label proc0 = twoProcs[0];
271 procSchedule_[proc0][nProcScheduled[proc0]++] = commI;
273 label proc1 = twoProcs[1];
274 procSchedule_[proc1][nProcScheduled[proc1]++] = commI;
279 Pout<<
"commSchedule::commSchedule : Per processor:" <<
endl;
281 forAll(procSchedule_, proci)
283 const labelList& procComms = procSchedule_[proci];
285 Pout<<
"Processor " << proci <<
" talks to processors:" <<
endl;
289 const labelPair& twoProcs = comms[procComms[i]];
291 label nbr = (twoProcs[1] == proci ? twoProcs[0] : twoProcs[1]);