先日から作っているクラスタリングアルゴリズムの一種Ward法のプログラムを今日もいじっていた。
こまごまとしたことをしたのだが、コンパイルオプションをいじると、恐ろしく速くなった。
まず、比較のために、前回の結果。
件数 処理時間(s) そのうち初期行列作成時間
--------------------------------------------
2352 33.432 6.39
そこに、今回以下のコンパイルオプションをつけてみた。(ちなみにOSX10.4&Intelな白MacBookの環境です。)
g++ -O3 -ffast-math -funroll-loops -Wall -fno-common -march=nocona -o ward -I../include ward.cpp
その結果、以下のように高速化された。
件数 処理時間(s) そのうち初期行列作成時間
--------------------------------------------
2352 12.628 1.06
シャアではないが、通常の3倍以上の速さである。
C++恐るべし。
分散処理とか考えるのはやはりC++で肝心の部分を書いて、その後なんだろうなと実感しました。