рд╣рдордиреЗ рд░реВрдмреА-1.9.3-рдкреА 125 рд╕реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдЪрд╛рд▓реВ рдереЗ:
OS: OSX рд╢реЗрд░ 10.7.3
рдкреНрд░реЛрд╕реЗрд╕рд░: 2.3 GHz i5
рдореЗрдореЛрд░реА: 8 рдЬреАрдмреА 1333 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдбреАрдбреАрдЖрд░ 3
SSD: OCZ рд╡рд░реНрдЯреЗрдХреНрд╕ 3 рдореИрдХреНрд╕ IOPS SATA III 2.5 "120GB
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:
- рд░реВрдмреА 1.8.7p249 (рд╕рд┐рд╕реНрдЯрдо рд░реВрдмреА)
- рд░реВрдмреА 1.9.3p125
- рд░реВрдмреА 2.0.0рджреЗрд╡ (2012-02-25 рдЯреНрд░рдВрдХ 34796)
- MacRuby 0.12 (рд░реВрдмреА 1.9.2) (рд░рд╛рдд рдХрд╛ рдирд┐рд░реНрдорд╛рдг)
- рдореИрдЧреНрд▓реЗрд╡ 1.0.0 (рд░реВрдмреА 1.8.7)
- рд░реБрдмрд┐рдирд┐рдпрд╕ рез.реи.рек (рез. 1.8. release рд░рд┐рд▓реАрдЬрд╝ реирежрезрез-реж.4-режрел рдЬреЗрдЖрдИ)
- рд░реБрдмрд┐рдирд┐рдпрд╕ 2.0.0рджреЗрд╡ (1.9.3 e22ed173 JI)
- jruby 1.7.0.dev (рд░реВрдмреА-1.9.3-p28) (рдЬрд╛рд╡рд╛ рд╣реЙрдЯрд╕реНрдкреЙрдЯ (TM) 64-рдмрд┐рдЯ рд╕рд░реНрд╡рд░ VM 1.7.0_04-ea)
- рдЬреЙрд░реНрдмреА 1.6.7 (рд░реВрдмреА-1.8.7-рдкреА 357) (рдЬрд╛рд╡рд╛ рд╣реЙрдЯрд╕реНрдкреЙрдЯ (рдЯреАрдПрдо) 64-рдмрд┐рдЯ рд╕рд░реНрд╡рд░ рд╡реАрдПрдо 1.7.0_04-рдИрдЖрд░)
JRuby рдиреЗ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА --server -Xinvokedynamic.constants = true
рд╕рдВрдХрд▓рдХ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ
рд╕рдордп-рд╕рдордп рдкрд░ рдореИрдВ рдкреИрдЪ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реВрдмреА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреЛрд╕реНрдЯ рджреЗрдЦрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдЖрдЧреЗ рднреА рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдирд╡реАрдирддрдо рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ? рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдпрд╣рд╛рдБ рд╕рдВрдХрд▓рдХ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ:
- gcc рд╕рдВрд╕реНрдХрд░рдг рек.реи.рез (рдирд┐рд░реНрдорд╛рдг релремреж)) (LLVM рдмрд┐рд▓реНрдб реирейрейрем.реп режреж)
- Apple clang рд╕рдВрд╕реНрдХрд░рдг 3.1 (рдЯреИрдЧ / Apple / clang-318.0.45) (LLVM 3.1svn рдкрд░ рдЖрдзрд╛рд░рд┐рдд)
- gcc рд╕рдВрд╕реНрдХрд░рдг рек.реи.рез (Apple Inc. рдмрд┐рд▓реНрдб релремремрем)
- gcc рд╕рдВрд╕реНрдХрд░рдг 4.7.0 20120218 (рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ) (GCC)
#!/bin/bash compilers=( gcc gcc-4.2 gcc-4.7 clang ) for i in "${compilers[@]}"; do CC=$i ./configure --disable-install-doc --prefix ~/Projects/benches/mri/1.9.3-p125-$i time make -j4 make install done $ ruby driver.rb -v -o ~/Projects/benches/compilers-bench.txt \ --executables='~/Projects/benches/mri/1.9.3-p125-gcc/bin/ruby; ~/Projects/benches/mri/1.9.3-p125-gcc-4.2/bin/ruby; ~/Projects/benches/mri/1.9.3-p125-gcc-4.7/bin/ruby; ~/Projects/benches/mri/1.9.3-p125-clang/bin/ruby'
рдкрд░рд┐рдгрд╛рдо:
~ 20% рдЕрдВрддрд░ (рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрдИ рдмрд╛рд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдореИрдВрдиреЗ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЯреЗрд╕реНрдЯ рдореЗрдВ llvm-gcc, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ gcc-4.7 рдХреЗ рдмреАрдЪ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рдЪреБрдирд╛)ред рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ gcc-4.7 рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдЯреВрдЯрддрд╛ рд╣реИ:
PASS all 943 tests KNOWNBUGS.rb . PASS all 1 tests
рдореИрдВ рдЦреБрдж рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╣реЛрдордмреНрд░реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ:
$ brew install https://raw.github.com/etehtsea/formulary/009735e66ccabc5867331f64a406073d1623c683/Formula/gcc.rb --enable-cxx --enable-profiled-build --use-gcc
... рдПрдХ рдШрдВрдЯреЗ рдмрд╛рдж:
$ CC=gcc-4.7 ruby-build 1.9.3-p125 ~/.rbenv/versions/1.9.3-p125
рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред рд░реВрдмреА-рдмрд┐рд▓реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдпрд╣рд╛рдБ ред
рдФрд░ рдХреНрдпрд╛% рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЕрдиреНрдп рд░реВрдмреА% рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ?
рдореИрдВ рд░реБрдХ рдирд╣реАрдВ рд╕рдХрд╛ рдФрд░ рдЕрдкрдиреА рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирд╛ рдФрд░ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рд░реВрдмреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдПрдордЖрд░рдЖрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рдкреВрд░реНрдг рд▓реЙрдЧ рдирд╣реАрдВ рд▓рд╛рддрд╛ рд╣реВрдВ, рдореИрдВ рдХреЗрд╡рд▓ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░реВрдВрдЧрд╛ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд░реВрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
рдпрд╣ рдПрдХ рдкрдХрдбрд╝ рд╣реИ!
bm_vm_thread_mutex3.rb # 1000 , 1 require 'thread' m = Mutex.new r = 0 max = 2000 (1..max).map{ Thread.new{ i=0 while i<max i+=1 m.synchronize{ r += 1 } end } }.each{|e| e.join } raise r.to_s if r != max * max
$ time ~/.rbenv/versions/1.8.7-p357/bin/ruby bm_vm_thread_mutex3.rb real 0m3.093s user 0m3.078s sys 0m0.013s $ /usr/bin/ruby -v ruby 1.8.7 (2011-12-28 patchlevel 357) [i686-darwin11.3.0] $ time /usr/bin/ruby bm_vm_thread_mutex3.rb ^Cbm_vm_thread_mutex3.rb:18:in `join': Interrupt from bm_vm_thread_mutex3.rb:18 from bm_vm_thread_mutex3.rb:7:in `each' from bm_vm_thread_mutex3.rb:7 real 3m54.930s user 3m54.122s sys 0m0.918s
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
рд░реВрдмреА 1.8.7 (2010-01-10) - 572.863 рд╕реЗрдХрдВрдб
рд░реВрдмреА 1.9.3p125 (2012-02-16) - 211.655 рд╕реЗрдХрдВрдб
1.8 рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдг:
- bm_app_factorial.rb
- bm_so_ackermann.rb
рд░реБрдмрд┐рдирд┐рдпрд╕ 1.2.4 рдмрдирд╛рдо 2.0.0-рджреЗрд╡
рдореИрдВрдиреЗ рдкрдврд╝рд╛ рдХрд┐ реи.реж.реж-рджреЗрд╡ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ GIL рдирд╣реАрдВ рд╣реИ, рдЖрджрд┐ред рдЖрджрд┐, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдЧрд╛рдореА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлрд╝реА рдзреАрдорд╛ рд╣реИред
рд╕рдмрд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдордВрджреА рдЕрднреА рднреА рдЙрд╕реА bm_vm_thread_mutext3.rb рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╣реИ:
- рд░реБрдмрд┐рдирд┐рдпрд╕ 1.2.4 (1.8.7 рд░рд┐рд▓реАрдЬ 2011-07-05 рдЬреЗрдЖрдИ) - 3.260 рд╕реЗрдХрдВрдб
- рд░реБрдмрд┐рдирд┐рдпрд╕ 2.0.0рджреЗрд╡ (1.9.3 e22ed173 yyyy-mm-dd JI) - 207.711 рд╕реЗрдХрдВрдб
рдпрд╣рд╛рдВ рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдЕрдВрддрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:
рдФрд░ рдпрд╣рд╛рдБ рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
1.2.4 - 518.861 рд╕реЗрдХрдВрдб
2.0.0dev - 606.811 рд╕реЗрдХрдВрдб
рд░реБрдмрд┐рдирд┐рдпрд╕ рдХрднреА рднреА рддреЗрдЬ рдирд╣реАрдВ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ 15% рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓:
- 5k рдХреЗ рдмрдЬрд╛рдп рдЧреБрдЯ 4k
- bm_loop_generator.rb
- bm_so_ackermann.rb
- bm_vm_thread_pass_flood.rb (рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдордп рд╕реЗ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг)
MacRuby 0.12 (рд░рд╛рдд)
MacRuby рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк OS X рдХреЗ рд▓рд┐рдП рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдХреЗрд╡рд▓ OS X API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, MacRuby (bm_vm2_eval.rb) рдореЗрдВ eval рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ:
рд░реВрдмреА 1.9.3p125 (2012-02-16) - 29.681 рд╕реЗрдХрдВрдб
MacRuby 0.12 (рд░реВрдмреА 1.9.2) - 232.257 рд╕реЗрдХрдВрдб
bm_vm2_eval.rb i=0 while i<6_000_000 i+=1 eval("1") end
рддреЛ erb рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг:
bm_app_erb.rb # # Create many HTML strings with ERB. # require 'erb' data = DATA.read max = 15_000 title = "hello world!" content = "hello world!\n" * 10 max.times{ ERB.new(data).result(binding) } __END__ <html> <head> <%= title %> </head> <body> <h1> <%= title %> </h1> <p> <%= content %> </p> </body> </html>
1.9.3p125 - 1.817 рд╕реЗрдХрдВрдб
MacRuby - 81.808 рд╕реЗрдХрдВрдб
bm_vm3_clearmethodcache.rb i=0 while i<200_000 i+=1 Class.new{ def m; end } end
1.9.3p125 - 0.748 рд╕реЗрдХрдВрдб
MacRuby - 86.573 рд╕реЗрдХрдВрдб
рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдг:
- bm_loop_generator.rb
- bm_so_count_words.rb
- bm_so_nsieve_bits.rb (рд╕рдордп рд╕рдорд╛рдкреНрдд)
- bm_vm_thread_create_join.rb (рд╕рдордп рд╕рдорд╛рдкреНрдд)
рдореИрдЧреНрд▓реЗрд╡ 1.0
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдЧрд▓реЗрд╡ рдореЗрдВ рднреА рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
bm_vm2_eval.rb - 754.028 рд╕реЗрдХрдВрдб
bm_vm3_clearmethodcache.rb - 33.785 рд╕реЗрдХрдВрдб
JRuby 1.6 рдмрдирд╛рдо 1.7.0-рджреЗрд╡
JRuby 1.7.0-dev рдХрд╛ 1.6.6 рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдкреНрд░рджрд░реНрд╢рди рд╣реИ, bm_vm_thread_mutex3.rb рдкрд░реАрдХреНрд╖рдг рдкрд░ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде:
1.7.0-рджреЗрд╡ - 14.381 рд╕реЗрдХрдВрдб
1.6.6 - 202.552 рд╕реЗрдХрдВрдб
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
1.7.0-рджреЗрд╡ - 257.584 рд╕реЗрдХрдВрдб
1.6.6 - 229.502 рд╕реЗрдХрдВрдб
рд╡рд┐рдлрд▓ рдкрд░реАрдХреНрд╖рдг:
- bm_io_select.rb
рдПрдордЖрд░рдЖрдИ 2.0.0-рджреЗрд╡ рдмрдирд╛рдо 1.9.3-рдкреА 125
рдпрд╣реА рд╕реНрдерд┐рддрд┐ рдПрдордЖрд░рдЖрдИ рдХреА рджреЗрд╡ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рд╣реИред рдХреЗрд╡рд▓ bm_vm_thread_create_join.rb рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕реБрдзрд╛рд░:
рд░реВрдмреА 2.0.0dev (2012-02-25 рдЯреНрд░рдВрдХ 34796) - 2.806 рд╕реЗрдХрдВрдб
рдорд╛рдгрд┐рдХ 1.9.3p125 (2012-02-16) - 9.239 рд╕реЗрдХрдВрдб
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ
рд╕рд╛рд░рд╛рдВрд╢ рдЧреНрд░рд╛рдл:
рдмрд┐рдирд╛ рдЪрд╛рд░реНрдЯ:
- bm_vm_thread_mutex3.rb
- bm_vm2_eval.rb
- bm_vm3_clearmethodcache.rb
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рд╣реИ рдирд╛?
рдкреБрдирд╢реНрдЪред рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ : рд░реВрд╕реА рднрд╛рд╖реА рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдерд╛ред