2008-05-20

C++のWard法->g++のオプションで驚異的な高速化

先日から作っているクラスタリングアルゴリズムの一種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++で肝心の部分を書いて、その後なんだろうなと実感しました。