#contents
*共有メモリ並列計算 [#f2d4e64a]
最近のCPUはマルチコア化によって処理能力を向上させているものが多くなっています。このようなプロセッサコアがメモリを共有する形で演算ユニットを構成している場合には、プログラムのマルチスレッド化によって性能を引き出すことが可能です。共有メモリ型並列計算機に対応するための並列化手法をまとめています。
一般的な解説としては、以下の教科書が参考になります。
-Clay Breshears, 並行コンピューティング技法, オライリー・ジャパン, 2009
-(株)フィックスターズ, マルチコアCPUのための並列プログラミング, 秀和システム, 2006
**コンパイラの自動並列化機能 [#if52ad3c]
コンパイラの自動並列化(スレッド並列)が使える環境では、その機能を利用してスレッド並列化(MPI と組み合わせればハイブリッド並列化)されたコードを生成することができます。
現在では多くのHPC用コンパイラが自動スレッド並列化機能を備えています。
また、コンパイラの診断結果を出力させることにより、
ソースコードのどの部分が自動並列化可能であったかを確認したり、
OpenMP指示行を挿入する部分の特定するために使うことも可能です。
参考:
-[[OpenMPをこれから手動で導入したい (JICFuSレポート):http://www.jicfus.jp/field5/jp/promotion/user/houkoku/#2012-12]]
**OpenMP [#ff23e6ee]
OpenMPはマルチスレッド並列化を行うためのライブラリ規格です。
実装は各コンパイラに依存します。
コード中にコンパイラに対するpragma及び指示文(directive)を挿入することにより
スレッド並列化を行います。
pragmaや指示文はOpenMPを処理しないコンパイラからはコメントとして扱われるので、
プログラムの元の実行条件を保存しながらスレッド並列化を行うことができます。
ループを分割し、複数のスレッドに割り当てるようなケースが典型的な例です。
-[[OpenMP.org:http://openmp.org/wp/]]
***OpenMPの参考資料 [#ae1555e6]
Web上で利用可能な資料
-[[OpenMP仕様書の日本語訳:http://www.openmp.org/mp-documents/OpenMP30spec-ja.pdf]]~
OpenMP Application Program Interface Version 3.0 May 2008の富士通による日本語訳。
-[[CCS HPCサマーセミナー2011:http://www.ccs.tsukuba.ac.jp/workshop/HPCseminar/2011/]]~
並列処理に関する基礎から、MPI、OpenMP、並列アルゴリズム、最適化まで資料があります。
-[[OpenMP入門:http://www.nag-j.co.jp/openMP/index.htm]]~
NAGによるFortranプログラム向けのOpenMP入門ドキュメント。
-「[[一般的な高速化の手法]]」の項に掲載されている資料も参考になります。
-[[OpenMPをこれから手動で導入したい (JICFuSレポート):http://www.jicfus.jp/field5/jp/promotion/user/houkoku/#2012-12]]~
便利な参考資料がまとめてあります。
***OpenMPを使用する際の注意 [#odb81514]
MPIとOpenMPを同時に用いる場合には注意が必要です。以下の資料を参照して下さい。
-[[OpenMPをこれから手動で導入したい (JICFuSレポート):http://www.jicfus.jp/field5/jp/promotion/user/houkoku/#2012-12]]
***OpenMP化プログラムの自動生成 [#l8f13056]
スレッド並列(SMP)のコンパイラの自動並列化機能を利用し、FORTRANソースコードに
OpenMP指示行を挿入する製品があります。
-[[日立 Parallel Program Generator:http://www.hitachi.co.jp/Prod/comp/soft1/HPC/info/price/index.html]]~
KEKスーパーコンピューターシステム・システムAでは、フロントエンド上で
Parallel Program Generatorが利用可能です。
**Pthreads [#z6d67255]
明示的にスレッド並列化を行うためのスレッドライブラリで、APIを通してスレッドの動作を制御します。IEEEによるPOSIX (Portable Operating System Interface)規格によって定められています。
-[[POSIX Threads Programming:https://computing.llnl.gov/tutorials/pthreads/]]
***Pthreadsの参考資料 [#s6a01f87]
書籍
-B.Nichols et al., Pthreadsプログラミング (オライリー・ジャパン, 1998)
-(株)フィックスターズ, マルチコアCPUのための並列プログラミング, 秀和システム, 2006