List of usage examples for com.google.common.collect Range canonical
public Range<C> canonical(DiscreteDomain<C> domain)
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); }