MISO education
Fortran で数値計算コードを書いてきた経験を足がかりに、MISO の C++ コードを読み、直し、自分で計算を足せるようになるための教材です。 変数・配列・ループ・サブルーチンの知識から始めます。Fortran の派生型やポインタ、C++ の知識は前提にしません。
MISO は GitHub(https://github.com/is-isee/MISO)で公開しています。本文に示すソースのパス(miso/include/miso/execution.hpp など)は、MISO を clone したフォルダから辿ってください。
コマンド例の /path/to/MISO は、自分が MISO を置いた場所に置き換えます。
本文
教材は 4 部・11 章です。C++ で小さな計算を書くことから始め、配列と並列計算を学び、熱伝導を作ってから MISO の時間発展を読みます。
I.準備
開発環境と CMake — Ubuntu・Mac で道具を揃え、CMake の仕組みと MISO のビルド手順を学びます。
II.C++ の基礎
変数・関数・制御文 — 短い逐次計算を書き、関数やファイルへ処理を分けます。
参照・ポインタと寿命 — どの変数を読み書きし、いつまで使えるかを追います。
クラス・構造体 — データと操作をまとめ、初期化と後片付けを学びます。
継承と CRTP — 共通の処理を基底クラスに置き、問題ごとの部品を派生クラスで与えます。
テンプレート — 型(
Real)や計算場所(Backend)を指定した関数・クラスを読み書きします。
III.MISO における並列計算
配列・ラムダと CPU での並列ループ — 配列を用意し、
for_eachとreduceで計算します。MPI による領域分割 — 領域を分け、隣の値の交換や全体の集計を行います。
GPU(CUDA)での計算とデータ転送 — 計算場所とメモリを区別し、同じラムダを GPU で動かします。
IV.総合実習と本体の読解
熱伝導の計算 — 差分・時間積分・境界処理を組み合わせ、逐次版を並列化します。
MISO の時間発展を読む — 自分で書いた小さな計算と、MISO 本体の役割分担を対応づけます。
Ubuntu と Mac の CPU だけでも、第 1〜8 章 → 第 10 章の逐次・MPI 部分 → 第 11 章と進められます。 第 9 章は GPU がなくても読めます。
章内の練習の答えは「解答・解説」として折りたたんであります。 まとまったプログラムを作る課題は 実習一覧 に置き、本文の該当箇所から案内しています。
必要なときに参照する資料
参考資料一覧 には、用語集、Fortran との対応表、記号の早見表、テストと結果の比較方法、GPU のトラブルシューティングをまとめています。 本文を読むために、先に通読する必要はありません。