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 ]