Class: SeqParBenchmark
- Defined in:
- lib/vendor/treetop/benchmark/seqpar_benchmark.rb
Constant Summary collapse
- OPERATORS =
- ["seq", "fit", "art"*5, "par", "sequence"] 
Instance Method Summary collapse
- 
  
    
      #benchmark  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Launches benchmarking. 
- 
  
    
      #check  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Checks the grammar. 
- 
  
    
      #generate(depth = 0)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Generates an input text. 
- 
  
    
      #initialize  ⇒ SeqParBenchmark 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Loads the grammar and returns a parser. 
Constructor Details
#initialize ⇒ SeqParBenchmark
Loads the grammar and returns a parser
| 24 25 26 27 28 29 30 31 32 33 | # File 'lib/vendor/treetop/benchmark/seqpar_benchmark.rb', line 24 def initialize compiler = Treetop::Compiler::GrammarCompiler.new @where = File.(File.dirname(__FILE__)) grammar = File.join(@where, 'seqpar.treetop') output = File.join(@where, 'seqpar.rb') compiler.compile(grammar, output) load output File.delete(output) @parser = SeqParParser.new end | 
Instance Method Details
#benchmark ⇒ Object
Launches benchmarking
| 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | # File 'lib/vendor/treetop/benchmark/seqpar_benchmark.rb', line 69 def benchmark number_by_size = Hash.new {|h,k| h[k] = 0} time_by_size = Hash.new {|h,k| h[k] = 0} 0.upto(250) do |i| input = generate length = input.length puts "Launching #{i}: #{input.length}" # puts input tms = Benchmark.measure { @parser.parse(input) } number_by_size[length] += 1 time_by_size[length] += tms.total*1000 end # puts number_by_size.inspect # puts time_by_size.inspect File.open(File.join(@where, 'after.dat'), 'w') do |dat| number_by_size.keys.sort.each do |size| dat << "#{size} #{(time_by_size[size]/number_by_size[size]).truncate}\n" end end if File.exists?(File.join(@where, 'before.dat')) before = {} performance_increases = [] File.foreach(File.join(@where, 'before.dat')) do |line| size, time = line.split(' ') before[size] = time end File.foreach(File.join(@where, 'after.dat')) do |line| size, time = line.split(' ') performance_increases << (before[size].to_f - time.to_f) / before[size].to_f unless time == "0" end puts "Average performance increase: #{performance_increases.mean * 100}%" end end | 
#check ⇒ Object
Checks the grammar
| 36 37 38 39 40 41 42 43 44 45 46 47 | # File 'lib/vendor/treetop/benchmark/seqpar_benchmark.rb', line 36 def check ["Task", "seq Task end", "par Task end", "seq Task Task end", "par Task Task end", "par seq Task end Task end", "par seq seq Task end end Task end", "seq Task par seq Task end Task end Task end"].each do |input| raise ParseError.new(@parser) if @parser.parse(input).nil? end end | 
#generate(depth = 0) ⇒ Object
Generates an input text
| 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | # File 'lib/vendor/treetop/benchmark/seqpar_benchmark.rb', line 50 def generate(depth=0) return "Task" if depth>7 return "seq #{generate(depth+1)} end" if depth==0 which = rand(OPERATORS.length) case which when 0 "Task" else raise unless OPERATORS[which] buffer = "#{OPERATORS[which]} " 0.upto(rand(4)+1) do buffer << generate(depth+1) << " " end buffer << "end" buffer end end |