static TStripeMapping SplitBetweenDevicesRandom(TRandom & rng, ui64 objectCount, ui64 objectSize = 1) { const ui64 devCount = GetCudaManager().GetDeviceCount(); TVector<TSlice> slices(devCount); const ui64 objectPerDevice = ((objectCount + devCount - 1) / devCount) + rng.NextUniformL() % (objectCount / devCount / 10); ui64 total = 0; for (ui32 i = 0; i < devCount; ++i) { const ui64 devSize = Min(objectCount - total, objectPerDevice); slices[i] = TSlice(total, total + devSize); total += devSize; } return TStripeMapping(std::move(slices), objectSize); }