< 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 >