#はじめに
皆さま、はじめまして。某HPC会社に勤めている者です。
このたび、Advent Calender High Performance Computing (HPC)を思いつきで発案しました。非常にエッジな分野で少数派ですが、HPCに関係することならば、なんでも投稿してください。
#アーキテクチャーについて
##並列処理以前のおはなし
###1プロセッサー1コア
近年、計算機周辺の性能が向上してきました。メモリーの容量・バンド幅、ストレージの容量・インターフェース、ノード間の通信が進化してきているところです。
CPUについて市販のCPUでいえば、Pentium 4以前のアーキテクチャーですと1CPUに1コアです。(場合によってはハイパースレッディングもありますが、有効にするとマルチコアに似ています。)
クロック周波数がムーアの法則にある程度従って進化して、そのまま性能につながりました。それができた背景には、半導体でできているLSIの製造技術の向上があります。
##並列処理へ
###マルチコアへの進化
ただ、クロック周波数の向上には限界が見えてきました。そこで1CPUあたりのコア数を増やす方向性に舵を切りました。市販のCPUでいえば、2006年のCore 2 Duoあたりからの話になります。このように1筐体に複数個の処理を同時に実行できるようになりました。1筐体に、共有して使えるメモリー、複数のコア(あるいはスレッド)があり、共有メモリーをおのおののコアが使用します。このしくみの計算機を「共有メモリ型並列計算機」といいます。
実際に複数のコアを制御して共同作業(要するに計算)を行うための具体的な実装として、スレッド並列を記述するOpenMPなどがあります。(勉強して書く時間ができれば書きたいと思います。)
###ネットワーク接続によるクラスター
一方、1筐体の計算機だけではなく、複数の共有メモリ型並列計算機をネットワーク接続して、互いに通信をしあいながら協調して計算を行う方法もあります。大きな大学の研究室や研究所、民間企業で大規模計算を必要とする人のために、「クラスター」とも呼ばれる「分散メモリー型並列計算機」があります。計算機1台1台のことを「ノード」と呼びます。日本で有名な「分散メモリー型並列計算機」として、神戸にある「京」などがありますが、数台のPCをネットワーク接続しても立派なクラスターです。
実際に複数のノードを制御して共同作業(要するに計算)を行うための具体的な実装として、Message Passing Interface (MPI)があります。MPIはクラスターだけではなく、単体の共有メモリ型並列計算機でも使用が可能です。
#MPI
##MPIについて
分散メモリー型並列計算機間のメッセージ通信の規格で、実装としてMPICH ( http://www.mpich.org ) やOpenMPI ( http://www.open-mpi.org )があります。市販のMPIとして、Intel社によるIntel MPIなどがあります。
###良い点
- プログラマーが細かなチューニングが行える
###悪い点
- 明示的に手続きを記述する必要がある
といえます。
##MPIの関数の紹介
MPI関数は数百種類ありますが、すべてを覚える必要はありません。まずは取っ掛かりとして必要最低限の関数を紹介します。
###システム関数
- MPI_Init
- MPI_Comm_rank
- MPI_Comm_size
- MPI_Finalize
###1対1通信関数
- MPI_Send
- MPI_Recv;
###通信の同期
- MPI_Barrier
###時間計測関数
- MPI_Wtime
が挙げられます。
詳細につきましては、以前に某勉強会でお話しした資料をご覧ください。
http://www.slideshare.net/seiichitanabetanabu/jawsug-hpc-2-lt-mpi
#最後に
HPC・大規模科学技術計算のためには並列化が必須であり、特にメモリ分散型計算機(クラスター)を使います。
メモリ分散型計算機で並列計算を行うためにはMPIによる実装が(今のところ)必須です。
MPIのサブルーチンの数は多いですが、少数の基礎的なもので入門可能です。送受信、同期、時間計測についてしか述べておりませんが、取っ掛かりとなればと思います。
##参考文献・サイト
- スパコンプログラミング入門: 並列処理とMPIの学習 (片桐 孝洋 著、東京大学出版会)
- 他にも、OpenMPなどに着目した著書などもあります。
- 並列プログラミング虎の巻MPI版 (青山 幸也 著、高度情報科学技術研究機構)
- OpenMP、チューニングのテキストもあります。http://www.hpci-office.jp/pages/seminar_text
- MPICHサイト
- OpenMPIサイト
- サンプルプログラムは、Githubにあります