[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:330

From: SASADA Koichi <ko1 atdot.net>
Date: Mon, 22 Nov 2004 03:10:59 +0900
Subject: [yarv-dev:330] support rb_yield

 ささだです。

 rb_yield っぽいものをサポートしました。


 実行速度なんですが、日記にも書いたのですが、


1000000.times{|i|
  i
}

--
      user     system      total        real
ruby  0.547000   0.000000   0.547000 (  0.547000)
yarv  0.390000   0.000000   0.390000 (  0.391000)

 こんな感じ。正直遅い。



 rb_yield を使う側が、使い方を変更することで、

      user     system      total        real
ruby  0.562000   0.000000   0.562000 (  0.562000)
yarv  0.250000   0.000000   0.250000 (  0.266000)

 までなりました。


      for (i=0; i<end; i++) {
        rb_yield(LONG2FIX(i));
      }

 のような部分を、

      thread_yield_light_prepare(th, 1, &val);
      for(i=0; i<end; i++){
        val = LONG2FIX(i);
        thread_yield_light_invoke(th, 1, &val);
      }

 のように変更する、という工夫です(thread_yield_light_prepare
がコストの高い VM loop のための初期化処理を行う)。


 AOT/JIT compile では、この部分はこれ以上速くならない
(そもそも、全部 C レベルの話)ので、頭の痛いところです。


 この辺は、もっと高速化を考えていきたいと思っております。


 ちなみに、cygwin だとこんな感じ。

      user     system      total        real
ruby  0.515000   0.000000   0.515000 (  0.535000)
yarv  0.188000   0.016000   0.204000 (  0.200000)

 gcc 偉いなあ。

-- 
// SASADA Koichi at atdot dot net
//


--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

->     330 2004-11-22 03:10 [ko1 atdot.net       ] support rb_yield                        
       331 2004-11-22 11:25 ┗[matz ruby-lang.org  ]                                       
       332 2004-11-22 16:12  ┗[ko1 atdot.net       ]                                     
       333 2004-11-23 00:02   ┗[matz ruby-lang.org  ]