MCPcopy Create free account
hub / github.com/catboost/catboost / AllToAll

Function AllToAll

library/cpp/netliba/v6/ib_collective.cpp:184–280  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182 AA_POW2_MERGE,
183 };
184 static int AllToAll(TMergePlan* plan, int iter, int sl, EAllToAllMode mode, const TVector<int>& myGroup, TVector<TCoverInterval>* cover) {
185 TVector<TCoverInterval>& hostCoverage = *cover;
186 int groupSize = myGroup.ysize();
187
188 for (int k = 1; k < groupSize; ++k) {
189 int h1 = myGroup[k - 1];
190 int h2 = myGroup[k];
191 Y_ABORT_UNLESS(hostCoverage[h1].Fin == hostCoverage[h2].Beg, "Invalid host order in CreateGroupMerge()");
192 }
193
194 switch (mode) {
195 case AA_POW2: {
196 for (int delta = 1; delta < groupSize; delta *= 2) {
197 int sz = Min(delta, groupSize - delta);
198 for (int offset = 0; offset < groupSize; ++offset) {
199 int srcRank = myGroup[offset];
200 int dstRank = myGroup[(offset + delta) % groupSize];
201
202 int start = offset + 1 - sz;
203 int finish = offset + 1;
204 if (start < 0) {
205 // [start; myGroup.size())
206 int dataBeg = hostCoverage[myGroup[start + groupSize]].Beg;
207 int dataFin = hostCoverage[myGroup.back()].Fin;
208 plan->Transfer(iter, srcRank, dstRank, sl, dataBeg, dataFin);
209 // [0; finish)
210 dataBeg = hostCoverage[myGroup[0]].Beg;
211 dataFin = hostCoverage[myGroup[finish - 1]].Fin;
212 plan->Transfer(iter, srcRank, dstRank, sl, dataBeg, dataFin);
213 } else {
214 // [start;finish)
215 int dataBeg = hostCoverage[myGroup[start]].Beg;
216 int dataFin = hostCoverage[myGroup[finish - 1]].Fin;
217 plan->Transfer(iter, srcRank, dstRank, sl, dataBeg, dataFin);
218 }
219 }
220 ++iter;
221 }
222 } break;
223 case AA_CIRCLE: {
224 for (int dataDelta = 1; dataDelta < groupSize; ++dataDelta) {
225 for (int offset = 0; offset < groupSize; ++offset) {
226 int srcRank = myGroup[offset];
227 int dstRank = myGroup[(offset + 1) % groupSize];
228
229 int dataRank = myGroup[(offset + 1 - dataDelta + groupSize) % groupSize];
230 int dataBeg = hostCoverage[dataRank].Beg;
231 int dataFin = hostCoverage[dataRank].Fin;
232
233 plan->Transfer(iter, srcRank, dstRank, sl, dataBeg, dataFin);
234 }
235 ++iter;
236 }
237 } break;
238 case AA_STAR: {
239 for (int offset = 0; offset < groupSize; ++offset) {
240 for (int delta = 1; delta < groupSize; ++delta) {
241 int srcRank = myGroup[offset];

Callers 1

CreateGroupMergeFunction · 0.70

Calls 5

CreatePow2MergeFunction · 0.70
MinFunction · 0.50
ysizeMethod · 0.45
backMethod · 0.45
TransferMethod · 0.45

Tested by

no test coverage detected