« 大規模文字列解 析の理論と実践@IBISML | Main | 行列分解ライブラリredsvdを公開しました »

2010.08.16

C++の便利ツール・ライブラリ

フルタイムで働きはじめて4ヶ月。
いろんなことがありました。

今日はインターンが来ているということもあり日頃のC++コーディングライフの中で大変重用しているツールを紹介します。といってもどれも有名なツールでググれば解説がでてくるとは思いますので、一言ずつだけ紹介してみます。みなさんも何かよさげなライブラリ・ツールがありましたら教えてください。

- valgrind/callgrind/cachegrind

プログラムの実行結果を解析するツール群。まぁ、王道であえて紹介する必要はないかもしいませんが.。valgrindはプログラムのどこかでメモリが漏れているかどうかのチェックに使います.コードのどの部分で確保した領域がどこで漏れているかまで追跡することができます
  valgrind --leak-check=full command

プログラムのどのが計算量的にボトルネックになっているかを調べるにはcallgrindを使います。ソースのどこで何クロック使っているかのレベルでわかります
  valgrind --tool=callgrind command
  callgrind_annotate -I=ソースの場所 --auto=yes callgrind.out.xxxx

cachegrindはcallgrindと同様にプログラムのどこで何回キャッシュミスしているかどうかを調べることができます。

- gtest

かゆいところに手が届くGoogle製C++テストフレームワークです。他のテストフレームワークを使ったことがないのでなんとも言えないですが、これでかなり満足しています。テストをちゃんと書かないとやっぱりだめですね。

- glog

Google製ロギングライブラリでサーバーなどを書いてログを吐く場合に使う。ずっと使い渋りをしていたが、使ってみるとこんなに便利なことはないと思う。面倒なログローテーションとかもやってくれるし落ちた時はどこで落ちたかも教えてくれる。gflagsを介した初期化をしたくないので、初期化の際、間に一つ挟んで使っています。

- re2

Google便利ツール三つ目、正規表現ライブラリ。これも直感的に使える。従来の多くの正規表現ライブラリは最悪時の計算量は爆発するが、re2は正規表現長に比例する計算量で必ず動作する保障があります。

- cmdline

tanakhさんが作ってくれたコマンドラインパーサー。fujimapでの使用例.gflagsは大きすぎるので、もっとコンパクトでヘッダだけのやつ作ってと頼んだらさらっと作ってくれた。

- waf

Pythonベースのビルドシステム。autotoolsがいくらたってもよくわからないところに現れた.といってもこれもよくわからないが最近良く使います。tanakhさんの解説が重宝します。

- openMP

共有メモリ型計算機環境下においてマルチスレッドなプログラム書くのに比べ圧倒的に簡単に並列化できる。ディレクティブをいれる形で並列部分を指示するのでopenMPが利用できない環境では勝手に無視されるのもよい。依存関係がないforではとりあえず使ってみてます。

- Eigen

最近特に使っている行列ライブラリ。C++上でmatlabのように直感的に書けて、しかもかなり速い(Eigen3βとかはGOTO BLAS並らしい)。SSE使えるときはつかってくれる。ヘッダファイルをコピーするだけでよい。解説記事がみあたらないので今度解説記事かいてみようかな。

|

« 大規模文字列解 析の理論と実践@IBISML | Main | 行列分解ライブラリredsvdを公開しました »

Comments

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3041/49166512

Listed below are links to weblogs that reference C++の便利ツール・ライブラリ:

« 大規模文字列解 析の理論と実践@IBISML | Main | 行列分解ライブラリredsvdを公開しました »