Actions
Feature #9590
openintroduce st_foreach_update and st_foreach_update_check for performance.
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) over 10 years ago
- Tracker changed from Bug to Feature
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
It is equivalent to calling st_update()
on all elements?
update_direct()
should be static, IMO.
Updated by tarui (Masaya Tarui) over 10 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) over 10 years ago
I found that this patch lacks the measure to callcc.
Please wait for a while.
Updated by naruse (Yui NARUSE) almost 7 years ago
- Target version deleted (
2.2.0)
Updated by hsbt (Hiroshi SHIBATA) 8 months ago
- Status changed from Open to Assigned
Actions
Like0
Like0Like0Like0Like0Like0Like0