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.準備

  1. 開発環境と CMake — Ubuntu・Mac で道具を揃え、CMake の仕組みと MISO のビルド手順を学びます。

II.C++ の基礎

  1. 変数・関数・制御文 — 短い逐次計算を書き、関数やファイルへ処理を分けます。

  2. 参照・ポインタと寿命 — どの変数を読み書きし、いつまで使えるかを追います。

  3. クラス・構造体 — データと操作をまとめ、初期化と後片付けを学びます。

  4. 継承と CRTP — 共通の処理を基底クラスに置き、問題ごとの部品を派生クラスで与えます。

  5. テンプレート — 型(Real)や計算場所(Backend)を指定した関数・クラスを読み書きします。

III.MISO における並列計算

  1. 配列・ラムダと CPU での並列ループ — 配列を用意し、for_each と reduce で計算します。

  2. MPI による領域分割 — 領域を分け、隣の値の交換や全体の集計を行います。

  3. GPU(CUDA)での計算とデータ転送 — 計算場所とメモリを区別し、同じラムダを GPU で動かします。

IV.総合実習と本体の読解

  1. 熱伝導の計算 — 差分・時間積分・境界処理を組み合わせ、逐次版を並列化します。

  2. MISO の時間発展を読む — 自分で書いた小さな計算と、MISO 本体の役割分担を対応づけます。

Ubuntu と Mac の CPU だけでも、第 1〜8 章 → 第 10 章の逐次・MPI 部分 → 第 11 章と進められます。 第 9 章は GPU がなくても読めます。

章内の練習の答えは「解答・解説」として折りたたんであります。 まとまったプログラムを作る課題は 実習一覧 に置き、本文の該当箇所から案内しています。

必要なときに参照する資料

参考資料一覧 には、用語集、Fortran との対応表、記号の早見表、テストと結果の比較方法、GPU のトラブルシューティングをまとめています。 本文を読むために、先に通読する必要はありません。