ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化
@ 2012-04-17 14:32 Glass_saga (Masaki Matsushita)
  2012-04-19 18:29 ` [ruby-dev:45539] [ruby-trunk - Feature #6311][Assigned] memmem()によるrb_memsearch()の高速化 mame (Yusuke Endoh)
                   ` (9 more replies)
  0 siblings, 10 replies; 12+ messages in thread
From: Glass_saga (Masaki Matsushita) @ 2012-04-17 14:32 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been reported by Glass_saga (Masaki Matsushita).

----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311

Author: Glass_saga (Masaki Matsushita)
Status: Open
Priority: Normal
Assignee: 
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:45539] [ruby-trunk - Feature #6311][Assigned] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
@ 2012-04-19 18:29 ` mame (Yusuke Endoh)
  2012-04-28  4:34 ` [ruby-dev:45590] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: mame (Yusuke Endoh) @ 2012-04-19 18:29 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to nobu (Nobuyoshi Nakada)

いいんじゃないかなあと思いましたが、
configure スクリプトいじるので、なかださんどうでしょうか。

-- 
Yusuke Endoh <mame@tsg•ne.jp>
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-26010

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:45590] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
  2012-04-19 18:29 ` [ruby-dev:45539] [ruby-trunk - Feature #6311][Assigned] memmem()によるrb_memsearch()の高速化 mame (Yusuke Endoh)
@ 2012-04-28  4:34 ` Glass_saga (Masaki Matsushita)
  2012-04-28 23:52   ` [ruby-dev:45592] " Yukihiro Matsumoto
  2012-04-29  8:40 ` [ruby-dev:45593] " nobu (Nobuyoshi Nakada)
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 12+ messages in thread
From: Glass_saga (Masaki Matsushita) @ 2012-04-28  4:34 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by Glass_saga (Masaki Matsushita).

File patch2.diff added

rb_memsearch_ss()はrb_memsearch()以外からは使われていないので、memmem()を使う場合にはrb_memsearch_ss()がコンパイルされないようにしました。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-26278

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:45592] Re: [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-28  4:34 ` [ruby-dev:45590] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
@ 2012-04-28 23:52   ` Yukihiro Matsumoto
  0 siblings, 0 replies; 12+ messages in thread
From: Yukihiro Matsumoto @ 2012-04-28 23:52 UTC (permalink / raw
  To: ruby developers list

まつもと ゆきひろです

In message "Re: [ruby-dev:45590] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化"
    on Sat, 28 Apr 2012 13:34:36 +0900, "Glass_saga (Masaki Matsushita)" <glass.saga@gmail•com> writes:

|Issue #6311 has been updated by Glass_saga (Masaki Matsushita).
|
|File patch2.diff added
|
|rb_memsearch_ss()はrb_memsearch()以外からは使われていないので、memmem()を使う場合にはrb_memsearch_ss()がコンパイルされないようにしました。

なかださん、レビューして問題なければ取り込んでもらえませんか?

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:45593] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
  2012-04-19 18:29 ` [ruby-dev:45539] [ruby-trunk - Feature #6311][Assigned] memmem()によるrb_memsearch()の高速化 mame (Yusuke Endoh)
  2012-04-28  4:34 ` [ruby-dev:45590] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
@ 2012-04-29  8:40 ` nobu (Nobuyoshi Nakada)
  2012-04-30  2:36 ` [ruby-dev:45595] " Glass_saga (Masaki Matsushita)
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: nobu (Nobuyoshi Nakada) @ 2012-04-29  8:40 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by nobu (Nobuyoshi Nakada).


=begin
(({rb_memsearch_ss()}))が何だったか思い出せないですが、これ自体を置き換えてはどうでしょうかね。
=end
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-26316

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:45595] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (2 preceding siblings ...)
  2012-04-29  8:40 ` [ruby-dev:45593] " nobu (Nobuyoshi Nakada)
@ 2012-04-30  2:36 ` Glass_saga (Masaki Matsushita)
  2012-05-04 19:18 ` [ruby-dev:45624] " naruse (Yui NARUSE)
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Glass_saga (Masaki Matsushita) @ 2012-04-30  2:36 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by Glass_saga (Masaki Matsushita).

File patch3.diff added

>rb_memsearch_ss()が何だったか思い出せないですが、これ自体を置き換えてはどうでしょうかね。

添付のpatchのようにするのが良いでしょうか。

rb_memsearch_ss()についてですが、これは1つのVALUEの値にSIZEOF_VALUE以下の長さのバイト列の組み合わせを対応させた完全ハッシュ法のようです。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-26324

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:45624] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (3 preceding siblings ...)
  2012-04-30  2:36 ` [ruby-dev:45595] " Glass_saga (Masaki Matsushita)
@ 2012-05-04 19:18 ` naruse (Yui NARUSE)
  2012-09-03 14:28 ` [ruby-dev:46103] " Glass_saga (Masaki Matsushita)
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: naruse (Yui NARUSE) @ 2012-05-04 19:18 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by naruse (Yui NARUSE).


rb_memsearch_ss() を入れたのはわたしですね。
Linux と FreeBSD あたりで memmem 利用より速いのだったら置き換えちゃっていいんじゃないかと思います。
missing/memmem.c 作って rb_memsearch_ss() の実装移すって技もありますし。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-26459

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:46103] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (4 preceding siblings ...)
  2012-05-04 19:18 ` [ruby-dev:45624] " naruse (Yui NARUSE)
@ 2012-09-03 14:28 ` Glass_saga (Masaki Matsushita)
  2012-11-11  5:40 ` [ruby-dev:46478] " Glass_saga (Masaki Matsushita)
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Glass_saga (Masaki Matsushita) @ 2012-09-03 14:28 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by Glass_saga (Masaki Matsushita).


時間が経ってしまいましたが、いかがでしょうか。
特に反対や議論がないようであれば、取り込んで頂けると幸いです。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-29158

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:46478] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (5 preceding siblings ...)
  2012-09-03 14:28 ` [ruby-dev:46103] " Glass_saga (Masaki Matsushita)
@ 2012-11-11  5:40 ` Glass_saga (Masaki Matsushita)
  2012-11-11  5:46 ` [ruby-dev:46479] " Glass_saga (Masaki Matsushita)
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Glass_saga (Masaki Matsushita) @ 2012-11-11  5:40 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by Glass_saga (Masaki Matsushita).


こちらもベンチマークの実行時間が短すぎるのでやり直してみました。

require 'benchmark'

str = "hoge" * 100_0000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r37617):
       user     system      total        real
   7.540000   0.000000   7.540000 (  7.539292)

proposed:
       user     system      total        real
   0.500000   0.000000   0.500000 (  0.503217)

また、先に添付していたpatchではconfigure.inでAC_CHECK_FUNCS(memmem)した後、
AC_TRY_RUNでglibc 2.0以前のmemmem()が持つバグがないかどうか確かめBROKEN_MEMMEMを定義していましたが、
1つの目的に2つのシンボルを定義するのはよろしくないと思ったので、memmem()が存在しかつバグを持っていない場合にHAVE_MEMMEMのみを定義するよう変更しました。

反対がなければ、コミットしようと思います。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-32763

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:46479] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (6 preceding siblings ...)
  2012-11-11  5:40 ` [ruby-dev:46478] " Glass_saga (Masaki Matsushita)
@ 2012-11-11  5:46 ` Glass_saga (Masaki Matsushita)
  2012-11-13  5:58 ` [ruby-dev:46506] " knu (Akinori MUSHA)
  2012-11-13  6:13 ` [ruby-dev:46507] " knu (Akinori MUSHA)
  9 siblings, 0 replies; 12+ messages in thread
From: Glass_saga (Masaki Matsushita) @ 2012-11-11  5:46 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by Glass_saga (Masaki Matsushita).

File patch4.diff added


----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-32764

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:46506] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (7 preceding siblings ...)
  2012-11-11  5:46 ` [ruby-dev:46479] " Glass_saga (Masaki Matsushita)
@ 2012-11-13  5:58 ` knu (Akinori MUSHA)
  2012-11-13  6:13 ` [ruby-dev:46507] " knu (Akinori MUSHA)
  9 siblings, 0 replies; 12+ messages in thread
From: knu (Akinori MUSHA) @ 2012-11-13  5:58 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by knu (Akinori MUSHA).

File use_memchr.diff added

もしこういう特定のケースの高速化が必要とのことなら、memmem()を使わない版でも

Index: re.c
===================================================================
--- re.c	(revision 37635)
+++ re.c	(working copy)
@@ -126,6 +126,11 @@ rb_memsearch_ss(const unsigned char *xs,
     if (m > SIZEOF_VALUE)
 	rb_bug("!!too long pattern string!!");
 
+    if (y = memchr(y, *x, n - m + 1))
+	n -= y - ys;
+    else
+	return -1;
+
     /* Prepare hash value */
     for (hx = *x++, hy = *y++; x < xe; ++x, ++y) {
 	hx <<= CHAR_BIT;

のようなコードを入れればよさそうですが、どうでしょうか。

ちなみに、このケースに限って言えば、ハッシュを使わない

    /* FreeBSD's implementation of memmem() */

    for (cur = (char *)cl; cur <= last; cur++)
                if (cur[0] == cs[0] && memcmp(cur, cs, s_len) == 0)
                        return cur;

のような素朴なバイト比較ループの方が現状のハッシュ値比較より速いようです。
現状のコードはどのような性能特性を期待しているのでしょうね。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-32837

Author: Glass_saga (Masaki Matsushita)
Status: Closed
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [ruby-dev:46507] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化
  2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
                   ` (8 preceding siblings ...)
  2012-11-13  5:58 ` [ruby-dev:46506] " knu (Akinori MUSHA)
@ 2012-11-13  6:13 ` knu (Akinori MUSHA)
  9 siblings, 0 replies; 12+ messages in thread
From: knu (Akinori MUSHA) @ 2012-11-13  6:13 UTC (permalink / raw
  To: ruby developers list


Issue #6311 has been updated by knu (Akinori MUSHA).

File use_memchr2.diff added

nは下で使われていないので更新不要ですね。
----------------------------------------
Feature #6311: memmem()によるrb_memsearch()の高速化
https://bugs.ruby-lang.org/issues/6311#change-32838

Author: Glass_saga (Masaki Matsushita)
Status: Closed
Priority: Normal
Assignee: nobu (Nobuyoshi Nakada)
Category: core
Target version: 


[Feature #6129][ruby-dev:45344]と類似していますが、memmem()によるre.cのrb_memsearch()の高速化を試みました。

次のベンチマークを実行したところ以下の結果となり、有意な性能向上がみられました。

require 'benchmark'

str = "hoge" * 10000 + "fugafuga"

Benchmark.bm do |x|
  x.report do
    1000.times { str.index("fugafuga") }
  end
end

trunk(r35363):
       user     system      total        real
   0.070000   0.000000   0.070000 (  0.072126)
       user     system      total        real
   0.070000   0.010000   0.080000 (  0.081420)
       user     system      total        real
   0.080000   0.000000   0.080000 (  0.091658)

proposal:
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.004237)
       user     system      total        real
   0.000000   0.000000   0.000000 (  0.003737)
       user     system      total        real
   0.010000   0.000000   0.010000 (  0.004696)

patchを添付します。


-- 
http://bugs.ruby-lang.org/

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-11-13  6:11 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-04-17 14:32 [ruby-dev:45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
2012-04-19 18:29 ` [ruby-dev:45539] [ruby-trunk - Feature #6311][Assigned] memmem()によるrb_memsearch()の高速化 mame (Yusuke Endoh)
2012-04-28  4:34 ` [ruby-dev:45590] [ruby-trunk - Feature #6311] memmem()によるrb_memsearch()の高速化 Glass_saga (Masaki Matsushita)
2012-04-28 23:52   ` [ruby-dev:45592] " Yukihiro Matsumoto
2012-04-29  8:40 ` [ruby-dev:45593] " nobu (Nobuyoshi Nakada)
2012-04-30  2:36 ` [ruby-dev:45595] " Glass_saga (Masaki Matsushita)
2012-05-04 19:18 ` [ruby-dev:45624] " naruse (Yui NARUSE)
2012-09-03 14:28 ` [ruby-dev:46103] " Glass_saga (Masaki Matsushita)
2012-11-11  5:40 ` [ruby-dev:46478] " Glass_saga (Masaki Matsushita)
2012-11-11  5:46 ` [ruby-dev:46479] " Glass_saga (Masaki Matsushita)
2012-11-13  5:58 ` [ruby-dev:46506] " knu (Akinori MUSHA)
2012-11-13  6:13 ` [ruby-dev:46507] " knu (Akinori MUSHA)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).