Module: Flexr::Automaton::BackendCostModel

Defined in:
lib/flexr/automaton/backend_cost_model.rb

Defined Under Namespace

Classes: Metrics

Class Method Summary collapse

Class Method Details

.choose(compiled) ⇒ Object



18
19
20
21
22
23
# File 'lib/flexr/automaton/backend_cost_model.rb', line 18

def choose(compiled)
  metrics = compiled.machines.values.map { |machine| metrics_for(machine.dfa) }
  direct_score = metrics.sum(&:direct_score)
  table_score = metrics.sum(&:table_score)
  direct_score < table_score ? :direct : :table
end

.metrics_for(dfa) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/flexr/automaton/backend_cost_model.rb', line 25

def metrics_for(dfa)
  cells = dfa.states * dfa.class_count
  overrides = dfa.transitions.sum do |row|
    default = row.tally.max_by { |_value, count| count }&.first
    row.count { |value| value != default }
  end
  packed_integers = (overrides * 2) + (dfa.states * 2)
  Metrics.new(
    dense_bytes: cells * 4,
    packed_bytes: packed_integers * 4,
    lookup_samples: dfa.states * [dfa.class_count, 16].min
  ).freeze
end