Example usage for com.google.common.collect Range canonical

List of usage examples for com.google.common.collect Range canonical

Introduction

In this page you can find the example usage for com.google.common.collect Range canonical.

Prototype

public Range<C> canonical(DiscreteDomain<C> domain) 

Source Link

Document

Returns the canonical form of this range in the given domain.

Usage

From source file:edu.mit.streamjit.impl.compiler2.SubsetBiasAllocationStrategy.java

@Override
public void allocateGroup(ActorGroup group, Range<Integer> iterations, List<Core> cores, Configuration config) {
    int id = group.id();
    int numCores = config.getParameter("Group" + id + "CoreCount", Configuration.IntParameter.class).getValue();
    Configuration.PermutationParameter<Integer> coreOrderParam = config.getParameter("Group" + id + "CoreOrder",
            Configuration.PermutationParameter.class, Integer.class);
    ImmutableList<? extends Integer> coreOrder = coreOrderParam.getUniverse();
    int rawBiasCount = config.getParameter("Group" + id + "BiasCount", Configuration.IntParameter.class)
            .getValue();//from www  .j  ava2s.  c o  m
    int biasCount = Math.min(rawBiasCount, numCores - 1);
    float bias = config.getParameter("Group" + id + "Bias", Configuration.FloatParameter.class).getValue();

    try {
        List<Core> subset = new ArrayList<>(numCores);
        for (int i = 0; i < coreOrder.size() && subset.size() < numCores; ++i)
            if (coreOrder.get(i) < cores.size())
                subset.add(cores.get(coreOrder.get(i)));
        List<Core> biasSubset = new ArrayList<>(biasCount);
        while (biasSubset.size() < biasCount)
            biasSubset.add(subset.remove(0));

        float deficitFraction = biasCount * (1 - bias) / numCores, surplusFraction = 1 - deficitFraction;
        assert deficitFraction >= 0 && surplusFraction >= 0 : String.format("%d %d %f -> %f %f", numCores,
                biasCount, bias, deficitFraction, surplusFraction);
        iterations = iterations.canonical(DiscreteDomain.integers());
        int totalIterations = iterations.upperEndpoint() - iterations.lowerEndpoint();
        int biasIterations = (int) (totalIterations * deficitFraction);
        //We pass a null config to ensure we don't interfere with the other strategy.
        if (biasCount > 0)
            new FullDataParallelAllocationStrategy(biasCount).allocateGroup(group,
                    Range.closedOpen(iterations.lowerEndpoint(), iterations.lowerEndpoint() + biasIterations),
                    biasSubset, null);
        if (numCores - biasCount > 0)
            new FullDataParallelAllocationStrategy(numCores - biasCount).allocateGroup(group,
                    Range.closedOpen(iterations.lowerEndpoint() + biasIterations, iterations.upperEndpoint()),
                    subset, null);
    } catch (Exception ex) {
        StringBuilder sb = new StringBuilder();
        sb.append(iterations).append(" of ").append(group).append("\n");
        sb.append(String.format("numCores %d, raw biasCount %d, biasCount %d, bias %f, order %s", numCores,
                rawBiasCount, biasCount, bias, coreOrder));
        throw new RuntimeException(sb.toString(), ex);
    }
}

From source file:edu.mit.streamjit.impl.compiler2.SubsetBiasAverageAllocationStrategy.java

@Override
public void allocateGroup(ActorGroup group, Range<Integer> iterations, List<Core> cores, Configuration config) {
    int numCores = 0, biasCount = 0;
    List<ImmutableList<? extends Integer>> coreOrders = new ArrayList<>();
    float bias = 0;
    for (Actor a : group.actors()) {
        int id = a.id();
        numCores += config.getParameter("Group" + id + "CoreCount", Configuration.IntParameter.class)
                .getValue();/*w w w.j  a va2 s.  c  om*/
        Configuration.PermutationParameter<Integer> coreOrderParam = config.getParameter(
                "Group" + id + "CoreOrder", Configuration.PermutationParameter.class, Integer.class);
        coreOrders.add(coreOrderParam.getUniverse());
        int ourBiasCount = config.getParameter("Group" + id + "BiasCount", Configuration.IntParameter.class)
                .getValue();
        biasCount += Math.min(ourBiasCount, numCores - 1);
        bias += config.getParameter("Group" + id + "Bias", Configuration.FloatParameter.class).getValue();
    }
    numCores = IntMath.divide(numCores, group.actors().size(), RoundingMode.CEILING);
    biasCount = IntMath.divide(biasCount, group.actors().size(), RoundingMode.FLOOR);
    bias /= group.actors().size();
    //Transpose coreOrders.
    List<Integer> coreOrder = new ArrayList<>();
    for (int i = 0; i < coreOrders.get(0).size(); ++i)
        for (int j = 0; j < coreOrders.size(); ++j)
            coreOrder.add(coreOrders.get(j).get(i));
    //Remove duplicates preserving order.
    coreOrder = new ArrayList<>(new LinkedHashSet<>(coreOrder));

    List<Core> subset = new ArrayList<>(numCores);
    for (int i = 0; i < coreOrder.size() && subset.size() < numCores; ++i)
        if (coreOrder.get(i) < cores.size())
            subset.add(cores.get(coreOrder.get(i)));
    List<Core> biasSubset = new ArrayList<>(biasCount);
    while (biasSubset.size() < biasCount)
        biasSubset.add(subset.remove(0));

    float deficitFraction = biasCount * (1 - bias) / numCores, surplusFraction = 1 - deficitFraction;
    assert deficitFraction >= 0 && surplusFraction >= 0 : String.format("%d %d %f -> %f %f", numCores,
            biasCount, bias, deficitFraction, surplusFraction);
    iterations = iterations.canonical(DiscreteDomain.integers());
    int totalIterations = iterations.upperEndpoint() - iterations.lowerEndpoint();
    int biasIterations = (int) (totalIterations * deficitFraction);
    //We pass a null config to ensure we don't interfere with the other strategy.
    if (biasCount > 0)
        new FullDataParallelAllocationStrategy(biasCount).allocateGroup(group,
                Range.closedOpen(iterations.lowerEndpoint(), iterations.lowerEndpoint() + biasIterations),
                biasSubset, null);
    if (numCores - biasCount > 0)
        new FullDataParallelAllocationStrategy(numCores - biasCount).allocateGroup(group,
                Range.closedOpen(iterations.lowerEndpoint() + biasIterations, iterations.upperEndpoint()),
                subset, null);
}