Feature #9590

introduce st_foreach_update and st_foreach_update_check for performance.

Added by Masaya Tarui over 1 year ago. Updated over 1 year ago.

[ruby-core:61283]
Status:Open
Priority:Normal
Assignee:Masaya Tarui

Description

Hello,

I think I'll introduce st_foreach_update and st_foreach_update_check for performance.

For example, it is effective at Hash's rehash,dup and clone. (included in patch)

Are there any problem?

Patch is at https://gist.github.com/tarui/9345180 and attached here.
Some benchmarks are shown below.

$cat test.rb
require 'benchmark'
N=10**6
a={}
Benchmark.bm(8) do |x|
x.report("create") { N.times{|i| a[i] = i} }
x.report("rehash") { a.rehash }
x.report("dup") { a.dup }
x.report("clone") { a.clone }
end

$ original_ruby test.rb
user system total real
create 0.730000 0.050000 0.780000 ( 0.788674)
rehash 1.030000 0.080000 1.110000 ( 1.113006)
dup 1.120000 0.050000 1.170000 ( 1.175618)
clone 1.300000 0.010000 1.310000 ( 1.312528)

$ proposed_ruby test.rb
user system total real
create 0.710000 0.050000 0.760000 ( 0.758993)
rehash 0.020000 0.000000 0.020000 ( 0.018409)
dup 0.130000 0.050000 0.180000 ( 0.182608)
clone 0.500000 0.000000 0.500000 ( 0.509430)

$ make gcbench-rdoc | tail -n8|head -n2

original_ruby:
user system total real
159.630000 2.870000 162.500000 (163.414495)

proposed_ruby:
user system total real
152.920000 2.730000 155.650000 (156.040741)

0001-introduce-st_foreach_update-st_foreach_update_check.patch Magnifier (7.58 KB) Masaya Tarui, 03/04/2014 12:09 PM

History

#1 Updated by Masaya Tarui over 1 year ago

  • Tracker changed from Bug to Feature

#2 Updated by Nobuyoshi Nakada over 1 year ago

It is equivalent to calling st_update() on all elements?

update_direct() should be static, IMO.

#3 Updated by Masaya Tarui over 1 year ago

It is nearly equivalent to calling st_update() on all elements.
Additionally, it updates internal hash values if it has to do that.

#4 Updated by Masaya Tarui over 1 year ago

I found that this patch lacks the measure to callcc.
Please wait for a while.

Also available in: Atom PDF