0. 概要

本ドキュメントで解説する HPL の実行は、 Intel oneAPI Math Kernel Library for Linux に含まれる HPL の実装である Intel Distribution for LINPACK Benchmark を、 Intel MPI Library と共に使用します。
なお、 Intel oneAPI Math Kernel Library for LinuxIntel MPI Library は、 Intel oneAPI HPC Toolkit に含まれているものを使用します。

HPL を実行するHPCクラスタは、計算ノードに BM.Optimized3.36 を使用し、 HPL の性能向上を目的に NUMA nodes per socket (以降 NPS と呼称します。)が 2 (以降 NPS2 と呼称します。)で Simultanious Multi Threading (以降 SMT と呼称します。)が無効となるようBIOSで設定、2インスタンスを クラスタ・ネットワーク で接続した構成とします。

以上より、本ドキュメントで解説する HPL 実行は、以下の手順を経て行います。

  • HPCクラスタ構築
  • Intel oneAPI HPC Toolkit インストール
  • Intel Distribution for LINPACK Benchmark セットアップ
  • HPL 実行

本ドキュメントは、以下の環境で HPL を実行しており、以下の性能が出ています。

[実行環境]

  • シェイプ: BM.Optimized3.36NPS2 SMT 無効)
  • OS : Oracle Linux 8.10ベースのHPC クラスタネットワーキングイメージ
  • HPLIntel oneAPI Math Kernel Library for Linux (バージョン2025.0.1)の Intel Distribution for LINPACK Benchmark
  • MPI: Intel MPI Library (バージョン2021.14.1)
  • ノード数: 2
  • ノード間接続: クラスタ・ネットワーク
  • 問題サイズ(N): 353,280
  • ブロックサイズ(NB): 384
  • プロセスグリッド(PxQ): 2x4

[実行結果]

  • FLOPS: 4,921 GFLOPS
  • 所要時間: 5,999 秒

1. HPCクラスタ構築

本章は、 OCI HPCチュートリアル集 のカテゴリ HPCクラスタ のチュートリアルの手順に従う等により、HPCクラスタを構築します。
この際、 NPSNPS2 とし SMT を無効化するようBIOSを設定した(※1)2ノードの BM.Optimized3.36 を計算ノードに使用し、そのOSに Oracle Linux 8.10ベースのHPC クラスタネットワーキングイメージ (※2)を使用します。

※1)NPSSMT の設定方法は、 OCI HPCパフォーマンス関連情報パフォーマンスに関連するベアメタルインスタンスのBIOS設定方法 を参照してください。

※2)OCI HPCテクニカルTips集クラスタネットワーキングイメージの選び方1. クラスタネットワーキングイメージ一覧 のイメージ No.12 です。


2. Intel oneAPI HPC Toolkitインストール

本章は、 HPL を実行するHPCクラスタの計算ノードに Intel oneAPI HPC Toolkit をインストールします。

以下コマンドを全計算ノードのopcユーザで実行し、 Intel oneAPI HPC Toolkit をインストールします。

$ sudo yum-config-manager --add-repo https://yum.repos.intel.com/oneapi
$ sudo rpm --import https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
$ sudo dnf install -y intel-basekit
$ sudo dnf install -y intel-hpckit

3. Intel Distribution for LINPACK Benchmarkセットアップ

本章は、先にインストールした Intel oneAPI HPC Toolkit に含まれる Intel Distribution for LINPACK Benchmark を、2ノードの BM.Optimized3.36 (AVX-512搭載プロセッサ・主記憶容量512GB)で実行する際に最大の性能を得るよう、事前準備を実施します。

以下コマンドを全計算ノードの HPL 実行ユーザで実行し、 Intel Distribution for LINPACK Benchmark 実行用のディレクトリを作成します。
コマンド中の /dest_dir は、全計算ノードで共有されるディレクトリがあればその配下に、無ければ /tmp ディレクトリとします。このディレクトリを共有ディレクトリ配下にすることで、この実行用ディレクトリ作成と後のセットアップを実施する対象ノードを1ノードで済ますことが可能になります。

$ cp -pR /opt/intel/oneapi/mkl/latest/share/mkl/benchmarks/mp_linpack /dest_dir/

次に、 Intel Distribution for LINPACK Benchmark 実行用ディレクトリ( /dest_dir/mp_linpack )直下のファイル HPL.dat (※3)中の HPL 関連パラメータを、以下のように設定します。

※3)HPLを実行する際のパラメータ値を指定する設定ファイルです。

ファイル中の
行・カラム
パラメータ 設定値 備考
6行目
1カラム目
問題サイズN 353,280 作成直後の計算ノード空きメモリサイズ490 GiBに10 GiB程度の余裕を
持たせて算出
8行目
1カラム目
ブロックサイズNB 384 Intel oneAPI Math Kernel Library for Linuxドキュメントに記載の
AVX-512搭載プロセッサ用推奨値
11行目
1カラム目
プロセスグリッドのP値 2 使用するMPIプロセス数8からPxQを2x4に設定
12行目
1カラム目
プロセスグリッドのQ値 4 使用するMPIプロセス数8からPxQを2x4に設定

次に、 Intel Distribution for LINPACK Benchmark 実行用ディレクトリ( /dest_dir/mp_linpack )直下のファイル runme_intel64_dynamic 中の MPI 関連パラメータを、以下のように設定します。

ファイル中の行 パラメータ 設定値 備考
20行目 MPI_PROC_NUM 8 NUMAノード当たり1 MPIプロセス・2ノードトータルで8プロセス
25行目 MPI_PER_NODE 4 NUMAノード当たり1 MPIプロセス・ノード当たり4プロセス

次に、以下コマンドを HPL 実行ユーザで実行します。

$ cd /dest_dir/mp_linpack
$ cp runme_intel64_prv.txt runme_intel64_prv

4. HPL実行

本章は、先に設定した HPLMPI の実行パラメータを使用し、 HPL を実行します。

OCI HPCテクニカルTips集計算/GPUノードのホスト名リスト作成方法 の手順に従い、 HPL を実行する全ての計算ノードのホスト名を記載したホストリストファイルを、 HPL 実行ユーザのホームディレクトリ直下に hostlist.txt として作成します。

次に、 /etc/fstab ファイルのスワップ領域を指定する行を以下のようにコメントとし、以降のOS再起動でスワップ領域が無効化されるようにします。

$ diff /etc/fstab_org /etc/fstab
32c32
< /.swapfile	none	swap	sw,comment=cloudconfig	0	0
---
> #/.swapfile	none	swap	sw,comment=cloudconfig	0	0
$

次に、以下コマンドを全計算ノードのopcユーザで実行し、OSを再起動します。

$ sudo shutdown -r now

次に、以下コマンドを計算ノードのうちの1ノードで HPL 実行ユーザで実行します。
この HPL 実行は、 ノード当たり4プロセス・プロセス当たり9スレッド で実行します。
この際、プロセス当たりのスレッド数は、 Intel oneAPI Math Kernel Library for Linux がノードのコア配置から自動的にに設定するため、改めて指定する必要はありません。
本ドキュメントの前提となる環境・設定で HPL 実行に要する時間は、2時間弱です。

$ source /opt/intel/oneapi/setvars.sh
$ export I_MPI_HYDRA_HOST_FILE=~/hostlist.txt
$ export UCX_NET_DEVICES=mlx5_2:1
$ cd /dest_dir/mp_linpack
$ ./runme_intel64_dynamic

更新日時: