Skip to content

ハイパフォーマンス計算(HPC)の初歩

HPC(High Performance Computing)は、多数の計算資源を協調させて大規模計算を高速に実行するための計算技術体系である。スーパーコンピュータや研究室クラスターを理解する鍵は、計算機の構造(CPU・GPU・メモリ・ネットワーク・ストレージ)と、並列化モデル(共有メモリ・分散メモリ)と、性能上限を決める原理(計算量とデータ移動)を同時に押さえることである。

参考ドキュメント

  1. HPCIシステム利用情報・マニュアル等(国内の利用枠組みとマニュアル一覧) https://www.hpci-office.jp/for_users/hpci_info_manuals
  2. スーパーコンピュータ「富岳」スタートアップガイド(PDF) https://www.hpci-office.jp/fugaku/user-info/user-guide.pdf
  3. Supercomputing for Beginners(東京大学 情報基盤センター,PDF) https://www.cc.u-tokyo.ac.jp/en/events/lectures/187/tut187_en_v2.0.pdf

1. HPCとは何か:高速化だけではなく「大規模化」のための計算である

HPCは「同じ計算を速く終える」だけでなく、「単一マシンでは扱えない規模を扱う」ための計算である。具体的には、次の要求がHPCを必要にする。

  • 空間分解能や格子点数を増やし、現象の再現性を上げたい
  • モンテカルロやアンサンブル計算で試行回数を増やしたい
  • 最適化・逆問題・機械学習などで多数の反復を回したい
  • 多数の条件(組成、温度、圧力、欠陥、磁化方向など)を走査したい

HPCでは、計算の「並列性」と、CPU/GPUやネットワーク・ストレージの「同時性」を引き出す設計が重要である。

2. 計算機の基本構造:ノード、コア、スレッド、メモリ階層

2.1 ノードという単位

多くのスーパーコンピュータやクラスターは、複数台の計算機(ノード)を高速ネットワークで結合した集合体である。

  • 計算ノード:実際の計算を行う
  • ログインノード:コンパイル、ジョブ投入、軽い前処理・後処理を行う
  • 管理ノード:監視や管理(利用者は直接触れないことが多い)

ログインノードと計算ノードは役割が異なり、計算ノード上でのみ許される処理(大規模並列・長時間実行)があるという設計思想である(例:富岳の利用手引きにその考え方が整理されている)。

2.2 コアとスレッド、SIMD

CPU内部は多層の並列性を持つ。

  • コア並列:複数コアが独立に命令を実行する
  • スレッド並列:同一プロセス内で複数スレッドが並行実行する(OpenMPなど)
  • SIMD(ベクトル化):1命令で複数データを同時処理する

SIMDは、計算が速いというより「同じクロックで多くの演算をこなす」ための仕組みであり、メモリからのデータ供給が追い付くかどうかが性能に直結する。

2.3 メモリ階層とボトルネック

計算の体感速度を支配するのは、演算器の速さだけではなく、データ移動である。一般に

  • レジスタ(最速)
  • キャッシュ(L1/L2/L3)
  • 主記憶(DRAM、あるいはHBMなど)
  • ノード外(ネットワーク越し、あるいはストレージ)

の順に遅くなる。HPCでは、演算量よりも「メモリから何バイト運ぶか」が律速になる状況が頻繁に起きる。

3. GPUを含むアクセラレータ計算:CPUとの役割分担

GPUは、大量の軽量スレッドを同時に走らせる設計であり、行列演算や格子計算、深層学習などで高い性能を示す。一方、分岐が多い処理や、細かい同期が必要な処理は得意ではないことが多い。

CPUとGPUの関係は次のように整理できる。

  • CPU:制御が得意、分岐や複雑な流れに強い、少数スレッドで高性能
  • GPU:同種の計算の大量反復に強い、帯域を活かしたスループット重視

加えて、CPU-GPU間の転送(PCIeや専用リンク)も性能を左右するため、GPUを使うときは「転送量を減らし、GPU内で計算を完結させる」設計が重要である。

4. ネットワーク:分散メモリ並列の生命線

ノードを多数使う計算では、ネットワークが主役になる。ネットワークは次の指標で評価される。

  • 帯域幅:単位時間に運べるデータ量
  • レイテンシ:通信開始から届くまでの遅れ
  • トポロジ:結線の形(Fat-tree、Torus、Dragonflyなど)

スーパーコンピュータの設計では、ネットワークは計算効率を左右するため、システム固有の高性能網が採用されることがある(例:富岳はTofu系相互結合を採用する)。

5. ストレージとI/O:計算が速くても書き出しが詰まる

HPCでは、I/O(読み書き)が計算を支配することがある。ストレージは階層化されることが多い。

  • ホーム領域:容量はあるがI/Oは控えめ、長期保存向け
  • スクラッチ領域:高速、並列I/O向け、一定期間で消える運用が多い
  • ノードローカル(SSD/NVMe):さらに高速だが容量は限られる

並列ファイルシステム(例:LustreやGPFSなど)が使われることが多いが、同時アクセスが集中すると性能が急落するため、出力の粒度や頻度を設計することが重要である。

6. 並列計算モデル:共有メモリと分散メモリ

HPCの並列化は、大きく2つのモデルに分かれる。

観点共有メモリ並列分散メモリ並列
対象範囲1ノード内が中心複数ノードに拡張可能
メモリ全スレッドが同じメモリ空間を共有各プロセスが独立メモリを持つ
代表手段OpenMP(スレッド)MPI(プロセス+通信)
強み実装が比較的直観的、通信が暗黙大規模化が可能、性能設計が明確
難しさ競合・同期・NUMAの理解が必要通信設計とデータ分割が必要

多くの科学計算では、MPIでノード間に領域分割し、各ノード内でOpenMPを使う「MPI+スレッド」の併用が一般的である。

7. MPIとOpenMPの位置づけ

MPIは分散メモリ並列の標準であり、点対点通信、集団通信、コミュニケータ、トポロジなどを定義する。MPI 5.0は2025年6月に公開され、実装間互換性(ABI)などの拡張が大きな話題になっている。

OpenMPは共有メモリ並列の標準であり、指示文(ディレクティブ)で並列領域やループ並列を表現する。OpenMPはCPUだけでなく、近年はアクセラレータ領域(target)も仕様として扱う。

8. ジョブスケジューラ:共有資源を公平に配分する仕組み

スーパーコンピュータは多人数で共有するため、ジョブ(計算実行)はスケジューラを介して資源を割り当てられる。代表例としてSlurmがあり、資源割当とジョブ実行の管理を担う。

8.1 Slurmの概念(語彙)

  • partition:利用者に見える資源群(キューのようなもの)
  • job:資源を一定時間確保して実行する単位
  • step:jobの中での実行単位(並列実行の単位が分かれる)
  • task:MPIプロセスに相当することが多い
  • CPU/コア/スレッド:指定の粒度はシステム設定と密接に関係する

8.2 代表コマンドの役割

  • sbatch:バッチジョブを投入する(投入して戻り、開始は後で行われる)
  • srun:割当資源の中で実行する(並列実行の起動に使う)
  • squeue:待ち行列の状態を見る
  • scancel:ジョブを止める

Slurm公式資料と、国内では富岳のSlurm利用説明が公開されている。

9. コンパイラとライブラリ:速さは言語だけで決まらない

HPCでは、コンパイラの最適化と数値ライブラリが性能を支える。

  • コンパイラ:GCC、Clang/LLVM、Intel、AMD、Arm系など
  • 数学ライブラリ:BLAS/LAPACK、FFT、疎行列(PETSc等)、乱数など
  • 並列ライブラリ:MPI実装、OpenMPランタイム

多くの環境でmodules(環境モジュール)により、利用者がコンパイラやMPI実装を切り替えられるようになっている。

10. 性能の見積もり:スケーリングと上限を数式で押さえる

10.1 強スケーリングと弱スケーリング

  • 強スケーリング:問題サイズ固定で、並列数を増やして時間短縮を狙う
  • 弱スケーリング:並列数に比例して問題サイズも増やし、時間を維持する

どちらが重要かは研究目的で異なる。

10.2 Amdahlの法則(強スケーリングの上限)

並列化できない割合を f、並列数を P とすると、理想的な速度向上 S(P)

S(P)=1f+1fP

となる。P でも 1/f が上限になるため、並列化不能部分が支配的である。

10.3 Gustafsonの考え方(弱スケーリングの見方)

実行時間を保つように問題規模を増やすと、別の上限評価が可能になる。重要なのは「研究で実際に増やしたいのが並列数なのか、問題サイズなのか」を明確にすることである。

10.4 Rooflineモデル:演算とデータ移動の上限

Rooflineモデルは、性能上限を「ピーク演算性能」と「メモリ帯域」の両面から表す。演算強度(Operational Intensity)を

I=FLOPsBytes

とすると、到達可能性能 Pattain の上限は

Pattainmin(Ppeak, BmemI)

で表される。多くの科学計算は BmemI 側に支配されやすく、アルゴリズムの再構成(データ再利用の増加)が性能改善に直結する。

11. 代表ベンチマーク:何を測っているのか

HPCのランキングや性能報告で出るベンチマークは、測っている性質が異なる。

名称主に測るもの直観的な意味
HPL密行列の連立一次方程式演算器と通信が強く関与する総合性能
HPCG疎行列反復解法メモリ帯域と通信の現実性能に近い
HPL-MxP(HPL-AI系)混合精度の線形代数AI/混合精度活用の性能
Graph500グラフ探索不規則アクセスと通信性能

富岳は2025年11月の発表で、TOP500で7位、HPCGで2位、HPL-MxPで8位などの結果が公表されている。

12. 電力効率:Green500が示す指標

電力当たり性能は、HPCの継続性を左右する重要指標である。Green500は、HPLで得られた性能と消費電力から

η=FLOPsW

を評価する。2025年11月のGreen500では、上位システムの効率値と構成が公開されている。

13. 利用者視点の基本的な流れ

HPCで計算を走らせるとき、必要な作業は大きく次である。

  1. 入力データの準備(計算条件、初期構造、パラメータ)
  2. 実行形式の準備(コンパイル、依存ライブラリ)
  3. 資源要求の決定(ノード数、並列数、実行時間、GPU有無)
  4. ジョブ投入(スケジューラへ投入)
  5. 実行状況の把握(待ち状態、開始、終了、終了コード)
  6. 出力の回収(必要なら整理・圧縮・可視化)

この順序は単純であるが、「どこで何が許されるか(ログインか計算ノードか)」と「ファイル置き場(高速領域か長期領域か)」の理解が重要である。

14. 状態保存・再開、時間制限、信頼性

多くのシステムには最大実行時間があり、時間内に終わらない計算は強制終了されることがある。長い計算では、途中状態を保存し、次回の実行で再開できる設計が重要である。

また、大規模並列では、ノード数が増えるほどハード故障や一時的障害に遭遇する確率が上がるため、計算を「区切れる形」にしておくことが有効である。

15. 解析・最適化の考え方:どこが遅いのかを分けて考える

高速化の出発点は「遅い理由」を分類することである。

  • 演算律速:演算器が忙しい(ベクトル化、FMA利用、GPU活用などが効く)
  • メモリ律速:主記憶帯域が詰まる(データ再利用、配列レイアウト、ブロッキングが効く)
  • 通信律速:MPI通信が支配的(領域分割、集団通信の回数削減、重ね合わせが効く)
  • I/O律速:出力・入力が支配(出力頻度・粒度、集約、形式が効く)

Rooflineとスケーリング測定(並列数を変えた実測)を組み合わせると、改善すべき方向が見えやすい。

16. 国内の利用枠組み:HPCIと富岳の例

日本ではHPCIの枠組みで、富岳を含む計算資源の利用情報・マニュアルが体系的に公開されている。富岳についてはスタートアップガイドや利用手引きがあり、証明書、SSH鍵、ログイン、基本操作などが整理されている。

加えて、国内大学の計算機センターは入門資料を公開しており、例えば「Supercomputing for Beginners」のような講義資料は、MPI/OpenMPの役割、計算の考え方、学ぶ順番を俯瞰する助けになる。

まとめと展望

HPCの初歩は、ノード・コア・メモリ階層・ネットワーク・ストレージという計算基盤を理解し、MPIとOpenMPを中心とした並列モデルと、スケジューラによる資源配分という運用原理を押さえることにある。さらに、Amdahlの法則、スケーリング、Rooflineモデルを用いて「演算・メモリ・通信・I/Oのどれが律速か」を言語化できると、HPCの利用が単なる実行環境の理解から、計算科学としての設計へと進むのである。

今後は、混合精度やAI支援計算、CPU-GPUの協調、電力効率の重視が一段と強まり、ベンチマークやランキングも多面的な評価へ向かう。研究者側も、アルゴリズムの設計段階からデータ移動と並列性を織り込むことで、限られた資源でより大きな科学的到達を狙う方向へ進むのである。

参考文献・資料