第 8 章 Martini 向け PM 通信ライブラリにおける メッセージ通信の実装メッセージ通信の実装
8.5 MPI レベルでの基本通信性能
PMのメッセージ通信のスループット
PM/RHiNET-VPとPM/RHiNETのスループットの測定結果を図8.8に示す.測定は,PM/RHiNET では8184byteまで,PM/RHiNET-VPでは2040byteまでと,それぞれで送ることのできるメッセー ジサイズの最大値まで行った.
0 50 100 150 200
1 4 16 64 256 1k 4k 16k
Throughput (Mbyte/s)
Size (byte) PM/RHiNET
PM/RHiNET-VP
図8.8 バースト転送時のメッセージ通信のスループット
バースト転送時のスループットは,1024byteまではPM/RHiNETとPM/RHiNET-VPとの間で差 が小さく,RTTとは異なる傾向を示している.これは,PM/RHiNETでは,8.4.3節で述べたよう に直前に送信したpushパケットに対応するackパケットの到着を確認してからでないと次のpush パケットを送り出せないという制約が課されているために,バースト転送時にパケット送信の間 隔が空いてしまうことに起因する.
MPIレベルでのスループット
図8.9に,PMB Sendrecvベンチマークにより測定したスループットを示す.PM/RHiNETはRMA に対応しているが,安定動作させるため,通常はRMAを無効にしている.図8.9にの“Zerocopy”
はRMAを有効にした場合の参考値として示してある.
0 100 200 300 400
1 4 16 64 256 1k 4k 16k 64k 256k 1M
Throughput (Mbyte/s)
Size (byte) PM/RHiNET
PM/RHiNET-VP Zerocopy
図8.9 MPIのスループット
PM/RHiNETを用いた場合のMPIレベルでのスループットは,PM/RHiNETの性能の傾向がその まま表れており,2Kbyteを境に向上が緩やかになっている.また,PM/RHiNETとPM/RHiNET-VP のどちらを用いた場合でも,スループットは32Kbyte付近でピークに達し,それより大きいメッ セージサイズでは横ばいとなっている.このスループットのピークは,評価で用いたベンチマー クプログラムであるPMBにおいて,MPI_Sendrecvを呼ぶ際に送受信バッファとして指定する領 域の多くがCPUのL2キャッシュに収まってしまっていることに起因している.PMB Sendrecvで
は,MPI_Sendrecvを複数回連続発行して計測を行うが,その際,送受信バッファとして毎イテ
レーション同一の領域を繰り返し用いている.そのため,送受信のメッセージサイズが小さい場 合は,送受信バッファがL2キャッシュに収まりやすくなりMPIのAPI呼び出し後にMPICH内 部で行われるメモリ間コピーが高速に完了するが,メッセージサイズが大きくなるとメモリ間コ ピーにおいてキャッシュラインのリプレースメントが多発して,速度が低下する.
なお,RMA機構を有効にした場合,16Kbyteを境にMPICH-SCore内部での通信方式がEager
からRendezvousに切り替わり,16Kbyteより大きいサイズではRMAを用いてメッセージ転送を
行うようになるため,メモリ間コピーに伴うL2キャッシュのリプレースメント処理によるスルー プット低下の影響は見られず,300Mbyte/sec以上の高いスループットを示すようになる.
MPIレベルでの通信レイテンシ
次に,PMB PingPongベンチマークによるレイテンシの測定結果を図8.10に示す.
0 10 20 30 40 50 60 70 80 90 100 110
1 4 16 64 256 1k 4k
Latency (µsec)
Size (byte) PM/RHiNET
PM/RHiNET-VP
図8.10 MPIのレイテンシ
図より,メッセージサイズが2Kbyte以下ではPM/RHiNETを用いた場合の方がPM/RHiNET-VP を用いた場合に比べ低いレイテンシを示し,それ以上の転送サイズではPM/RHiNET-VPの方が低 いレイテンシを示していることがわかる.2Kbyte以下の場合については図8.7で示したPMレベル でのRTTと同様の傾向であるが,これはMPICH-SCoreが通常のSendおよびRecvの実装にPM のメッセージ通信をほぼそのまま利用しているためである.一方,メッセージサイズが2Kbyte以 上の場合,PM/RHiNETではPUSHを2Kbyte単位で発行し,次のPUSHを発行する前に毎回ack パケットの受信を待つ実装となっているため,pmSendの呼び出しが1回であったとしても内部で データサイズを2Kbyteで割った回数分ackパケットを待つ処理が加わり,2Kbyteごとにレイテ ンシが大幅に増大してしまう.これに対し,PM/RHiNET-VPでもPM自体のMTUが2Kbyteに制 限されているため,MPIレベルでの2Kbyte以上のデータ転送においてはPMのメッセージ通信が 複数回呼ばれることになるが,VPUSH自体がackパケットを発行しない実装となっており,送信 側ではPUSH要求を連続して発行できるため,受信側ではパケットを1つ受信処理した後,すぐ に次のパケットの受信を開始できる.これらより,PM/RHiNET-VPを用いた場合,単純にパケッ トの受信処理時間に加えて2KbyteごとにVPUSHの受信処理分のレイテンシが増すことになる
が,PM/RHiNETを用いた場合,それより大きなパケット往復分のレイテンシが2Kbyteごとに加
わることから,2Kbyte以上の転送ではPM/RHiNET-VPを用いた場合の方が低レイテンシとなっ ている.