本講義ではスーパーコンピュータを用いて大規模・高性能な計算を行うための並列アルゴリズムや高速化アルゴリズムやそれらを実装するためのSIMD、OpenMP、MPI、CUDAなどの並列プログラミング言語について紹介する。科学技術計算で多用される線形代数ライブラリの使い方やその基礎にあるアルゴリズム的工夫についても解説し、逐次実行用のものから大規模並列用のライブラリまで幅広く取り上げる。また、並列計算用のデバッガやプロファイラの使い方についても解説する。MapReduceやグラフ分割の高性能実装や深層学習フレームワークの大規模並列実装についても紹介する。
本講義を受講することで以下の能力を習得することができる.
1. SIMDによるベクトル化、OpenMPによるスレッド化、MPIによる分散並列化が併用できるようになる.
2. OpenACC, CUDA, OpenCLを用いてGPUプログラミングができるようになる.
3. 高性能な数値計算ライブラリの内容を理解し、正しく使えるようになる.
4. 並列環境下でデバッガ、プロファイラを使って効率的に並列コードを開発できるようになる.
5. ModernGPUやMapReduceなどのプリミティブを使って簡易で高性能な実装ができるようになる.
6. グラフ分割ツールや深層学習フレームワークを大規模並列計算機で動作させれるようになる.
ベクトル化、共有メモリ並列、分散メモリ並列、GPUプログラミング、数値計算ライブラリ、行列積、連立一次方程式の解法、高速フーリエ変換、並列デバッガ、並列性能解析、グラフ分割、深層学習
✔ 専門力 | 教養力 | コミュニケーション力 | ✔ 展開力(探究力又は設定力) | ✔ 展開力(実践力又は解決力) |
2回目以降の講義では予習してきていることを前提にインタラクティブに講義を行うので、次回の講義資料は必ず予習しておくこと。
授業計画 | 課題 | |
---|---|---|
第1回 | TSUBAMEの使い方 | 東工大のスパコンTSUBAMEにログインし、ライブラリやジョブスケジューラを使えるようになる |
第2回 | 共有メモリ並列化 | pthreadsやOpenMPを用いて共有メモリ型の並列化ができるようになる |
第3回 | 分散メモリ並列化 | MPIを用いて分散メモリ型の並列化ができるようになる |
第4回 | SIMD並列化 | SSE, AVX, AVX512を用いてSIMDベクトル化ができるようになる |
第5回 | GPUプログラミング | OpenACC, CUDA, OpenCLを用いてGPUがプログラミングできるようになる |
第6回 | マルチGPUプログラミング | CUDAとMPIを併用してTSUBAME上の複数のGPUを同時に使えるようになる |
第7回 | キャッシュブロッキング | BLISLABやCUBLASを例にとってキャッシュブロッキングを実践する |
第8回 | 数値計算ライブラリ | LAPACK、SCALAPACK、FFTWなどの高性能数値計算ライブラリの内容を理解し適切に使えるようになる |
第9回 | 連立一次方程式の高速ソルバ | PETScやTrilinosが提供する様々な連立一次方程式の解法を適材適所で使えるようになる |
第10回 | I/Oライブラリ | NetCDF, HDF5, MPI-IOなどの並列I/Oライブラリを適切に使えるようになる |
第11回 | 並列デバッガ | CUDA-GDB、Valgrind、TotalViewを用いて並列プログラムをデバッグできるようになる |
第12回 | 並列性能解析 | gprof, VTune, PAPI, Tau, Vampireを使って並列プログラムの性能解析ができるようになる |
第13回 | 高性能プリミティブ | ModernGPUやMapReduceの特性と用法を理解する |
第14回 | グラフ分割 | METIS、ParMETISを用いて大規模なグラフを並列処理により分割する |
第15回 | 深層学習 | ChainerMNを用いて大規模なニューラルネットを並列計算機上で訓練する |
なし
なし
小レポート (40%) 期末レポート (60%)により評価する.
なし