HPCGとは何か — 実運用に近いHPCベンチマークの深堀りと最適化戦略
概要:HPCGとは何か
HPCG(High Performance Conjugate Gradient)は、高性能計算(HPC)システムの性能を評価するために設計されたベンチマークの一つで、従来の密行列演算中心のベンチマーク(例:HPL/Top500で使われるLINPACK)を補完する目的で提案されました。HPCGは反復ソルバー(共役勾配法:Conjugate Gradient, CG)をベースに、疎行列の乗算(SpMV)、ベクトル演算、内積(グローバルリダクション)、および対称ガウス・ザイデル(symmetric Gauss–Seidel)に相当する前処理を組み合わせ、実際の科学技術計算に近い計算パターンを再現します。
歴史的背景と位置づけ
HPL(LINPACKベンチマーク)は高い浮動小数点性能を追求する上で重要でしたが、実際のアプリケーションではメモリアクセスや通信、キャッシュ効率、分岐、データ依存などが性能を制限する場面が多く存在します。これを受けて、HPCコミュニティは2010年代中盤からHPCGを提案・整備し、HPLだけでは見えにくいアーキテクチャ特性やソフトウェアの実効性能を評価する補助手段として位置づけました。Top500リストと併記して報告されることが一般化しています。
ベンチマークのアルゴリズムと主要カーネル
HPCGの核はプリコンディショニング付き共役勾配法(PCG)で、代表的な計算カーネルは次のとおりです。
- Sparse Matrix-Vector Multiply(SpMV): 疎行列とベクトルの乗算。メモリ帯域幅とメモリアクセスパターンに依存。
- Sparse Symmetric Gauss–Seidel(前処理/近似解法): データ依存が強く、逐次的な処理傾向があり並列化が難しい部分。実装ではマルチカラーやブロック化等の工夫が使われる。
- Vector Update(AXPYに相当): スカラー倍と加算のようなストリーム系演算。
- Dot Product(内積/グローバルリダクション): 全ランクを跨ぐ通信(MPI全還元)が発生し、遅延と帯域の影響を受ける。
HPCGは、3次元格子上の差分近似から生成される疎行列(典型的には27点ステンシルに類する構造)を用いることが多く、局所近傍のデータ交換(隣接ノード間通信)が中心になります。これにより、実際の偏微分方程式系ソルバーに近い通信・計算パターンが再現されます。
計測値とスコアの意味
HPCGは計測後にGFLOPS相当の数値("HPCG GFLOPS")を報告しますが、この値は純粋な浮動小数点演算能力を測るHPLのGFLOPSとは異なり、メモリ・通信・アルゴリズムの総合的な挙動を反映した指標です。一般にHPLのスコアに比べてHPCGのスコアは遥かに低く、システムの「実用アプリケーション向けの効率」を示す補助的な目安として使われます。
実行方法(概要)
HPCGはオープンソースで配布され、CMakeを用いたビルドが用意されています。基本的な実行手順は次のとおりです。
- 公式リポジトリをクローン(例: GitHub)し、CMakeでビルド。MPI実装(Open MPI、MPICH等)やOpenMPが利用される。
- ノード数・プロセス数を指定して実行(mpirun/mpiexec)。ローカル領域の格子サイズ等は入力パラメータで調整。十分に大きな問題サイズを使い、各ランクが適度なメモリを使うようにするのが推奨。
- 検証ルーチン(Residualの評価など)により結果の正当性がチェックされ、正しければ公式のHPCGスコアを算出して報告できる。
最適化ポイント(ハードウェア/ソフトウェア両面)
HPCGはメモリ性能と通信の影響が大きいため、最適化は次の観点で行われます。
- オンノード最適化: SpMVや前処理のローカル性能を最大化するためにデータレイアウト(行主導/列主導)、ストライド削減、メモリアラインメント、SIMD化、プリフェッチ戦略などを適用する。
- スレッドとプロセスの配置: MPIプロセス数とOpenMPスレッド数のバランス調整。NUMAノードごとのスレッド束縛やメモリ割り当ての最適化が重要。
- 前処理の並列化: 逐次性の高い対称Gauss–Seidelはボトルネックになりやすいため、マルチカラー法やブロック分解を用いて並列化する手法が使われる。ただしアルゴリズム的性質を変えすぎると妥当性や再現性の問題が生じるので注意。
- 通信削減と重畳化: グローバルリダクションの回数を減らす、あるいはパイプライン化やノンブロッキング通信を使って通信と計算を重ねることで、スケールアウト時の効率を改善する。
- ライブラリ最適化: コンパイラの最適化フラグやベクトル化、アーキテクチャ特化チューニング(例えばIntel/AMD向けの特殊命令やARM SVEの活用)を行う。
よくある最適化手法の具体例
- マルチカラー法(graph coloring): Gauss–Seidelの逐次依存を緩和し、独立集合ごとに並列実行することでスケーラビリティを向上。
- ブロック形式と複数ベクタの同時処理: L1/L2キャッシュの有効利用のためにブロック列圧縮や複数右辺を同時に扱う手法。
- ハイブリッドMPI+OpenMPチューニング: 各ノード内でスレッド並列を効かせつつ、MPIプロセスは物理コア・NUMA境界を意識して配置。
- 非同期リダクションや低遅延通信: ランキングネットワークの特性に応じ、MPIの階層的通信や集約を用いる。
スケーラビリティと制約
HPCGは計算よりもメモリ帯域と通信遅延に敏感であるため、ノード当たりのコア数を増やしても線形に性能が向上しないことが多いです。特に前処理(Gauss–Seidel)の依存性とグローバルリダクションがスケールアウト時の主要な制約となります。したがって、HPCGの高スコアを得るには単純なピークフロップ向上よりも、メモリ階層の効率化・通信の低遅延化・アルゴリズム的な並列化工夫が不可欠です。
HPCGスコアの解釈とユースケース
HPCGは特に疎行列系の反復ソルバーや偏微分方程式ソルバーを多用するアプリケーションの性能指標として有用です。HPLが示すピーク演算性能に対し、HPCGは実際のアプリケーションに近い運用時の期待性能を示します。ただし、単一のベンチマークで全てのワークロードを代表できるわけではないため、HPCGはあくまで補助的な評価指標と考えるのが適切です。
批判と限界
HPCGにもいくつかの批判があります。代表的なものは、(1)特定のクラスのアプリケーション(疎行列の反復法)に偏った評価であること、(2)ベンチマーク対策としてシステムが特化最適化される可能性があること、(3)前処理やアルゴリズムの選択によって得られるスコアが変わるため単純比較が難しいこと、などです。これらを踏まえ、実機選定やシステム評価ではHPL、HPCG、そして実運用アプリケーションによるベンチマークを総合的に検討することが推奨されます。
実用的アドバイス(導入〜報告まで)
- 問題サイズの選定: 小さすぎると通信オーバーヘッドに支配され、大きすぎると実行時間が極端に長くなる。メーカーやユーザーコミュニティの推奨設定を基準にする。
- 再現性の確保: コンパイルオプション、MPI実行のプロセス配置、NUMA設定などをドキュメント化しておく。
- チューニング履歴: どの最適化を施したか(例:SIMD最適化、マルチカラーの導入、通信の重畳化等)を明確にし、比較可能な形で報告する。
- 結果の解釈: 得られたHPCGスコアは設計目標やアプリケーションワークロードと照合して評価する。HPLとのギャップを分析することで、どの層(メモリ/ネットワーク/演算ユニット)に改善余地があるかを把握できる。
まとめ
HPCGはHPLだけでは見えないシステムの実用的な性能特性(メモリ帯域、通信遅延、アルゴリズム依存の並列性)を明らかにするための重要な補助ベンチマークです。導入・最適化にはハードウェアとソフトウェア両面の理解が必要で、特に疎行列演算と前処理の並列化、通信重畳化、NUMA最適化が鍵となります。一方で単一指標に依存せず、HPLや実アプリケーションベンチマークと合わせて総合的に評価することが推奨されます。


