[#46102] [ruby-trunk - Feature #6972][Open] 特化命令opt_emptyの追加 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>
5 messages
2012/09/03
[#46105] 拡張ライブラリの質問 — SASADA Koichi <ko1@...>
ささだです.
12 messages
2012/09/04
[#46110] Re: 拡張ライブラリの質問
— "NARUSE, Yui" <naruse@...>
2012/09/05
成瀬です。
[#46112] Re: 拡張ライブラリの質問
— Urabe Shyouhei <shyouhei@...>
2012/09/05
On 09/05/2012 09:52 AM, NARUSE, Yui wrote:
[#46114] Re: 拡張ライブラリの質問
— "NARUSE, Yui" <naruse@...>
2012/09/05
2012年9月5日 11:11 Urabe Shyouhei <[email protected]>:
[#46131] HaikuOS上でruby trunkのbuildが通るようになりました — Takashi Toyoshima <toyoshim@...>
こちらのMLでは初めてご挨拶させて頂きます、とよしまと申します。
7 messages
2012/09/12
[#46132] Re: HaikuOS上でruby trunkのbuildが通るようになりました
— KOSAKI Motohiro <kosaki.motohiro@...>
2012/09/12
> こちらのMLでは初めてご挨拶させて頂きます、とよしまと申します。
[#46159] [ruby-trunk - Feature #7047][Open] Add new C API: rb_newobj_with — "authorNari (Narihiro Nakamura)" <authorNari@...>
9 messages
2012/09/22
[#46162] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit — SASADA Koichi <ko1@...>
2点ほど.
4 messages
2012/09/25
[#46174] [ruby-trunk - Bug #7084][Open] RubyVM::InstructionSequence.compile("1+"*10000 + "1") causes SystemStackError or Segmentation Fault — "mrkn (Kenta Murata)" <muraken@...>
7 messages
2012/09/29
[ruby-dev:46104] Re: [ruby-dev:46102] [ruby-trunk - Feature #6972][Open] 特化命令opt_emptyの追加
From:
SASADA Koichi <ko1@...>
Date:
2012-09-03 15:23:37 UTC
List:
ruby-dev #46104
いいんでないかと思うのですが,2点ほど.
- opt_empty だと empty なのか empty? なのかわからないから,opt_empty_p
がいいでしょうか.
- テストは? 再定義された時のテストも忘れずに.
(2012/09/03 23:24), Glass_saga (Masaki Matsushita) wrote:
>
> Issue #6972 has been reported by Glass_saga (Masaki Matsushita).
>
> ----------------------------------------
> Feature #6972: 特化命令opt_emptyの追加
> https://bugs.ruby-lang.org/issues/6972
>
> Author: Glass_saga (Masaki Matsushita)
> Status: Open
> Priority: Normal
> Assignee: ko1 (Koichi Sasada)
> Category: YARV
> Target version:
>
>
> YARVの特化命令opt_emptyの追加を提案します。
> opt_emptyはrecv.empty?に対応する特化命令で、opt_sizeやopt_lengthと同じくString、Array、Hashがレシーバである場合に有効です。
>
> 次のベンチマークでopt_emptyを有効にした場合のパフォーマンスを比べました。
>
> require 'benchmark'
>
> Ary = []
> Times = 10_000_000
>
> Benchmark.bm do |x|
> x.report do
> Times.times { Ary.empty? }
> end
> end
>
> trunk(r36890):
> user system total real
> 1.070000 0.000000 1.070000 ( 1.086783)
>
> proposed:
> user system total real
> 0.730000 0.000000 0.730000 ( 0.745782)
>
> およそ1.46倍に高速化されている事がわかります。
>
> 約1.46倍の高速化が他の特化命令と比較して有効であるかどうかを調べる為に、opt_emptyに似た特化命令であるopt_sizeと比較してみました。
> 上記と同じtrunkのr36890で、compile.cの1874行目(iseq_specialized_instruction()でopt_sizeを使用する部分です)をコメントアウトして
> opt_sizeを無効にし、上記のベンチマークのAry.empty?をAry.sizeに置き換えたものを実行して比較したところ、以下のようになりました。
>
> 特化命令opt_sizeを無効にした場合:
> user system total real
> 1.060000 0.000000 1.060000 ( 1.061210)
>
> 有効にした場合:
> user system total real
> 0.750000 0.000000 0.750000 ( 0.765943)
>
> ほぼ同様の結果となりました。
> opt_emptyは、特化命令として妥当な効果があると言えそうです。
>
> recv.empty?は、イテレーションの中で用いられるようなケースも多く(要素がemptyなら何かする or emptyなら何かしない、など)、比較的「よく呼ばれる」メソッドであると思います。
> かつ、メソッド呼び出しのコストに対して実体の処理が小さいので、新たな特化命令として導入する価値があると思うのですが、いかがでしょうか。
>
>
--
// SASADA Koichi at atdot dot net