MPICHを用いたPGIの性能比較
2001年 11月24日
片浦哲平

1.先週からの課題

先週からの課題として,
・GAのベンチマークプログラムをgccとPGIでそれぞれコンパイル,実行し性能の違いを検証する
・ヘテロ環境への適合の第一歩として非同期型のGAを作成する

2.研究報告

今週行ったこと
PGIコンパイラでのGAプログラムのコンパイル
今週はようやくPGIでコンパイルしたプログラムを実行することができた.
PGIでのコンパイル方法を示す.
Makefile

先週,GregorではMPICHが実行できないのではないかと報告したが,どうやら,MPICHの実行時にPC42だけが正常に動作していないということが分かった.そのため,先週と同じパラメータ(島数128)で実行することができなくなったので初期パラメータを変更して行った.

実行した初期パラメータを表1に示す.

表1 実行パラメータ

個体数
1200/3600
分割母集団数
1/2/4/6/8/10/15/20/30/40/50/60/80/100/120
交叉率
0.8
突然変異率
1/L
遺伝子長
100
設計変数
10
移住率

0.3

移住間隔
5
試行回数
10
終了世代 1000
エリート保存 1×分割母集団数

実行は個体数が1200の場合にはPGI,,gccともに-O2オプションで最適化したものと,PGIではそれに加えてSSEオプションを加えたものを実行した.
1200個体の結果からSSEオプションをつけたほうがPGIは速いと分かったので,3600個体の場合はSSEオプションをつけて-O2で最適化したPGIとgccを比較した.

実行結果(1200)
実行結果(3600)
を示す.

※ 参考 PGIコンパイルオプション

-Mvect=sse   
 Pentium III等で対応しているSSE(Streaming SIMD Extensions)機能を使ってベクトル化できるループを探す.

-tp {px | p5 | p6 | piv | athlon}
 
-Mvect=prefetch

-Munroll

-Mconcur

ヘテロGAの作成
自分のGAプログラムを非同期に改良した.改良した点は,各島内だけで計算を進める世代数を決めて,もっとも島内で計算を長く行う島に合わせて移住を行うようにした.


図10 作成した非同期GA

実行結果,同期GAとの比較は間に合わなかったので次回に報告をしたい.

3.今後の課題

 ・環境分散GAの作成

4.その他
佐野さんがPGIコンパイルに関するドキュメントをまとめてくださったのでアップしました.
ほんとうにありがとうございました.