Project

General

Profile

Actions

Feature #9590

open

introduce st_foreach_update and st_foreach_update_check for performance.

Added by tarui (Masaya Tarui) about 8 years ago. Updated over 4 years ago.

Status:
Open
Priority:
Normal
Target version:
-
[ruby-core:61283]

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)

Files

Updated by tarui (Masaya Tarui) about 8 years ago

  • Tracker changed from Bug to Feature

Updated by nobu (Nobuyoshi Nakada) about 8 years ago

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

update_direct() should be static, IMO.

Updated by tarui (Masaya Tarui) about 8 years ago

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

Updated by tarui (Masaya Tarui) about 8 years ago

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

Actions #5

Updated by naruse (Yui NARUSE) over 4 years ago

  • Target version deleted (2.2.0)
Actions

Also available in: Atom PDF