2008-06-20

LabVIEW のベンチマーク - スペクトル・ノルム

http://shootout.alioth.debian.org/gp4/index.php
に、いろんな言語でいろんな計算を実装したベンチマークがあります。



スペクトル・ノルムの計算を試してみました。Panasonic CF-R5, U1300 @1.06GHz, 1GB RAM のノートパソコンでの結果です。



C++ のコードを、Visual Studio 2005 でコンパイルしたものと、それを愚直に LabVIEW に移植した場合で比較しました。N = 1000 のとき、

C++ ... 1.9 秒
LabVIEW 8.5.1 ... 79 秒
Python 2.5 ... 80 秒



壊滅的に LabVIEW と Python が遅いです。まあ、こんなもんでしょう。LabVIEW も Python も、四則演算なんかは直接コンパイルせずに、ランタイム/バーチャルマシン上で動かしているので、ネイティブコードに吐き出す C++ よりも遅くなるんではないかと。



LabVIEW には標準で行列演算の関数や VI が含まれるのでそれを使って実装しなおすと、もっと早くなります。ただ、この場合には、元の実装とは異なり、行列をあらかじめ用意します。なので、C++ でも eval_A(i,j) を、vector<vector<double> > A(N,N) に置き換えました。



C++ 改 ... 1.6 秒
LabVIEW 8.5.1 改 ... 0.4 秒



LabVIEW 速いです。とは言え、行列がらみの演算は LAPACK や BLAS を使っているので、C++ でそれを使っていないのはフェアではないです。ポイントは、解析系の演算はビルトイン関数を使うと、C 並のスピードで動くということです。DLL 呼んでるだけなので、当たり前ですが。



SpectralNorm.zipをダウンロード