C++
ここ2日ぐらい調べたパフォーマンス解析に関する調査をまとめる. 推測も含まれているので注意. まず, 当初の目的は「Boost.Pythonを用いて作った共有ライブラリをPythonから呼び出した際のボトルネック(hot spot)を発見したい」だった. パフォーマンス解析…
Boost Pythonで困ったところを適当にまとめる. 型の対応 (左がPython, 右がC++) numpy.float32 ⇔ float fload ⇔ double 2次元array ⇔ pyublas::numpy_matrix 1次元array ⇔ pyublas::numpy_vector (たぶん) list ⇔ boost::python::list numpy_matrixのインタ…
行列演算がボトルネックのコードを書いたので, Automatically Tuned Linear Algebra Software (ATLAS)を導入した. キャッシュサイズなどを考慮して行列演算を行なってくれるため, 自分で適当に書いた奴より速い. uBlasより速いか検討してないが, まあ多分速…
C++用のTestライブラリ, google testを使った. インストール Ubuntu12.04でのインストール方法 sudo aptitude install libgtest-dev cd /usr/src/gtest sudo cmake . sudo make sudo mv libg* /usr/lib/ たぶんこれでOK. libgtest-devがヘッダファイルしか入…
C++関連の開発環境を整えたので, それに対するメモ. 今まではEmacs中心だったが, Eclipseに移行. Eclipse CDTのインストール 標準ではC++に対応していないので, Eclipse CDTをインストール. Eclipse CDTを組み込んだEclipseを配布しているようだが, 既存のも…
後輩とCの加算・除算のコスト差について意見が食い違ったので, 実際にプログラムを書いて比較してみた. マシンスペックはIntel® Core™2 Duo CPU T9300 @ 2.50GHz × 2 Ubuntu11.10 64bit. コンパイラはgccバージョン4.6.1, またコンパイルオプションは常に-O0…
PyUblasを試すために, 今回は距離関数の一つであるDTW(Dynamic Time Warping)を実装する. DTWの説明は余所で読んでもらうとして, まあ2つの長さが異なるベクトルx,y の距離をO(|x|×|y|)で計算するアルゴリズムだと思ってもらえばいい. 今回はパフォーマンス…
PyUblasはBoost.PythonとNumpyの間のデータ受け渡しをサポートする素敵ライブラリーだ. かなり便利. インストール方法は, 公式ドキュメントを参照. ただ, インストール過程で何箇所か戸惑う所があった. まず, コンパイルエラーが出たことと(const変数から非c…
Boost.PythonでNumPyのarrayを受け取る手段として, NumPyが提供するCのAPIを使うという手がある. 使いづらいが機能的には完全であることと, CとPythonを協調して使う際の知見となるため, 記録を残しておく.基本的な使い方はこちらのページを見ればわかる. Bo…
scipyで書いたプログラムでも一部が遅くてそこをC++で実装したいというシナリオはよくある. それには色々な手段があるというのは以前の日記でも紹介した通り. 今回はBoost.Pythonでscipy/numpyのarray(ndarray)を取り扱う方法を説明する. 基本的な使い方はbo…
C++プログラムのパフォーマンス解析をgoogle-perftoolsを使ってやった.公式ドキュメントによると, LD_PRELOADを使う方法は非推奨らしいんだけど, 動的リンクする方法ではなぜかうまくいかなかった.まず, 関連パッケージをaptでインストール. そしてCPUPROFIL…
Pythonを使っていると, Python遅い・・・ -> C++で一部のメソッドだけ実装したいというシナリオはかなりの人が通る道だと思う. だが, その手段がありえぬ程多い・・・. pythonとc++のインターフェイスの比較という記事を参考にした結果, とりあえずBoost.Pyt…
まだ, 編集中Pythonから呼ぶときにエラーメッセージが出るため, その原因を解明するためちょっとだけghmmのソースコードを読むことにした. 下はあいまいに読んだものなので間違っていても許してください.なお, ソースコードを読む際にBaumWelchの更新式が手…