[#3536] Re: [ruby-list:10256] Re: for が修飾子だったら — Junichi Kurokawa <jun@...>

Reply-To: ruby-devとしました。

15 messages 1998/10/22

[ruby-dev:3534] Re: [ruby-list:10167] Re: Speed!

From: EGUCHI Osamu <eguchi@...>
Date: 1998-10-19 01:24:35 UTC
List: ruby-dev #3534
えぐち@エスアンドイー です。

>>> On Mon, 19 Oct 1998 09:25:50 +0900, WATANABE Tetsuya <tetsu@jpn.hp.com> said:

tetsu> 興味があって試してみました。
tetsu> 

触発されて、15分ハッキングで ruby-1.1c6/eval.c を
一寸チューニングしました。 (ので To: ruby-dev も)

--- /tmp/ruby-1.1c6/eval.c      Tue Sep  8 18:17:32 1998
+++ eval.c      Mon Oct 19 10:07:01 1998
@@ -1612,6 +1612,10 @@
 
     switch (nd_type(node)) {
       case NODE_BLOCK:
+       if (!node->nd_next) {
+           node = node->nd_head;
+           goto again;
+        }
        while (node) {
            result = rb_eval(self, node->nd_head);
            node = node->nd_next;

rb_eval() の再帰コストが高かったので
1つの stmt だけの block を再帰なしに実行するパッチです。

 min = n if min > n

にも

 if min > n
  min = n 
 end

にも効くはずです。

結果は、

オリジナル
triton2.eguchi:85% time ./ruby.orig floatBasic_ruby_while_GC_upto 
Elements = 100000, average = 14.499995
11.428u 0.662s 0:31.16 38.7%    449+12608k 0+0io 0pf+0w

パッチ後
triton2.eguchi:86% time ./ruby floatBasic_ruby_while_GC_upto
Elements = 100000, average = 14.499995
10.740u 0.503s 0:33.17 33.8%    444+12466k 0+0io 0pf+0w

でした。(環境: CC=egcs-1.1b CPU=Pentium Classic 200MHz w/ L2=256K)

	えぐち

In This Thread

Prev Next