Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: jruby/jruby
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: eebdecf44349
Choose a base ref
...
head repository: jruby/jruby
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 3b2fc4103ae7
Choose a head ref
  • 2 commits
  • 195 files changed
  • 1 contributor

Commits on May 10, 2016

  1. Update MRI benchmarks.

    chrisseaton committed May 10, 2016
    Copy the full SHA
    bdb1225 View commit details
  2. Copy the full SHA
    3b2fc41 View commit details
Showing with 3,845 additions and 1,784 deletions.
  1. 0 bench/{yarv → mri}/bm_app_answer.rb
  2. +291 −0 bench/mri/bm_app_aobench.rb
  3. +26 −26 bench/{yarv → mri}/bm_app_erb.rb
  4. +2 −2 bench/{yarv → mri}/bm_app_factorial.rb
  5. 0 bench/{yarv → mri}/bm_app_fib.rb
  6. +52 −0 bench/mri/bm_app_lc_fizzbuzz.rb
  7. +3 −3 bench/{yarv → mri}/bm_app_mandelbrot.rb
  8. 0 bench/{yarv → mri}/bm_app_pentomino.rb
  9. +2 −2 bench/{yarv → mri}/bm_app_raise.rb
  10. +5 −0 bench/mri/bm_app_strconcat.rb
  11. 0 bench/{yarv → mri}/bm_app_tak.rb
  12. 0 bench/{yarv → mri}/bm_app_tarai.rb
  13. +8 −8 bench/{yarv → mri}/bm_app_uri.rb
  14. +14 −0 bench/mri/bm_array_shift.rb
  15. +4 −0 bench/mri/bm_hash_aref_dsym.rb
  16. +21 −0 bench/mri/bm_hash_aref_dsym_long.rb
  17. +4 −0 bench/mri/bm_hash_aref_fix.rb
  18. +4 −0 bench/mri/bm_hash_aref_flo.rb
  19. +5 −0 bench/mri/bm_hash_aref_miss.rb
  20. +4 −0 bench/mri/bm_hash_aref_str.rb
  21. +9 −0 bench/mri/bm_hash_aref_sym.rb
  22. +13 −0 bench/mri/bm_hash_aref_sym_long.rb
  23. +9 −0 bench/mri/bm_hash_flatten.rb
  24. +4 −0 bench/mri/bm_hash_ident_flo.rb
  25. +4 −0 bench/mri/bm_hash_ident_num.rb
  26. +4 −0 bench/mri/bm_hash_ident_obj.rb
  27. +4 −0 bench/mri/bm_hash_ident_str.rb
  28. +4 −0 bench/mri/bm_hash_ident_sym.rb
  29. +9 −0 bench/mri/bm_hash_keys.rb
  30. +10 −0 bench/mri/bm_hash_shift.rb
  31. +10 −0 bench/mri/bm_hash_shift_u16.rb
  32. +10 −0 bench/mri/bm_hash_shift_u24.rb
  33. +10 −0 bench/mri/bm_hash_shift_u32.rb
  34. +9 −0 bench/mri/bm_hash_to_proc.rb
  35. +9 −0 bench/mri/bm_hash_values.rb
  36. +13 −13 bench/{yarv → mri}/bm_io_file_create.rb
  37. +15 −15 bench/{yarv → mri}/bm_io_file_read.rb
  38. +14 −14 bench/{yarv → mri}/bm_io_file_write.rb
  39. +22 −0 bench/mri/bm_io_nonblock_noex.rb
  40. +21 −0 bench/mri/bm_io_nonblock_noex2.rb
  41. +9 −0 bench/mri/bm_io_select.rb
  42. +22 −0 bench/mri/bm_io_select2.rb
  43. +21 −0 bench/mri/bm_io_select3.rb
  44. +3 −0 bench/mri/bm_loop_for.rb
  45. 0 bench/{yarv → mri}/bm_loop_generator.rb
  46. +1 −0 bench/mri/bm_loop_times.rb
  47. +2 −2 bench/{yarv → mri}/bm_loop_whileloop.rb
  48. +2 −2 bench/{yarv → mri}/bm_loop_whileloop2.rb
  49. +2 −0 bench/mri/bm_marshal_dump_flo.rb
  50. +10 −0 bench/mri/bm_marshal_dump_load_geniv.rb
  51. +1 −0 bench/mri/bm_marshal_dump_load_time.rb
  52. +7 −0 bench/mri/bm_require.rb
  53. +15 −0 bench/mri/bm_require_thread.rb
  54. +5 −0 bench/mri/bm_securerandom.rb
  55. 0 bench/{yarv → mri}/bm_so_ackermann.rb
  56. 0 bench/{yarv → mri}/bm_so_array.rb
  57. +62 −57 bench/{yarv → mri}/bm_so_binary_trees.rb
  58. +3 −3 bench/{yarv → mri}/bm_so_concatenate.rb
  59. 0 bench/{yarv → mri}/bm_so_count_words.rb
  60. +1 −1 bench/{yarv → mri}/bm_so_exception.rb
  61. +45 −45 bench/{yarv → mri}/bm_so_fannkuch.rb
  62. +81 −81 bench/{yarv → mri}/bm_so_fasta.rb
  63. +48 −48 bench/{yarv → mri}/bm_so_k_nucleotide.rb
  64. +2 −2 bench/{yarv → mri}/bm_so_lists.rb
  65. +57 −57 bench/{yarv → mri}/bm_so_mandelbrot.rb
  66. +1 −1 bench/{yarv → mri}/bm_so_matrix.rb
  67. +563 −564 bench/{yarv → mri}/bm_so_meteor_contest.rb
  68. +148 −148 bench/{yarv → mri}/bm_so_nbody.rb
  69. 0 bench/{yarv → mri}/bm_so_nested_loop.rb
  70. +35 −35 bench/{yarv → mri}/bm_so_nsieve.rb
  71. +43 −42 bench/{yarv → mri}/bm_so_nsieve_bits.rb
  72. 0 bench/{yarv → mri}/bm_so_object.rb
  73. +31 −31 bench/{yarv → mri}/bm_so_partial_sums.rb
  74. +92 −92 bench/{yarv → mri}/bm_so_pidigits.rb
  75. +3 −3 bench/{yarv → mri}/bm_so_random.rb
  76. +30 −30 bench/{yarv → mri}/bm_so_reverse_complement.rb
  77. +3 −3 bench/{yarv → mri}/bm_so_sieve.rb
  78. +50 −50 bench/{yarv → mri}/bm_so_spectralnorm.rb
  79. 0 bench/{yarv → mri}/bm_startup.rb
  80. +14 −0 bench/mri/bm_vm1_attr_ivar.rb
  81. +14 −0 bench/mri/bm_vm1_attr_ivar_set.rb
  82. +10 −0 bench/mri/bm_vm1_block.rb
  83. +2 −2 bench/{yarv → mri}/bm_vm1_const.rb
  84. +3 −3 bench/{yarv → mri}/bm_vm1_ensure.rb
  85. +7 −0 bench/mri/bm_vm1_float_simple.rb
  86. +10 −0 bench/mri/bm_vm1_gc_short_lived.rb
  87. +27 −0 bench/mri/bm_vm1_gc_short_with_complex_long.rb
  88. +13 −0 bench/mri/bm_vm1_gc_short_with_long.rb
  89. +15 −0 bench/mri/bm_vm1_gc_short_with_symbol.rb
  90. +12 −0 bench/mri/bm_vm1_gc_wb_ary.rb
  91. +14 −0 bench/mri/bm_vm1_gc_wb_ary_promoted.rb
  92. +15 −0 bench/mri/bm_vm1_gc_wb_obj.rb
  93. +17 −0 bench/mri/bm_vm1_gc_wb_obj_promoted.rb
  94. +8 −0 bench/mri/bm_vm1_ivar.rb
  95. +6 −6 bench/{yarv → mri}/bm_vm1_ivar_set.rb
  96. +3 −3 bench/{yarv → mri}/bm_vm1_length.rb
  97. +18 −0 bench/mri/bm_vm1_lvar_init.rb
  98. +5 −0 bench/mri/bm_vm1_lvar_set.rb
  99. +8 −0 bench/mri/bm_vm1_neq.rb
  100. +7 −0 bench/mri/bm_vm1_not.rb
  101. +7 −0 bench/mri/bm_vm1_rescue.rb
  102. +9 −0 bench/mri/bm_vm1_simplereturn.rb
  103. +8 −0 bench/mri/bm_vm1_swap.rb
  104. +10 −0 bench/mri/bm_vm1_yield.rb
  105. +5 −0 bench/mri/bm_vm2_array.rb
  106. +106 −0 bench/mri/bm_vm2_bigarray.rb
  107. +5 −0 bench/mri/bm_vm2_bighash.rb
  108. +3 −3 bench/{yarv → mri}/bm_vm2_case.rb
  109. +19 −0 bench/mri/bm_vm2_case_lit.rb
  110. +9 −0 bench/mri/bm_vm2_defined_method.rb
  111. +6 −0 bench/mri/bm_vm2_dstr.rb
  112. +6 −0 bench/mri/bm_vm2_eval.rb
  113. +9 −0 bench/mri/bm_vm2_method.rb
  114. +12 −0 bench/mri/bm_vm2_method_missing.rb
  115. +9 −0 bench/mri/bm_vm2_method_with_block.rb
  116. +3 −3 bench/{yarv → mri}/bm_vm2_mutex.rb
  117. +5 −0 bench/mri/bm_vm2_newlambda.rb
  118. +3 −3 bench/{yarv → mri}/bm_vm2_poly_method.rb
  119. +3 −3 bench/{yarv → mri}/bm_vm2_poly_method_ov.rb
  120. +3 −3 bench/{yarv → mri}/bm_vm2_proc.rb
  121. +18 −0 bench/mri/bm_vm2_raise1.rb
  122. +18 −0 bench/mri/bm_vm2_raise2.rb
  123. +6 −0 bench/mri/bm_vm2_regexp.rb
  124. +3 −3 bench/{yarv → mri}/bm_vm2_send.rb
  125. +5 −0 bench/mri/bm_vm2_string_literal.rb
  126. +7 −0 bench/mri/bm_vm2_struct_big_aref_hi.rb
  127. +7 −0 bench/mri/bm_vm2_struct_big_aref_lo.rb
  128. +7 −0 bench/mri/bm_vm2_struct_big_aset.rb
  129. +7 −0 bench/mri/bm_vm2_struct_big_href_hi.rb
  130. +7 −0 bench/mri/bm_vm2_struct_big_href_lo.rb
  131. +7 −0 bench/mri/bm_vm2_struct_big_hset.rb
  132. +7 −0 bench/mri/bm_vm2_struct_small_aref.rb
  133. +7 −0 bench/mri/bm_vm2_struct_small_aset.rb
  134. +7 −0 bench/mri/bm_vm2_struct_small_href.rb
  135. +7 −0 bench/mri/bm_vm2_struct_small_hset.rb
  136. +2 −2 bench/{yarv → mri}/bm_vm2_super.rb
  137. +8 −0 bench/mri/bm_vm2_unif1.rb
  138. +2 −2 bench/{yarv → mri}/bm_vm2_zsuper.rb
  139. +22 −0 bench/mri/bm_vm3_backtrace.rb
  140. +8 −0 bench/mri/bm_vm3_clearmethodcache.rb
  141. +6 −0 bench/mri/bm_vm3_gc.rb
  142. +4 −0 bench/mri/bm_vm3_gc_old_full.rb
  143. +4 −0 bench/mri/bm_vm3_gc_old_immediate.rb
  144. +4 −0 bench/mri/bm_vm3_gc_old_lazy.rb
  145. 0 bench/{yarv → mri}/bm_vm3_thread_create_join.rb
  146. 0 bench/{yarv → mri}/bm_vm3_thread_mutex.rb
  147. +13 −0 bench/mri/bm_vm_symbol_block_pass.rb
  148. +6 −0 bench/mri/bm_vm_thread_alive_check1.rb
  149. +6 −0 bench/mri/bm_vm_thread_close.rb
  150. +6 −0 bench/mri/bm_vm_thread_create_join.rb
  151. +21 −0 bench/mri/bm_vm_thread_mutex1.rb
  152. +21 −0 bench/mri/bm_vm_thread_mutex2.rb
  153. +20 −0 bench/mri/bm_vm_thread_mutex3.rb
  154. +15 −0 bench/mri/bm_vm_thread_pass.rb
  155. +8 −0 bench/mri/bm_vm_thread_pass_flood.rb
  156. +17 −0 bench/mri/bm_vm_thread_pipe.rb
  157. +18 −0 bench/mri/bm_vm_thread_queue.rb
  158. 0 bench/{yarv → mri}/bmx_temp.rb
  159. +427 −0 bench/mri/driver.rb
  160. +1 −0 bench/mri/gc/aobench.rb
  161. +1 −0 bench/mri/gc/binary_trees.rb
  162. +56 −0 bench/mri/gc/gcbench.rb
  163. +11 −0 bench/mri/gc/hash1.rb
  164. +7 −0 bench/mri/gc/hash2.rb
  165. +1 −0 bench/mri/gc/null.rb
  166. +1 −0 bench/mri/gc/pentomino.rb
  167. +13 −0 bench/mri/gc/rdoc.rb
  168. +366 −0 bench/mri/gc/redblack.rb
  169. +29 −0 bench/mri/gc/ring.rb
  170. +19 −19 bench/{yarv → mri}/make_fasta_output.rb
  171. +16 −0 bench/mri/memory_wrapper.rb
  172. +25 −0 bench/mri/prepare_require.rb
  173. +2 −0 bench/mri/prepare_require_thread.rb
  174. +15 −15 bench/{yarv → mri}/prepare_so_count_words.rb
  175. +2 −0 bench/mri/prepare_so_k_nucleotide.rb
  176. +2 −0 bench/mri/prepare_so_reverse_complement.rb
  177. +2 −4 bench/{yarv → mri}/report.rb
  178. +3 −3 bench/{yarv → mri}/run.rb
  179. +1 −3 bench/{yarv → mri}/runc.rb
  180. 0 bench/{yarv → mri}/wc.input.base
  181. +0 −5 bench/yarv/bm_app_strconcat.rb
  182. +0 −1 bench/yarv/bm_loop_times.rb
  183. +0 −10 bench/yarv/bm_vm1_block.rb
  184. +0 −8 bench/yarv/bm_vm1_ivar.rb
  185. +0 −7 bench/yarv/bm_vm1_rescue.rb
  186. +0 −9 bench/yarv/bm_vm1_simplereturn.rb
  187. +0 −8 bench/yarv/bm_vm1_swap.rb
  188. +0 −5 bench/yarv/bm_vm2_array.rb
  189. +0 −6 bench/yarv/bm_vm2_eval.rb
  190. +0 −9 bench/yarv/bm_vm2_method.rb
  191. +0 −6 bench/yarv/bm_vm2_regexp.rb
  192. +0 −8 bench/yarv/bm_vm2_unif1.rb
  193. +0 −238 bench/yarv/driver.rb
  194. +0 −2 bench/yarv/prepare_so_k_nucleotide.rb
  195. +0 −2 bench/yarv/prepare_so_reverse_complement.rb
File renamed without changes.
291 changes: 291 additions & 0 deletions bench/mri/bm_app_aobench.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,291 @@
# AO render benchmark
# Original program (C) Syoyo Fujita in Javascript (and other languages)
# https://code.google.com/p/aobench/
# Ruby(yarv2llvm) version by Hideki Miura
#

IMAGE_WIDTH = 256
IMAGE_HEIGHT = 256
NSUBSAMPLES = 2
NAO_SAMPLES = 8

class Vec
def initialize(x, y, z)
@x = x
@y = y
@z = z
end

attr_accessor :x, :y, :z

def vadd(b)
Vec.new(@x + b.x, @y + b.y, @z + b.z)
end

def vsub(b)
Vec.new(@x - b.x, @y - b.y, @z - b.z)
end

def vcross(b)
Vec.new(@y * b.z - @z * b.y,
@z * b.x - @x * b.z,
@x * b.y - @y * b.x)
end

def vdot(b)
@x * b.x + @y * b.y + @z * b.z
end

def vlength
Math.sqrt(@x * @x + @y * @y + @z * @z)
end

def vnormalize
len = vlength
v = Vec.new(@x, @y, @z)
if len > 1.0e-17 then
v.x = v.x / len
v.y = v.y / len
v.z = v.z / len
end
v
end
end


class Sphere
def initialize(center, radius)
@center = center
@radius = radius
end

attr_reader :center, :radius

def intersect(ray, isect)
rs = ray.org.vsub(@center)
b = rs.vdot(ray.dir)
c = rs.vdot(rs) - (@radius * @radius)
d = b * b - c
if d > 0.0 then
t = - b - Math.sqrt(d)

if t > 0.0 and t < isect.t then
isect.t = t
isect.hit = true
isect.pl = Vec.new(ray.org.x + ray.dir.x * t,
ray.org.y + ray.dir.y * t,
ray.org.z + ray.dir.z * t)
n = isect.pl.vsub(@center)
isect.n = n.vnormalize
else
0.0
end
end
nil
end
end

class Plane
def initialize(p, n)
@p = p
@n = n
end

def intersect(ray, isect)
d = -@p.vdot(@n)
v = ray.dir.vdot(@n)
v0 = v
if v < 0.0 then
v0 = -v
end
if v0 < 1.0e-17 then
return
end

t = -(ray.org.vdot(@n) + d) / v

if t > 0.0 and t < isect.t then
isect.hit = true
isect.t = t
isect.n = @n
isect.pl = Vec.new(ray.org.x + t * ray.dir.x,
ray.org.y + t * ray.dir.y,
ray.org.z + t * ray.dir.z)
end
nil
end
end

class Ray
def initialize(org, dir)
@org = org
@dir = dir
end

attr_accessor :org, :dir
end

class Isect
def initialize
@t = 10000000.0
@hit = false
@pl = Vec.new(0.0, 0.0, 0.0)
@n = Vec.new(0.0, 0.0, 0.0)
end

attr_accessor :t, :hit, :pl, :n
end

def clamp(f)
i = f * 255.5
if i > 255.0 then
i = 255.0
end
if i < 0.0 then
i = 0.0
end
i.to_i
end

def otherBasis(basis, n)
basis[2] = Vec.new(n.x, n.y, n.z)
basis[1] = Vec.new(0.0, 0.0, 0.0)

if n.x < 0.6 and n.x > -0.6 then
basis[1].x = 1.0
elsif n.y < 0.6 and n.y > -0.6 then
basis[1].y = 1.0
elsif n.z < 0.6 and n.z > -0.6 then
basis[1].z = 1.0
else
basis[1].x = 1.0
end

basis[0] = basis[1].vcross(basis[2])
basis[0] = basis[0].vnormalize

basis[1] = basis[2].vcross(basis[0])
basis[1] = basis[1].vnormalize
end

class Scene
def initialize
@spheres = Array.new
@spheres[0] = Sphere.new(Vec.new(-2.0, 0.0, -3.5), 0.5)
@spheres[1] = Sphere.new(Vec.new(-0.5, 0.0, -3.0), 0.5)
@spheres[2] = Sphere.new(Vec.new(1.0, 0.0, -2.2), 0.5)
@plane = Plane.new(Vec.new(0.0, -0.5, 0.0), Vec.new(0.0, 1.0, 0.0))
end

def ambient_occlusion(isect)
basis = Array.new
otherBasis(basis, isect.n)

ntheta = NAO_SAMPLES
nphi = NAO_SAMPLES
eps = 0.0001
occlusion = 0.0

p0 = Vec.new(isect.pl.x + eps * isect.n.x,
isect.pl.y + eps * isect.n.y,
isect.pl.z + eps * isect.n.z)
nphi.times do |j|
ntheta.times do |i|
r = rand
phi = 2.0 * 3.14159265 * rand
x = Math.cos(phi) * Math.sqrt(1.0 - r)
y = Math.sin(phi) * Math.sqrt(1.0 - r)
z = Math.sqrt(r)

rx = x * basis[0].x + y * basis[1].x + z * basis[2].x
ry = x * basis[0].y + y * basis[1].y + z * basis[2].y
rz = x * basis[0].z + y * basis[1].z + z * basis[2].z

raydir = Vec.new(rx, ry, rz)
ray = Ray.new(p0, raydir)

occisect = Isect.new
@spheres[0].intersect(ray, occisect)
@spheres[1].intersect(ray, occisect)
@spheres[2].intersect(ray, occisect)
@plane.intersect(ray, occisect)
if occisect.hit then
occlusion = occlusion + 1.0
else
0.0
end
end
end

occlusion = (ntheta.to_f * nphi.to_f - occlusion) / (ntheta.to_f * nphi.to_f)

Vec.new(occlusion, occlusion, occlusion)
end

def render(w, h, nsubsamples)
cnt = 0
nsf = nsubsamples.to_f
h.times do |y|
w.times do |x|
rad = Vec.new(0.0, 0.0, 0.0)

# Subsampling
nsubsamples.times do |v|
nsubsamples.times do |u|

cnt = cnt + 1
wf = w.to_f
hf = h.to_f
xf = x.to_f
yf = y.to_f
uf = u.to_f
vf = v.to_f

px = (xf + (uf / nsf) - (wf / 2.0)) / (wf / 2.0)
py = -(yf + (vf / nsf) - (hf / 2.0)) / (hf / 2.0)

eye = Vec.new(px, py, -1.0).vnormalize

ray = Ray.new(Vec.new(0.0, 0.0, 0.0), eye)

isect = Isect.new
@spheres[0].intersect(ray, isect)
@spheres[1].intersect(ray, isect)
@spheres[2].intersect(ray, isect)
@plane.intersect(ray, isect)
if isect.hit then
col = ambient_occlusion(isect)
rad.x = rad.x + col.x
rad.y = rad.y + col.y
rad.z = rad.z + col.z
end
end
end

r = rad.x / (nsf * nsf)
g = rad.y / (nsf * nsf)
b = rad.z / (nsf * nsf)
printf("%c", clamp(r))
printf("%c", clamp(g))
printf("%c", clamp(b))
end
nil
end

nil
end
end

alias printf_orig printf
def printf *args
end

# File.open("ao.ppm", "w") do |fp|
printf("P6\n")
printf("%d %d\n", IMAGE_WIDTH, IMAGE_HEIGHT)
printf("255\n", IMAGE_WIDTH, IMAGE_HEIGHT)
Scene.new.render(IMAGE_WIDTH, IMAGE_HEIGHT, NSUBSAMPLES)
# end

undef printf
alias printf printf_orig
52 changes: 26 additions & 26 deletions bench/yarv/bm_app_erb.rb → bench/mri/bm_app_erb.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
#
# Create many HTML strings with ERB.
#

require 'erb'

data = DATA.read
max = 5_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>
#
# 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>
Original file line number Diff line number Diff line change
@@ -6,6 +6,6 @@ def fact(n)
end
end

8.times{
100.times {
fact(5000)
}
}
File renamed without changes.
Loading