/** * @return true if input {@link ResourceRequirement} exceeds the hard bound long any dimension. If the parameter * orEqual is true, then matching along any dimension will also return true. */ public boolean exceedsHardBound(ResourceRequirement requirement, boolean orEqual) { return VectorAlgebra.exceedsVector(this.hardBound, requirement.getResourceVector(), orEqual); }
ResourceRequirement copyInto(ResourceRequirement reuse) { if (reuse == null) { return new ResourceRequirement(this.resourceVector.clone()); } else { System.arraycopy(this.resourceVector, 0, reuse.getResourceVector(), 0, this.resourceVector.length); return reuse; } }
private synchronized boolean addImpl(AllocatedRequestsIteratorBase.RequestWithResourceRequirement<T> newElement) { this.maxResourceRequirement.entryWiseMax(newElement.getResourceRequirement()); this.requestsOffered++; .add(this.currentRequirement, newElement.getResourceRequirement(), this.candidateRequirement); this.currentRequirement.copyInto(this.tmpRequirement); this.tmpRequirement.subtract(dropCandidate.getResourceRequirement()); toDrop.add(dropCandidate); if (!this.resourcePool.exceedsHardBound( ResourceRequirement.add(this.tmpRequirement, newElement.getResourceRequirement(), this.reuse), false)) { break; this.currentRequirement.subtract(drop.getResourceRequirement()); this.currentRequirement.add(newElement.getResourceRequirement()); return true;
public ResourceRequirement build() { return new ResourceRequirement(this.requirement); } }
private synchronized boolean addImpl(AllocatedRequestsIteratorBase.RequestWithResourceRequirement<T> newElement) { this.maxResourceRequirement.entryWiseMax(newElement.getResourceRequirement()); this.requestsOffered++; .add(this.currentRequirement, newElement.getResourceRequirement(), this.candidateRequirement); this.currentRequirement.copyInto(this.tmpRequirement); this.tmpRequirement.subtract(dropCandidate.getResourceRequirement()); toDrop.add(dropCandidate); if (!this.resourcePool.exceedsHardBound( ResourceRequirement.add(this.tmpRequirement, newElement.getResourceRequirement(), this.reuse), false)) { break; this.currentRequirement.subtract(drop.getResourceRequirement()); this.currentRequirement.add(newElement.getResourceRequirement()); return true;
@Override public ResourceRequirement totalResourcesUsed() { return new ResourceRequirement(this.currentRequirement); }
/** * @return true if input {@link ResourceRequirement} exceeds the soft bound long any dimension. If the parameter * orEqual is true, then matching along any dimension will also return true. */ public boolean exceedsSoftBound(ResourceRequirement requirement, boolean orEqual) { return VectorAlgebra.exceedsVector(this.softBound, requirement.getResourceVector(), orEqual); }
ResourceRequirement copyInto(ResourceRequirement reuse) { if (reuse == null) { return new ResourceRequirement(this.resourceVector.clone()); } else { System.arraycopy(this.resourceVector, 0, reuse.getResourceVector(), 0, this.resourceVector.length); return reuse; } }
public ConcurrentBoundedPriorityIterable(final Comparator<? super T> prioritizer, ResourceEstimator<T> resourceEstimator, String storeRejectedRequestsSetting, ResourcePool pool) { this.estimator = resourceEstimator; this.resourcePool = pool; this.dimensions = this.resourcePool.getNumDimensions(); this.comparator = prioritizer; this.allDifferentComparator = new AllDifferentComparator(); this.elements = new TreeSet<>(this.allDifferentComparator); this.storeRejectedRequestsSetting = storeRejectedRequestsSetting; this.currentRequirement = this.resourcePool.getResourceRequirementBuilder().zero().build(); this.maxResourceRequirement = new ResourceRequirement(this.currentRequirement); this.candidateRequirement = new ResourceRequirement(this.currentRequirement); this.tmpRequirement = new ResourceRequirement(this.currentRequirement); this.reuse = new ResourceRequirement(this.currentRequirement); }
/** * Stringify a {@link ResourceRequirement} with the appropriate dimension labels. */ public String stringifyRequirement(ResourceRequirement requirement) { return vectorToString(requirement.getResourceVector()); }
public static ResourceRequirement add(ResourceRequirement r1, ResourceRequirement r2, ResourceRequirement reuse) { if (reuse == null) { reuse = new ResourceRequirement(r1.resourceVector.clone()); } VectorAlgebra.addVector(r1.resourceVector, r2.resourceVector, 1., reuse.resourceVector); return reuse; }
/** * @return a new {@link ResourcePool} which is a copy of this {@link ResourcePool} except its resource vector has been * reduced by the input {@link ResourceRequirement}. */ protected ResourcePool contractPool(ResourceRequirement requirement) { return new ResourcePool(VectorAlgebra.addVector(this.softBound, requirement.getResourceVector(), -1., null), VectorAlgebra.addVector(this.hardBound, requirement.getResourceVector(), -1., null), this.defaultResourceUse, this.dimensionIndex); }
@Override public ResourceRequirement totalResourcesUsed() { return new ResourceRequirement(this.currentRequirement); }
@Override public T next() { RequestWithResourceRequirement<T> nextElement = this.underlying.next(); VectorAlgebra.addVector(this.currentRequirement, nextElement.getResourceRequirement().getResourceVector(), 1.0, this.currentRequirement); return nextElement.getT(); }
public ResourceRequirement build() { return new ResourceRequirement(this.requirement); } }
@Test public void test() { ResourcePool pool = ResourcePool.builder().maxResource(MEMORY, 1000.).maxResource(TIME, 200.).tolerance(MEMORY, 2.) .defaultRequirement(TIME, 1.).build(); Assert.assertEquals(pool.getNumDimensions(), 2); Assert.assertEquals(pool.getSoftBound(), new double[]{1000, 200}); // Default tolerance is 1.2 Assert.assertEquals(pool.getHardBound(), new double[]{2000, 240}); // Test default resource use Assert.assertEquals(pool.getResourceRequirementBuilder().build().getResourceVector(), new double[]{0, 1}); ResourceRequirement requirement = pool.getResourceRequirementBuilder().setRequirement(MEMORY, 10.).build(); Assert.assertEquals(requirement.getResourceVector(), new double[]{10, 1}); }
public ConcurrentBoundedPriorityIterable(final Comparator<? super T> prioritizer, ResourceEstimator<T> resourceEstimator, String storeRejectedRequestsSetting, ResourcePool pool) { this.estimator = resourceEstimator; this.resourcePool = pool; this.dimensions = this.resourcePool.getNumDimensions(); this.comparator = prioritizer; this.allDifferentComparator = new AllDifferentComparator(); this.elements = new TreeSet<>(this.allDifferentComparator); this.storeRejectedRequestsSetting = storeRejectedRequestsSetting; this.currentRequirement = this.resourcePool.getResourceRequirementBuilder().zero().build(); this.maxResourceRequirement = new ResourceRequirement(this.currentRequirement); this.candidateRequirement = new ResourceRequirement(this.currentRequirement); this.tmpRequirement = new ResourceRequirement(this.currentRequirement); this.reuse = new ResourceRequirement(this.currentRequirement); }
/** * @return true if input {@link ResourceRequirement} exceeds the soft bound long any dimension. If the parameter * orEqual is true, then matching along any dimension will also return true. */ public boolean exceedsSoftBound(ResourceRequirement requirement, boolean orEqual) { return VectorAlgebra.exceedsVector(this.softBound, requirement.getResourceVector(), orEqual); }
public static ResourceRequirement add(ResourceRequirement r1, ResourceRequirement r2, ResourceRequirement reuse) { if (reuse == null) { reuse = new ResourceRequirement(r1.resourceVector.clone()); } VectorAlgebra.addVector(r1.resourceVector, r2.resourceVector, 1., reuse.resourceVector); return reuse; }
/** * @return true if input {@link ResourceRequirement} exceeds the hard bound long any dimension. If the parameter * orEqual is true, then matching along any dimension will also return true. */ public boolean exceedsHardBound(ResourceRequirement requirement, boolean orEqual) { return VectorAlgebra.exceedsVector(this.hardBound, requirement.getResourceVector(), orEqual); }