Kouhei Sutou
kou****@clear*****
2013年 6月 12日 (水) 10:23:50 JST
須藤です。 In <20130****@clear*****> "[groonga-dev,01441] Re: groonga-3.0.3がmacのclangでビルドできません" on Mon, 27 May 2013 11:24:16 +0900 (JST), Kouhei Sutou <kou****@clear*****> wrote: >> 最新版のgroonga-3.0.3を手元のMac OS X 10.8.3でビルドするとき、 >> gccを使う場合は問題ないのですが、 >> clangを使う場合、プロセスがメモリを約1.7GBと大量に消費して >> 途中から処理が進まなくなってしまいます。 > > あぁ、これはclangが最適化するときにたくさんメモリを消費する > からなのです。手元のDebian GNU/Linuxでも再現しました。 > > % clang -v > Debian clang version 3.2-6 (tags/RELEASE_32/final) (based on LLVM 3.2) > Target: x86_64-pc-linux-gnu > Thread model: posix > > 以下のように最適化を無効にするとビルドできると思います。 > > ./configure CFLAGS="-O0" ... > > ただ、最適化にたくさんメモリを消費するファイル(lib/expr.cと > lib/nfkc.c)は実行時によく使われる処理が入っているので、最適 > 化ありなしで結構速度に差が出てしまうのが悩ましいところで > す。。。 > > あと、そこを越えてもその先で今度はビルドエラーになってしまい > ました。。。前はclangでもビルドできたんですが、今はできなく > なってしまったみたいです。 clangでのビルドエラーを直して、clangでビルドするとでてくる warningも直した(一部、しょうがないやつは残っています)ら、問 題が再現しなくなりました。。。(メモリー不足で落ちることはな くなった。) clangのバージョンが少し上がっているのですが、たぶんそれは関 係ないはずです。 % clang --version Debian clang version 3.2-7 (tags/RELEASE_32/final) (based on LLVM 3.2) Target: x86_64-pc-linux-gnu Thread model: posix ただ、手元では最大で6GBくらいメモリーを使っていました。それ より少ない環境ではまだ落ちる気がします。 どうしてこんなにメモリーを消費するかというとマクロを使って実 装している関数があって、その関数の中身がとても大きくなるから です。これを関数ベースにしようと思っているのですが、実装を変 えて速度が落ちるとイヤなのでベンチマークをしながら徐々に変更 しようと思っています。ということをやると、そこそこ時間がかか るので、次のリリースではとりあえずclangでビルドできる・ warningがほとんどない、という状態にします。 その先は、次の次のリリース以降でがんばりたいなぁ、という感じ です。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html