From: SHUDOH Kazuyuki Date: 1998-09-11T05:30:43+09:00 Subject: [ruby-list:9521] Re: Make Ruby Fast 首藤です。敬称略。 ruby な話題じゃなくてごめんなさい。 柳川> いつも手元の ruby が遅いとお悩みのあなた,gcc でないと最適化オプショ 柳川> ンがついてないかもしれません.そこで,この記事です! 原> はあー、そんなに違うんですか。最適化するとコンパイラのバグが 原> 出たりするので外すことはあったんですけど、ずいぶん違うモノで 原> すねえ。 gcc -S などとしてアセンブリコードを見ると、最適化の大切さが身に染みます。 最適化オプションの有無でこんなに差があるのか…と。 私の手もとの EGCS ですと、最適化オプションなしの場合、 次のオプションが有効になっています。 / GNU C version egcs-2.90.29 980515 (egcs-1.0.3 release) (i586-unknown-linux-gnu libc1) compiled by GNU C version egcs-2.90.29 980515 (egcs-1.0.3 release). / options passed: / options enabled: -fpeephole -ffunction-cse -fkeep-static-consts / -fpcc-struct-return -fcommon -fverbose-asm -fgnu-linker -fargument-alias / -m80387 -mhard-float -mno-soft-float -mieee-fp -mfp-ret-in-387 / -mschedule-prologue -mcpu=pentium -march=pentium (gcc -S の出力 (*.s) より) -O を付けると、-O なしの場合に加えて次のオプションが有効になります。 -fdefer-pop -fthread-jumps -finline -falias-check -O2 を付けると、-O に加えて、さらに次のオプションが有効になります。 -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fstrength-reduce -fforce-mem -fcaller-saves -frerun-cse-after-loop -frerun-loop-opt -fschedule-insns2 -fregmove 原> ところで最適化って高速になるぶんメモリを食うとかいう事もあ 原> るんでしょうか。 最適化の手法によってはコードサイズと実行性能の トレードオフがあったりします。(inline 展開とか loop unrolling とか) あと、x86 だと、複雑な仕事をする命令長の短い命令より 単純な命令の組合せを使った方が、コードサイズは大きくなっても super scaler がうまく働くので性能は良かったりします。 GCC から派生した EGCS、GCC と比較すると、 コードサイズを大きくしてでも性能を稼ぐ、という傾向が強まっているようです。 GCC でコンパイルすると 140KB になる shared library が EGCS でコンパイルしたら 170KB になった、なんていう経験をしました。 SHUDO Kazuyuki/首藤一幸 私をたばねないで あらせいとうの花のように shudoh@muraoka.info.waseda.ac.jp