< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir/src/org/graalvm/compiler/lir/alloc/trace/DefaultTraceRegisterAllocationPolicy.java
Print this page
rev 52509 : [mq]: graal
*** 75,87 ****
public static final OptionKey<Integer> TraceRAalmostTrivialSize = new OptionKey<>(2);
@Option(help = "Use BottomUp for traces with low number of variables at block boundaries", type = OptionType.Debug)
public static final OptionKey<Integer> TraceRAnumVariables = new OptionKey<>(null);
@Option(help = "Use LSRA / BottomUp ratio", type = OptionType.Debug)
public static final OptionKey<Double> TraceRAbottomUpRatio = new OptionKey<>(0.0);
! @Option(help = "Probability Threshold", type = OptionType.Debug)
! public static final OptionKey<Double> TraceRAprobalilityThreshold = new OptionKey<>(0.8);
! @Option(help = "Sum Probability Budget Threshold", type = OptionType.Debug)
public static final OptionKey<Double> TraceRAsumBudget = new OptionKey<>(0.5);
@Option(help = "TraceRA allocation policy to use.", type = OptionType.Debug)
public static final EnumOptionKey<TraceRAPolicies> TraceRAPolicy = new EnumOptionKey<>(TraceRAPolicies.Default);
// @formatter:on
}
--- 75,87 ----
public static final OptionKey<Integer> TraceRAalmostTrivialSize = new OptionKey<>(2);
@Option(help = "Use BottomUp for traces with low number of variables at block boundaries", type = OptionType.Debug)
public static final OptionKey<Integer> TraceRAnumVariables = new OptionKey<>(null);
@Option(help = "Use LSRA / BottomUp ratio", type = OptionType.Debug)
public static final OptionKey<Double> TraceRAbottomUpRatio = new OptionKey<>(0.0);
! @Option(help = "Frequency Threshold", type = OptionType.Debug)
! public static final OptionKey<Double> TraceRAfrequencyThreshold = new OptionKey<>(0.8);
! @Option(help = "Sum Frequency Budget Threshold", type = OptionType.Debug)
public static final OptionKey<Double> TraceRAsumBudget = new OptionKey<>(0.5);
@Option(help = "TraceRA allocation policy to use.", type = OptionType.Debug)
public static final EnumOptionKey<TraceRAPolicies> TraceRAPolicy = new EnumOptionKey<>(TraceRAPolicies.Default);
// @formatter:on
}
*** 275,335 ****
}
public static final class BottomUpMaxFrequencyStrategy extends BottomUpStrategy {
! private final double maxMethodProbability;
! private final double probabilityThreshold;
public BottomUpMaxFrequencyStrategy(TraceRegisterAllocationPolicy plan) {
// explicitly specify the enclosing instance for the superclass constructor call
super(plan);
! maxMethodProbability = maxProbability(getLIR().getControlFlowGraph().getBlocks());
! probabilityThreshold = Options.TraceRAprobalilityThreshold.getValue(plan.getOptions());
}
! private static double maxProbability(AbstractBlockBase<?>[] blocks) {
double max = 0;
for (AbstractBlockBase<?> block : blocks) {
! double probability = block.probability();
! if (probability > max) {
! max = probability;
}
}
return max;
}
@Override
public boolean shouldApplyTo(Trace trace) {
if (!super.shouldApplyTo(trace)) {
return false;
}
! return maxProbability(trace.getBlocks()) / maxMethodProbability <= probabilityThreshold;
}
}
public static final class BottomUpFrequencyBudgetStrategy extends BottomUpStrategy {
! private final double[] cumulativeTraceProbability;
private final double budget;
public BottomUpFrequencyBudgetStrategy(TraceRegisterAllocationPolicy plan) {
// explicitly specify the enclosing instance for the superclass constructor call
super(plan);
ArrayList<Trace> traces = getTraceBuilderResult().getTraces();
! this.cumulativeTraceProbability = new double[traces.size()];
! double sumMethodProbability = init(traces, this.cumulativeTraceProbability);
! this.budget = sumMethodProbability * Options.TraceRAsumBudget.getValue(plan.getOptions());
}
private static double init(ArrayList<Trace> traces, double[] sumTraces) {
double sumMethod = 0;
for (Trace trace : traces) {
double traceSum = 0;
for (AbstractBlockBase<?> block : trace.getBlocks()) {
! traceSum += block.probability();
}
sumMethod += traceSum;
// store cumulative sum for trace
sumTraces[trace.getId()] = sumMethod;
}
--- 275,335 ----
}
public static final class BottomUpMaxFrequencyStrategy extends BottomUpStrategy {
! private final double maxRelativeFrequency;
! private final double frequencyThreshold;
public BottomUpMaxFrequencyStrategy(TraceRegisterAllocationPolicy plan) {
// explicitly specify the enclosing instance for the superclass constructor call
super(plan);
! maxRelativeFrequency = maxRelativeFrequency(getLIR().getControlFlowGraph().getBlocks());
! frequencyThreshold = Options.TraceRAfrequencyThreshold.getValue(plan.getOptions());
}
! private static double maxRelativeFrequency(AbstractBlockBase<?>[] blocks) {
double max = 0;
for (AbstractBlockBase<?> block : blocks) {
! double frequency = block.getRelativeFrequency();
! if (frequency > max) {
! max = frequency;
}
}
return max;
}
@Override
public boolean shouldApplyTo(Trace trace) {
if (!super.shouldApplyTo(trace)) {
return false;
}
! return maxRelativeFrequency(trace.getBlocks()) / maxRelativeFrequency <= frequencyThreshold;
}
}
public static final class BottomUpFrequencyBudgetStrategy extends BottomUpStrategy {
! private final double[] cumulativeTraceFrequency;
private final double budget;
public BottomUpFrequencyBudgetStrategy(TraceRegisterAllocationPolicy plan) {
// explicitly specify the enclosing instance for the superclass constructor call
super(plan);
ArrayList<Trace> traces = getTraceBuilderResult().getTraces();
! this.cumulativeTraceFrequency = new double[traces.size()];
! double sumMethodFrequency = init(traces, this.cumulativeTraceFrequency);
! this.budget = sumMethodFrequency * Options.TraceRAsumBudget.getValue(plan.getOptions());
}
private static double init(ArrayList<Trace> traces, double[] sumTraces) {
double sumMethod = 0;
for (Trace trace : traces) {
double traceSum = 0;
for (AbstractBlockBase<?> block : trace.getBlocks()) {
! traceSum += block.getRelativeFrequency();
}
sumMethod += traceSum;
// store cumulative sum for trace
sumTraces[trace.getId()] = sumMethod;
}
*** 339,350 ****
@Override
public boolean shouldApplyTo(Trace trace) {
if (!super.shouldApplyTo(trace)) {
return false;
}
! double cumTraceProb = cumulativeTraceProbability[trace.getId()];
! return cumTraceProb > budget;
}
}
public static final class TraceLinearScanStrategy extends AllocationStrategy {
--- 339,350 ----
@Override
public boolean shouldApplyTo(Trace trace) {
if (!super.shouldApplyTo(trace)) {
return false;
}
! double cumTraceFrequency = cumulativeTraceFrequency[trace.getId()];
! return cumTraceFrequency > budget;
}
}
public static final class TraceLinearScanStrategy extends AllocationStrategy {
< prev index next >