From: Yamashita Junji (=?iso-2022-jp?B?GyRCOzMyPBsoQiAbJEI9YztKGyhC?=) Date: 1998-09-11T06:41:30+09:00 Subject: [ruby-list:9523] Re: Make Ruby Fast はじめまして、山下といいます。 From: Shin-ichiro Hara Subject: [ruby-list:9519] Re: Make Ruby Fast Date: Thu, 10 Sep 1998 23:07:06 +0900 (snip) > はあー、そんなに違うんですか。最適化するとコンパイラのバグが > 出たりするので外すことはあったんですけど、ずいぶん違うモノで > すねえ。 これと別のメールで私のコンパイル環境を述べましたが、PGCC での "-finline-functions" にはバグがあるのかもしれません。他に "-ffast-math" つきで Emacs-20.3 をコンパイルすると何故か Gnus でエラー が発生したりしました。 # しかも、"-O2" 以上に最適化レベルを上げても実行速度の向上が見られない。 # たとえ "-mcpu=amdk6" を指定しても! ;_; > ところで最適化って高速になるぶんメモリを食うとかいう事もあ > るんでしょうか。 Intel の x86 ファミリーでは一般的に最適化によってコードサイズが大きく なるはずなので、そのぶんメモリとディスクを食うことになるでしょう。 # ええ、実際ファイルサイズが大きくなってますので、最適化によって何か違 # うコードを吐いているはずなんですが…。 これだけだと全然 ruby の話題じゃないので、追加 ^_^; bash の builtin(keyword) の time の出力形式は以下のようになってます。 real 0m8.073s user 0m5.530s sys 0m1.260s この出力を 5 つ受けとり平均を計算するスクリプトを作ってみました。 (おみせするのは恥ずかしいのですが…) # ここから def tosec(tf) tf.split[1].split('m')[1].to_f end rt = 0.0 ut = 0.0 st = 0.0 while gets if /^real/ rt += tosec($_) elsif /^user/ ut += tosec($_) elsif /^sys/ st += tosec($_) end end printf("real avg: %f\n", rt / 5) printf("user avg: %f\n", ut / 5) printf("sys avg: %f\n", st / 5) # ここまで rt, ut, st といった変数と while ループの個所はもっとスマートやりかたが あると思います。私の今回の疑問は、それにしても tosec がなんともう少し ましな書きかたがなかろうか(あるはず)ということです。1 回のテストに 1 分かかることも考慮していないろくでもないものですし。 よろしかったらお教え下さい。 --------------- 山下 純司 mailto: ys_jyunji@teleweb.or.jp