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);
    }