13.2 システムの処理速度をあげたい

Problem

HARK の計算速度を上げるためには?

Solution

処理速度は,基本的にユーザーが構築した HARK のノードの複雑さや,ユーザーの作ったノードの アルゴリズムが支配的である.

例として,LocalizeMUSIC の中の固有値展開の処理や, SaveFeatures のセーブの処理, また,coutcerr による表示をたくさん行うほど, 1カウントにかかる処理時間が長くなる. 速度向上には,シンプルに目的を達成できるようなノード構築が第一である. (現在 HARK で提供されているノードは,リアルタイム性を考慮し, アルゴリズムが適宜改良されている.)

シンプルなノード構築をした上で,若干ではあるが, さらに処理速度を向上させるために,以下の2つの方法が主に考えられる.

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パーセントほどの速度の向上が見られる.

Table 13.1: Comaparison of Elapsed Time without IN_ORDER_NODE_SPEEDUP

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

Table 13.2: Comaparison of Elapsed Time with IN_ORDER_NODE_SPEEDUP

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

参照項なし