Wednesday, 23 November 2011

gcc と LLVM

論文は出したので、ちょっと暇になった。採点しないと2月にはまるので、それをやらないといけないが、まぁ、焦る必要ないかな。

今年のコンパイラの授業では、LLVM を読む予定です。前回読んだときには「こんなもの読めないよ」って感じだったが… 12/2,3,4 ぐらい。

最初に Continuation based C を gcc 上に実装した時は、自分で書いたコンパイラよりも実行コードが遅くて、いろいろ困ったんだけど、今回測定してみるとだいぶ速い。一つは、64 bit になったから。

IA32は、本当にレジスタが少なくて、OS X だとPIC用にさらに一つレジスタが取られるので、ほとんどの引数がメモリ上に。これはABIなので避けられない。CbC では、ABIが違うので高速だった。で、fastcall option を使うと改善されるんだけど、それがバグバグだったりして泣いてました。

で、Intel64 になって、PC相対も付いたし、レジスタも16本。そこで、fastcall がデフォルト。gcc 4.4 あたりから関数間最適化も良くなった。劇的に速いです。6倍ぐらい速い。それにしては、Lion の遅さはなんなんだって感じですが…

なので、自分で書いた64bit実装よりもだいぶ速い。それはそれでさびしい気もするが。まだ、ちょっとbugあるみたいだが、まぁ、なんとかなるでしょう。

LLVM も時代の流れなので、CbC を載せたいんだが、LLVM には Tail Call 用のバイトコードがない。あぁ、それは知ってますよ。それで単純には実装できないらしい。まぁ、LLVM 自体に手を入れればできるはず。まだ、読んでないので良くわからないけど。バイトコードを足さなくても可能なはず。

昨日書いた C のマクロの挙動の実装に一晩かかったしな。Variadic Macro も実装するべきだが、まぁ、虚しい。それより、未完だった SPU の方をやりたい気もするが、それもさらに虚しい。練習みたいなものだね。Xeon に比べて、Cell の方が劇的に遅いので少し原因を調べないとなぁ。

Post a Comment