mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Share warmup logic across MJIT benchmarks
This commit is contained in:
		
							parent
							
								
									faf93e4545
								
							
						
					
					
						commit
						4c5780e51e
					
				
					 5 changed files with 38 additions and 30 deletions
				
			
		
							
								
								
									
										34
									
								
								benchmark/lib/benchmark_driver/runner/mjit.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								benchmark/lib/benchmark_driver/runner/mjit.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| require 'benchmark_driver/struct' | ||||
| require 'benchmark_driver/metric' | ||||
| require 'erb' | ||||
| 
 | ||||
| # A runner to measure after-JIT performance easily | ||||
| class BenchmarkDriver::Runner::Mjit < BenchmarkDriver::Runner::Ips | ||||
|   # JobParser returns this, `BenchmarkDriver::Runner.runner_for` searches "*::Job" | ||||
|   Job = Class.new(BenchmarkDriver::DefaultJob) | ||||
| 
 | ||||
|   # Dynamically fetched and used by `BenchmarkDriver::JobParser.parse` | ||||
|   JobParser = BenchmarkDriver::DefaultJobParser.for(klass: Job, metrics: [METRIC]).extend(Module.new{ | ||||
|     def parse(**) | ||||
|       jobs = super | ||||
|       jobs.map do |job| | ||||
|         job = job.dup | ||||
|         job.prelude = "#{job.prelude}\n#{<<~EOS}" | ||||
|           if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? | ||||
|             __bmdv_ruby_i = 0 | ||||
|             while __bmdv_ruby_i < 10000 # jit_min_calls | ||||
|               #{job.script} | ||||
|               __bmdv_ruby_i += 1 | ||||
|             end | ||||
|             RubyVM::MJIT.pause # compile | ||||
|             #{job.script} | ||||
|             RubyVM::MJIT.resume; RubyVM::MJIT.pause # recompile | ||||
|             #{job.script} | ||||
|             RubyVM::MJIT.resume; RubyVM::MJIT.pause # recompile 2 | ||||
|           end | ||||
|         EOS | ||||
|         job | ||||
|       end | ||||
|     end | ||||
|   }) | ||||
| end | ||||
|  | @ -1,3 +1,4 @@ | |||
| type: lib/benchmark_driver/runner/mjit | ||||
| prelude: | | ||||
|   class Bench < Hash | ||||
|     def initialize | ||||
|  | @ -11,20 +12,6 @@ prelude: | | |||
| 
 | ||||
|   bench = Bench.new | ||||
| 
 | ||||
|   if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? | ||||
|     jit_min_calls = 10000 | ||||
|     i = 0 | ||||
|     while i < jit_min_calls | ||||
|       bench.exivar | ||||
|       i += 1 | ||||
|     end | ||||
|     RubyVM::MJIT.pause # compile (1) | ||||
|     # issue recompile | ||||
|     bench.exivar | ||||
|     RubyVM::MJIT.resume | ||||
|     RubyVM::MJIT.pause # compile (2) | ||||
|   end | ||||
| 
 | ||||
| benchmark: | ||||
|   mjit_exivar: bench.exivar | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| type: lib/benchmark_driver/runner/mjit | ||||
| prelude: | | ||||
|   def mjit_zero?(int) | ||||
|     int.zero? | ||||
|  | @ -7,30 +8,14 @@ prelude: | | |||
|     int == 0 | ||||
|   end | ||||
| 
 | ||||
|   def warmup(sym, int) | ||||
|     if defined?(RubyVM::MJIT) && RubyVM::MJIT.enabled? | ||||
|       jit_min_calls = 10000 | ||||
|       i = 0 | ||||
|       while i < jit_min_calls | ||||
|         send(sym, int) | ||||
|         i += 1 | ||||
|       end | ||||
|       RubyVM::MJIT.pause | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
| benchmark: | ||||
|   - name: 0.zero? | ||||
|     prelude: warmup(:mjit_zero?, 0) | ||||
|     script: mjit_zero?(0) | ||||
|   - name: 1.zero? | ||||
|     prelude: warmup(:mjit_zero?, 1) | ||||
|     script: mjit_zero?(1) | ||||
|   - name: 0 == 0 | ||||
|     prelude: warmup(:mjit_eq_0, 0) | ||||
|     script: mjit_eq_0(0) | ||||
|   - name: 1 == 0 | ||||
|     prelude: warmup(:mjit_eq_0, 1) | ||||
|     script: mjit_eq_0(1) | ||||
| 
 | ||||
| loop_count: 40000000 | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| type: lib/benchmark_driver/runner/mjit | ||||
| prelude: | | ||||
|   def leave | ||||
|     nil | ||||
|  |  | |||
|  | @ -1,3 +1,4 @@ | |||
| type: lib/benchmark_driver/runner/mjit | ||||
| prelude: | | ||||
|   def mjit_send_cfunc | ||||
|     self.class | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Takashi Kokubun
						Takashi Kokubun