# 並列計算と HPC

Part I–III は qc-rs を*動かす*ことを教えました。この Part は、それを**速く・大きく**動かすこと — 1 つ以上の CPU
コア、1 台以上のマシン、または GPU を使うこと — を教えます。**ゼロから**書いてあります:高性能計算（HPC）の予備
知識は不要です。まず並列性とは*何か*から始め、qc-rs が公開する 3 つのレベルへと進みます。

:::{note} 始めるのにこれは不要
ここまではすべて 1 コアで問題なく動きました。計算が 1 コアには**遅すぎる**・**大きすぎる**とき — より大きな分子、
より大きな基底、多ステップの構造最適化 — にこの Part を使います。作業がノート PC に快適に収まるなら、必要になる
まで Part IV は飛ばしてかまいません。
:::

## 並列性の 3 つのレベル

qc-rs は 3 つの補完的な方法で、易しい順により多くのハードウェアを使えます:

| レベル | ハードウェア | qc-rs のノブ | 章 |
|---|---|---|---|
| **スレッド** | **1 台**のマシンの複数コア（共有メモリ） | `run(nthread=N)` | [スレッドと BLAS](threads-and-blas.md) |
| **MPI** | 複数の**マシン**（クラスタ） | `run(nmpi=N, hosts=...)` または `comm=` | [MPI と相互接続](mpi-and-interconnects.md) |
| **GPU** | NVIDIA グラフィックスカード | `eri="4c-cuda"`（`cuda` ビルド） | [GPU / CUDA](gpu-cuda.md) |

これらは合成できます:大きなクラスタ実行は**ノード間で MPI**、**各ノード内でスレッド**、任意で**ノードごとに
GPU** を使います。[入門](parallel-computing-primer.md) が、qc-rs 固有の話の前に基礎（プロセス対スレッド、共有対
分散メモリ、Amdahl の法則）を説明し、後続の章が実践的な使い方です。

## 通底する 1 つの考え:ハードウェアが増えても変わるのは*速さ*で*答え*ではない

[初期推定](../20-guide/initial-guess.md) や [収束アルゴリズム](../20-guide/scf.md) が*経路*だけを変えたのと同じく、
コア・ランク・GPU を増やしても変わるのは**どれだけ速く**結果を得るかだけで — 収束エネルギーは（浮動小数点の
簡約順序を除いて）同じです。これは全編で検証されます:`run(nthread=1)` と `run(nthread=4)` は水のエネルギーを
ビット単位で同一に与えます。

## 別の軸:積分戦略（`eri=`）

量子化学の性能は二電子積分に支配され、qc-rs はそれらを**どう**扱うか — メモリ内、再計算、アウトオブコア、密度
フィッティング、GPU 上 — を単一の `ints(eri=...)` キーワードで選ばせます。その選択は 3 つの並列レベルすべてと
相互作用するので、独立した章を設けています:[ERI / J-K 戦略](eri-jk-strategies.md)。

準備はいいですか？何も前提としない [並列計算入門](parallel-computing-primer.md) から始めましょう。
