Problem
HARK の計算速度を上げるためには?
Solution
処理速度は,基本的にユーザーが構築した HARK のノードの複雑さや,ユーザーの作ったノードの アルゴリズムが支配的である.
例として,LocalizeMUSIC の中の固有値展開の処理や, SaveFeatures のセーブの処理, また,cout や cerr による表示をたくさん行うほど, 1カウントにかかる処理時間が長くなる. 速度向上には,シンプルに目的を達成できるようなノード構築が第一である. (現在 HARK で提供されているノードは,リアルタイム性を考慮し, アルゴリズムが適宜改良されている.)
シンプルなノード構築をした上で,若干ではあるが, さらに処理速度を向上させるために,以下の2つの方法が主に考えられる.
IN_ORDER_NODE_SPEEDUP をコメントイン
この関数はノードクラスの最後に呼び出す. ( LocalizeMUSIC などの cc ファイルに具体的に記述されているので, それをコメントインする)
コンパイル時の最適化オプションを変更する.
makeする際にオプションをつけることで実現する. -O,-O1,-O2,-O3 の順に より強い条件で最適化を行うので,それだけ高速化される.
具体的には -O2 の場合
/src/Makefile.am
に以下を追加する.
libhark_d_la_CXXFLAGS = @GTK_CFLAGS@ -O2 CXXFLAGS = -g -O2 CFLAGS = -g -O2 FFLAGS = -g -O2
Discussion
以下それぞれに関してパフォーマンスの評価を行う. 評価として,-O,-O1,-O2,-O3 のオプションをつけてコンパイルしたものと, それに更に IN_ORDER_NODE_SPEEDUP を付与したものの 計8パターンで処理時間を比較した.
比較に用いたアルゴリズムとしては
int count_time = 100000000; for (i = 0; i < count_time; i++) n = n + i;
という単純処理を各ノードに行わせ, そのノードを100個直列につなげたもので 処理時間の計測を行った.
IN_ORDER_NODE_SPEEDUP のない場合の結果を Table 13.1 に, ある場合の結果を Table 13.2 に示す. 結果の通り,計算時間の顕著な差は見られなかったが, 最適化オプションと IN_ORDER_NODE_SPEEDUP の組み合わせにより, 3パーセントほどの速度の向上が見られる.
Option |
O3 |
O2 |
O1 |
O |
14.2408 |
12.7574 |
14.0147 |
14.1765 |
|
13.9518 |
14.0789 |
14.2417 |
14.3901 |
|
13.912 |
14.0633 |
14.5486 |
13.7121 |
|
14.3929 |
13.9978 |
14.2038 |
14.1017 |
|
13.7976 |
14.3931 |
13.8478 |
14.2374 |
|
14.0315 |
13.9962 |
14.5201 |
14.1924 |
|
14.3108 |
14.0069 |
14.1044 |
14.1694 |
|
14.0055 |
14.3397 |
14.2014 |
14.5729 |
|
14.004 |
14.0419 |
14.467 |
14.1911 |
|
14.4457 |
13.8734 |
14.1159 |
14.2177 |
|
Total |
141.0926 |
139.5486 |
142.2654 |
141.9613 |
Average |
14.10926 |
13.95486 |
14.22654 |
14.19613 |
Option |
O3 + speedup |
O2 + speedup |
O1 + speedup |
O + speedup |
14.0007 |
13.8055 |
14.3469 |
14.4444 |
|
14.3702 |
13.5448 |
13.9894 |
14.1628 |
|
14.0753 |
14.371 |
14.4229 |
13.8679 |
|
12.9333 |
13.8942 |
14.1801 |
14.5209 |
|
14.398 |
13.8926 |
13.7115 |
14.0369 |
|
13.6696 |
14.1745 |
14.5278 |
14.7882 |
|
14.0837 |
14.0613 |
13.9905 |
14.5343 |
|
14.4443 |
14.018 |
14.0915 |
14.1182 |
|
13.0798 |
14.4962 |
14.4936 |
14.5952 |
|
13.6339 |
14.1081 |
14.1904 |
14.2751 |
|
Total |
138.6888 |
140.3662 |
141.9446 |
143.3439 |
Average |
13.86888 |
14.03662 |
14.19446 |
14.33439 |
See Also
参照項なし