Project

General

Profile

Actions

Feature #6177

closed

array.cのrb_ary_equal()の高速化

Added by Glass_saga (Masaki Matsushita) about 12 years ago. Updated over 11 years ago.

Status:
Closed
Target version:
[ruby-dev:45412]

Description

できる限りVALUEの値の比較のみに留め、必要になったらrb_equal()を用いるという方針でrb_ary_equal()の高速化を試みました。
次のベンチマークを行ったところ、以下のような結果となりました。

require 'benchmark'

A = Array.new(100_0000){|n| n }
B = Array.new(1_0000){|n| n.to_s }
C = Array.new(1_0000){|n| n.to_s }

Benchmark.bm do |x|
x.report do
A == A.dup
end

x.report do
B == C
end
end

trunk(r35092):
user system total real
0.010000 0.000000 0.010000 ( 0.011711)
0.010000 0.000000 0.010000 ( 0.002169)

proposal:
user system total real
0.000000 0.000000 0.000000 ( 0.002257)
0.000000 0.000000 0.000000 ( 0.002307)

Fixnumのみで構成されたArrayの比較は従来の5倍ほどの速さになりました。
一方、rb_equal()による同値性の判定が必要となる場合でも性能の低下はありません。

patchを添付します。


Files

patch.diff (571 Bytes) patch.diff Glass_saga (Masaki Matsushita), 03/20/2012 12:08 PM
patch2.diff (575 Bytes) patch2.diff Glass_saga (Masaki Matsushita), 03/20/2012 08:29 PM
patch3.diff (834 Bytes) patch3.diff Glass_saga (Masaki Matsushita), 03/20/2012 11:34 PM
patch4.diff (764 Bytes) patch4.diff Glass_saga (Masaki Matsushita), 03/22/2012 11:37 AM
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0