LLVM 試してみた
以前から噂は聞いて気にはなってたものの時間等なくて手を出してませんでしたが、ちょっと手が空いたんでLLVM/Clangを試してみました。
LLVM, clang共最新の2.9をDL。まずかなり古いRHEL上でトライ。コンパイラのコンパイルは特に問題なく終了。が、このコンパイラで hello, tohoku をコンパイルしようとすると、コンパイル(.o作成)まではうまくいきますが、なぜかリンクでこけます。-vでみると、リンカはllvm-ldを使うものと思ってましたが、どうも標準のldを使ってるみたい。ちょこっと調べてみましたがわからなかったので、まあOS古いからかねー、とあっさりあきらめ。
次、Ubuntu 9.10で。これはパッケージがあるようなので、まずは手軽にということでapt-getでとってきます。ですが、llvmはSynapticで見つかりましたが、clangというパッケージはなさそう。とにかくとってきます。llvmは2.6の模様。でインストールしたけど…やっぱclangないじゃん。LLVMの変遷よく知らないのですが、この時代はllvm-gccだったのかな?llvm-gccは次期verからなくなるらしいので、これをやる気もせず、これもあきらめ。
で同じくUbuntu 9.10で、また2.9をソースからビルド。今度は無事、ビルドもhelloもうまくいきました。-jなし、i7 980x上で約20分(target=host-only)。ちなみに参考にしたのはググって見つけたこちら。
http://blog.natsuki.ex14.net/archives/201011-1.html
ドキュメントももちろん見たんですが、微妙に古い部分がまじってたりして、llvm+clangでどうやればいいのか本家docだけじゃぱっとわからないんですよね。llvm-gccの記述とごっちゃになってて。
ビルドの手順はまあほぼ普通ですが、clang-2.xをllvm-2.x/toolsの下に移動、ってとこがいまいち謎ですね。なんでこうなってるのか…
まあとにかくコンパイラが動くようになったので、これでbona6をトライ。まずは最適化 -O3のみ、ipo/pgoなし、でトライ。一問だけ(読みの技法 第一問、深さ9)で測定。npsは以下:
clang -O3 248k
icc -O3 w/ipo,pgo 306k
icc -O2 w/o ipo,pgo 282k
うーん、やっぱまだiccにはかなわないですかね。
次はipo,pgoを試そう、としたんですが…調べたところ、pgoはどうやらまだサポートされてないみたい。これはちょっと致命的ですね。pgoでだいたい一割程度は性能上がるはずすから。ipoの方は、LLVMではLTO(Link Time Optimization)と呼ぶらしいです。でLTOはサポートはされてるらしいんですが、これもドキュメントにはどうもはっきり書いてない。
でまたいろいろググって、どうやら-O4でイネーブルされるらしいのでこれをトライします。が、またコンパイル(.oまで)は通るけどリンクでこける。またググると、どうもLLVMgoldというのが必要なんだがそれがサーチパスがどうたらこうたら、とかいう話がつい最近の開発MLで議論してるみたいで、どうもまだ完全サポートではないっぽいです。まあpgoなしでltoだけ仮にできてもiccは抜けそうにないので、今そこまで手をかける気もせず、まあちゃんとサポートできたらまた教えてくれよ、そしたら試してやっから(<偉そう)、というわけで今回は終了。
というわけで今回の結論も残念ながら「まだ使い物にならない」でした。こんなんばっかやん最近。いやまあ世の中こういうものなのでいいんですけど。ただ、数あるコンパイラの中でLLVMが現状いちばん「進化している」のは間違いないはずなので、まあ今後に期待、というとこでしょうか。
P.S. "1. Read the documentation 2. Read the documentation ..." は、LLVMのGetting Started です。
« いけないボナマジック | トップページ | 記者会見だん »
「将棋プロセサ」カテゴリの記事
- ボンクラーズの開発過程について書いた記事が掲載されました(2019.03.07)
- 「浅い評価値を深い評価値に近づける学習法」誕生の背景(2016.10.06)
- 塚田九段の対ボンクラーズ練習棋譜を公開します(2013.09.07)
- Puella α ソース公開(2013.08.28)
- クラスタ並列の解説記事を公開します(2013.08.22)
コメント