(cache) 負荷の違いによるGAの処理時間について 負荷の違いによるGAの処理時間について
No. 03, 2001年 6月 22日
片浦 哲平

1  先週からの課題

先週からの課題として があったが,SGAプログラムは現在作成中であるため,それ以外の課題についての報告を行う. 今回の実験もデータを収集するGAプログラムは佐野正樹さんが作成したソースを用いて, cambriaで実行した.

2  オプションの意味

今回の実験では,実行に-formit-frame-pointer,-O3,-funroll-all-loopsのパラメータを 用いた.このオプションの役割,効果を述べる.

今回用いたオプションはすべて,最適化を制御するオプションである.

2.1  -O

-Oオプションは最適化を行うオプションで-O0〜-O3までがある.-O0は最適化を行わないオプションで -O1〜-O3は数字が大きくなるにつれて最適化の強度が増す.

2.1.1  -O1

-Oが指定されないとコンパイル処理にかかるコストを削減することとデバッグ処理 が期待される結果をもたらすようにすることがコンパイラの目標となるが,-O が指定されるとコンパイラは, コードのサイズと実行時間を削減するよう試みる.このため,この最適化にはいくらか余分に時間がかかり, 関数のサイズが大きい場合には,かなり多くのメモリが追加的に必要になる.

2.1.2  -O2

-O1に比べさらに最適化を行う.コンパイラは,サポートされている最適化のうちサイズとスピードとの トレードオフを伴わないほとんどすべてのものを実行する.-O2を指定した場合にはコンパイラはループ 展開(loop unrolling)や関数のインライン展開を実行しなくなる.したがって,-O2により,ループ展開 と関数インライン展開を除くすべての任意選択の最適化が有効になりる. また,-O1と比較すると,コンパイル時間はより長くなるが,生成されるコードの性能は向上する.

2.1.3  -O3

さらに最適化を行う.-O3は,-O2により指定されるすべての最適化を有効にした上に inline-functionsオプションも有効にする. inline-functionsオプションには-finline-functionsと-fkeep-inline-functionsがあり, どちらも,単純な関数はすべて呼び出し側に統合し,このような方法で統合する値打ちが あるほど単純である関数はどれかということをコンパイラが発見して決定する.

2.2  -formit-frame-pointer

フレーム・ポインタを必要としない関数においては,フレーム・ポインタをレジスタ内に保持しない. これにより,フレーム・ポインタの待避,セットアップ,復元を行う命令を使わずに済むようになる. また,多くの関数において,レジスタを余分に利用することができるようになる.

2.3  -funroll-loops

-O2によって実行されない最適化オプションの1つ.

ループ展開(loop unrolling)による最適化を実行する.コンパイル時,もしくは,実行時に 反復回数が決定できるループに対してのみ,この最適化が実行される.

2.4  -funroll-all-loops

-O2によって実行されない最適化オプションの1つ.

ループ展開(loop unrolling)による最適化を実行する.これは,すべてのループに対して実行され 通常は,プログラムの実行速度はより遅くなる.

3  GAプログラムの実行

プログラムの初期パラメータはTable:1 ,Table:1b ,,Table:1bb の通りである.

Table 1: 実験に用いたパラメータ1
試行回数10移住率0.3
移住間隔5交叉率0.8
遺伝子長100突然変異率0.01
負荷100世代数1000

Table 2: 実験に用いたパラメータ2
試行回数10移住率0.3
移住間隔5交叉率0.8
遺伝子長100突然変異率0.01
負荷50世代数1000

Table 3: 実験に用いたパラメータ3
試行回数10移住率0.3
移住間隔5交叉率0.8
遺伝子長100突然変異率0.01
負荷10世代数1000

4  実行結果

まず,実行した結果をTable:4 ,Table:5 ,Table:6 に示す.

Table 4: 実行結果(パラメータ1)
プロセス数etcSelectionMigrationCrossoverMutation合計
1計測不可計測不可計測不可計測不可計測不可計測不可
2計測不可21.7428374.7923023.1575902.039514計測不可
4計測不可5.6087202.8028511.4611551.016916計測不可
8173.041601.6638311.7857220.7470540.507647177.74580
1686.456400.5504891.0441140.3943540.25480588.70016
3243.181930.2058550.9052550.2166360.12800544.63768
6421.570920.0861340.6973100.1280310.06458522.54698
12812.210320.0819490.3875670.5022940.31566613.49779

Table 5: 実行結果(パラメータ2)
プロセス数etcSelectionMigrationCrossoverMutation合計
1計測不可86.863250.0044866.7504454.089184計測不可
2計測不可20.773124.3468662.9688992.035281計測不可
4174.972305.582732.0177711.4580471.015411185.04630
887.348461.661121.1024040.7479150.50906391.36897
1643.622650.548520.6949060.3930900.25485245.51401
3221.781760.205490.5678300.2171060.12814122.90032
6410.890290.086190.4589370.1283530.06497811.62874
1285.454880.040400.3593880.0865450.0331535.97437

Table 6: 実行結果(パラメータ3)
プロセス数etcSelectionMigrationCrossoverMutation合計
1172.0996088.074130.0037046.8319914.112855271.12230
276.5769821.296273.7663893.0741502.038578106.75237
437.874025.643921.3572941.4664721.01729547.35900
818.799061.657070.5633280.7455200.50838322.27336
169.344230.548960.2840670.3932680.25528610.82581
324.641180.206480.2127480.2178320.1288695.40711
642.319040.086800.1896210.1286800.0654202.78956
1281.148690.040550.1593270.0861680.0329321.46766

次に得た結果をFig:1 ,Fig:2 ,Fig:3 に示す. また,3パターンの結果の合計時間を表したものをFig:4 に示す.

Figure 1: パラメータ1

Figure 2: パラメータ2

Figure 3: パラメータ3

Figure 4: 合計時間の比較

5  考察,今後の課題

実行結果を見ると負荷を高めると,前回の結果と同じくetcの処理時間だけが大きくなった. 目新しい結果としては,負荷が100の場合には交叉と突然変異の処理時間がプロセス数128の場合よりも プロセス数64の場合の方が速くなった.

今後はこの結果に着目して負荷を変化させてプロセス数が増加すると逆に処理が遅くなる点に ついてさらに調べてみたい.


File translated from TEX by TTH, version 2.92.
On 23 Jun 2001, 20:15.