環境変数SMA_GLOBAL_HEAP_SIZEを設定してください。

Download Report

Transcript 環境変数SMA_GLOBAL_HEAP_SIZEを設定してください。

TM
Scalability Tuning with MPI
日本SGI株式会社
Systems Engineer Training
1
概要
TM
• 性能向上のために
• ケーススタディ
– NOGAPS
Systems Engineer Training
2
性能向上のために
TM
• コンパイルオプション -64
– メモリクロスマッピングは64ビット版libmpiで有効です。
• MPI の通信状況を調べる
– 環境変数 MPI_STATS を設定してください。
– または、 mpirun コマンドの引数として、 -stats -p “%g%h:”
を指定してください。
• 環境変数MPI_BUFS_PER_PROCに32(デフォルト)
以上の値を設定し、バッファリトライを低減してく
ださい。
– より多くのメモリが必要となります。
Systems Engineer Training
3
direct copy send/recv
TM
• 通信バンド幅を必要とするコードでは、 send/recv
ダイレクトコピーをお試しください。
• NUMAlinkでの MPI send/recv のバンド幅のピーク
は:
– direct copy: 173 MB/sec on 250 MHz O2000
– buffered:
84 MB/sec on 250 MHz O2000
– direct copy: 280 MB/sec on O3000, shmem_getの最
大のバンド幅
• all-to-all 通信やmany-to-many通信を行うコードに
有効です。
Systems Engineer Training
4
direct copy send/recvの指定方法
TM
• 環境変数 MPI_BUFFER_MAXに値Nを設定
• 次の条件を満たすとき、Nバイト以上のサイズの
メッセージはダイレクトコピーで通信されます。
– MPI関数の仕様がバッファリングなし通信を許容
– -64でコンパイルされている。
– 送受信バッファがグローバルにアクセス可能なメ
モリ領域にアロケートされている。
• N=2000 の設定が多くの場合効果的
– 短いメッセージではあまり効果的ではない。
• 正しくダイレクトコピーが行われたかを通信状況
で確認してください。
Systems Engineer Training
5
送受信バッファをグローバルにアクセス
可能なメモリ領域にアロケートする
TM
• 送信バッファを次のように指定する(どれか1つ):
– 静的領域 (common blocks)
– ヒープ領域 (SHPALLOCまたはshmallocでアロケート)
– グローバルヒープ (f90のallocate文または環境変数
SMA_GLOBAL_ALLOCを設定)
• アロケータブル配列にSAVEの属性を指定するか、リターンする前
にデアロケートする
• SMA_GLOBAL_ALLOCを設定したときは、グローバ
ルヒープサイズを大きくする必要があります。 環
境変数SMA_GLOBAL_HEAP_SIZEを設定してくださ
い。
Systems Engineer Training
6
MPI get/put
TM
• レイテンシに影響されるコードではMPIの1方向
通信(get/put)をお試しください。
• O3000 でのNUMAlinkのレイテンシ :
– send/recv: 5 microsec
– mpi_get: 1.5 microsec
• もし、移植性を重視していなければ、 SHMEMを
採用してください。
– shmem_get latency: 0.5 microsec
Systems Engineer Training
7
ケーススタディ – NOGAPSの例
TM
• US Navyで開発された地球規模のスペクトル法に
よる気象解析モデル
• OriginでのMPIプログラムのスケーラビリティはあ
まり良くなかった。
• ベンチマーク時にSHMEMに書き換えた。
• 落札後、 SHMEM からMPI-2 get/put に書き換えた。
• ダイレクトコピーが有効な手段(SHMEM はバンド
幅のためにはあまり使われず、レイテンシにのみ
有効)
Systems Engineer Training
8
NOGAPSの性能
SHMEM 対 MPIの1方向通信関数
TM
Origin 2000, 250MHz R10k
48hr forecast T159L36
T159L36
forecast days/day
250
200
150
SHMEM
MPI
100
50
0
0
50
100
150
200
# processors
Systems Engineer Training
9
NOGAPSのMPI通信関数の性能
TM
• 転置ルーチンをMPI get/put関数で置換
• T159L36 モデル12 hourの予測(60p)
450
400
350
300
250
SHMEM
One-sided MPI
200
150
100
50
0
total job time
comm time
comm time transposes
Systems Engineer Training
other comm
time
10
O3000でのNOGAPS4の性能
TM
• T159L24モデルのシミュレーション結果
• 転置部分にMPI-2の関数を使用、他はMPI-1の関数を使用
T159L24
forecast days/day
1000
474.91
267.24
ideal
400MHz R12k
149.07
100
10
10
100
1000
# processors
Systems Engineer Training
11
SHMEM vs. send/recv
による転置の比較
TM
ltag=0
call shmem_barrier_all
do 150 kk=1,lmtot
do 150 kk=1,lmtot
ltag=ltag+1
ktag=ksendto(kk)
ktag=ksendto(kk)
call shmem_put8( y(1+(ktag- call mpi_isend(x(1,ksnding(kk), len,
1)*len), x(1,ksnding(kk), len, mpireal, ipsndto(kk), ktag, mpicomm,
iss(ltag), istat)
ipsndto(kk) )
ltag=ltag+1
continue
ktag=krcving(kk)
call shmem_barrier_all
call mpi_irecv(y(1,krcving(kk), len,
mpireal, iprcvfr(kk), ktag, mpicomm,
iss(ltag), istat)
150 continue
call mpi_wait_all(ltag,iss,istatm, istat)
Systems Engineer Training
12
MPI_putによる転置
TM
common/buffer/ yg(length)
integer(kind=MPI_ADDRESS_KIND) winsize, target_disp
! Setup: create a window for array yg since we will do puts into it
call MPI_type_extent(MPI_REAL8, isizereal8, ierr)
winsize=isizereal8*length
call MPI_win_create(yg, winsize, isizereal8, MPI_INFO_NULL,
MPI_COMM_WORLD, iwin, ierr)
Systems Engineer Training
13
MPI_putによる転置(続き)
TM
call mpi_barrier(MPI_COMM_WORLD,ierr)
do 150 kk=1,lmtot
ktag=ksendto(kk)
target_disp=(1+(ktag-1)*len)-1
call mpi_put(x(1,ksnding(kk), len, MPI_REAL8, ipsndto(kk), target_disp, len,
MPI_REAL8, iwin, ierr)
150 continue
call mpi_win_fence(0, iwin, ierr)
do kk=1,len*lmtot
y(kk)=yg(kk)
end do
! Cleanup - destroy window
call mpi_barrier(MPI_COMM_WORLD,ierr)
Systems Engineer Training
call mpi_win_free(iwin, ierr)
14
まとめ
TM
• MPI の通信状況を確認してください。可能であれ
ば、バッファリトライを低減してください.
• 実行プロセッサ数が増えたとき、通信でどのくら
いの時間を消費するのかを把握してください。
• send/recvダイレクトコピーをお試しください。
• レイテンシに影響されるコードであれば、 MPI-2ま
たはSHMEMに書き換えてください。
Systems Engineer Training
15